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

📄 game.c

📁 飞机游戏
💻 C
📖 第 1 页 / 共 5 页
字号:
            if (gFly_Enemy[i].delay > 0)
                gFly_Enemy[i].delay = Fly_GetRand(180);

            // 1/2 概率改变飞行状态
            if ((Fly_GetRand(2)) && (gFly_Enemy[i].lifeTime >= 0))      // 优化
            {
                ranVal = Fly_GetRand(4);
                if (ranVal == 0)  //在屏幕上不停留,无偏移
                {
                    gFly_Enemy[i].lifeTime = 0;
                    gFly_Enemy[i].delay = 0;
                    gFly_Enemy[i].offset = 0;
                }
                else if (ranVal == 1)  //在屏幕上不停留,有偏移
                {
                    gFly_Enemy[i].lifeTime = 0;
                    gFly_Enemy[i].delay = 0;
                    gFly_Enemy[i].offset = Fly_GetRand(25) + 25;
                    if ((gFly_Enemy[i].x < FLY_WORKSPACE_X) || (gFly_Enemy[i].x > FLY_WORKSPACE_MAX_X - wide))
                        gFly_Enemy[i].offset = 0;
                }
                else if (ranVal == 2) //停留
                {
                    if (gFly_Enemy[i].lifeTime > 0)
                        gFly_Enemy[i].lifeTime = Fly_GetRand(80) + 40; //约2~6秒
                    gFly_Enemy[i].delay = Fly_GetRand(180);
                    gFly_Enemy[i].offset = Fly_GetRand(25) + 25;
                    if ((gFly_Enemy[i].x < FLY_WORKSPACE_X) || (gFly_Enemy[i].x > FLY_WORKSPACE_MAX_X - wide))
                        gFly_Enemy[i].offset = 0;
                }
                else  //无限停留
                {
                    if (gFly_Enemy[i].lifeTime > 0)
                        gFly_Enemy[i].lifeTime = -1;
                    gFly_Enemy[i].delay = Fly_GetRand(150);
                    gFly_Enemy[i].offset = Fly_GetRand(25) + 25;
                    if ((gFly_Enemy[i].x < FLY_WORKSPACE_X) || (gFly_Enemy[i].x > FLY_WORKSPACE_MAX_X - wide))
                        gFly_Enemy[i].offset = 0;
                }
            }
        }
    }
    else  //横向飞行 (gFly_Enemy[i].x==0)
    {
        if (gFly_Enemy[i].xspd == 0)
        {
            if (Fly_GetRand(2))
                gFly_Enemy[i].xspd = -2;
            else
                gFly_Enemy[i].xspd = 2;
        }
        if (gFly_Enemy[i].xspd > 0)
            gFly_Enemy[i].x = FLY_WORKSPACE_X - wide;
        else
            gFly_Enemy[i].x = FLY_WORKSPACE_MAX_X;
        gFly_Enemy[i].y = Fly_GetRand(140);
        if (gFly_Enemy[i].yspd == 0)
        {
            ranVal = Fly_GetRand(3);
            if (ranVal == 1) // 优化
                gFly_Enemy[i].yspd = 1;
            else if (ranVal == 2) // 优化
                gFly_Enemy[i].yspd = -1;
        }
        ranVal = Fly_GetRand(2);
        if (gFly_Enemy[i].offset > 100 && ranVal)
            gFly_Enemy[i].offset = 100;
        if (gFly_Enemy[i].offset > 100)
        {
            ranValTemp = (gFly_Enemy[i].offset - 100) * ((int)abs(gFly_Enemy[i].yspd));
            if (gFly_Enemy[i].y < ranValTemp)
                gFly_Enemy[i].y = ranValTemp + Fly_GetRand(50);
        }
        else if (gFly_Enemy[i].yspd < 0) // Y坐标小于一定值时不能向上飞行,需加上一定长度
        {
            ranValTemp = (120 / (abs(gFly_Enemy[i].xspd))) * (abs(gFly_Enemy[i].yspd));
            if (gFly_Enemy[i].y < ranValTemp)
                gFly_Enemy[i].y = ranValTemp + Fly_GetRand(50);
        }
        else if (gFly_Enemy[i].yspd > 0)
            gFly_Enemy[i].y = Fly_GetRand(90);
    }

MAKE_ENEMYGOODS:

    gFly_Enemy[i].score += Fly_GetRand(gFly_Enemy[i].score);// 1~2倍
    Fly_MakeGoods(i);//随机产生物品
}

