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

📄 main.cpp

📁 一个类似于街机的小游戏
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			{
				Move_And_Draw_Scanner(Player.x,Player.y,Blue_pos,Yellow_pos,Weixing_pos,Boss_pos);
			}
			 if (keyboard_state[DIK_ESCAPE])  //检查是否退出。。。
			{
			    
			   SendMessage(main_window_handle,WM_DESTROY,0,0); //为什么用PostMessage不行啊??
			 
			}
//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////
			 //判断是否超过边界。。
			 if(Player.x>580) Player.x=580;

			 if(Player.x<150) Player.x=150;

			 if(Player.y>425) Player.y=425;

			 if(Player.y<-10)  Player.y=-10;

		
			 if(keyboard_state[DIK_U])  //按A激活一个卫星。。
			 {

			   Start_Baowu(Player.x,Player.y);
			   
			 }
		
			 if(keyboard_state[DIK_Y]) 
			 {
				Player.varsI[0]=100;
			 }

			 if(keyboard_state[DIK_LCONTROL] || keyboard_state[DIK_RCONTROL])     //激活玩家的攻击。
			 {
				 if(addspeed_mode==2)
				 {
                    Player.xv=7;
					Player.yv=7;
				 }
				 else if(addspeed_mode==3)
				 {
					 Player.xv=8;
					 Player.yv=8;
				 }
				 //////////////////增加速度
				 if(zidan_mode==1)
				 {						
                       if(control_myzidan == 0)        //隔2帧发射一次
				   {
				      Start_Myzidan(Player.x+15,Player.y-5,3);      //激活2个子弹

					  Start_Myzidan(Player.x+28,Player.y-5,3);

					  control_myzidan++;
				   }				
				   else 
				   {
					   if(control_myzidan >= 3)
					   {
						   control_myzidan=0;
					   }
					   else control_myzidan++;
				   }
				  		
				 }//end zidan_mode==1
				 else if(zidan_mode==2)
				 {
					 if(control_myzidan == 0)        //隔2帧发射一次
				   {
				      Start_Myzidan(Player.x+17,Player.y-5,3);      //激活2个子弹

					  Start_Myzidan(Player.x+27,Player.y-5,3);

					  Start_Myzidan(Player.x+6,Player.y-5,1);

					  Start_Myzidan(Player.x+35,Player.y-5,5);

					  control_myzidan++;
				   }				
				   else 
				   {
					   if(control_myzidan >=3)
					   {
						   control_myzidan=0;
					   }
					   else control_myzidan++;
				   }

				 }//end zidan_mode==2
				 else if(zidan_mode==3)
				 {

				   if(control_myzidan == 0)        //隔2帧发射一次
				   {

					  Start_Myzidan(Player.x+11,Player.y-4,3);

				      Start_Myzidan(Player.x+22,Player.y-5,3);      //激活2个子弹

					  Start_Myzidan(Player.x+34,Player.y-4,3);
					  
					  Start_Myzidan(Player.x+2,Player.y-3,2);

					  Start_Myzidan(Player.x-8,Player.y-2,0);

					  Start_Myzidan(Player.x+43,Player.y-3,4);

					  Start_Myzidan(Player.x+52,Player.y-4,6);

					  control_myzidan++;
				   }				
				   else 
				   {
					   if(control_myzidan >=3)
					   {
						   control_myzidan=0;
					   }
					   else control_myzidan++;
				   }

				 }//end zidan_mode==3
                 //////////////////加子弹完
				 if(daodan_mode==1)
				 {
					 control_daodan=0;
				 }
				 if(daodan_mode==2)
				 {

				   if(control_daodan == 0)
				   {
				      Start_Daodan(Player.x+1,Player.y+20,15,-3,-8);

					  Start_Daodan(Player.x+37,Player.y+20,1,3,-8);

					  control_daodan_rate=0;

					  control_daodan++;
				   }
				   else
				   {
					   control_daodan++;

                      if(++control_daodan_rate >= 50)     //一秒发射一次导弹
					  {
						  control_daodan=0;
					  }

				   }

				 }//end daodan_mode==2
				 else if(daodan_mode==3)
				 {

			       if(control_daodan == 0)
				   {
				      Start_Daodan(Player.x+6,Player.y+20,15,-3,-8);

					  Start_Daodan(Player.x+33,Player.y+20,1,3,-8);

					  Start_Daodan(Player.x-6,Player.y+30,14,-4,-7);

					  Start_Daodan(Player.x+46,Player.y+30,2,4,-7);

					  control_daodan_rate=0;

					  control_daodan++;
				   }
				   else
				   {
					   control_daodan++;

                      if(++control_daodan_rate >= 50)     //一秒发射一次导弹
					  {
						  control_daodan=0;
					  }

				   }

				 }//end daodan_mode==3
				 /////////////////加导弹完
		      		   
								
			 }
