/** * Clean up the playstate */ static void ps_clean() { ui_clean(); map_clean(&m); player_clean(&p1); player_clean(&p2); rg_clean(); qt_clean(); }
int lab_run_once(MAP map, CGENE gene, STEPS steps) { int x=0, y=0, score=0; robot_steps_init(steps); for(int i=0;i<gConfig.robot_step_count;i++) { bool result;//行为结果 //生成环境编码 int ecode = map_env_code(map, x, y); //根据环境编码从基因中查找策略 char policy = gene[ecode]; //随机移动处理 char action = (policy == ROBOT_ACT_RND) ? (ROBOT_ACT_RND_BASE + rand() % 3) : policy; //根据策略执行动作并打分 switch(action) { case ROBOT_ACT_NORTH://向北移动 case ROBOT_ACT_RND_NORTH://随机 result = map_cell_movable(map, x, y+1); result ? y++ : score += gConfig.lab_action_konck_wall;//扣分 break; case ROBOT_ACT_SOUTH://向南移动 case ROBOT_ACT_RND_SOUTH://随机 result = map_cell_movable(map, x, y-1); result ? y-- : score += gConfig.lab_action_konck_wall;//扣分 break; case ROBOT_ACT_EAST://向东移动 case ROBOT_ACT_RND_EAST://随机 result = map_cell_movable(map, x+1, y); result ? x++ : score += gConfig.lab_action_konck_wall;//扣分 break; case ROBOT_ACT_WEST://向西移动 case ROBOT_ACT_RND_WEST://随机 result = map_cell_movable(map, x-1, y); result ? x-- : score += gConfig.lab_action_konck_wall;//扣分 break; case ROBOT_ACT_STAY://不动 //do_nothing result = true; break; case ROBOT_ACT_CLEAN://捡起垃圾 result = map_clean(map, x, y); if(result) //有垃圾 { score += gConfig.lab_action_trash_ok;//加分 } else //没有垃圾 { score += gConfig.lab_action_trash_fail;//扣分 } break; default://异常 throw action; //result = false; } robot_steps_set(steps, i, action, result); } return score;//返回分数 }
/** * Clean up the menustate */ static void ms_clean(struct stMenustate *ms) { if (ms->pM) map_clean(&ms->pM); if (ms->pO) obj_clean(&ms->pO); }