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

📄 gameobject.h

📁 一个类似于街机的小游戏
💻 H
📖 第 1 页 / 共 5 页
字号:
#include <windows.h>   
#include <windowsx.h> 
#include <mmsystem.h>
#include <iostream.h> 
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h> 
#include <math.h>
#include <io.h>
#include <fcntl.h>

#include "T3DLIB1.h"
#include "T3DLIB2.h"
#include "all.h"
////////////////////////////////////
int Init_Player()
{
	//定义动画模式
    static int  player_anim_mode0[4]={1,0,2,3},player_anim_mode1[4]={5,6,4,3},player_anim_mode2[3]={7,8,9},player_anim_mode3[3]={10,11,12},player_anim_mode4[1]={3};

	Create_BOB(&Player,0,0,60,52,13,BOB_ATTR_MULTI_ANIM | BOB_ATTR_ANIM_ONE_SHOT,DDSCAPS_VIDEOMEMORY,255,8);
    
	Load_Bitmap_File(&bitmap8bit,"player.bmp");	
    // 加载位图

	Load_Frame_BOB(&Player,&bitmap8bit,0,0,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Player,&bitmap8bit,1,1,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Player,&bitmap8bit,2,2,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Player,&bitmap8bit,3,3,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Player,&bitmap8bit,4,4,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Player,&bitmap8bit,5,5,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Player,&bitmap8bit,6,6,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Player,&bitmap8bit,7,0,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Player,&bitmap8bit,8,1,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Player,&bitmap8bit,9,2,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Player,&bitmap8bit,10,3,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Player,&bitmap8bit,11,4,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Player,&bitmap8bit,12,5,1,BITMAP_EXTRACT_MODE_CELL);
		
	Unload_Bitmap_File(&bitmap8bit);
    //加载动画指令
	Load_Animation_BOB(&Player,0,4,player_anim_mode0);  //左倾
	Load_Animation_BOB(&Player,1,4,player_anim_mode1);	 //右倾
    Load_Animation_BOB(&Player,2,3,player_anim_mode2);  //中蛋
	Load_Animation_BOB(&Player,3,3,player_anim_mode3);  //爆炸
	Load_Animation_BOB(&Player,4,1,player_anim_mode4);  //中间
	
	
	Player.varsI[0]=Blood_Player;              //血

	Player.varsI[1]=0;                //爆炸持续时间

	Player.varsI[2]=0;                //中蛋闪烁时间

	Player.counter_1=0;               //重生时间

 	Player_state=ALIVE;               //状态

	SET_BIT(Player.attr,BOB_ATTR_VISIBLE);  //这里用BOB_ATTR_VISIBLE来测试是否需要渲染。。

	Set_Pos_BOB(&Player,360,415);      //位置

	Set_Vel_BOB(&Player,5,5);          //移动速度

	zidan_mode=1;                       //子弹模式为1

    daodan_mode=1;                      //导弹模式为1

	addspeed_mode=1;                    //速度模式为1

	Set_Anim_Speed_BOB(&Player,2);      //动画速度 也就是多少帧切换位图

	Set_Animation_BOB(&Player,3);      //设置动画模式。。为第4个 只有一张位图
     
	return 1;
}