/////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
			Move_Player();       //玩家与其他飞机和敌机子弹进行碰撞测试。 血减为0 就将玩家设为DYING将死状态。。
		
     
		 } //Player_state==ALIVE 玩家状态是活的检测完毕
         else if(Player_state==CHONGSHENG)       //玩家的状态是重生。。
		 {
			
			 if(Player_ship<=0)
			 {
				 Player_state=DEAD;                 //玩家飞船死光光了  退出。。。

				 Player.counter_1=0;
			 }

			 if(++Player.counter_1 > 40)           //40帧后玩家reset。  //重生没有问题
			 {

				 Reset_Player();
				 
				 Player.anim_index=0;
			 }

		 }//END PLAYER_STATE==CHONGSHENG
		 else if(Player_state==DYING)            //将死状态时  持续3帧才消失 然后到重生那检测是否游戏结束
		 {
		   if(++Player.varsI[1] > 6)                //Player.varsI[1]记录爆炸持续时间 3帧       //问题出在这里。。。。
		   {
			 Hide_BOB(&Player);                 //不可见

			 --Player_ship;                     //飞船数减一

		  	 Player_state=CHONGSHENG;           //状态为重生(这里是经过DYING状态才把模式改为爆炸动画?)
		   }
		}//END PALYER—STATE==DYING 
		 else if(Player_state==DEAD)
		 {	
		
           Draw_Text_GDI("Game Over,You are..<猪>..heihei..",280,200,0,lpddsback);
		   Draw_Text_GDI("Push Q. Exit the game.",300,220,0,lpddsback);
		   Draw_Text_GDI("Push G. Go on.",320,240,0,lpddsback);
         
		   if(keyboard_state[DIK_G])
		   {
			  Reset_Player();
			  Player_sorce=0;
			  Player_ship=3;
			  
		   }
           else if(keyboard_state[DIK_Q])
		   {
		     SendMessage(main_window_handle,WM_DESTROY,0,0);
		   }
		 }
	}//end player_win==0;//下面的else 表示player_win为1 是赢了的状态
	else 
	{

		Player.xv=0;
		Player.yv=0;
        Player_sorce+=5000;
		Set_Animation_BOB(&Player,4);
		Game_state=GAME_STATE_EXIT;
	}
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
/////////这里有个函数 要检测敌机什么时候出现。。。。。
		 ///然后各个游戏对象的AI
		 //然后渲染。。。。。。
	
		 ///对其他游戏对象进行渲染
		 //最后渲染子弹那些。。。
           if(part==1)
		   {
               Show_Enemy();
		   }
	       else if(part==2)
		   {
			   Show_Enemy1();
		   }
		 	 Show_Blue();

             Show_Yellow();

			 Move_Daodan();         //自动寻找最近敌机并切换相应的位图

			 Move_Weixing();         //改变卫星位置

			 Move_Yellow();         //黄色飞机模式移动

			 Move_Blue();            //玩家的位置自动改变他的动画模式 
	
			 Move_Boss();

			 Move_Enemyzian();

			 Move_Myzidan();          //玩家子弹移动。。。
		
			 Move_Baowu();           //移动宝物  

			 Draw_Weixing();         //渲染卫星设置为可见

			 Draw_Blue();            //渲染兰色飞机

			 Draw_Boss();

			 if(!Draw_Yellow())           //渲染黄色飞机
			 {
				 MessageBox(main_window_handle,"draw","draw",MB_OK);
			 }
			
			 	 //这里玩家活着的时候开始有问题。。。活着的第一帧并不是第一个被渲染的
		     if(Player_state==DYING)
			 {
               Draw_Player();
			 }
		     if(Player_state==ALIVE)
			 {		
               Draw_Player();
			 }
			 Draw_Daodan();           //渲染导弹。。

			 Draw_Myzidan();          //渲染子弹。

			 Draw_Enemyzidan();

			 Draw_Baowu();           //渲染宝物。。。。。。。。
			       		   
			 Check_Boss();
		   
			 if(!Check_Yellow())         //检查黄色飞机是否爆炸和超过边界..
             {
				MessageBox(main_window_handle,"check","check",MB_OK);
			 }
			 Check_Blue();           //检查是否蓝色飞机爆炸。。。
			 
             Check_Weixing();        //检测是否卫星爆炸。

        	 Check_Daodan();         //检测导弹是否过界或者爆炸。

			 Check_Enemyzidan();      //检测敌人子弹是否爆炸

			 Check_Myzidan();        //检测玩家子弹是否爆炸。

			 Check_Baowu();          //检测玩家是否吃到宝物  吃到了就搞掉它。。还有它的存活期是否已经到了。。

			 Check_Player();      //检查玩家中蛋。??是的话就在3帧后消失


