以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 推箱子游戏代码 (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=87474) |
-- 作者:葛靖青001 -- 发布时间:11/4/2010 4:52:00 PM -- 推箱子游戏代码 #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(); } |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
39.063ms |