📄 tank.c
字号:
pTank->m_pPrev=NULL;
pTank->m_pNext=NULL;
if(g_pTHead==NULL)
{
g_pTHead=pTank;
g_pTTail=g_pTHead;
}
else
{
g_pTTail->m_pNext=pTank;
g_pTTail->m_pNext->m_pPrev=g_pTTail;
g_pTTail=g_pTTail->m_pNext;
}
if(pThis==&g_PPlayer1)
{
g_pTank1=pTank;
pTank->m_byDirect=1;
pTank->m_byProtected=1;
pTank->m_byTiming=600;
}
else if(pThis==&g_PPlayer2)
{
g_pTank2=pTank;
pTank->m_byDirect=1;
pTank->m_byProtected=1;
pTank->m_byTiming=600;
}
else
{
pTank->m_byDirect=2;
pTank->m_byProtected=0;
}
DrawTank(pTank);
(pThis->m_nRestTanks)--;
}
void KillTank(CTank *pThis) /* 消灭坦克 */
{
if(pThis==NULL) return;
if(pThis->m_pOwner==&g_PPlayer1)
{
g_pTank1=NULL;
}
else if(pThis->m_pOwner==&g_PPlayer2)
{
g_pTank2=NULL;
}
pThis->m_byTiming=0;
pThis->m_byState=-1;
ClearTank(pThis);
ExplodeTank(pThis);
}
void DeleteTank(CTank *pThis) /* 删除坦克 */
{
if(pThis==NULL) return;
if(pThis->m_pNext!=NULL) pThis->m_pNext->m_pPrev=pThis->m_pPrev;
if(pThis->m_pPrev!=NULL) pThis->m_pPrev->m_pNext=pThis->m_pNext;
if(pThis==g_pTHead) g_pTHead=pThis->m_pNext;
if(pThis==g_pTTail) g_pTTail=pThis->m_pPrev;
(pThis->m_pOwner->m_nTanks)--;
free(pThis);
}
void ChangeTankDirect(CTank *pThis, char byDirect) /* 改变坦克方向 */
{
if(pThis==NULL) return;
ClearTank(pThis);
pThis->m_byDirect=byDirect;
pThis->m_byState=3;
DrawTank(pThis);
}
void GetGift(CTank *pThis) /* 捡东西 */
{
CTank *pTank;
if(pThis==NULL) return;
if(
g_pGift[pThis->m_nX/8 ][pThis->m_nY/8 ]!=NULL||
g_pGift[pThis->m_nX/8+1][pThis->m_nY/8 ]!=NULL||
g_pGift[pThis->m_nX/8 ][pThis->m_nY/8+1]!=NULL||
g_pGift[pThis->m_nX/8+1][pThis->m_nY/8+1]!=NULL
)
{
switch(g_pTheGift->m_byType)
{
case 0: /* 坦克 */
(pThis->m_pOwner->m_nTanks)++;
(pThis->m_pOwner->m_nRestTanks)++;
break;
case 1: /* 手枪 */
if(pThis->m_byLevel<9)
{
(pThis->m_byLevel)++;
if(pThis->m_pOwner!=&g_PEnemy)
{
(pThis->m_pOwner->m_byLevel)++;
}
}
break;
case 2: /* 定时 */
if(pThis->m_pOwner->m_bySide==1) g_byStopTank=1;
else g_byStopTank=2;
g_cntStopTank=1200;
break;
case 3: /* 炸弹 */
pTank=g_pTHead;
while(pTank!=NULL)
{
if(pTank->m_pOwner->m_bySide!=pThis->m_pOwner->m_bySide)
{
KillTank(pTank);
}
pTank=pTank->m_pNext;
}
break;
case 4: /* 船 */
pThis->m_byHasBoat=1;
if(pThis->m_pOwner!=&g_PEnemy)
{
pThis->m_pOwner->m_byHasBoat=1;
}
break;
case 5: /* 无敌 */
pThis->m_byProtected=1;
pThis->m_byTiming=1800;
break;
case 6: /* 老家无敌 */
if(pThis->m_pOwner->m_bySide==1) g_byProtectBase=1;
else g_byProtectBase=2;
g_cntProtectBase=1800;
break;
}
DeleteGift(g_pTheGift);
}
}
CTank *MoveTank(CTank *pThis) /* 移动坦克 */
{
int x, y, x1, y1, x2, y2;
CTank *pNext;
if(pThis==NULL) return NULL;
pNext=pThis->m_pNext;
switch(pThis->m_byState)
{
case -2:
if(pThis->m_nBullets==0)
{
DeleteTank(pThis);
}
break;
case -1:
if((pThis->m_byTiming)++>=8)
{
CleanTankExplode(pThis);
}
break;
case 0:
break;
case 3:
/*ClearTank(pThis);
DrawTank(pThis);*/
pThis->m_byState=1;
case 1:
switch(pThis->m_byDirect)
{
case 1:
x=pThis->m_nX;
y=pThis->m_nY-1;
x1=x;
y1=y;
x2=x+15;
y2=y;
break;
case 2:
x=pThis->m_nX;
y=pThis->m_nY+1;
x1=x;
y1=y+15;
x2=x+15;
y2=y+15;
break;
case 3:
x=pThis->m_nX-1;
y=pThis->m_nY;
x1=x;
y1=y;
x2=x;
y2=y+15;
break;
case 4:
x=pThis->m_nX+1;
y=pThis->m_nY;
x1=x+15;
y1=y;
x2=x+15;
y2=y+15;
break;
}
if(!IsInMap(x1, y1)||!IsInMap(x2, y2))
{
pThis->m_byState=2;
break;
}
x1=x1/8;
y1=y1/8;
x2=x2/8;
y2=y2/8;
if((g_pTank[x1][y1]!=NULL&&g_pTank[x1][y1]!=pThis)||(g_pTank[x2][y2]!=NULL&&g_pTank[x2][y2]!=pThis))
{
/*
if(pThis->m_nX%8!=0||pThis->m_nY%8!=0){
Rect(pThis->m_nX, pThis->m_nY, pThis->m_nX+15, pThis->m_nY+15, YELLOW);
while(!GetKey(KEY_ENTER));}
*/
pThis->m_byState=2;
break;
}
if(
((GetMap(x1, y1)==0||GetMap(x1, y1)==3)&&(GetMap(x2, y2)==0||GetMap(x2, y2)==3))||
((GetMap(x1, y1)==4||GetMap(x2, y2)==4)&&pThis->m_byHasBoat==1)
)
{
ClearTank(pThis);
pThis->m_nX=x;
pThis->m_nY=y;
GetGift(pThis);
DrawTank(pThis);
}
else
{
pThis->m_byState=2;
break;
}
if((x%8==0&&y%8==0))
{
pThis->m_byState=0;
}
break;
case 2:
break;
}
if(pThis->m_byProtected==1)
{
(pThis->m_byTiming)--;
if(pThis->m_byTiming<0)
{
pThis->m_byProtected=0;
ClearTank(pThis);
DrawTank(pThis);
}
}
return pNext;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -