代码应该没有问题,因为是复制LEE博士失踪记的代码
#define LEFT_ARROW 23
#define RIGHT_ARROW 22
#define UP_ARROW 20
#define DOWN_ARROW 21
//----------------------------------------------------------------
#define LCD_HEIGHT_START 0
#define LCD_HEIGHT_END 3
#define LCD_WIDTH_START 0
#define LCD_WIDTH_END 9
#define LCD_MAX_WIDTH_OBJ 10
#define LCD_MAX_HEIGHT_OBJ 4
//----------------------------------------------------------------
#define MAP_MAX_WIDTH_OBJ 31
#define MAP_MAX_HEIGHT_OBJ 10
int man_x,man_y,map_x,map_y;
char map[][31]={
//0 x05 x10 x15 x20
01,01,01,01,01,30,31,32,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,
01,15,16,17,01,33,34,35,01,01, 0, 0,51,52,01, 0, 0, 0, 0, 0,01,40,41,42,01, 0,01, 0, 0, 0,01,
01,14,19,20,65,36,37,38, 0,01, 0, 0,53,54,01, 0, 0, 0, 0, 0,01,43,44,45,65, 0,01,01,01, 0,01,
01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,01, 0, 0, 0, 0, 0,01, 0,01, 0,01,
01,01,65, 0,01,01,01,01,65,01,01,01,01,01, 0,01,01,65,01,01,01, 0, 0,01, 0, 0,01, 0,01, 0,01,
01,01, 0, 0, 0,01,01,01,40,41,42,01, 0, 0, 0,01,01,22,23,01,01, 0, 0,01, 0,01, 0, 0, 0, 0,01,
01, 0,01,01, 0, 0,01,01,43,44,45,01, 0, 0, 0,01,25,26,27,28,01,01, 0, 0, 0, 0, 0, 0, 0,01,01,
01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,01,01, 0, 0, 6, 7, 8, 9, 0, 0,01,
01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01, 0,10,11,12,13,65, 0,01,
01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01, 0, 0, 0, 0, 0, 0, 0,01};
int GraphicData[][20]={
//Blank
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
//Tree
0x0000,0x0000,0xF81F,0xFC1E,0x5475,0xBFBA,0x55D5,0xEFEE,0x55D5,0xAB6A,0x5555,0xEF6E,0x5675,0xBA1A,0xD61F,0xFC01,0xE001,0xA001,0xA001,0xE001,
//Brick
0xBB3B,0x1F1F,0x0E0E,0x1C1C,0x3838,0x7070,0xE0E0,0xF1F1,0xBBBB,0x1F1F,0x0E0E,0x1C1C,0x3838,0x7070,0xE0E0,0xF1F1,0xBBBB,0x1F1F,0x0E0E,0x1C1C,
//Gray
0x8888,0x4444,0x2222,0x1111,0x8888,0x4444,0x2222,0x1111,0x8888,0x4444,0x2222,0x1111,0x8888,0x4444,0x2222,0x1111,0x8888,0x4444,0x2222,0x1111,
0xFC3F,0xFE7F,0xFEFF,0xFF7F,0xB669,0x05A0,0x0660,0x0420,0x8819,0x3004,0xCC3B,0x0A50,0x0A50,0x0A50,0xFA6F,0xF61F,0x7038,0x7038,0x701C,0x783C
};
void DrawGraphic(int x,int y,int iObjectID)
{
WriteBlock(x*16,y*20,16,20,1,iObjectID*40+GraphicData);
}
void DrawMap()
{
int x,y;
for (y=0;y<6;y++) {
for (x=0;x<10;x++) {
DrawGraphic(x,y,map[map_y+y][map_x+x]);
}
}
}
int IsWalkable()
{
char ch;
ch=map[map_y+man_y][map_x+man_x];
if (ch<100) {
return 1;
}
return 0;
}
void main(){
char ch;
man_x=1;
man_y=1;
map_x=0;
map_y=0;
DrawMap();
DrawGraphic(man_x,man_y,4);
Refresh();
for (;;) {
ch=getchar();
if (ch==LEFT_ARROW) {
if (man_x>LCD_WIDTH_START) {
man_x--;
if (IsWalkable()) {
if (man_x==LCD_WIDTH_START) {
if (map_x>0) {
map_x--;
man_x++;
}
}
} else {
man_x++;
}
}
} else if (ch==RIGHT_ARROW) {
if (man_x<LCD_WIDTH_END) {
man_x++;
if (IsWalkable()) {
if (man_x==LCD_WIDTH_END) {
if (map_x<MAP_MAX_WIDTH_OBJ-LCD_MAX_WIDTH_OBJ) {
map_x++;
man_x--;
}
}
} else {
man_x--;
}
}
} else if (ch==UP_ARROW) {
if (man_y>LCD_HEIGHT_START) {
man_y--;
if (IsWalkable()) {
if (man_y==LCD_HEIGHT_START) {
if (map_y>0) {
map_y--;
man_y++;
}
}
} else {
man_y++;
}
}
} else if (ch==DOWN_ARROW) {
if (man_y<LCD_HEIGHT_END) {
man_y++;
if (IsWalkable()) {
if (man_y==LCD_HEIGHT_END) {
if (map_y<MAP_MAX_HEIGHT_OBJ-LCD_MAX_HEIGHT_OBJ) {
map_y++;
man_y--;
}
}
} else {
man_y--;
}
}
} DrawMap();
DrawGraphic(man_x,man_y,4);
Refresh();
}
}
|