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

C++实现走迷宫小游戏

亿万年的星光5年前 (2021-01-28)趣味小程序3083
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);
                 
           };
       }
   }
   
   
   
}


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

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

    分享给朋友:

    相关文章

    C++小游戏—反弹球实现打砖块

    C++小游戏—反弹球实现打砖块

    0.前言在上一篇中,我们用C++代码实现了弹球小游戏,上一篇链接可以点击这里查看。这一篇中,我们继续优化代码,使用上一篇的弹球小游戏进行扩展,实现打砖块效果。1.思路底部挡板跟随键盘移动在顶部生成目标...

    C++小游戏—简单飞机大战(1)

    C++小游戏—简单飞机大战(1)

    前面文章简单实现了弹球操作,这篇文章我们介绍一下如何实现简单的飞机大战操作。这篇文章我们要实现的效果如下:第一步:整体思路在某个点画出飞机的形状获取用户按下哪个按键根据按键移动飞机的位置按空格键发射子...

    C++小游戏——简单飞机大战(2)——代码与显示优化

    C++小游戏——简单飞机大战(2)——代码与显示优化

    0.前言在上一篇中,我们在C++控制台中简单实现了飞机大战了逻辑,但是代码比较长,显示也不是很好看,这篇文章中,我们对上一篇的代码进行优化下,把很多过程封装成函数形式。让程序看上去更加精简。一个合理化...

     【C++图形化编程】飞机大战1—基础资源导入与基本框架

    【C++图形化编程】飞机大战1—基础资源导入与基本框架

    0.前言前面几篇文章中,我们实现了flappy的小游戏,这篇文章中,我们尝试制作飞机大战的游戏。首先,效果图如下:基础资源导入下载图片及音乐资源:https://box356.lanzoui.com/...

    C++实现弹窗效果

    C++实现弹窗效果

    1.格式C++实现弹窗效果需要用到messagebox,这个我在C#中用过,C++也有类似用法。messagebox函数,需要引入<windows.h>头文件2.简单用法#include&...

    C++小游戏—贪吃蛇(1)

    0.前言c++小游戏来到了第二个,第二个小游戏是贪吃蛇。首先来分析一下需求。我们需要一个函数专门来绘制地图的。在地图上随机生成“食物”。按键函数,用来监听键盘事件。蛇的状态函数。移动函数等。1.参考代...