简单的迷宫小游戏C语言程序源代码

  • 格式:doc
  • 大小:19.00 KB
  • 文档页数:6

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单的迷宫小游戏C语言程序源代码

#include

#include

#include #include

#define Height 31 //迷宫的高度,必须为奇数 #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(); //隐藏光标

相关主题