迷宫游戏
/*乌云老师的话:学习检测键盘信息之后,余文彪同学当堂就作岀了通过键盘在屏幕上下左右移动一
个星星的程序。
老师给几位同学大略说了一下迷宫游戏的实现思路,彭搏同学下次课就把做好的迷宫游戏
拿出来了,wonderful!
思路分明,代码简练,注释清晰,只得大家学习。
同时他还实现了一个简单推箱子游戏,可谓程序快手了。
*/
#include"stdio.h" #include"bios.h" #define LEFT 75 #define RIGHT 77 #define UPPER 72 #define DOWN 80 #define ESC 27 union keyboard { unsigned int iKeylnfo; char chKeyBit[2];
};
int fnGetKey(void)
{
union keyboard uniKeyl; while(bioskey(1)==0); uniKey1.iKeylnfo=bioskey(0);
/*定义读取键盘码的共用体类型 */
/*定义读取键盘码的函数*/
/*定义读取键盘码的共用体变量*/
/*检测用户是否按键*/
/*读取按键信息*/
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]);
}
/*返回ASCII码或扩充码*/
void main()
{
int iKey,x=11,y=6;/*x,y为人物移动后坐标*/
int chMap[10][10]={/*用二维数组定义地图 */
{0,0,0,0,0,0,0,0,0,0},/*0 表示墙 1 表示路 2表示出口 */
{0,1,0,0,1,1,1,1,1,0},
{0,1,1,0,1,0,1,0,1,0},
{0,0,1,0,1,0,1,0,1,0},
{0,0,1,1,1,0,0,0,1,0},
{0,0,0,0,0,0,1,1,1,0},
{0,1,0,0,1,1,1,0,0,0},
{0,1,1,1,1,0,0,0,2,0},
{0,1,0,0,1,1,1,1,1,0},
{0,0,0,0,0,0,0,0,0,0},
};
int i,j;/*反复进行求移动的坐标运算 */
while(1)
{
for(i=0;i<10;i++)/*输出新地图(刷新地图广/
{
gotoxy(10,5+i);
for(j=0;j<10;j++)
{
if(chMap[i][j]==0)
prin tf("#");
if(chMap[i][j]==1)
printf("");
if(chMap[i][j]==2)
prin tf("E");
}
}
if(chMap[y-5][x-10]==2)/*如果如果人的坐标和目标坐标重合输出"YOU WIN!"退出*/
clrscr();
printf("You Win!");
break;
}/*在起始(或移动后)的坐标输出人*/
gotoxy(x,y);
printf("*\b");
(0)重合则iKey=fnGetKey();/*按读取的按键信息改变坐标如果改变的坐标和墙
(0)重合则
不改变*/
if(iKey==LEFT&&chMap[y-5][x-1-10]!=0)
x--;
if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
x++;
if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)
y--;
if(iKey==DOWN &&chMap[y+1-5][x-10]!=0)
y++;
if(iKey==ESC)/*输入 ESC 退出并输出"YOU LOST"*/
{
clrscr();
printf("You Lost");
break;
}
clrscr();
}
getch();
}