/////////////////////////////////////////////////////////////////////////////////////////////
			 if(part==2)
			 {
				 if(control_show_enemy < 100)
				 {
					 Player.varsI[0]=Blood_Player;
				 }
			 }
			 //最后计算得分和生命直  并渲染
			 Get_Sorce();         //获取玩家的得分  每一位的数字存放在sorce数组中 。

             Draw_Sorce();         //渲染得分。。

			 Get_Blood();
      
		 	 Draw_Blood(); //////////这里有错。

			 if(part==1)
			 {
                Draw_Text_GDI("第一关.",170,450,0,lpddsback);
			 }
			 else if(part==2)
			 {
               Draw_Text_GDI("第二关.",170,450,0,lpddsback);
			 }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			 
        	for(int i=0;i<MAX_NUM_BAOWU;i++)
			{
		      if(Baowu_state[i]==ALIVE)
			  {
			       if((Baowu[i].curr_animation==0 && Baowu[i].anim_index==0) || (Baowu[i].curr_animation==1 && Baowu[i].anim_index==2) || (Baowu[i].curr_animation==2 && Baowu[i].anim_index==1))
				   {
                      Draw_Text_GDI("P",Baowu[i].x+8,Baowu[i].y+4,0,lpddsback);
				   }
		           else if((Baowu[i].curr_animation==0 && Baowu[i].anim_index==1) || (Baowu[i].curr_animation==1 && Baowu[i].anim_index==0) || (Baowu[i].curr_animation==2 && Baowu[i].anim_index==2))
				   {
                     Draw_Text_GDI("S",Baowu[i].x+8,Baowu[i].y+4,0,lpddsback);
				   }
		           else if((Baowu[i].curr_animation==0 && Baowu[i].anim_index==2) || (Baowu[i].curr_animation==1 && Baowu[i].anim_index==1) || (Baowu[i].curr_animation==2 && Baowu[i].anim_index==0))
				   {
                    Draw_Text_GDI("M",Baowu[i].x+7,Baowu[i].y+4,0,lpddsback);
				   }
			  }
			}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////    
			 DDraw_Flip();

			 Wait_Clock(33);

///////////////检测玩家是否在游戏中途退出。。。。/////////////////////////////////////////////////
      }//end control_stop2  
	  else
	  {
		  Draw_Text_GDI("暂停",300,250,0,lpddsback);
		  Wait_Clock(33);
	  }
	}//END GAME_STATE_RUNNING
	else if(Game_state==GAME_STATE_EXIT)
	{

	  if(player_win)
	  {
		if(part==1)
		{
			if(++control_win > 400)  
			{
                Game_state=GAME_STATE_RESTART;
				
				player_win=0;
				check_win=0;

				part=2;
			
			}

		  	 Move_And_Draw_Background();

		     lpddsback->Blt(&dest_rect,lpddhelp,NULL,DDBLT_WAIT,NULL);
		   
		  if(control_win > 80)
		  {
			 Player.yv-=0.1;

             Player.y+=Player.yv;
		  }
		  
             Draw_Player();

			 Draw_Sorce();

			 Draw_Blood();
			 
			 Draw_Text_GDI("顺利通过第一关.好..卡哇伊.come on..",275,200,0,lpddsback);

             sprintf(buffer,"第一关得分:%d",Player_sorce);

			 Draw_Text_GDI(buffer,327,220,0,lpddsback);

			 Draw_Text_GDI("马上进入第2关.",330,240,0,lpddsback);
		
             Draw_Text_GDI("第一关.",170,450,0,lpddsback);	

		   	 DDraw_Flip();

			 Wait_Clock(33);
		}
		else if(part==2)
		{               
		  	if(++control_win > 400)  
			{
				
				player_win=0;
			
			}

		  	 Move_And_Draw_Background();

		     lpddsback->Blt(&dest_rect,lpddhelp,NULL,DDBLT_WAIT,NULL);
		   
		  if(control_win > 80)
		  {
			 Player.yv-=0.1;

             Player.y+=Player.yv;
		  }
		  
             Draw_Player();

			 Draw_Sorce();

			 Draw_Blood();
			 
			 Draw_Text_GDI("顺利通过第二关.好..猛呀...",305,200,0,lpddsback);

             sprintf(buffer,"第二关得分:%d",Player_sorce);

			 Draw_Text_GDI(buffer,327,220,0,lpddsback);

			  Draw_Text_GDI("程序将自动退出.",330,240,0,lpddsback);

			  Draw_Text_GDI("第二关.",170,450,0,lpddsback);

		   	 DDraw_Flip();

			 Wait_Clock(33);
					      
		}
	 
	  }
	  else if(part==2 && !player_win)
	  {
	     SendMessage(main_window_handle,WM_DESTROY,0,0); //为什么用PostMessage不行啊??
		 
	  }		//打字啊~~GAME—OVER啊  然后拜拜啊
	}//end GAME_STATE_EXIT
	
           	return 1;
} //END GAME_MAIN


