Esempio n. 1
0
/**
 * Clean up the playstate
 */
static void ps_clean() {
    ui_clean();
    map_clean(&m);
    player_clean(&p1);
    player_clean(&p2);
    rg_clean();
    qt_clean();
}
Esempio n. 2
0
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;//返回分数
}
Esempio n. 3
0
/**
 * 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);
}