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

📄 game.cpp

📁 超级坦克大战游戏
💻 CPP
📖 第 1 页 / 共 4 页
字号:
				for(j=0;j<32;j++)
					if(*(CurrMap+i+(j<<5))) pScreen->PutSpt(i*15,j*15,*(CurrMap+i+(j<<5)));
			if(player1->GetLife()>0) player1->Action();
			if(twoplayer&&player2->GetLife()>0)
				player2->Action();
//			Enemy[0].Auto();
			if(Enemy[next-1].GetStatus()==ST_BORN&&enemyBorn==false) enemyBorn=true;
			if(Appear<=5&&next<MAXENEMY&&enemyBorn)
				if(Enemy[next].GetStatus()==ST_SLEEP)
				{
					Appear++;
					Enemy[next].SetStatus(ST_WAKE);
					enemyBorn=false;
					Enemy[next].Settime(0);
					next++;
				}
			for(i=0;i<next;i++)
			{
				s=Enemy[i].GetStatus();
				if(s!=ST_SLEEP&&s!=ST_DEAD)
					Enemy[i].Auto();
			}
			if(player1->GetBomb()->BeActive())
				player1->GetBomb()->Go();
			if(twoplayer&&player2->GetBomb()->BeActive())
				player2->GetBomb()->Go();
			for(i=0;i<next;i++)
				if(Enemy[i].GetBomb()->BeActive())
					Enemy[i].GetBomb()->Go();
			PutPannel2();
			if(Complete)
			{
				timer2++;
				if(timer2>WAITTIME)
				{
					if(Current>pMap->GetNum())
					{
						Win();
						return;
					}
					Occasion=14;
				}
				pScreen->PutSpt(184,223,84);
			}
			if(twoplayer&&player2->GetLife()!=0)
				pScreen->PutSpt(MouseX,MouseY,46);
			pScreen->Flip();
			SetModify(false);
//		}
		}
		break;
	case 5:
/*		for(i=0;i<256;i++)
			temp[i].peBlue=temp[i].peFlags=temp[i].peGreen=temp[i].peRed=0;
		for(i=0;i<64;i++)
		{
			for(j=0;j<256;j++)
			{
				if(temp[j].peBlue>pScreen->DefaultPE[j].peBlue-4) temp[j].peBlue=pScreen->DefaultPE[j].peBlue;
				else temp[j].peBlue+=4;
				if(temp[j].peGreen>pScreen->DefaultPE[j].peGreen-4) temp[j].peGreen=pScreen->DefaultPE[j].peGreen;
				else temp[j].peGreen+=4;
				if(temp[j].peRed>pScreen->DefaultPE[j].peRed-4) temp[j].peRed=pScreen->DefaultPE[j].peRed;
				else temp[j].peRed+=4;
			}
			pScreen->lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN,NULL);
			pScreen->lpDDPalette->SetEntries(0,0,256,temp);
		}
		timer=0;
		LClick=0;
*/
		pScreen->ClearDDSurface(NULL,0);
		for(i=0;i<32;i++)
			for(j=0;j<32;j++)
				if(*(CurrMap+i+(j<<5))) pScreen->PutSpt(i*15,j*15,*(CurrMap+i+(j<<5)));
		PutPannel2();
		pScreen->Flip();
		pScreen->ClearDDSurface(NULL,0);
		SetModify(true);

		Occasion=1;
		timer=0;
		break;
	case 8:
