源代码#include"stdio.h"#include"bios.h"#defineLEFT75#defineRIGHT77#defineUPPER72#defineDOWN80#defineESC27unionkeyboard/*定义读取键盘码的共用体类型*/{unsignedintiKeyInfo;c...
源代码
#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();
}
知道的流程图和代码框架怎么弄的,发我邮箱里面:zilinpiao@163.com很急,在星期一之前就要用,麻烦各位了
展开