C语言推箱子游戏. 下载本文

内容发布更新时间 : 2024/12/27 8:11:54星期一 下面是文章的全部内容请认真阅读。

#include\#include\#define LEFT 75 #define RIGHT 77 #define UPPER 72 #define DOWN 80 #define ESC 27

struct Boxss {

int x,y; };

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,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/

struct Boxss Box[4]; /*定义箱子数量*/

int chMap[10][10]={ /*用二维数组定义地图*/

{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/ {0,1,0,0,0,0,1,1,1,0}, {0,1,0,2,0,0,1,0,1,0}, {0,1,0,1,0,0,1,0,1,0}, {0,1,1,1,0,0,1,0,1,0}, {0,1,0,0,0,0,1,0,1,0}, {0,1,1,1,1,1,1,0,1,0}, {0,1,0,1,0,0,0,0,2,0}, {0,2,0,1,1,1,1,2,0,0}, {0,0,0,0,0,0,0,0,0,0}, }; int i,j;

Box[0].x=13; /*定义箱子的坐标属性*/ Box[1].x=11; Box[2].x=14; Box[3].x=18; Box[0].y=8; Box[1].y=7; Box[2].y=13; Box[3].y=7;

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(\ } }

j=0; /*判断是否所有箱子都在目标坐标上*/ for(i=0;i<4;i++)

if(chMap[Box[i].y-5][Box[i].x-10]==2) j++;

if(j==4) /*如果所有箱子都就位输出\退出*/ {

clrscr();

printf(\ break; }

for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/ {

gotoxy(Box[i].x,Box[i].y); printf(\ }

gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/ printf(\

tx=x; /*记录本次移动前的坐标*/ ty=y;

iKey=fnGetKey();

if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(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++; /*输入ESC退出并输出\ if(iKey==ESC) {

clrscr();

printf(\ break; }

for(i=0;i<4;i++) /*则改变箱子坐标向前一格*/

if(Box[i].x==x&&Box[i].y==y) {

Box[i].x+=(x-tx); Box[i].y+=(y-ty);

if(chMap[Box[i].y-5][Box[i].x-10]==0) /*则使箱子坐标和人坐标都返回移动前的值*/ {

Box[i].x-=(x-tx); Box[i].y-=(y-ty); x=tx; y=ty; }

break; } clrscr(); }

getch(); }

如果移动后的人的坐标与箱子坐标重合,如果移动后的箱子坐标会出现在墙上,