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

📄 game.c

📁 飞机游戏
💻 C
📖 第 1 页 / 共 5 页
字号:
    //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 + -