📄 pac-man.c
字号:
{
allegro_init(); //初始化 Aprop_yegro 库.
install_keyboard(); //加载 Aprop_yegro 键盘中断处理程序.
install_timer(); //加载 Aprop_yegro 时钟中断处理程序.
//初始化声音组件, 成功则返回零.
install_sound(DIGI_AUTODETECT, MIDI_NONE, 0);
set_color_depth(16); //设置有效颜色深度为16位
//切换图形模式。让 Aprop_yegro 选择一个合适的图形驱动程序。这里设置为640*480
if (set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0) != 0)
{
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); //返回文本模式
//如果不是640*480的格式就表示出错
allegro_message("Unable to set any graphic mode\n%s\n", allegro_error);
exit(1);
}
}
void game_initialization()
{
//text to be transparently printed
text_mode(-1);
datafile = load_datafile("map.dat"); //载入文件名为map.dat的数据文件
if (!datafile)
{
/* report an eprop_xor! */
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message("Eprop_xor reading %s!\n", allegro_error);
exit(1);
}
//创建一个屏幕大小的内存位图, 并且返回指向它的指针.
background = create_bitmap(SCREEN_W, SCREEN_H);
clear_to_color(background, 0); //将位图清为颜色0.
}
int get_input()
{
if(abs(old_life-life)>0 && old_life!=0)
{
old_life=life;
return 5;
}
if(!keypressed()) //int keypressed()如果在输入缓冲中有键击则返回 TRUE
return NO_INPUT; //如果没有键盘输入就返回NO_INPUT
/*int readkey()返回键盘缓冲里的下一个字符.如果缓冲是空的, 则等待下一次键击.返回值的低字节是键的 *ASCII 码,高字节为扫描码. */
switch(readkey() >> 8) //检查扫描码
{
case KEY_DOWN: return KEY_DOWN; //输入下箭头键返回KEY_DOWN
case KEY_UP: return KEY_UP; //输入上箭头键返回KEY_UP
case KEY_LEFT: return KEY_LEFT; //输入左箭头键返回KEY_LEFT
case KEY_RIGHT: return KEY_RIGHT; //输入右箭头键返回KEY_RIGHT
case KEY_ESC: return KEY_ESC; //输入ESC键返回KEY_ESC
}
}
/*left(),right(),up(),down(),they are both use to examination hits.
The speed is 8.*/
int left(int row,int line)
{
int point[4][2]={{row,line}, {row,line+32},
{row+32,line},{row+32,line+32}};
row=row-8;
pos_x=(point[0][0]-8)/32;
pos_y=point[0][1]/32;
pos2_x=(point[3][0]-33)/32;
pos2_y=(point[3][1]-1)/32;
if(turn_number==1)
{
if(map01[pos2_y][pos2_x]==1 || map01[pos_y][pos_x]==1)
{
row=row+8;
return 1;
}
else
{
row=row+8;
return 0;
}
}
else if(turn_number==2)
{
if(map02[pos2_y][pos2_x]==1 || map02[pos_y][pos_x]==1)
{
row=row+8;
return 1;
}
else
{
row=row+8;
return 0;
}
}
else if(turn_number==3)
{
if(map03[pos2_y][pos2_x]==1 || map03[pos_y][pos_x]==1)
{
row=row+8;
return 1;
}
else
{
row=row+8;
return 0;
}
}
else if(turn_number==4)
{
if(map04[pos2_y][pos2_x]==1 || map04[pos_y][pos_x]==1)
{
row=row+8;
return 1;
}
else
{
row=row+8;
return 0;
}
}
else if(turn_number==5)
{
if(map05[pos2_y][pos2_x]==1 || map05[pos_y][pos_x]==1)
{
row=row+8;
return 1;
}
else
{
row=row+8;
return 0;
}
}
else if(turn_number==6)
{
if(map06[pos2_y][pos2_x]==1 || map06[pos_y][pos_x]==1)
{
row=row+8;
return 1;
}
else
{
row=row+8;
return 0;
}
}
else if(turn_number==7)
{
if(map07[pos2_y][pos2_x]==1 || map07[pos_y][pos_x]==1)
{
row=row+8;
return 1;
}
else
{
row=row+8;
return 0;
}
}
else if(turn_number==8)
{
if(map08[pos2_y][pos2_x]==1 || map08[pos_y][pos_x]==1)
{
row=row+8;
return 1;
}
else
{
row=row+8;
return 0;
}
}
else if(turn_number==9)
{
if(map09[pos2_y][pos2_x]==1 || map09[pos_y][pos_x]==1)
{
row=row+8;
return 1;
}
else
{
row=row+8;
return 0;
}
}
}
int right(int row,int line)
{
int point[4][2]={{row,line}, {row,line+32},
{row+32,line},{row+32,line+32}};
row=row+8;
pos_x=(point[1][0]+39)/32;
pos_y=(point[1][1]-32)/32;
pos2_x=(point[2][0])/32;
pos2_y=(point[2][1]+31)/32;
if(turn_number==1)
{
if(map01[pos_y][pos_x]==1 || map01[pos2_y][pos2_x]==1)
{
row=row-8;
return 1;
}
else
{
row=row-8;
return 0;
}
}
else if(turn_number==2)
{
if(map02[pos_y][pos_x]==1 || map02[pos2_y][pos2_x]==1)
{
row=row-8;
return 1;
}
else
{
row=row-8;
return 0;
}
}
else if(turn_number==3)
{
if(map03[pos_y][pos_x]==1 || map03[pos2_y][pos2_x]==1)
{
row=row-8;
return 1;
}
else
{
row=row-8;
return 0;
}
}
else if(turn_number==4)
{
if(map04[pos_y][pos_x]==1 || map04[pos2_y][pos2_x]==1)
{
row=row-8;
return 1;
}
else
{
row=row-8;
return 0;
}
}
else if(turn_number==5)
{
if(map05[pos_y][pos_x]==1 || map05[pos2_y][pos2_x]==1)
{
row=row-8;
return 1;
}
else
{
row=row-8;
return 0;
}
}
else if(turn_number==6)
{
if(map06[pos_y][pos_x]==1 || map06[pos2_y][pos2_x]==1)
{
row=row-8;
return 1;
}
else
{
row=row-8;
return 0;
}
}
else if(turn_number==7)
{
if(map07[pos_y][pos_x]==1 || map07[pos2_y][pos2_x]==1)
{
row=row-8;
return 1;
}
else
{
row=row-8;
return 0;
}
}
else if(turn_number==8)
{
if(map08[pos_y][pos_x]==1 || map08[pos2_y][pos2_x]==1)
{
row=row-8;
return 1;
}
else
{
row=row-8;
return 0;
}
}
else if(turn_number==9)
{
if(map09[pos_y][pos_x]==1 || map09[pos2_y][pos2_x]==1)
{
row=row-8;
return 1;
}
else
{
row=row-8;
return 0;
}
}
}
int up(int row,int line)
{
int point[4][2]={{row,line}, {row,line+32},
{row+32,line},{row+32,line+32}};
line=line-8;
pos2_x=(point[1][0]+31)/32;
pos2_y=(point[1][1]-33)/32;
pos_x=(point[0][0])/32;
pos_y=(point[0][1]-1)/32;
if(turn_number==1)
{
if(map01[pos_y][pos_x]==1 || map01[pos2_y][pos2_x]==1)
{
line=line+8;
return 1;
}
else
{
line=line+8;
return 0;
}
}
else if(turn_number==2)
{
if(map02[pos_y][pos_x]==1 || map02[pos2_y][pos2_x]==1)
{
line=line+8;
return 1;
}
else
{
line=line+8;
return 0;
}
}
else if(turn_number==3)
{
if(map03[pos_y][pos_x]==1 || map03[pos2_y][pos2_x]==1)
{
line=line+8;
return 1;
}
else
{
line=line+8;
return 0;
}
}
else if(turn_number==4)
{
if(map04[pos_y][pos_x]==1 || map04[pos2_y][pos2_x]==1)
{
line=line+8;
return 1;
}
else
{
line=line+8;
return 0;
}
}
else if(turn_number==5)
{
if(map05[pos_y][pos_x]==1 || map05[pos2_y][pos2_x]==1)
{
line=line+8;
return 1;
}
else
{
line=line+8;
return 0;
}
}
else if(turn_number==6)
{
if(map06[pos_y][pos_x]==1 || map06[pos2_y][pos2_x]==1)
{
line=line+8;
return 1;
}
else
{
line=line+8;
return 0;
}
}
else if(turn_number==7)
{
if(map07[pos_y][pos_x]==1 || map07[pos2_y][pos2_x]==1)
{
line=line+8;
return 1;
}
else
{
line=line+8;
return 0;
}
}
else if(turn_number==8)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -