• 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;
    }
    
  • 相关阅读:
    ArcObject GP 所有分析
    MVC Music Sotre 2
    ArcGIS Surface Analysis>Contour Error
    AE Contour和ContourAsPolyline
    解决了!我滴神哪!MarketPlace为什么手动下载安装部署提示invalid详解
    HTC 8X个人使用中常见问题解答
    关于模拟器Hyperv中的Wp8网络连接问题
    Lumia920价格
    Nokia House”或“NoHo
    {WP7/WP8·获取屏幕大小}
  • 原文地址:https://www.cnblogs.com/liuzc/p/6517558.html
Copyright © 2020-2023  润新知