int Move_Player()
{
	int i;
  //用玩家对所有的兰色飞机进行碰撞测试
	for(i=0;i<MAX_NUM_BLUE;i++)
	{
		if(Blue_state[i]==ALIVE) //兰色飞机是活的
		{
			if(Collision_Test(Player.x+20,Player.y,20,52,Blue[i].x+18,Blue[i].y+5,32,57) || Collision_Test(Player.x+12,Player.y+26,32,14,Blue[i].x+18,Blue[i].y+5,32,57)) //碰撞测试
			{
				Player.varsI[0]-=Collision_with_boss_dam;             //玩家的血减20

				Blue[i].varsI[0]=0;              //兰色飞机直接减为0   

				Set_Animation_BOB(&Blue[i],2);   //兰色飞机爆炸

				Set_Animation_BOB(&Player,2);    //玩家中蛋闪烁。。

				Set_Anim_Speed_BOB(&Player,1);   //动画切换速度。。

				if(Player.varsI[0]<=0)           //如果玩家的血减到了0 那么他的状态就是将死了
				{
					Set_Animation_BOB(&Player,3); //设置动画模式为爆炸

					Player_state=DYING;          //状态为将死了 
				}
			}
		}
	}//end 和兰色飞机捧撞测试
	//然后是和卫星捧撞测试
	for(i=0;i<MAX_NUM_WEIXING;i++)
	{
		if(Weixing_state[i]==ALIVE)
		{

			if(Collision_Test(Player.x+20,Player.y,20,52,Weixing[i].x+18,Weixing[i].y+18,56,50) || Collision_Test(Player.x+12,Player.y+26,32,14,Weixing[i].x+18,Weixing[i].y+18,56,50))
			{
				Player.varsI[0]-=Collision_with_weixing_dam;

				Weixing[i].varsI[0]-=50;

				Set_Animation_BOB(&Player,2); 
               
				Set_Anim_Speed_BOB(&Player,1);

				if(Weixing[i].varsI[0]<=0)
				{
					Set_Animation_BOB(&Weixing[i],1);
				}

				if(Player.varsI[0]<=0)
				{
					Set_Animation_BOB(&Player,3);      //血为0  爆炸。。。。
					
					Player_state=DYING;
				}
			}
		}
	}
	//检测宝物时候存在。。如果存在的话 改变玩家的属性。
	for(i=0; i<MAX_NUM_BAOWU; i++)
	{
		if(Baowu_state[i]==ALIVE)
		{
             if(Collision_BOBS(&Player,&Baowu[i]))
			 {			
                Baowu_state[i]=DEAD;

				Set_Animation_BOB(&Player,2);
              //判断宝物的属性。并改变相应的开火模式
				if(Baowu[i].curr_animation==0)
				{
				    if(Baowu[i].anim_index==0)					  
					{
                      zidan_mode++;
 
				      if(zidan_mode > 3)

				      zidan_mode=3;
					}
					else if(Baowu[i].anim_index==1)
					{
					  addspeed_mode++;

					  if(addspeed_mode > 3)

                      addspeed_mode=3;
					}
					else if(Baowu[i].anim_index==2)
					{
					    daodan_mode++;

					    if(daodan_mode > 3)

				    	daodan_mode=3;
					}
				}
				else if(Baowu[i].curr_animation==1)
				{
					if(Baowu[i].anim_index==0)
					{
				       addspeed_mode++;

					   if(addspeed_mode > 3)

                       addspeed_mode=3;
					}
					else if(Baowu[i].anim_index==1)
					{
					    daodan_mode++;

					    if(daodan_mode > 3)

				    	daodan_mode=3;
					}
					else if(Baowu[i].anim_index==2)
					{
						zidan_mode++;
 
				        if(zidan_mode > 3)

				        zidan_mode=3;
					}
				}
				else if(Baowu[i].curr_animation==2)
				{
					if(Baowu[i].anim_index==0)
					{
					  daodan_mode++;

					  if(daodan_mode > 3)

					  daodan_mode=3;
					}
					else if(Baowu[i].anim_index==1)
					{
                        zidan_mode++;
 
				        if(zidan_mode > 3)

				        zidan_mode=3;
					}
					else if(Baowu[i].anim_index==2)
					{
                       addspeed_mode++;

					   if(addspeed_mode > 3)

                       addspeed_mode=3;
					}
				}

			 }
		}
	}
	//这里还要和其他的 BOSS 类似的。。。

	//和敌人子弹进行碰撞测试
	for(i=0; i<MAX_NUM_ENEMYZIDAN; i++)
	{
		if(Enemyzidan_state[i]==ALIVE)
		{
			if(Collision_Test(Player.x+20,Player.y,20,52,Enemyzidan[i].x,Enemyzidan[i].y,10,10) || Collision_Test(Player.x+14,Player.y+26,36,14,Enemyzidan[i].x,Enemyzidan[i].y,10,10))
			{
				Player.varsI[0]-=Enemyzidan_dam;

				Enemyzidan[i].varsI[1]=1;      //注意 Enemyzidan[i].varsI[1] 是子弹消失的标记。!!!!!!!!!!!!!

				Set_Animation_BOB(&Player,2);  //中蛋;;;
				
				if(Player.varsI[0] <= 0)
				{
					Set_Animation_BOB(&Player,3);

					Player_state=DYING;
				}
			}
		}
	}/////////////////////////////////////////////////////////
////////////////////////////////////////和黄色飞机进行碰状测试
	for(i=0;i<MAX_NUM_YELLOW;i++)
	{
		
	     	if(Yellow_state[i]==ALIVE)
			{
		    	if(Collision_Test(Player.x+20,Player.y,20,52,Yellow[i].x+10,Yellow[i].y+10,50,47) || Collision_Test(Player.x+12,Player.y+26,32,14,Yellow[i].x+10,Yellow[i].y+10,50,47))
				{
			    	Player.varsI[0]-=Collision_with_yellow_dam;

			    	Yellow[i].varsI[0]=0;

			    	Set_Animation_BOB(&Player,2);

			    	Set_Anim_Speed_BOB(&Player,1);

			    	if(Player.varsI[0]<=0)
					{
				      	Set_Animation_BOB(&Player,3);      //血为0  爆炸。。。。
					
				    	Player_state=DYING;
					}

						if(Yellow[i].varsI[0]<=0)
						{
					      Set_Animation_BOB(&Yellow[i],16);
						}


				}
			}
	}
	///和老王进行碰状测试
	if(Boss_state==ALIVE)
	{
		if(Collision_Test(Boss.x+40,Boss.y+40,70,110,Player.x,Player.y,70,64))
		{
		   Player.varsI[0]-=Collision_with_boss_dam;
		   if(Player.varsI[0]<=0)
		   {
			   Player.varsI[0]=0;
			   Set_Animation_BOB(&Player,3);

			   Player_state=DYING;
		   }
		}

	}
	return 1;
}
/////////////////////////////////////////////////////////////////////////////////////

