接上,第一版,攻击函数有严重问题。
/** 僵尸实际移动 */ 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; }