/*		pScreen->lpDDPalette->GetEntries(0,0,256,temp);
		for(i=0;i<64;i++)
		{
			for(j=0;j<256;j++)
			{
				if(temp[j].peBlue<4) temp[j].peBlue=0;
				else temp[j].peBlue-=4;
				if(temp[j].peGreen<4) temp[j].peGreen=0;
				else temp[j].peGreen-=4;
				if(temp[j].peRed<4) temp[j].peRed=0;
				else temp[j].peRed-=4;
			}
			pScreen->lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN,NULL);
			pScreen->lpDDPalette->SetEntries(0,0,256,temp);
		}

		for(i=0;i<256;i++)
		{
			temp[i].peBlue=0;
			temp[i].peFlags=0;
			temp[i].peGreen=0;
			temp[i].peRed=0;
		}
		pScreen->lpDDPalette->SetEntries(0,0,256,temp);
		pScreen->ClearDDSurface(NULL,0);
		for(i=0;i<32;i++)
			for(j=0;j<32;j++)
				if(*(CurrMap+i+(j<<5))) pScreen->PutSpt(i*15,j*15,*(CurrMap+i+(j<<5)));
		PutPannel2();
		pScreen->Flip();
		Occasion=5;
*/
		int x,y;
		for(i=1;i<=20;i++)
		{
			x=300+i*10;
			y=220+i*9;
			pScreen->ClearDDSurface(NULL,0);
			pScreen->PutSpt(x,y,47);
			x+=22;
			pScreen->PutSpt(x,y+5,Current/10+49);
			x+=15;
			pScreen->PutSpt(x,y+5,Current%10+49);
			x+=15;
			pScreen->PutSpt(x,y,48);
			pScreen->Flip();
			Sleep(50);
		}
		Occasion=5;
		break;
	case 12:
		pMap->GetSpt(Current,CurrMap);
		for(i=0;i<1024;i++)
			CurrImage[i]=0;
		Complete=false;
		for(i=0;i<MAXENEMY;i++)
		{
			Enemy[i].SetStatus(ST_SLEEP);
			Enemy[i].Settime(0);
			Enemy[i].SetAutotime(0);
			Enemy[i].SetBase(17);
			Enemy[i].SetDirection(2);
			Enemy[i].SetPosition((i%3)*15,0);
			Enemy[i].SetLife(1);
			Enemy[i].SetToBeEnemy(true);
			Enemy[i].ReSet();
		}
		numEnemy=MAXENEMY;
		Enemy[0].SetStatus(ST_BORN);
		next=Appear=1;
		enemyBorn=true;
		Sleep(500);
		player1->SetBase(1);
		player1->SetDirection(0);
		player1->SetPosition(12,30);
		player1->SetStatus(ST_BORN);
		player1->Settime(0);
		player1->SetToBeEnemy(false);
		player1->ReSet();
		if(twoplayer)
		{
			player2->SetBase(9);
			player2->SetDirection(0);
			player2->SetPosition(18,30);
			player2->SetStatus(ST_BORN);
			player2->Settime(0);
			player2->SetToBeEnemy(false);
			player2->ReSet();
		}
		Occasion=8;
		break;
	case 13:
		for(i=0;i<256;i++)
			temp[i].peBlue=temp[i].peFlags=temp[i].peGreen=temp[i].peRed=0;
		for(i=0;i<64;i++)
		{
			for(j=0;j<256;j++)
			{
				if(temp[j].peBlue>pScreen->DefaultPE[j].peBlue-4) temp[j].peBlue=pScreen->DefaultPE[j].peBlue;
				else temp[j].peBlue+=4;
				if(temp[j].peGreen>pScreen->DefaultPE[j].peGreen-4) temp[j].peGreen=pScreen->DefaultPE[j].peGreen;
				else temp[j].peGreen+=4;
				if(temp[j].peRed>pScreen->DefaultPE[j].peRed-4) temp[j].peRed=pScreen->DefaultPE[j].peRed;
				else temp[j].peRed+=4;
			}
			pScreen->lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN,NULL);
			pScreen->lpDDPalette->SetEntries(0,0,256,temp);
		}
		timer=0;
		Occasion=12;
		LClick=0;
		SetModify(true);
		break;
	case 14:
		pScreen->lpDDPalette->GetEntries(0,0,256,temp);
		for(i=0;i<64;i++)
		{
			for(j=0;j<256;j++)
			{
				if(temp[j].peBlue<4) temp[j].peBlue=0;
				else temp[j].peBlue-=4;
				if(temp[j].peGreen<4) temp[j].peGreen=0;
				else temp[j].peGreen-=4;
				if(temp[j].peRed<4) temp[j].peRed=0;
				else temp[j].peRed-=4;
			}
			pScreen->lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN,NULL);
			pScreen->lpDDPalette->SetEntries(0,0,256,temp);
		}

		for(i=0;i<256;i++)
		{
			temp[i].peBlue=0;
			temp[i].peFlags=0;
			temp[i].peGreen=0;
			temp[i].peRed=0;
		}
		pScreen->lpDDPalette->SetEntries(0,0,256,temp);
		pScreen->ClearDDSurface(NULL,0);
		pScreen->PutSpt(300,220,47);
		pScreen->PutSpt(322,225,Current/10+49);
		pScreen->PutSpt(337,225,Current%10+49);
		pScreen->PutSpt(352,220,48);
		pScreen->Flip();
		pScreen->ClearDDSurface(NULL,0);
		Occasion=13;
		timer=0;
		break;
	case 15:
//		pScreen->ClearDDSurface(NULL,0);
//		pScreen->PutSpt(213,220,81);
//		pScreen->Flip();
		pScreen->lpDDPalette->GetEntries(0,0,256,temp);
		for(i=0;i<64;i++)
		{
			for(j=0;j<256;j++)
			{
				if(temp[j].peBlue<4) temp[j].peBlue=0;
				else temp[j].peBlue-=4;
				if(temp[j].peGreen<4) temp[j].peGreen=0;
				else temp[j].peGreen-=4;
				if(temp[j].peRed<4) temp[j].peRed=0;
				else temp[j].peRed-=4;
			}
			pScreen->lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN,NULL);
			pScreen->lpDDPalette->SetEntries(0,0,256,temp);
		}

		for(i=0;i<256;i++)
		{
			temp[i].peBlue=0;
			temp[i].peFlags=0;
			temp[i].peGreen=0;
			temp[i].peRed=0;
		}
		pScreen->lpDDPalette->SetEntries(0,0,256,temp);
		pScreen->ClearDDSurface(NULL,0);
		pScreen->PutSpt(293,220,81);
//		pScreen->PutSpt(225,450,82);
		pScreen->Flip();
		for(i=0;i<256;i++)
			temp[i].peBlue=temp[i].peFlags=temp[i].peGreen=temp[i].peRed=0;
		for(i=0;i<64;i++)
		{
			for(j=0;j<256;j++)
			{
				if(temp[j].peBlue>pScreen->DefaultPE[j].peBlue-4) temp[j].peBlue=pScreen->DefaultPE[j].peBlue;
				else temp[j].peBlue+=4;
				if(temp[j].peGreen>pScreen->DefaultPE[j].peGreen-4) temp[j].peGreen=pScreen->DefaultPE[j].peGreen;
				else temp[j].peGreen+=4;
				if(temp[j].peRed>pScreen->DefaultPE[j].peRed-4) temp[j].peRed=pScreen->DefaultPE[j].peRed;
				else temp[j].peRed+=4;
			}
			pScreen->lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN,NULL);
			pScreen->lpDDPalette->SetEntries(0,0,256,temp);
		}
		Sleep(1500);
		Occasion=7;
		timer=0;
		break;
	case 16:
		pScreen->lpDDPalette->GetEntries(0,0,256,temp);
		for(i=0;i<64;i++)
		{
			for(j=0;j<256;j++)
			{
				if(temp[j].peBlue<4) temp[j].peBlue=0;
				else temp[j].peBlue-=4;
				if(temp[j].peGreen<4) temp[j].peGreen=0;
				else temp[j].peGreen-=4;
				if(temp[j].peRed<4) temp[j].peRed=0;
				else temp[j].peRed-=4;
			}
			pScreen->lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN,NULL);
			pScreen->lpDDPalette->SetEntries(0,0,256,temp);
		}

		for(i=0;i<256;i++)
		{
			temp[i].peBlue=0;
			temp[i].peFlags=0;
			temp[i].peGreen=0;
			temp[i].peRed=0;
		}
		pScreen->lpDDPalette->SetEntries(0,0,256,temp);
		pScreen->ClearDDSurface(NULL,0);
		
		pScreen->PutSpt(301,211,83);
		pScreen->Flip();
		for(i=0;i<256;i++)
			temp[i].peBlue=temp[i].peFlags=temp[i].peGreen=temp[i].peRed=0;
		for(i=0;i<64;i++)
		{
			for(j=0;j<256;j++)
			{
				if(temp[j].peBlue>pScreen->DefaultPE[j].peBlue-4) temp[j].peBlue=pScreen->DefaultPE[j].peBlue;
				else temp[j].peBlue+=4;
				if(temp[j].peGreen>pScreen->DefaultPE[j].peGreen-4) temp[j].peGreen=pScreen->DefaultPE[j].peGreen;
				else temp[j].peGreen+=4;
				if(temp[j].peRed>pScreen->DefaultPE[j].peRed-4) temp[j].peRed=pScreen->DefaultPE[j].peRed;
				else temp[j].peRed+=4;
			}
			pScreen->lpDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN,NULL);
			pScreen->lpDDPalette->SetEntries(0,0,256,temp);
		}
		Sleep(2000);
		Occasion=7;
		timer=0;
		break;
	}
}