/***********************************************************************
* 说明:   产生敌人的子弹
* 输入参数:  i 敌人的序号
* 返回值  :  无
* 修改历史:
* 版本    日期     作者   改动内容和原因
*------------------------------------------------------
* 1.0    9/10/2007                   lcy            基本的功能完成
***********************************************************************/
//FLY_ATTR_TXT
void Fly_MakeEneBul(GT_S16 i)
{
    GT_S16 bulletNum, wide;
    FLY_SHOOTPOINT shootpoint;
    GT_U16 ranVal;

    bulletNum = gFly_Enemy[i].bulletMaxNum;
    wide = Fly_EnemySize[(gFly_Enemy[i].type - 1) * 2];
    if (gFly_Enemy[i].y <= FLY_WORKSPACE_Y || gFly_Enemy[i].y >= FLY_WORKSPACE_MAX_Y - 10 ||
            gFly_Enemy[i].x <= 10 - wide || gFly_Enemy[i].x >= FLY_WORKSPACE_MAX_X - 10)
        return;

SHOOT_SL:

    if (gFly_Shoot_SL[i]) //一定概率连续发射
    {
        if (!(gFly_ScrCount % 5))
        {
            shootpoint.x = (Fly_EnemySize[(gFly_Enemy[i].type - 1) * 2] >> 1) - 4;  //优化
            shootpoint.y = Fly_EnemySize[(gFly_Enemy[i].type - 1) * 2 + 1] - 8;
            Fly_MakeBossBul_SL(i, shootpoint, gFly_Enemy[i].bullettype);
            gFly_ShootNum_SL[i] ++;
            if (gFly_ShootNum_SL[i] >= bulletNum)
            {
                gFly_Shoot_SL[i] = false;
                gFly_ShootNum_SL[i] = 0;
            }
        }
        return;
    }

    if (!gFly_Enemy[i].fireDelay) return;//容错处理
    if (gFly_ScrCount % gFly_Enemy[i].fireDelay) return;

    ranVal = Fly_GetRand(3);
    if (bulletNum >= 3 && (ranVal == 0))
    {
        gFly_Shoot_SL[i] = true;
        goto SHOOT_SL;
    }
    else
    {
        if (Fly_GetRand(8 - gFly_Mission - gFly_GameCurLevel) > 0) // 发射部分子弹
            bulletNum = 1 + Fly_GetRand(bulletNum);

        ranVal = Fly_GetRand(4 - gFly_GameCurLevel);
        if (0 == ranVal)    //向玩家发射
            Fly_MakeEneBul_To_Player(i, bulletNum, 0, 0, 0);
        else       //向前方发射
            Fly_MakeEneBul_To_Front(i, bulletNum, 0, 0, 0);
    }
}

