📄 game.c
字号:
//srand(gAppConfig.gDt_Tm.sec*gAppConfig.gDt_Tm.minute);
memset(&gFly_KeyMap, FALSE, sizeof(gFly_KeyMap));
memset(&gFly_ShowScore, 0x30, sizeof(gFly_ShowScore));
gFly_ShowScore[8] = 0x0;
memcpy(&gFly_Player, &Fly_PlayerInit[gFly_SelectPlayer], sizeof(gFly_Player));
if (FLY_MAXBOMB == gFly_GameSecretNum)
gFly_Player.bombNum = FLY_BOMB_MAX;
if (FLY_MAXLIFE == gFly_GameSecretNum)
gFly_Player.life = FLY_LIFE_MAX;
memset(&gFly_BombType, gFly_Player.type, sizeof(gFly_BombType));
return true;
}
/***********************************************************************
* 说明: 每一关的游戏初始化
* 输入参数: 无
* 返回值 : true-成功 false-失败
* 修改历史:
* 版本 日期 作者 改动内容和原因
*------------------------------------------------------
* 1.0 9/10/2007 lcy 基本的功能完成
***********************************************************************/
//FLY_ATTR_TXT
GT_BOOL Fly_Init()
{
gFly_GamPause = 0;
ok_OR_PAUSE = 0;
gFly_MissionComplete = false;
gFly_TempDelay = 0;
gFly_BombDeday = 0;
gFly_EneMake = false;
gFly_GameOver = false;
gFly_BombFlag = false;
gFly_BossAppear = false;
gFly_DirectionInit = true;
gFly_BossIdx = -1;
gFly_PlyerInit = 1;
gFly_ScrCount = 1;
gFly_BackScr = 0;
gFly_EneCnt = 0;
gFly_BulletCnt = 0;
gFly_BlaPtCnt = 0;
gFly_GoodsCnt = 0;
gFly_AppearEneCnt = 0;
gFly_MisBulletCnt = 0;
gFly_CurBossBulletNum = 0;
gFly_CurBossShootNum = 0;
gFly_BossShootDelay = 0;
gFly_FireDelayControl = 0;
gFly_AppearType = 1;
gFly_PlyerDestroy = FALSE;
gFly_BossBulletDirection1 = Fly_GetRand(3);
gFly_BossBulletDirection2 = Fly_GetRand(3);
gFly_BossBulletDirection3 = Fly_GetRand(3);
if (gFly_Mission == 1)
{
gFly_EnemyMissionNum = gFly_SelectPlayer + 1;
}
else if (gFly_Mission == 2)
{
if (gFly_SelectPlayer == 0)
gFly_EnemyMissionNum = 2;
else if (gFly_SelectPlayer == 1)
gFly_EnemyMissionNum = 3;
else
gFly_EnemyMissionNum = 1;
}
else if (gFly_Mission == 3)
{
gFly_EnemyMissionNum = 4;
}
else if (gFly_Mission == 4)
{
if (gFly_SelectPlayer == 0)
gFly_EnemyMissionNum = 3;
else if (gFly_SelectPlayer == 1)
gFly_EnemyMissionNum = 1;
else
gFly_EnemyMissionNum = 2;
}
else
{
gFly_EnemyMissionNum = gFly_Mission;
}
if (gFly_EnemyMissionNum == 1)
gFly_BackScrLen = FLY_BackScr_HIGH1;
else if (gFly_EnemyMissionNum == 2)
gFly_BackScrLen = FLY_BackScr_HIGH2;
else if (gFly_EnemyMissionNum == 3)
gFly_BackScrLen = FLY_BackScr_HIGH3;
else if (gFly_EnemyMissionNum == 4)
gFly_BackScrLen = FLY_BackScr_HIGH4;
else
gFly_BackScrLen = FLY_BackScr_HIGH5;
gFly_BossMoveDownY = 40;
gFly_BossMoveUpY = 20;
memset(&gFly_Enemy, 0, sizeof(gFly_Enemy));
memset(&gFly_Bullet, 0, sizeof(gFly_Bullet));
memset(&gFly_MisBullet, 0, sizeof(gFly_MisBullet));
memset(&gFly_BlastPt, 0, sizeof(gFly_BlastPt));
memset(&gFly_Goods, 0, sizeof(gFly_Goods));
memset(&gFly_Shoot_SL, false, sizeof(gFly_Shoot_SL));
memset(&gFly_ShootNum_SL, 0, sizeof(gFly_ShootNum_SL));
memset(&gFly_KeyMap, FALSE, sizeof(gFly_KeyMap));
gFly_Player.x = 60;
gFly_Player.y = 319;
return TRUE;
}
/***********************************************************************
* 说明: 驱动游戏
* 输入参数: 无
* 返回值 : 无
* 修改历史:
* 版本 日期 作者 改动内容和原因
*------------------------------------------------------
* 1.0 9/10/2007 lcy 基本的功能完成
***********************************************************************/
//FLY_ATTR_TXT
void Fly_DriveObjs()
{
if (FLY_AUTOFIRE == gFly_GameSecretNum && !gFly_GameOver)
gFly_KeyMap[FLY_KEYMAP_FIRE] = TRUE;
Fly_MakeEnemy(); //产生敌人
Fly_MakeBoss(); //产生BOSS
Fly_DealEneState(); //驱动敌人的小飞机
Fly_DealBossState(); //处理敌人BOSS的状态
Fly_DealPlaState(); //设置玩家飞机的状态
Fly_DealBullet(); //处理子弹的飞行,并检测是否击中对方
Fly_DealGoods(); //驱动物品的移动
Fly_DealBomb(); //处理保险
LCD_Update();
RockOSSendMsg(MBDISP, MS_ISRDI_TickInd, (void *)2);
}
/***********************************************************************
* 说明: 显示游戏的屏幕
* 输入参数: 无
* 返回值 : 无
* 修改历史:
* 版本 日期 作者 改动内容和原因
*------------------------------------------------------
* 1.0 9/10/2007 lcy 基本的功能完成
***********************************************************************/
//FLY_ATTR_TXT
void Fly_DriveGamScr()
{
Fly_ShowBackScr(); //显示游戏背景
// Fly_ShowBackObject(); //显示可移动背景
Fly_ShowBoss(); //显示BOSS
Fly_ShowEnemy(); //显示敌人的飞机
Fly_ShowBomb(); //显示保险效果
Fly_ShowPlayer(); //显示玩家的飞机
Fly_ShowGoods(); //显示物品
Fly_ShowBullet(); //显示子弹的飞行
Fly_ShowBlast(); //驱动爆炸
Fly_ShowActLife(); //显示玩家的生命个数 *
Fly_ShowActBomb(); //显示玩家的炸弹 *
Fly_ShowScore(); //显示玩家的分数
#ifdef FLY_DEBUG
Fly_ShowStringNum();
#endif
Fly_ShowMission(); //显示游戏开始,结束,及其它信息 *
}
/***********************************************************************
* 说明: 产生敌人
* 输入参数: 无
* 返回值 : 无
* 修改历史:
* 版本 日期 作者 改动内容和原因
*------------------------------------------------------
* 1.0 9/10/2007 lcy 基本的功能完成
***********************************************************************/
//FLY_ATTR_TXT
void Fly_MakeEnemy()
{
// GT_U8 missionBulletNum;
GT_S8 missionBulletNum;
GT_S16 idx;
GT_U16 ranVal;
gFly_ScrCount++;
if (!gFly_EneMake) //不允许出现敌人
return;
if (gFly_ScrCount % 10 == 0)
{
ranVal = Fly_GetRand(gFly_EneCnt + 1);
if (ranVal) return; //出现敌人概率
idx = Fly_MallocEne();//申请敌人资源
if (idx < 0) return;
Fly_MakeEnemyInit((GT_U8)idx);
gFly_AppearEneCnt++;
if (gFly_AppearEneCnt > gFly_AppearType)
{
if ((gFly_AppearType < MISSION_MAX_NUM && gFly_Mission != 3) || (gFly_AppearType < 10 && gFly_Mission == 3))
gFly_AppearType++;
else
{
gFly_BossAppear = true;
gFly_EneMake = false;
//MixerSetChannel(3, FlySoundBossCome, 3, 1 );
}
gFly_AppearEneCnt = 0;
}
if (1 == gFly_GameCurLevel) //高难度
{
gFly_Enemy[idx].life += (gFly_Enemy[idx].life >> 2);
gFly_Enemy[idx].fireDelay -= 5;
gFly_Enemy[idx].bulletMaxNum ++;
gFly_Enemy[idx].score += (gFly_Enemy[idx].score >> 1);
}
if (1 == gFly_Mission)
missionBulletNum = -1;
else if (3 == gFly_Mission || 5 == gFly_Mission)
missionBulletNum = 1;
else
missionBulletNum = 0;
if (gFly_Enemy[idx].bulletMaxNum + missionBulletNum <= 6 && gFly_Enemy[idx].bulletMaxNum + missionBulletNum >= 1)
gFly_Enemy[idx].bulletMaxNum += missionBulletNum;
gFly_Enemy[idx].kings = Fly_GetRand(Fly_EnemyInit[gFly_Enemy[idx].type - 1].kings);
}
}
/***********************************************************************
* 说明: 敌人信息初始化
* 输入参数: i 申请的敌人资源号 , fly_rand 出现横向飞机时为 false
* 返回值 : 无
* 修改历史:
* 版本 日期 作者 改动内容和原因
*------------------------------------------------------
*1.0 9/10/2007 lcy 基本的功能完成
***********************************************************************/
//FLY_ATTR_TXT
void Fly_MakeEnemyInit(GT_U8 i)
{
GT_S16 wide, high;
GT_U8 ranValTemp, type;
GT_U16 ranVal;
if (gFly_Mission <= 4)
{
ranValTemp = Fly_GetRand(gFly_AppearType);
type = gFly_MissionEnemy[gFly_EnemyMissionNum-1][ranValTemp] - 1;
//****************************************
if (type < 6)
{
ranVal = Fly_GetRand(5);
if (ranVal < 3)
type = type * 3;
else if (ranVal == 3)
type = type * 3 + 1;
else
type = type * 3 + 2;
}
//****************************************
}
else //if(gFly_Mission==5)
type = 18 + Fly_GetRand(28);
memcpy(&gFly_Enemy[i], &Fly_EnemyInit[type], sizeof(gFly_Enemy[i]));
wide = Fly_EnemySize[(gFly_Enemy[i].type - 1) * 2];
high = Fly_EnemySize[(gFly_Enemy[i].type - 1) * 2 + 1];
if (gFly_Enemy[i].x == 1) //纵向飞行
{
if (gFly_Enemy[i].y == -1) //不能改变状态标志
{
gFly_Enemy[i].y = FLY_WORKSPACE_Y - high;
gFly_Enemy[i].x = Fly_GetRand((GT_U16)(FLY_WORKSPACE_MAX_X - wide));
goto MAKE_ENEMYGOODS;
}
else
{
gFly_Enemy[i].yspd += Fly_GetRand(2); // 优化
gFly_Enemy[i].xspd += (2 - Fly_GetRand(5));
gFly_Enemy[i].y = FLY_WORKSPACE_Y - high;
gFly_Enemy[i].x = Fly_GetRand((GT_U16)(FLY_WORKSPACE_MAX_X - wide));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -