PlantsVsZombies_2

接上,第一版,攻击函数有严重问题。

/**
    僵尸实际移动
*/
void realMoveZombie(int isNew)
{
    for(int k = 0; k < 2; k++)
    {
        for(int i = isNew; i > 0; i--)
        {
            if(grassArray[k][i] == COMMON_ZOMBIE)
            {
                if(grassArray[k][i-1] == NOTHING)
                {
                    grassArray[k][i-1] = COMMON_ZOMBIE;
                    grassArray[k][i] = NOTHING;
                    break;
                }
                
                if(grassArray[k][i-1] == SUN_FLOWER)
                {
                    grassArray[k][i-1] = COMMON_ZOMBIE;
                    grassArray[k][i] = NOTHING;
                    sysBaseInfo.sunflowerNum -= 1;
                    sysBaseInfo.diedSunflowerNum += 1;
                    break;
                }

                if(grassArray[k][i-1] == BEAN_SHOOTER)
                {
                    grassArray[k][i-1] = COMMON_ZOMBIE;
                    grassArray[k][i] = NOTHING;
                    sysBaseInfo.beanshooterNum -= 1;
                    sysBaseInfo.diedBeanshooterNum += 1;
                    break;
                }
            }
        }
    }
}

/**
    僵尸移动
*/
void moveZombie()
{
    if(tempFlag == 1)
    {
        realMoveZombie(8);
    }
    realMoveZombie(9);
}

bool gameOver()
{
    if(sysBaseInfo.endTime == 30)
    {
        if(grassArray[0][0] == COMMON_ZOMBIE || grassArray[1][0] == COMMON_ZOMBIE)
        {
            api_defendsys_ret_ext(OP_E_GAME_OVER, sysBaseInfo);
            return true;
        }
        else
        {
            api_defendsys_ret_ext(OP_E_GAME_SUCCESS, sysBaseInfo);
            return true;
        }
    }

    if(grassArray[0][0] == COMMON_ZOMBIE || grassArray[1][0] == COMMON_ZOMBIE)
    {
        api_defendsys_ret_ext(OP_E_GAME_OVER, sysBaseInfo);
        return true;
    }

    return false;
}
bool plantsVsZombies(int curTime)
{
    int timeDif = curTime - sysBaseInfo.endTime;
    for(int i = 0; i < timeDif; i++)
    {
        sysBaseInfo.endTime++;
        collectSun();
        generateZombie(sysBaseInfo.endTime);
        attackZombie();

        if(sysBaseInfo.endTime == 3)//系统时间为3时才可能有僵尸移动
        {
            moveZombie();
        }
        
        if(gameOver())
        {
            return true;
        }
    }
    return false;
}

/*****************************************************************************
 函 数 名  : plantSunFlower
 功能描述  : 考生自行实现,实现种植向日葵的命令
 输入参数  : x:种植草地的x坐标
             y:种植草地的y坐标
             0, 0 表示A01,; 0, 1表示A02
             curTime:种植命令发生的时间
 输出参数  : 无
 返 回 值  : 无
 调用函数  : 
 被调函数  : 
 
 修改历史      :
  1.日    期   : 2009年9月9日
    作    者   : 
    修改内容   : 新生成函数

*****************************************************************************/
void plantSunFlower(int x, int y, int curTime)
{
    if(curTime < 0 || curTime > 40)
    {
        api_defendsys_ret(OP_E_TIME);
        return;
    }

    if(plantsVsZombies(curTime))
    {
        return;
    }

    if(x < 0 || x > 1 || y < 0 || y > 9)
    {
        api_defendsys_ret(OP_E_INVALID_FILD_NUM);
        return;
    }

    if(sysBaseInfo.sysSun < SUNFLOWER_SUN)
    {
        api_defendsys_ret(OP_E_INSUFFICIENT_SUN);
        return;
    }

    if(y == 9 || grassArray[x][y] != 0 || sysBaseInfo.sysSun < SUNFLOWER_SUN)
    {
        api_defendsys_ret(OP_E_INVALID_FILD);
        return;
    }
    else
    {
        grassArray[x][y] = SUN_FLOWER;
        sysBaseInfo.sysSun -= SUNFLOWER_SUN;//种植一颗向日葵需要花费25个阳光
        sysBaseInfo.sunflowerNum += 1;
    }

    
    api_defendsys_ret(OP_E_OP_SUCCESS);
    return;
}

/*****************************************************************************
 函 数 名  : plantBeanShooter
 功能描述  : 考生自行实现,实现种植豌豆射手的命令
 输入参数  : x:种植草地的x坐标
             y:种植草地的y坐标
             0, 0 表示A01,; 0, 1表示A02
             curTime:种植命令发生的时间
 输出参数  : 无
 返 回 值  : 无
 调用函数  : 
 被调函数  : 
 
 修改历史      :
  1.日    期   : 2009年9月9日
    作    者   : 
    修改内容   : 新生成函数

*****************************************************************************/
void plantBeanShooter(int x, int y, int curTime)
{        
    if(curTime < 0 || curTime > 40)
    {
        api_defendsys_ret(OP_E_TIME);
        return;
    }

    if(plantsVsZombies(curTime))
    {
        return;
    }

    if(x < 0 || x > 1 || y < 0 || y > 9)
    {
        api_defendsys_ret(OP_E_INVALID_FILD_NUM);
        return;
    }

    if(sysBaseInfo.sysSun < BEANSHOOTER_SUN)
    {
        api_defendsys_ret(OP_E_INSUFFICIENT_SUN);
        return;
    }

    if(y == 9 || grassArray[x][y] != 0 || sysBaseInfo.sysSun < BEANSHOOTER_SUN)
    {
        api_defendsys_ret(OP_E_INVALID_FILD);
        return;
    }
    else
    {
        grassArray[x][y] = BEAN_SHOOTER;
        sysBaseInfo.sysSun -= BEANSHOOTER_SUN;//种植一颗豌豆射手需要花费100个阳光
        sysBaseInfo.beanshooterNum += 1;
    }
    
    api_defendsys_ret(OP_E_OP_SUCCESS);
    return;
}

posted on 2017-03-08 00:25  cleverlzc  阅读(147)  评论(0编辑  收藏  举报