📄 game.cpp
字号:
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 + -