void CGame::Click(int i)
{
	//To do:
	SetModify(true);
	if(Occasion==1)
	{
		if(i==3) Mouse2|=KEY_FIRE;
		if(i==1)
		{
			dx=MouseX/15-player2->GetX();
			dy=MouseY/15-player2->GetY();
			OldX=MouseX/15;OldY=MouseY/15;
			Mouse2=KEY_FORWARD;
		}
		if(i==2) Mouse2&=239;
		return;
	}
	if(Occasion==2)
	{
		if(i==3)
		{
			MouseStyle=0;
			return;
		}
		if(i==2)
		{
			switch(LClick)
			{
			case 1:
				pMap->SetMap(Current,CurrMap);
				Current--;
				if(Current<=0) Current=pMap->GetNum();
				pMap->GetSpt(Current,CurrMap);
/*				temp=pMap->GetSpt(Current-1);
				if(temp!=NULL)
				{
					delete[] CurrMap;
					CurrMap=temp;
				}
*/				break;
			case 2:
				pMap->SetMap(Current,CurrMap);
				Current++;
				if(Current>pMap->GetNum()) Current=1;
				pMap->GetSpt(Current,CurrMap);
//				if(pMap->GetNum()==0) Current=0;
/*				temp=pMap->GetSpt(Current-1);
				if(temp!=NULL)
				{
					delete[] CurrMap;
					CurrMap=temp;
				}
*/			
				break;
			case 3:
				if(!pMap->AddMap(Current))break;
				pMap->SetMap(Current,CurrMap);
				Current++;
				pMap->GetSpt(Current,CurrMap);
				break;
			case 4:
				if(!pMap->DeleteMap(Current))break;
				Current--;
				if(Current<=0) Current=1;
				pMap->GetSpt(Current,CurrMap);
				break;
			case 5:
				pMap->SetMap(Current,CurrMap);
				pMap->SaveMap(MAPFILE);
				break;
			case 6:
				Occasion=7;
				timer=0;
				break;
			}
			LClick=0;
			return;
		}
		if(MouseX<480&&MouseStyle)
		{
		//
			int x,y;
			x=MouseX/15;
			y=MouseY/15;
			if(x<2&&y<2)return;
			if(x>13&&x<17&&y<2)return;
			if(x>28&&y<2)return;
			if(x>12&&x<18&&y>27)return;
			if(x>10&&x<14&&y>28)return;
			if(x>16&&x<20&&y>28)return;
			*(CurrMap+x+(y<<5))=MouseStyle;
			if(MouseStyle==27)
			{
				*(CurrMap+x+(y<<5))=25;
				*(CurrMap+x+(y<<5)+1)=26;
				*(CurrMap+x+((y+1)<<5))=26;
				*(CurrMap+x+((y+1)<<5)+1)=25;
			}
			if(MouseStyle==29)
			{
				*(CurrMap+x+(y<<5))=28;
				*(CurrMap+x+(y<<5)+1)=28;
				*(CurrMap+x+((y+1)<<5))=28;
				*(CurrMap+x+((y+1)<<5)+1)=28;
			}
			if(MouseStyle==31)
			{
				*(CurrMap+x+(y<<5))=30;
				*(CurrMap+x+(y<<5)+1)=30;
				*(CurrMap+x+((y+1)<<5))=30;
				*(CurrMap+x+((y+1)<<5)+1)=30;
			}
			if(MouseStyle==33)
			{
				*(CurrMap+x+(y<<5))=32;
				*(CurrMap+x+(y<<5)+1)=32;
				*(CurrMap+x+((y+1)<<5))=32;
				*(CurrMap+x+((y+1)<<5)+1)=32;
			}
			return;
		}
		if(MouseY>100&&MouseY<115)
		{
			rectSelected.top=98;
			rectSelected.bottom=117;
			if(MouseX>500&&MouseX<515)
			{
				MouseStyle=28;//iron
				rectSelected.left=498;
				rectSelected.right=517;
				return;
			}
			if(MouseX>520&&MouseX<535)
			{
				MouseStyle=30;//ground
				rectSelected.left=518;
				rectSelected.right=537;
				return;
			}
			if(MouseX>540&&MouseX<555)
			{
				MouseStyle=32;//grass
				rectSelected.left=538;
				rectSelected.right=557;
				return;
			}
			if(MouseX>560&&MouseX<575)
			{
				MouseStyle=25;//left brick
				rectSelected.left=558;
				rectSelected.right=577;
				return;
			}
			if(MouseX>580&&MouseX<595)
			{
				MouseStyle=26;//right brick
				rectSelected.left=578;
				rectSelected.right=597;
				return;
			}
		}
		if(MouseY>150&&MouseY<180)
		{
			rectSelected.top=148;
			rectSelected.bottom=182;
			if(MouseX>500&&MouseX<530)
			{
				MouseStyle=27;//bigbrick
				rectSelected.left=498;
				rectSelected.right=532;
				return;
			}
			if(MouseX>535&&MouseX<565)
			{
				MouseStyle=29;//big iron
				rectSelected.left=533;
				rectSelected.right=567;
				return;
			}
			if(MouseX>570&&MouseX<600)
			{
				MouseStyle=31;//big ground
				rectSelected.left=568;
				rectSelected.right=602;
				return;
			}
			if(MouseX>605&&MouseX<635)
			{
				MouseStyle=33;//big grass
				rectSelected.left=603;
				rectSelected.right=637;
				return;
			}
		}
		if(MouseX>485&&MouseX<558&&MouseY>375&&MouseY<408)
		{
			LClick=1;
			return;
		}
		if(MouseX>559&&MouseX<632&&MouseY>375&&MouseY<408)
		{
			LClick=2;
			return;
		}
		if(MouseX>485&&MouseX<558&&MouseY>409&&MouseY<436)
		{
			LClick=3;
			return;
		}
		if(MouseX>559&&MouseX<632&&MouseY>409&&MouseY<436)
		{
			LClick=4;
			return;
		}
		if(MouseX>485&&MouseX<558&&MouseY>444&&MouseY<471)
		{
			LClick=5;
			return;
		}
		if(MouseX>559&&MouseX<632&&MouseY>444&&MouseY<471)
		{
			LClick=6;
			return;
		}
	}
}

