首页 > 其他 > 详细

迷宫小游戏

时间:2020-03-24 21:42:49      阅读:63      评论:0      收藏:0      [点我收藏+]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 10
#define N 10
//typedef int ElemType;
typedef struct PosType{
    int x;//行号
    int y;//列号 
}PosType;
typedef struct ElemType{
    PosType seat;//通道的坐标
    int dirction;//下一个通道在当前通道的位置 
}ElenType;
typedef struct SqStack{
    ElemType data;
    struct SqStack *next;
}SqStack;
typedef SqStack *LinkStack;
//初始化
int InsiStack(LinkStack &s)
{
    s = NULL;
    return 1;
 }
 //入栈
 int Push(LinkStack &s,ElemType e)
 {
     LinkStack p;
     p = (LinkStack)malloc(sizeof(SqStack));
     if(!p)
     {
         return 0;
     }
     p -> data = e;
     p -> next = s;
     s = p;
     return 1;
  } 
  //出栈
  int Pop(LinkStack &s,ElemType &e)
  {
      LinkStack q;
      if(s == NULL)
      {
          return 0;
     }
     e = s -> data;
     q = s;
     s = s -> next;
     free(q);
     return 1;
     
   } 
   //判断是否为空栈
   int StackEmpty(LinkStack s)
   {
       if(s == NULL)
       {
           return 1;
       }
       else
       {
           return 0;
       }
    } 
    //迷宫平面图 
    static char maze[M][N] = {
    {#, #, #, #, #, #, #, #, #, #},
    {#,  ,  , #,  ,  ,  , #,  , #},
    {#,  ,  , #,  ,  ,  , #,  , #},
    {#,  ,  ,  ,  , #, #,  ,  , #},
    {#,  , #, #, #,  ,  ,  ,  , #},
    {#,  ,  ,  , #,  ,  ,  ,  , #},
    {#,  , #,  ,  ,  , #,  ,  , #},
    {#,  , #, #, #,  , #, #,  , #},
    {#, #,  ,  ,  ,  ,  ,  ,  , #},
    {#, #, #, #, #, #, #, #, #, #}
};
PosType start = {1,1};//入口 
PosType end = {8,8};//出口 
int pass(PosType curpos)
{
    if(maze[curpos.x][curpos.y] ==  )
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
int footPrint(PosType curpos)
{
    maze[curpos.x][curpos.y] = 1;//标记 
}
PosType nextPrint(PosType curpos,int dirction)
{
    switch(dirction)
    {
        case 1:
            curpos.y ++;//向东,列加1 
            break;
        case 2:
            curpos.x ++;//向南 
            break;
        case 3:
            curpos.y --;
            break;
        case 4:
            curpos.x --;
            break;
    }
    return curpos;
}
int MarkPrint(PosType curpos)
{
    maze[curpos.x][curpos.y] = 0;//走过但不能到达出口 
}
int mazePath(PosType start,PosType end)
{
    LinkStack s;
    InsiStack(s);
    PosType curpos = start;//设定入口 
    do{
       if(pass(curpos))//当前可以通过 
       {
           footPrint(curpos);//留下足迹 
           ElemType e;
           e.seat = curpos;
           e.dirction = 1;
           Push(s,e);//入栈 
           if(curpos.x == end.x && curpos.y == end.y)
           {
               return 1;
         }
         curpos = nextPrint(curpos,1);
       }
       else
       {
           ElemType e;
           Pop(s,e);
           while(e.dirction == 4 && !StackEmpty(s))
           {
               MarkPrint(e.seat);//走过但不能到达出口 
               Pop(s,e);
          }
          if(e.dirction < 4)
          {
              e.dirction ++;
              Push(s,e);
              curpos = nextPrint(e.seat,e.dirction);
          }
       }
        
        
    }while(!StackEmpty(s));
    return 0;
}
 void mazePrint()//打印迷宫
 {
     int i,j;
     system("color 74");
     for(i = 0;i < M;i ++)
     {
         for(j = 0;j < N;j ++)
         {
         
             printf("%c ",maze[i][j]);
             //system("color 74");
         }
         printf("\n");
     }
     printf("\n");
  } 
  void YouPrint(PosType start,PosType end)//有出口和入口 
  {
      int i,j;
     for(i = 0;i < M;i ++)
     {
         for(j = 0;j < N;j ++)
         {
             if(start.x == i && j == start.y)
                 {
                 printf("A ");
             }
             else if(end.x == i && end.y == j) 
             {
                 printf("B ");
             }
             else
             printf("%c ",maze[i][j]);
             
             //system("color 74");
         }
         printf("\n");
     }
     printf("\n");
  }
  void LuPrint()//打印迷宫里的路
  {
      int i,j;
      for(i = 0;i < M;i ++)
      {
          for(j = 0;j < N;j ++)
          {
              if(i == 0 || j == 0 || j == N - 1 || i == M - 1 || maze[i][j] == 1)
              {
                  printf("%c ",maze[i][j]);
              }
              else
              {
                  printf("  ");
              }
          }
          printf("\n");
      }
      printf("\n");
   }
   int YanZhen(char *name,char *pass,char *name1,char *pass1)//密码验证 
   {
       int count = 0;
       if(strcmp(name,name1) == 0 && strcmp(pass,pass1) == 0)
       {
           count = 1;
       }
       return count;
   }
int main()
{

    int choice;
    char name[50] = "周峰";//初始的用户名 
    char pass[50] = "12345";//初始密码 
    char name1[50];
    char pass1[50];

    printf("****************************************\n");
    printf("****************<<<地球人勇闯夺命岛>>>");
    printf("****************************************\n");
    printf("友情提示:输入入口和出口,看能否走出夺命岛\n");
    printf("1,用户注册过\n");
    printf("2,没有注册过\n");
    printf("3,退出系统\n");
    printf("请输入你的选择:");
    scanf("%d",&choice); 
    switch(choice)
    {
        case 1:
            printf("请输入你的用户名:");
            scanf("%s",name1);
            printf("请输入你的密码:");
            scanf("%s",pass1);
            if(YanZhen(name,pass,name1,pass1) == 1)
            {
                printf("登陆成功\n");
                printf("迷宫生成\n");
                mazePrint();
                 PosType start;
                 PosType end;
    
                printf("请输入迷宫的入口坐标\n");
                scanf("%d %d",&start.x,&start.y);
                printf("请输入迷宫的出口坐标\n");
                scanf("%d %d",&end.x,&end.y); 
                printf("输入出口和入口的状态\n");
                YouPrint(start,end);
               if(mazePath(start,end))
                {
                    printf("存在通路\n");
                    printf("迷宫的现在的状态:\n");
                    mazePrint();
                    printf("迷宫中的路径\n");
                    LuPrint();
                   }
              else
                {
                    printf("不存在通路");
                }
            }
            break;
        case 2:
            printf("注册:\n");
            printf("请输入你的用户名:");
            scanf("%s",name);
            printf("请输入你的密码:");
            scanf("%s",pass);
            printf("注册成功\n");
            system("cls");//清屏 
            printf("****************************************\n");
            printf("****************<<<地球人勇闯夺命岛>>>**************\n");
            printf("****************************************\n");
              printf("友情提示:输入入口和出口,看能否走出夺命岛\n");
            printf("登陆\n");
            printf("请输入你的用户名:");
            scanf("%s",name1);
            printf("请输入你的密码:");
            scanf("%s",pass1);
            if(YanZhen(name,pass,name1,pass1) == 1)
            {
                printf("登陆成功\n");
                printf("迷宫生成\n");
                mazePrint();
                 PosType start;
                 PosType end;
    
                printf("请输入迷宫的入口坐标\n");
                scanf("%d %d",&start.x,&start.y);
                printf("请输入迷宫的出口坐标\n");
                scanf("%d %d",&end.x,&end.y);
                 printf("输入出口和入口的状态\n");
                YouPrint(start,end); 
               if(mazePath(start,end))
                {
                    printf("存在通路\n");
                    printf("迷宫的现在的状态:\n");
                    mazePrint();
                    printf("迷宫中的路径\n");
                    LuPrint();
                   }
              else
                {
                    printf("不存在通路");
                }
            }
            break;
        case 3:
            printf("欢迎下次使用\n");
            exit(0);
            break;
    }
  
    
}

 

迷宫小游戏

原文:https://www.cnblogs.com/xiaobaiyuan/p/12562118.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!