当前位置:首页 > 趣味小程序 > 正文内容

C++实现走迷宫小游戏

亿万年的星光4年前 (2021-01-28)趣味小程序1750
1.简单版本

简单版本是利用字符数组实现的,利用字符数组设定入口和出口,用户每次按键就刷新一下当前字符数组。

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include<conio.h>
int main() {
   char a[50][50] = { "######",
                       "#O #  ",
                       "# ## #",
                       "#  # #",
                       "##   #",
                       "######"};
   int  i, x, y, p, q;
   x = 1; y = 1; p = 1; q = 5; //出生点和出口点
   char ch;
   for (i = 0; i <=5; i++)   //循环6次
       puts(a[i]);   //输出得到6行
   while (x!=p||y!=q)   //除了出口位置以外都可以移动
   {
       ch = _getch();     //赋值字符
       if (ch == 's')   //方向“下”键,,移动方向已二维坐标系为准
       {  
           if (a[x + 1][y] != '#')
           {//当碰到墙壁则不移动,不然就变成穿墙外挂了
               a[x][y] = ' '; //无墙时则移动
               x++;
               a[x][y] = 'O';
           }
       }
       if (ch=='w')
       {
           if (a[x - 1][y] != '#')
           {
               a[x][y] = ' ';
               x--;
               a[x][y] = 'O';
           }
       }
       if (ch=='a')
       {
           if(a[x][y-1]!='#')
           {
               a[x][y] = ' ';
               y--;
               a[x][y] = 'O';
           }
       }
       if (ch=='d')
       {
           if(a[x][y + 1] != '#')
           {
               a[x][y] = ' ';
               y++;
               a[x][y] = 'O';
           }
       }
       system("cls");   //清屏 ,,因为每次移动要清楚之前的位置,,可以理解为 刷新
       for (i = 0; i <= 5; i++)   //给每行加6个字符
           puts(a[i]);   //得到一行6个字符串
   }
   system("cls");
   printf("恭喜你通关了\n");
       Sleep(5000);
   return 0;
}
2.复杂版本

复杂版本,完成度80% ,没有检测边界碰撞问题。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<conio.h>
#include<windows.h>
int x=0,y=1,m=8,n=8; //x,y表示入口,m,n表示出口
void gotoxy(int x, int y) {
   COORD pos = {x,y};
   HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄
   SetConsoleCursorPosition(hOut, pos);//两个参数分别是指定哪个窗体,具体位置
}
//地图函数
char map[50][50]{
   "* ********", //0
   "* ********", //1
   "* ********", //2
   "* ********", //3
   "* ********", //4
   "* ********", //5
   "* ********", //6
   "* ********", //7
   "*         ", //8
   "**********", //9
  //0123456789
};
//展示地图函数
void showMap(){  
   for(int i=0;i<10;i++)
       puts(map[i]);
}
//判断结束游戏函数
int  check(int p,int q)
{
   if(p==m&&q==n) //如果是出口
   {
       system("color A9");
       system("cls");
       puts("恭喜过关");
       return 0 ;
   }else if(map[q][p]=='*')
   {
       gotoxy(23,23);
       printf("xing");
       return 1;
   }
   else   //剩余是通道
   {
       puts("@");
       gotoxy(20,20);
       printf("%d,%d,%d,%d",p,m,q,n);
       gotoxy(25,25);
       printf("%c",map[p][q]);
       return 2;
       
   }
}
using namespace std;
int main()
{
   
   system("cls");
   showMap();
   gotoxy(y,x);
   puts("@");
 
   char ch;  
   while (1){
       if (_kbhit()){//如果有按键按下,则_kbhit()函数返回真
           ch = _getch();//使用_getch()函数获取按下的键值
           if (ch == 'w'){  
                system("cls");
                showMap();
                gotoxy(y,x-1);
                    x-=1;
                check(y,x);     //检查边界以及墙
                   
               
           };
           if (ch == 's'){
               system("cls");
                showMap();
                gotoxy(y,x+1);
                  x+=1;
                 check(y,x);
                 
           };
           if (ch == 'a'){
               system("cls");
                showMap();
                gotoxy(y-1,x);
                 y-=1;
                 check(y,x);
                 
           };
           if (ch == 'd'){  
                system("cls");
                showMap();
                gotoxy(y+1,x);
                 y+=1;
                check(y,x);
                 
           };
       }
   }
   
   
   
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

EasyX小游戏—双人反弹球

参考代码:#include <conio.h> #include <graphics.h> #include<windows.h> #de...

C++小游戏——flappy bird简单实现

C++小游戏——flappy bird简单实现

上一篇小游戏中,我们简单实现了打砖块小游戏。这一篇中,我们根据前面的框架,简单实现flappy bird小游戏。1.游戏框架   2.实现下落的小鸟#include &l...

【C++图形化编程】EasyX函数~图形绘制相关函数(1)

简介:EasyX有很多图形绘制函数,这篇文章简单介绍下:函数或函数类型说明arc画椭圆形circle画无填充的圆clearcircle清空圆形区域clearllipse清空椭圆形区域clearpie清...

C++小游戏制作基础—键盘事件

0.前言我们制作小游戏的时候,需要用到键盘,一般是控制上下左右,这个时候就需要用到键盘事件了。1.键盘事件需要用到<conio.h>头文件,和_kbhit()函数程序参考:#include...

【C++图形化编程】flappy bird(1)—基础框架及图形图像

【C++图形化编程】flappy bird(1)—基础框架及图形图像

0.前言    前面一篇文章,我们简单介绍了鼠标的一些操作, 这篇文章,我们还是一个实战教程,flappy bird的小游戏。1.导入背景和音乐  &...

【C++图形化编程】flappy bird(3)—碰撞检测(大功告成)

0.前言    前面几篇文章中,我们简单介绍了基础框架和游戏逻辑,这一篇文章我们接着上一篇,继续完善游戏,主要是移动与碰撞逻辑的检测...