/***********************************************************************
* 说明:   产生BOSS子弹
* 输入参数:  i 敌人的序号
* 返回值  :  无
* 修改历史:
* 版本    日期     作者   改动内容和原因
*------------------------------------------------------
* 1.0    9/10/2007                   lcy            基本的功能完成
***********************************************************************/
//FLY_ATTR_TXT
void Fly_MakeBossBul(GT_S16 i)
{
    FLY_SHOOTPOINT shootpoint[3];

    if (Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].type < 20) //普通子弹发射点
    {
        /*   shootpoint[0].x = gFly_allBossShootpoint[gFly_Enemy[i].type-FLY_BOSS_TYPE-1][0].x;
          shootpoint[0].y = gFly_allBossShootpoint[gFly_Enemy[i].type-FLY_BOSS_TYPE-1][0].y;
          shootpoint[1].x = gFly_allBossShootpoint[gFly_Enemy[i].type-FLY_BOSS_TYPE-1][1].x;
          shootpoint[1].y = gFly_allBossShootpoint[gFly_Enemy[i].type-FLY_BOSS_TYPE-1][1].y;
          shootpoint[2].x = gFly_allBossShootpoint[gFly_Enemy[i].type-FLY_BOSS_TYPE-1][2].x;
          shootpoint[2].y = gFly_allBossShootpoint[gFly_Enemy[i].type-FLY_BOSS_TYPE-1][2].y;*/
        memcpy(shootpoint, gFly_allBossShootpoint[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1], sizeof(shootpoint));
    }
    else  //激光发射点
    {
        /*   shootpoint[0].x = gFly_allBossShootpoint[gFly_Enemy[i].type-FLY_BOSS_TYPE-1][3].x;
          shootpoint[0].y = gFly_allBossShootpoint[gFly_Enemy[i].type-FLY_BOSS_TYPE-1][3].y;
          shootpoint[1].x = gFly_allBossShootpoint[gFly_Enemy[i].type-FLY_BOSS_TYPE-1][4].x;
          shootpoint[1].y = gFly_allBossShootpoint[gFly_Enemy[i].type-FLY_BOSS_TYPE-1][4].y;
          shootpoint[2].x = gFly_allBossShootpoint[gFly_Enemy[i].type-FLY_BOSS_TYPE-1][5].x;
          shootpoint[2].y = gFly_allBossShootpoint[gFly_Enemy[i].type-FLY_BOSS_TYPE-1][5].y;*/
        memcpy(shootpoint, &gFly_allBossShootpoint[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][3], sizeof(shootpoint));
    }

    if (gFly_CurBossBulletNum >= FLY_BOSSBULLET_MAXNUM) //循环
        gFly_CurBossBulletNum = 0;

    switch (Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].type)
    {
        case 1: //单点发散齐发
        case 2: //两点发散齐发
        case 3: //三点发散齐发
            gFly_BossShootDelay++;
            if (gFly_BossShootDelay >= Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].nextDelay)
            {
                if (Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].type == 1)
                    Fly_MakeBossBul_S(i, shootpoint[2]);
                else if (Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].type == 2)
                {
                    Fly_MakeBossBul_S(i, shootpoint[0]);
                    Fly_MakeBossBul_S(i, shootpoint[1]);
                }
                else
                {
                    Fly_MakeBossBul_S(i, shootpoint[0]);
                    Fly_MakeBossBul_S(i, shootpoint[1]);
                    Fly_MakeBossBul_S(i, shootpoint[2]);
                }
                gFly_BossShootDelay = 0;
                gFly_CurBossShootNum = 0;
                gFly_CurBossBulletNum++;
            }
            break;

        case 11: //单点发散连续发射
        case 12: //两点发散连续发射
        case 13: //三点发散连续发射
            gFly_BossShootDelay++;
            if (gFly_BossShootDelay >= Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].nextDelay)
            {
                if (gFly_CurBossShootNum < Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].maxNum)
                {
                    if (!(gFly_BossShootDelay % 5))
                    {
                        if (Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].type == 11)
                            Fly_MakeBossBul_SL(i, shootpoint[2], 0);
                        else if (Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].type == 12)
                        {
                            Fly_MakeBossBul_SL(i, shootpoint[0], 0);
                            Fly_MakeBossBul_SL(i, shootpoint[1], 0);
                        }
                        else
                        {
                            Fly_MakeBossBul_SL(i, shootpoint[0], 0);
                            Fly_MakeBossBul_SL(i, shootpoint[1], 0);
                            Fly_MakeBossBul_SL(i, shootpoint[2], 0);
                        }
                        gFly_CurBossShootNum++;
                    }
                }
                else
                {
                    gFly_BossShootDelay = 0;
                    gFly_CurBossShootNum = 0;
                    gFly_CurBossBulletNum++;
                }
            }
            break;

        case 14: //单点固定方向连续发射
        case 15: //两点固定方向连续发射
        case 16: //三点固定方向连续发射
            gFly_BossShootDelay++;
            if (gFly_BossShootDelay >= Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].nextDelay)
            {
                if (gFly_CurBossShootNum < Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].maxNum)
                {
                    if (!(gFly_BossShootDelay % 5))
                    {
                        if (Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].type == 14)
                            Fly_MakeBossBul_SG(i, gFly_BossBulletDirection1, shootpoint[2]);
                        else if (Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].type == 15)
                        {
                            Fly_MakeBossBul_SG(i, gFly_BossBulletDirection1, shootpoint[0]);
                            Fly_MakeBossBul_SG(i, gFly_BossBulletDirection2, shootpoint[1]);
                        }
                        else
                        {
                            Fly_MakeBossBul_SG(i, gFly_BossBulletDirection1, shootpoint[0]);
                            Fly_MakeBossBul_SG(i, gFly_BossBulletDirection2, shootpoint[1]);
                            Fly_MakeBossBul_SG(i, gFly_BossBulletDirection3, shootpoint[2]);
                        }
                        gFly_CurBossShootNum++;
                    }
                }
                else
                {
                    gFly_BossBulletDirection1 = Fly_GetRand(3);

                    if (Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].type >= 15)
                    {
                        gFly_BossBulletDirection2 = Fly_GetRand(3);
                    }
                    if (Fly_BossBullet[gFly_Enemy[i].type - FLY_BOSS_TYPE - 1][gFly_CurBossBulletNum].type >= 16)
                    {
                        gFly_BossBulletDirection3 = Fly_GetRand(3);
                    }

                    gFly_BossShootDelay = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -