烏雲老師的話:學習檢測鍵盤信息之後,余文彪同學當堂就作出了通過鍵盤在屏幕上下左右移動一個星星的程序。
老師給幾位同學大略說了一下迷宮游戲的實現思路,彭搏同學下次課就把做好的迷宮游戲拿出來了,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 iKeyInfo;
char chKeyBit[2];
};
int fnGetKey(void) /*定義讀取鍵盤碼的函數*/
{
union keyboard uniKey1; /*定義讀取鍵盤碼的共用體變量*/
while(bioskey(1)==0); /*檢測用戶是否按鍵*/
uniKey1.iKeyInfo=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)
printf("#");
if(chMap[i][j]==1)
printf(" ");
if(chMap[i][j]==2)
printf("E");
}
}
if(chMap[y-5][x-10]==2) /*如果如果人的坐標和目標坐標重合輸出"YOU WIN!"退出*/
{
clrscr();
printf("You Win!");
break;
} /*在起始(或移動後)的坐標輸出人*/
gotoxy(x,y);
printf("*\b");
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();
}