⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pac-man.c

📁 一个用c语言写的吃豆的小游戏
💻 C
📖 第 1 页 / 共 5 页
字号:
{
	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 + -