C++迷宫小游戏.rar

  • 小菜9898
    了解作者
  • C/C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2021-03-20 20:53
    上传日期
C++小游戏,适合c++入门的朋友们积攒编程经验什么的。我觉得还是很不错的
C++迷宫小游戏.rar
  • C++迷宫小游戏.cpp
    9.7KB
内容介绍
//linux下的代码,windows下要改一些地方。 #include <iostream> //输入输出流 #include <cstdlib> //标准库 #include <unistd.h> //延时函数要 #include <stdio.h> //getchar() #include <ctime> //时间函数 #include <termios.h> //终端设置 using namespace std; #define MAX_X 20 #define MAX_Y 30 bool flag = false; bool slow = false; bool autogame = true; int maze[MAX_X][MAX_Y]; //迷宫 class stack_of_maze{ private: //code //记录迷宫坐标 struct node { int x; int y; char direction; //上一步路径(如何来的) node* next; }; node* head; public: //code stack_of_maze(){ //初始化 head = NULL; } ~stack_of_maze(){ node* p = head; //逐个删除 while(head!=NULL){ head = head->next; delete p; p = head; } } void push(int xx,int yy,char ddirection){ //定义一个新节点 node* new_node = new node; //赋值 if(new_node!=NULL){ new_node->x = xx; new_node->y = yy; new_node->direction = ddirection; new_node->next = NULL; //判断栈是否为空,如果为空则直接把新节点赋值给栈,否则添加到栈顶 if(head==NULL) head = new_node; else{ new_node->next = head; head = new_node; } } else cout<<"内存分配失败"<<endl; } node* pop(int& xx,int& yy){ if(head!=NULL){ node* p = head; head = head->next; xx = p->x; yy = p->y; delete p; } return head; } void print(){ if(head!=NULL){ node* p = head; while(p!=NULL){ cout<<" "<<p->x<<" "<<p->y<<" "<<p->direction<<endl; p = p->next; } } else cout<<"栈为空,打印失败"<<endl; } }; void createMaze(){ int maxway = MAX_X * MAX_Y; //最大通路 int x,y; //先填充迷宫 for(x=0;x<MAX_X;x++) for(y=0;y<MAX_Y;y++) maze[x][y] = 1; //随机函数种子,以时间为参数 srand((unsigned)time(NULL)); //随机构建迷宫通路 for(int i=0;i<maxway;i++) { x = rand() % (MAX_X-2) + 1; y = rand() % (MAX_Y-2) + 1; maze[x][y] = 0; } maze[1][1] = 0; //入口 maze[MAX_X-2][MAX_Y-2] = 0; //出口 maze[0][1] = 3; maze[MAX_X-1][MAX_Y-2] = 0; } void printMaze(){ int x,y; //清屏,如果是windows环境使用system("cls") system("clear"); //打印地图 for(x=0;x<MAX_X;x++) { for(y=0;y<MAX_Y;y++) { if(maze[x][y]==0){cout<<" ";continue;} //通路 if(maze[x][y]==1){cout<<"■ ";continue;} //墙 if(maze[x][y]==2){cout<<"× ";continue;} //死胡同 if(maze[x][y]==3){cout<<"↓ ";continue;} //向下走 if(maze[x][y]==4){cout<<"→ ";continue;} if(maze[x][y]==5){cout<<"← ";continue;} if(maze[x][y]==6){cout<<"↑ ";continue;} if(maze[x][y]==7){cout<<"※ ";continue;} //当前站立位置 } cout<<endl; } //是否慢速游戏 if(slow){ sleep(1); //延时函数 } } void check(stack_of_maze &s){ //备份地图 int temp[MAX_X][MAX_Y]; for(int x=0;x<MAX_X;x++) for(int y=0;y<MAX_Y;y++) temp[x][y] = maze[x][y]; int x=1,y=1; //出发点 while(1){ temp[x][y] = 2; //向下 if(temp[x+1][y]==0){ s.push(x,y,'D'); //在当前位置做一个向下的标志 temp[x][y] = 3; x = x + 1; temp[x][y] = 7; //当前位置 //判断是否到达出口,如果到达出口则flag标记为true,下同 if((x==MAX_X-1)&&(y==MAX_Y-2)){ flag = true; return; } else continue; } //向右 if(temp[x][y+1]==0){ s.push(x,y,'R'); //在当前位置做一个向右的标志 temp[x][y] = 4; y = y + 1; temp[x][y] = 7; if((x==MAX_X-1)&&(y==MAX_Y-2)){ flag = true; return; } else continue; } //向上 if(temp[x-1][y]==0){ s.push(x,y,'U'); //在当前位置做一个向上的标志 temp[x][y] = 6; x = x - 1; temp[x][y] = 7; if((x==MAX_X-1)&&(y==MAX_Y-2)){ flag = true; return; } else continue; } //向左 if(temp[x][y-1]==0){ s.push(x,y,'L'); //在当前位置做一个向右的标志 temp[x][y] = 5; y = y - 1; temp[x][y] = 7; if((x==MAX_X-1)&&(y==MAX_Y-2)){ flag = true; return; } else continue; } //上下左右不通,则回退到起点 if(s.pop(x,y)==NULL && temp[x-1][y]!=0 && temp[x][y-1]!=0 && temp[x][y+1]!=0 && temp[x+1][y]!=0){ temp[0][1] = 7; if(temp[1][1]!=1) temp[1][1] = 2; return; } } } char getch(){ char ch; //保存原有终端属性和新设置的终端属性 static struct termios oldt, newt; //获得终端原有属性并保存在结构体oldflag tcgetattr( STDIN_FILENO, &oldt); //设置新的终端属性 newt = oldt; newt.c_lflag &= ~(ICANON); tcsetattr( STDIN_FILENO, TCSANOW, &newt); //取消回显 system("stty -echo"); ch = getchar(); system("stty echo"); //让终端恢复为原有的属性 tcsetattr( STDIN_FILENO, TCSANOW, &oldt); return ch; } void move(){ int x=1,y=1; //出发点 //一直游戏,直到走出 while(1){ //判断输入的命令 switch(getch()){ case 's': if(maze[x+1][y]==0){ //清空当前位置信息 maze[x][y] = 0; x = x + 1; //当前位置 maze[x][y] = 7; printMaze(); if((x==MAX_X-1)&&(y==MAX_Y-2)){ cout<<"\n\n 成功走出"<<endl; return; } } break; case 'd': if(maze[x][y+1]==0){ if(maze[x][y+1]==0){ maze[x][y] = 0; y = y + 1; maze[x][y] = 7; printMaze(); if((x==MAX_X-1)&&(y==MAX_Y-2)){ cout<<"\n\n 成功走出"<<endl; return; } } } break; case 'w': if(maze[x-1][y]==0){ maze[x][y] = 0; x = x - 1; maze[x][y] = 7; printMaze(); if((x==MAX_X-1)&&(y==MAX_Y-2)){ cout<<"\n\n 成功走出"<<endl; return; } } break; case 'a': if(maze[x][y-1]==0){ maze[x][y] = 0; y = y - 1; maze[x][y] = 7; printMaze(); if((x==MAX_X-1)&&(y==MAX_Y-2)){ cout<<"\n\n 成功走出"<<endl; return; } } break; } } } void autoMove(stack_of_maze &s){ int x=1,y=1; //出发点 while(1){ maze[x][y] = 2; //向下 if(maze[x+1][y]==0){ s.push(x,y,'D'); maze[x][y] = 3; //在当前位置做一个向下的标志 x = x + 1; maze[x][y] = 7; //当前位置 if(slow) printMaze(); if((x==MAX_X-1)&&(y==MAX_Y-2)){ s.push(x,y,'*'); cout<<"\n\n 成功走出"<<endl; return; } else continue; } //向右 if(maze[x][y+1]==0){ s.push(x,y,'R'); maze[x][y] = 4; //在当前位置做一个向右的标志 y = y + 1; maze[x][y] = 7; if(slow) printMaze(); if((x==MAX_X-1)&&(y==MAX_Y-2)){ s.push(x,y,'*'); cout<<"\n\n 成功走出"<<endl; return; } else continue; } //向上 if(maze[x-1][y]==0){ s.push(x,y,'U'); maze[x][y] = 6; //在当前位置做一个向上的标志 x = x - 1; maze[x][y] = 7; if(slow) printMaze(); if((x==MAX_X-1)&&(y==MAX_Y-2)){ s.push(x,y,'*'); cout<<"\n\n 成功走出"<<endl; return; } else continue; } //向左 if(maze[x][y-1]==0){ s.push(x,y,'L'); maze[x][y] = 5; //在当前位置做一个向右的标志 y = y - 1; maze[x][y] = 7; if(slow) printMaze(); if((x==MAX_X-1)&&(y==MAX_Y-2)){ s.push(x,y,'*'); cout<<"\n\n 成功走出"<<endl; return; } else continue; } //上下左右不通,则回退 if(s.pop(x,y)==NULL && maze[x-1][y]!=0 && maze[x][y-1]!=0 && maze[x][y+1]!=0 && maze[x+1][y]!=0){ cout<<"\n\n 没有找到合适的路径"<<endl; maze[0][1] = 7; if(maze[1][1]!=1) maze[1][1] = 2; return; } } } void menu(); void gamestart(){ //初始化地图 flag = false; while(!flag){ stack_of_maze stack; //创�
评论
    相关推荐
    • 俄罗斯方块
      Python俄罗斯方块 这是俄罗斯方块未完成实施的存储库。 请耐心等待,因为我在业余时间写它:-)。 先决条件 该游戏基于pygame库。 您可以使用pip工具安装它。 pip3 install --user pygame 提供的代码是为Python3编写...
    • 俄罗斯方块
      基于c#的俄罗斯方块设计俄罗斯方块游戏,从俄罗斯人阿莱克斯帕伊特诺夫在八十年代末制作成功以来,以其规则简单,容易上手,游戏过程变化无穷,且能在娱乐中益智等特点,它已经成为一个家喻户晓,老少皆宜的大众游戏...
    • 俄罗斯方块
      俄罗斯方块使用纯Java代码写的,主要锻炼面向对象的编程。适合大学生课程设计等做参考。内包含源代码,可直接运行。
    • 俄罗斯方块
      俄罗斯方块 使用C#编写,和平时玩的小游戏功能基本都有,是很久以前写的小游戏,希望对大家有帮助
    • 俄罗斯方块
      基于Java代码。连接数据库 俄罗斯方块,一款经典的游戏,一款耐玩的游戏,能提交积分,消除能获得高额的积分,同时消除1、2、3、4行获得积分差额之大,考验你忍耐力和策略能力的时候到了,赶快来玩玩吧!
    • 俄罗斯方块
      教你如何在VC6.0下开发游戏,如俄罗斯方块,扫雷,五子棋,飞机游戏,老鼠滚球等游戏。在游戏中学校C语言,在学习中享受游戏的快乐。
    • 俄罗斯方块
      VC MFC 俄罗斯方块 以VC++6.0为开发工具,在MFC的界面上,(重在绘图,时间函数),做俄罗斯方块小游戏
    • 俄罗斯方块
      Java SE学习完成后,自己练手项目五,《俄罗斯方块》 这个是充血模式的实现功能,界面和service没分开,因为尝试分开了下引用太复杂了,所以没分离开,但是第一次发现了业务类不分离的弊端,真的很费劲。
    • 俄罗斯方块
      俄罗斯方块 游戏爱好者的经典Oldschool游戏 使用的技术 Java JDK 8以上 #使用的软件包-: java awt,java lang,java util,javax swing。 怎么玩 ? Mouse Click - Start a new game LEFT - Move the current ...
    • 俄罗斯方块
      俄罗斯方块,相信很多人都玩过,刚开始学MFC的时候,就用.net做了这个游戏,现在在android上也写了一个,写得不好。UI比较差,以后会更新。希望大家一起进步。喜欢的拿走。