void CGame::PutPannel(void)
{
	//To do:
	switch(LClick)
	{
	case 1:
		pScreen->PutSpt(485,374,45);
		break;
	case 2:
		pScreen->PutSpt(559,374,45);
		break;
	case 3:
		pScreen->PutSpt(485,409,45);
		break;
	case 4:
		pScreen->PutSpt(559,409,45);
		break;
	case 5:
		pScreen->PutSpt(485,444,45);
		break;
	case 6:
		pScreen->PutSpt(559,444,45);
		break;
	}

	pScreen->PutSpt(490,320,47);
	pScreen->PutSpt(512,325,Current/10+49);
	pScreen->PutSpt(527,325,Current%10+49);
	pScreen->PutSpt(542,320,48);

	//Show Buttons
	pScreen->PutSpt(485,374,41);
	pScreen->PutSpt(559,374,42);
	pScreen->PutSpt(485,409,43);
	pScreen->PutSpt(559,409,44);
	pScreen->PutSpt(485,444,39);
	pScreen->PutSpt(559,444,40);

	//Show Spirits
	if(MouseStyle) pScreen->ClearDDSurface(&rectSelected,3);

	pScreen->PutSpt(500,100,28);//iron
	pScreen->PutSpt(520,100,30);//ground
	pScreen->PutSpt(540,100,32);//grass
	pScreen->PutSpt(560,100,25);//left brick
	pScreen->PutSpt(580,100,26);//right brick

	pScreen->PutSpt(500,150,27);//Bit brick
	pScreen->PutSpt(535,150,29);//Big iron
	pScreen->PutSpt(570,150,31);//Bit ground
	pScreen->PutSpt(605,150,33);//big grass

⌨️ 快捷键说明

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