int Check_Player()       //这里检测中蛋没?
{
	
    if(Player.curr_animation==2)              //是否是中蛋模式
	{
		if(++Player.varsI[2]>6)   //这里用一个记数器Player.varsI的第2项来来记录中蛋后闪烁的时间
		{
			Set_Animation_BOB(&Player,4);        //设置为初始动画

			Player.varsI[2]=0;                    //中蛋记数器重置为0
		}
	}
	return 1;
}
//////////////////////////////////////////////////////////////////////////////////////
int Reset_Player()
{
	Player_state=ALIVE;                //状态

	Show_BOB(&Player);                 //设置为可见的。。

	Player.varsI[0]=Blood_Player;               //血加满。。。

    Player.varsI[1]=0;                 //爆炸持续时间

	Player.varsI[2]=0;                 //玩家中蛋的时间

	zidan_mode=1;                        //子弹模式为1(原始的。)

	daodan_mode=1;                     //导弹模式为1(原始的。)

	addspeed_mode=1;                    //速度模式为1 (原始的。)

	Player.counter_1=0;                //这个变量将记录重生的时间

	Set_Pos_BOB(&Player,360,415);      //位置

	Set_Anim_Speed_BOB(&Player,2);     //动画速度为2帧切换位图。。

	Set_Vel_BOB(&Player,5,5);

	Set_Animation_BOB(&Player,2);      //选择动画模式为中间不动的那个。。

	Animate_BOB(&Player);

	return 1;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
int Delete_Player()
{
	Destroy_BOB(&Player);

	return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int Draw_Player()
{
	Draw_BOB(&Player,lpddsback);            //可见才进行渲染

	Animate_BOB(&Player);                  //寻找下一帧位图索引。。。

	return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////黄色飞机
int Init_Yellow()
{
	static int yellow_anim_mode0[1]={0},yellow_anim_mode1[1]={1},yellow_anim_mode2[1]={2},yellow_anim_mode3[1]={3};
	static int yellow_anim_mode4[1]={4},yellow_anim_mode5[1]={5},yellow_anim_mode6[1]={6},yellow_anim_mode7[1]={7};
	static int yellow_anim_mode8[1]={8},yellow_anim_mode9[1]={9},yellow_anim_mode10[1]={10},yellow_anim_mode11[1]={11};
	static int yellow_anim_mode12[1]={12},yellow_anim_mode13[1]={13},yellow_anim_mode14[1]={14},yellow_anim_mode15[1]={15};
	static int yellow_anim_mode16[3]={16,17,18};               //爆炸模式指令

    int i,k;

	Create_BOB(&Yellow[0],0,0,70,57,19,BOB_ATTR_MULTI_ANIM, DDSCAPS_VIDEOMEMORY,255,8); //第一个小的黄色飞机位图无法显示。。。

	Load_Bitmap_File(&bitmap8bit,"yellowplane.bmp");
    
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,0,0,0,BITMAP_EXTRACT_MODE_CELL); //肯定是加载了第一个小的黄色飞机的。。。
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,1,1,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,2,2,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,3,3,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,4,4,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,5,5,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,6,6,0,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,7,0,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,8,1,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,9,2,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,10,3,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,11,4,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,12,5,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,13,6,1,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,14,0,2,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,15,1,2,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,16,2,2,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,17,3,2,BITMAP_EXTRACT_MODE_CELL);
	Load_Frame_BOB(&Yellow[0],&bitmap8bit,18,4,2,BITMAP_EXTRACT_MODE_CELL);
    
	Unload_Bitmap_File(&bitmap8bit);
	////////////////////////////////////////////////////加载位图
   for(i=0;i<MAX_NUM_YELLOW;i++)
   {
	  Yellow_state[i]=DEAD;                //黄色飞机状态初始化为死的
   }

    Yellow[0].varsI[0]=100;              //血为满的

	Yellow[0].varsI[1]=0;                //爆炸时间
	//加载指令集
	
	Load_Animation_BOB(&Yellow[0],0,1,yellow_anim_mode0);  //这里应该也没有错。。。。。。
	Load_Animation_BOB(&Yellow[0],1,1,yellow_anim_mode1);
	Load_Animation_BOB(&Yellow[0],2,1,yellow_anim_mode2);
	Load_Animation_BOB(&Yellow[0],3,1,yellow_anim_mode3);
	Load_Animation_BOB(&Yellow[0],4,1,yellow_anim_mode4);
	Load_Animation_BOB(&Yellow[0],5,1,yellow_anim_mode5);
	Load_Animation_BOB(&Yellow[0],6,1,yellow_anim_mode6);
	Load_Animation_BOB(&Yellow[0],7,1,yellow_anim_mode7);
	Load_Animation_BOB(&Yellow[0],8,1,yellow_anim_mode8);
	Load_Animation_BOB(&Yellow[0],9,1,yellow_anim_mode9);
	Load_Animation_BOB(&Yellow[0],10,1,yellow_anim_mode10);
	Load_Animation_BOB(&Yellow[0],11,1,yellow_anim_mode11);
	Load_Animation_BOB(&Yellow[0],12,1,yellow_anim_mode12);
	Load_Animation_BOB(&Yellow[0],13,1,yellow_anim_mode13);
	Load_Animation_BOB(&Yellow[0],14,1,yellow_anim_mode14);
	Load_Animation_BOB(&Yellow[0],15,1,yellow_anim_mode15);
	Load_Animation_BOB(&Yellow[0],16,3,yellow_anim_mode16);

	//浅拷贝
	for(k=1;k<MAX_NUM_YELLOW;k++)
	{
		Clone_BOB(&Yellow[0],&Yellow[k]);
	}
	return 1;
}//end init_yellow
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///激活一个黄色飞机
int Start_Yellow(int mode)      //x,y,z分别是位置和AI模式

⌨️ 快捷键说明

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