示例#1
0
Test(Player, look_empty)
{
	player_t *pl = player_create_at((vector2d_t){9, 9});
	game_t *gm = game_create(20, 20, 7, 5);

	cr_assert(pl);
	cr_assert(gm);
	game_add_team(gm, "pandas");
	pl->p_teamname = strdup("pandas");
	cr_assert_neq(game_register_player(gm, pl), -1);
	dynbuf_t *buf = player_look(pl, gm);
	cr_assert(buf);
	cr_log_info(buf->b_data);
	cr_assert(strstr(buf->b_data, "player"));
	cr_assert_eq(count_char(buf->b_data, ','), 3);
	pl->p_lvl = 2;
	dynbuf_delete(buf);
	buf = player_look(pl, gm);
	cr_log_info(buf->b_data);
	cr_assert(strstr(buf->b_data, "player"));
	cr_assert_eq(count_char(buf->b_data, ','), 8);
	dynbuf_delete(buf);
	pl->p_lvl = 3;
	buf = player_look(pl, gm);
	cr_log_info(buf->b_data);
	cr_assert(strstr(buf->b_data, "player"));
	cr_assert_eq(count_char(buf->b_data, ','), 15);
	dynbuf_delete(buf);
	game_delete(gm);
}
示例#2
0
Test(Player, look_up)
{
	player_t *pl = player_create_at((vector2d_t){9, 9});
	game_t *gm = game_create(20, 20, 7, 5);

	cr_assert(pl);
	cr_assert(gm);
	game_add_team(gm, "pandas");
	pl->p_teamname = strdup("pandas");
	cr_assert_neq(game_register_player(gm, pl), -1);
	pl->p_dir = (vector2d_t){0, -1};

	board_put_resource(gm->ga_board, (vector2d_t){9, 9}, SIBUR);
	board_put_resource(gm->ga_board, (vector2d_t){8, 8}, THYSTAME);
	board_put_resource(gm->ga_board, (vector2d_t){9, 8}, LINEMATE);
	board_put_resource(gm->ga_board, (vector2d_t){10, 8}, DERAUMERE);
	board_inc_food(gm->ga_board, (vector2d_t){10, 8});
	board_inc_food(gm->ga_board, (vector2d_t){10, 8});

	dynbuf_t *buf = player_look(pl, gm);
	cr_assert(buf);
	cr_log_info(buf->b_data);
	cr_assert(strstr(buf->b_data, "player"));
	cr_assert_eq(count_char(buf->b_data, ','), 3);
	cr_assert_str_eq(buf->b_data,
		"[sibur player,thystame,linemate,food food deraumere]");
	dynbuf_delete(buf);
	game_delete(gm);
}
示例#3
0
文件: player.c 项目: krig/roam
void flight_move(struct player *p, float dt)
{
	struct inputstate *in = &game.input;
	player_look(dt);

	float speed = pv.flyspeed;
	vec3_t movedir = {0, 0, 0};
	if (in->move_left) movedir.x -= 1.f;
	if (in->move_right) movedir.x += 1.f;
	if (in->move_forward) movedir.z -= 1.f;
	if (in->move_backward) movedir.z += 1.f;
	if (in->move_jump) movedir.y += 1.f;
	if (in->move_crouch) movedir.y -= 1.f;
	//if (in->move_sprint) speed += pv.sprintspeed;

	if (movedir.x != 0 || movedir.y != 0 || movedir.z != 0) {
		// normalize move dir? but strafing feels good!
		mat44_t m;
		m_setidentity(&m);
		m_rotate(&m, game.camera.yaw, 0, 1.f, 0);
		vec3_t movevec = m_vec3scale(m_matmulvec3(&m, &movedir), speed*dt);

		p->vel = m_vec3add(p->vel, movevec);
	}

	player_dumb_collide();

	// drag
	p->vel = m_vec3scale(p->vel, 1.f - pv.flyfriction);

	p->pos.x += p->vel.x * dt;
	p->pos.y += p->vel.y * dt;
	p->pos.z += p->vel.z * dt;
}
示例#4
0
文件: main.c 项目: davel/lartem
int main(int argc, char *argv[])
{
	int k;
	struct coord c;
	unsigned int i;
	unsigned char turn_taken = 1, running = 0;

	seed_rng();

	display_init();

	if(player_init() == -1) return 0;

	level_init(&levels[0], 8);
	player_set_level(&levels[0]);

	while(1) {
		main_clear();
		player_see();
		player_status();

		turn_taken = 0;

		if(!running) k = display_getch();

		msg_clear();

		switch(k) {
		case '8':
		case '9':
		case '6':
		case '3':
		case '2':
		case '1':
		case '4':
		case '7':
		case KEY_UP:
		case KEY_DOWN:
		case KEY_LEFT:
		case KEY_RIGHT:
			c = key_to_direction(k);
			if(!player_move(c.x, c.y)) running = 0;
			turn_taken = 1;
			break;
		case 'c':
			c = key_to_direction(ask_key("In which direction?"));
			msg_clear();
			player_close(c.x, c.y);
			turn_taken = 1;
			break;
		case 'o':
			c = key_to_direction(ask_key("In which direction?"));
			msg_clear();
			player_open(c.x, c.y);
			turn_taken = 1;
			break;
		case 'k':
			c = key_to_direction(ask_key("In which direction?"));
			msg_clear();
			player_kick(c.x, c.y);
			turn_taken = 1;
			break;
		case 'g':
		case 'G':
			k = ask_key("In which direction?");
			c = key_to_direction(k);
			if((c.x || c.y) && player_move(c.x, c.y)) running = 1;
			turn_taken = 1;
			break;
		case ':':
			player_look();
			break;
		case ';':
			msg_printf("Pick an object...");
			c = player_select_square();
			msg_clear();
			player_remote_look(c.x, c.y);
			break;
		case '.':
			turn_taken = 1;
			break;
		}


		if(turn_taken) {
			if(player_poll()) running = 0;

			for(i = 0; i < levels[0].nmonst; i++)
				if(monster_poll(levels[0].monsters[i]))
					running = 0;
		}
	}

	return 0;
}