int Get_Sorce()
{
    int temp,temp1,temp2,temp3,temp4;

	temp=Player_sorce;

    sorce[0]=temp/10000;

	temp1=temp-sorce[0]*10000;

	sorce[1]=temp1/1000;

	temp2=temp1-sorce[1]*1000;

	sorce[2]=temp2/100;

	temp3=temp2-sorce[2]*100;

	sorce[3]=temp3/10;

	temp4=temp3-sorce[3]*10;

	sorce[4]=temp4;

	return 1;
}
/////////////////////////////////////////////////////////////////////////////
///////Get_Blood
int Get_Blood()
{
   int temp,temp1,temp2;

   if(Player.varsI[0] <=0)
   {
	   Player.varsI[0]=0;
   }
   
   temp=Player.varsI[0];

   blood[0]=temp/100;

   temp1=temp-blood[0]*100;

   blood[1]=temp1/10;

   temp2=temp1-blood[1]*10;
   
   blood[2]=temp2;

	return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
int  Set_Blue_Show(int number)
{
	if(!show_blue1)
	{
		show_blue1=1;
		blue_number1=number;
		show_blue_time1=0;
		blue_pos_x1=choose_blue_pos;
	}
	else if(!show_blue2)
	{
		show_blue2=1;
		show_blue_time2=0;
		blue_number2=number;
		blue_pos_x2=choose_blue_pos;
	}
	
	return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
int Show_Blue()
{
   if(show_blue1 || show_blue2)
   {
	   if(show_blue1)
	   {
          ++show_blue_time1;
		  if(blue_number1==2)
		  {
			 if(!show_blue_time1)
			 {
			  Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1==10)
			 {
			  Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1 ==20)
			 {
				 Start_Blue(blue_pos_x1,-80);
				 
				 show_blue_time1=0;
			     show_blue1=0;
			 }
		  }
		  else if(blue_number1==3)
		  {
			   if(!show_blue_time1)
			 {
			  Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1==10)
			 {
			  Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1==20)
			 {
				 Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1 ==30)
			 {
				 Start_Blue(blue_pos_x1,-80);
				 show_blue_time1=0;
			     show_blue1=0;
			 }

		  }
		  else if(blue_number1==4)
		  {
			     if(!show_blue_time1)
			 {
			  Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1==10)
			 {
			  Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1==20)
			 {
				 Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1 ==30)
			 {
				 Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1 ==40)
			 {
				 Start_Blue(blue_pos_x1,-80);
				 show_blue_time1=0;
			     show_blue1=0;
			 }
		  }
		  else if(blue_number1==5)
		  {
			  if(!show_blue_time1)
			 {
			  Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1==10)
			 {
			  Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1==20)
			 {
				 Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1==30)
			 {
				 Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1==40)
			 {
				 Start_Blue(blue_pos_x1,-80);
			 }
			 else if(show_blue_time1 ==50)
			 {
				 Start_Blue(blue_pos_x1,-80);
				 show_blue_time1=0;
			     show_blue1=0;
			 }
		  }
	   }
	   if(show_blue2)
	   {
         ++show_blue_time2;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -