📄 tank.c
字号:
int infshowflag; //状态框更新标志
BOOLEAN bulletflag;
BOOLEAN dirflag;//坦克改变方向标志
int dir; //坦克方向
int PAUSE_OR_OK;//坦克暂停控释 标志
int gTankitemcnt;
int gFlashflag;//暂停动画闪烁标志
int gInpaintflag;
int ENEMYBULLETMAX; //敌子弹数量
int ENEMYMAX; // 敌坦克数量
int BULLET_MAXNUM; //玩家坦克能连续发射的子弹数量
int tankareamark;//地图上的坦克数量
int bulletareamark;//地图上的子弹数量
int goodsappear0;
int goodsappear1;
int goodsappear2;
int flashflag1;//物品的闪烁控制
UINT16 gPausemap;
int tankgoodsprotection;//城堡的加强控制
int goodsmoveL_R;
int goodsmoveU_D;
int enemytanktypeflag;//敌人坦克分类
int scoreperbarry;//每一关的得分
GameMovie Explode;
GameMovie MinExplode;
GameMovie BirthMovie;
GameMovie Burning;
GameTankBullet bullettype[4];
GameTank playertype[3];
GameTank tanktype[6];
Goods goodstype[9];
int playertankinit;//玩家坦克初始化标志
int TANKPAUSE;//暂停标志
int PlayerTankUndead;
int EnemyTankSpeedZeroTimer;//敌坦克原地等待时间
int ParkUndead;
int partdangeflag;
int TimeAlarmflg;
int alarmflag;
/*----------------------------------------------------------------------------*/
/*
Name : RockGetSysTimerCount
Desc : 得到系统Timer的count值
Param :
Return :
Global :
Note :
Author :
Log :
*
* hxy 2007/09/12 用于随机数产生
*
*/
/*----------------------------------------------------------------------------*/
UINT32 RockGetSysTimerCountTank(void)
{
#ifdef __arm
return Timer_GetCount(SCNF_TIMER_OS);
#else
return 0;
#endif
}
/*----------------------------------------------------------------------
Name : GetRamdom
Desc : 获取随机数(0-255)
Params: 只在ARM环境上可用
Return:
Author: System Author
Date : 070830
----------------------------------------------------------------------*/
UINT8 GetRadomTank(void)
{
UINT32 I = RockGetSysTimerCountTank();
UINT8 Radom = (((I >> 24) + (I >> 16) + (I >> 8) + I) & 0xff);
return Radom;
}
/**************************************************************
Desc : 全局变量初始化
Param:无
Return:无
Global:无
Author:xiexiuxie
*****************************************************************/
void GameTankDealInit(void) //游戏开始的初始化
{
INT32U GetPositiveRand(INT16U maxValue);
int i, j;
EnemyTankSpeedZeroTimer = ENEMYSPEEDZEROTIME;
partdangeflag = 0;
infshowflag = 0;
bulletflag = 0;
PAUSE_OR_OK = 0;
TANKPAUSE = 0;
dirflag = 0;
dir = 0;
gTankitemcnt = 0;
gInpaintflag = 0;
tankgoodsprotection = 0;
tankareamark = 0;
bulletareamark = 0;
enemytanktypeflag = 0;
scoreperbarry = 0;
gTankgame.parttimer = 0;
gTankgame.parkflag = 0;
gTankgame.lossclock = 0;
gTankgame.wonclock = 0;
gTankgame.timflag = 0;
gTankgame.goods.active = 0;
gTankgame.gamestatus = COMMON;
gTankgame.events[0].Fire = 0;//
gTankgame.TankLeftAdd = 0;
flashflag1 = 0;
goodsappear0 = 0;
goodsappear1 = 0;
goodsappear2 = 0;
goodsmoveL_R = 0;
goodsmoveU_D = 0;
PlayerTankUndead = 0;
ParkUndead = 0;
TimeAlarmflg = 0;
alarmflag = 0;
gPausemap = 0;
playertankinit = 1;
if (playertankinit || gTankgame.barriesflag == 0)//
{
gTankgame.playerleft[0] = 3; //玩家坦克初始化
gTankgame.player[0].active = 0;
}
for (i = 0;i < 6;i++)
{
TankNumPerEnemyType[i] = 0;//被消灭的坦克种类数量初始化
}
for (i = 0;i < ENEMYMAX;i ++) //敌 坦克初始化
{
gTankgame.enemy[i].active = 0;
}
for (i = 0;i < ENEMYBULLETMAX;i ++) //子弹初始化
{
gTankgame.enemybullet[i].active = 0;
}
for (i = 0;i < MOVIEPLAYMAX;i++)
{
gTankgame.movie[i].active = 0;
}
for (j = 0;j < BULLET_MAXNUM;j++)//玩家坦克子弹 初始化
{
gTankgame.playerbullet[0][0][j].active = 0;
gTankgame.playerbullet[0][1][j].active = 0;
gTankgame.playerbullet[0][2][j].active = 0;
gTankgame.playerbullet[0][3][j].active = 0;
}
for (i = 0;i < TREES_MAXNUM;i++)
{
treespoint[i].x = GetPositiveRand(200) + 10;
treespoint[i].y = GetPositiveRand(192) + 10;
}
switch (gTankgame.tankleverchoce) //坦克类型初始化
{
case 0:
{
for (i = 0;i < 4;i++)
{
gTankgame.enemyleft[i] = TANKLEFT_EASY;
}
}
break;
case 1:
{
for (i = 0;i < 4;i++)
{
gTankgame.enemyleft[i] = TANKLEFT_NOMAL;
}
}
break;
case 2:
{
for (i = 0;i < 4;i++)
{
gTankgame.enemyleft[i] = TANKLEFT_DIFFICULTY;
}
}
break;
default:
break;
}
}
/************************************************************************
Desc : 敌人坦克数量和子弹数量的设定
Param:无
Return:无
Global:ENEMYBULLETMAX、ENEMYMAX
Author:xiexiuxie
*************************************************************************/
void TankNumSet(void)
{
switch (gTankgame.tankleverchoce)
{
case 0://简单等级
{
ENEMYBULLETMAX = TANKSET_EASY_MAXNUM;
ENEMYMAX = TANKSET_EASY_MAXNUM;
}
break;
case 1://中等等级
{
ENEMYBULLETMAX = TANKSET_NOMAL_MAXNUM;
ENEMYMAX = TANKSET_NOMAL_MAXNUM;
}
break;
case 2://困难等级
{
ENEMYBULLETMAX = TANKSET_DIF_MAXNUM;
ENEMYMAX = TANKSET_DIF_MAXNUM;
}
break;
default:
break;
}
}
/************************************************************************
Desc : 不知道LCD_Update()有无效果控制其使用
Param:无
Return:无
Global:gTankgame.map.maptiles_id 地图数组指针
Author:xiexiuxie
*************************************************************************/
void TankGameDeal(void)
{
LCD_Update();
// return;
}
/************************************************************************
Desc : 读取地图
Param:无
Return:无
Global:gTankgame.map.maptiles_id 地图数组指针
Author:xiexiuxie
*************************************************************************/
void GetTankMap(void)
{
MY_FILE *fmap = NULL;
switch (gTankgame.barriesflag)
{
#ifdef __arm
case 0:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map00.bin", "rb");
break;
case 1:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map01.bin", "rb");
break;
case 2:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map02.bin", "rb");
break;
case 3:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map03.bin", "rb");
break;
case 4:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map04.bin", "rb");
break;
case 5:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map05.bin", "rb");
break;
case 6:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map06.bin", "rb");
break;
case 7:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map07.bin", "rb");
break;
case 8:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map08.bin", "rb");
break;
case 9:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map09.bin", "rb");
break;
case 10:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map10.bin", "rb");
break;
case 11:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map11.bin", "rb");
break;
case 12:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map12.bin", "rb");
break;
case 13:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map13.bin", "rb");
break;
case 14:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map14.bin", "rb");
break;
case 15:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map15.bin", "rb");
break;
case 16:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map16.bin", "rb");
break;
case 17:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map17.bin", "rb");
break;
case 18:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map18.bin", "rb");
break;
case 19:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map19.bin", "rb");
break;
case 20:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map20.bin", "rb");
break;
case 21:
fmap = FSFileOpen("C:\\APPDATA\\tank\\map21.bin", "rb");
break;
default:
break;
#else
case 0:
fmap = FSFileOpen("map00.bin", "rb");
break;
case 1:
fmap = FSFileOpen("map01.bin", "rb");
break;
case 2:
fmap = FSFileOpen("map02.bin", "rb");
break;
case 3:
fmap = FSFileOpen("map03.bin", "rb");
break;
case 4:
fmap = FSFileOpen("map04.bin", "rb");
break;
case 5:
fmap = FSFileOpen("map05.bin", "rb");
break;
case 6:
fmap = FSFileOpen("map06.bin", "rb");
break;
case 7:
fmap = FSFileOpen("map07.bin", "rb");
break;
case 8:
fmap = FSFileOpen("map08.bin", "rb");
break;
case 9:
fmap = FSFileOpen("map09.bin", "rb");
break;
case 10:
fmap = FSFileOpen("map10.bin", "rb");
break;
case 11:
fmap = FSFileOpen("map11.bin", "rb");
break;
case 12:
fmap = FSFileOpen("map12.bin", "rb");
break;
case 13:
fmap = FSFileOpen("map13.bin", "rb");
break;
case 14:
fmap = FSFileOpen("map14.bin", "rb");
break;
case 15:
fmap = FSFileOpen("map15.bin", "rb");
break;
case 16:
fmap = FSFileOpen("map16.bin", "rb");
break;
case 17:
fmap = FSFileOpen("map17.bin", "rb");
break;
case 18:
fmap = FSFileOpen("map18.bin", "rb");
break;
case 19:
fmap = FSFileOpen("map19.bin", "rb");
break;
case 20:
fmap = FSFileOpen("map20.bin", "rb");
break;
case 21:
fmap = FSFileOpen("map21.bin", "rb");
break;
default:
break;
#endif
}
if (fmap)
{
FSFileRead(&(gTankgame.map.maptiles_id), 784, fmap);
FSFileClose(fmap);
}
}
/************************************************************************
Desc : 获取随机位置
Param: maxValue 随机参数根据机率大小而定
Return:value%maxValue
Global:无
Author:xiexiuxie
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -