问题描述
- C语言迷宫小游戏改为C++语言的,应该改哪些地方?(代码见正文)
-
#include <stdio.h> #include <conio.h> #include <windows.h> #include <time.h> #define Height 25 //迷宫的高度,必须为奇数 #define Width 25 //迷宫的宽度,必须为奇数 #define Wall 1 #define Road 0 #define Start 2 #define End 3 #define Esc 5 #define Up 1 #define Down 2 #define Left 3 #define Right 4 int map[Height+2][Width+2]; void gotoxy(int x,int y) //移动坐标 { COORD coord; coord.X=x; coord.Y=y; SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord ); } void hidden()//隐藏光标 { HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO cci; GetConsoleCursorInfo(hOut,&cci); cci.bVisible=0;//赋1为显示,赋0为隐藏 SetConsoleCursorInfo(hOut,&cci); } void create(int x,int y) //随机生成迷宫 { int c[4][2]={0,1,1,0,0,-1,-1,0}; //四个方向 int i,j,t; //将方向打乱 for(i=0;i<4;i++) { j=rand()%4; t=c[i][0];c[i][0]=c[j][0];c[j][0]=t; t=c[i][1];c[i][1]=c[j][1];c[j][1]=t; } map[x][y]=Road; for(i=0;i<4;i++) if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall) { map[x+c[i][0]][y+c[i][1]]=Road; create(x+2*c[i][0],y+2*c[i][1]); } } int get_key() //接收按键 { char c; while(c=getch()) { if(c==27) return Esc; //Esc if(c!=-32)continue; c=getch(); if(c==72) return Up; //上 if(c==80) return Down; //下 if(c==75) return Left; //左 if(c==77) return Right; //右 } return 0; } void paint(int x,int y) //画迷宫 { gotoxy(2*y-2,x-1); switch(map[x][y]) { case Start: printf("入");break; //画入口 case End: printf("出");break; //画出口 case Wall: printf("▇");break; //画墙 case Road: printf(" ");break; //画路 } } void game() { int x=2,y=1; //玩家当前位置,刚开始在入口处 int c; //用来接收按键 while(1) { gotoxy(2*y-2,x-1); printf("●"); //画出玩家当前位置 if(map[x][y]==End) //判断是否到达出口 { gotoxy(30,24); printf("到达终点,按任意键结束"); getch(); break; } c=get_key(); if(c==Esc) { gotoxy(0,24); break; } switch(c) { case Up: //向上走 if(map[x-1][y]!=Wall) { paint(x,y); x--; } break; case Down: //向下走 if(map[x+1][y]!=Wall) { paint(x,y); x++; } break; case Left: //向左走 if(map[x][y-1]!=Wall) { paint(x,y); y--; } break; case Right: //向右走 if(map[x][y+1]!=Wall) { paint(x,y); y++; } break; } } } int main() { int i,j; srand((unsigned)time(NULL)); //初始化随即种子 hidden(); //隐藏光标 for(i=0;i<=Height+1;i++) for(j=0;j<=Width+1;j++) if(i==0||i==Height+1||j==0||j==Width+1) //初始化迷宫 map[i][j]=Road; else map[i][j]=Wall; create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //从随机一个点开始生成迷宫,该点行列都为偶数 for(i=0;i<=Height+1;i++) //边界处理 { map[i][0]=Wall; map[i][Width+1]=Wall; } for(j=0;j<=Width+1;j++) //边界处理 { map[0][j]=Wall; map[Height+1][j]=Wall; } map[2][1]=Start; //给定入口 map[Height-1][Width]=End; //给定出口 for(i=1;i<=Height;i++) for(j=1;j<=Width;j++) //画出迷宫 paint(i,j); game(); //开始游戏 getch(); return 0; }
解决方案
不用改,就你的程序也可以用C++编译器编译。
当然你可以加上一些C++支持,C不支持的特性,比如说,输出用cout代替printf,甚至修改为面向对象的。
解决方案二:
同楼上,不用改,我用Dev-C++ 编译跑出来了,快到终点 了。
解决方案三:
参考某文,给你添加一个自动寻路径的函数,还挺有意思的。
#define True 1
#define False 0
#define You "* "
#define Way 10
int success = False;
// 递归自动寻找路径
int visit(int i , int j)
{
Sleep(100);
map[i][j] = Way ;
paint(i,j);
gotoxy(2*j-2,i-1);
printf(You); //画出玩家当前位置
if(map[i][j+1]==End)
{
success = True;
}
if(success != True && map[i][j + 1] == Road)
{
paint(i,j);
visit(i , j + 1);
}
if(success != True && map[i + 1][j] == Road)
{
paint(i,j);
visit(i + 1 , j);
}
if(success != True && map[i - 1][j] == Road)
{
paint(i,j);
visit(i - 1 , j);
}
if(success != True && map[i][j - 1] == Road)
{
paint(i,j);
visit(i , j - 1);
}
if(success != True)
map[i][j] == Road;
return success ;
}
void auto_game(void)
{
if(visit(2, 1)) // 到达出口
{
gotoxy(Width / 2, Height + 1);
printf("Success. Press anykey to continue");
getch();
}
}
使用跟 game() 一样
时间: 2024-12-31 22:38:28