Exemplo n.º 1
0
int game_is_lost()
{
	if (can_move_left(&grid) || can_move_right(&grid) || 
			can_move_up(&grid) || can_move_down(&grid)) {
		return 0;
	} else {
		return 1;
	}
}
Exemplo n.º 2
0
void Piece::move_down()
{
    if(can_move_down())
    {
        if(pos_y <= 0)
            offset_y = PIECE_WIDTH;
        
        pos_y += offset_y;
    }
}
Exemplo n.º 3
0
int how_far_down(OBJp objp,int n)
{
   register int i;
   register int temp;

   temp = objp->y;        /* save the current position */

   /* increment the position until you can't move right any further */
   for (i = 0; i < n; i++)
   {
      objp->y++;
      if (!can_move_down(objp))
      {
          objp->y = temp;
          return(i);
      }
   }
   objp->y = temp;        /* restore the current position */
   return(n);             /* return how far right */
}
Exemplo n.º 4
0
	void player_system::handle_state_falling(void)
	{
		//maybe move below <= 0.0 ?
		if (!player->fast_drop && player->timer < 0.20)
		{
			if (can_move_down())
				current_pos->origin.y -= current_dt * (1.0/0.20) * 32.0;
		}

		player->timer -= current_dt;
//		printf("%.2f\n", player->timer);
//		printf("fall time: %f\n", player->fall_time);
//		printf("diff: %i\n",global::g_state.difficulty);
		if (player->timer <= 0.0)
		{
			switch (global::g_state.difficulty) 
			{
				case global::difficulty_easy:
					player->timer = 2.0;
					break;
				case global::difficulty_medium:
					player->timer = 1.5;
					break;
				case global::difficulty_hard:
					player->timer = 1.0;
					break;
				default:
					break;
			}

//			player->timer = player->fall_time * global::g_state.difficulty;
			if (player->fast_drop)
				player->timer = 0.1;
			
			
			if (!can_move_down())
			{
				current_entity->add<hs::comp::mark_of_death>();
				current_pos->origin = pixel_for_colrow(player->center_col, player->center_row);
				
				hs::entity *center = factory::create_pill(em, player->center_col, player->center_row, player->double_pill_type, factory::left);
				hs::entity *aux = factory::create_pill(em, player->aux_col, player->aux_row, player->double_pill_type, factory::right);
				
				center->get<game_board_element>()->connected_to_guid = aux->guid;
				aux->get<game_board_element>()->connected_to_guid = center->guid;
				
				center->get<hs::comp::position>()->rot = current_pos->rot;
				aux->get<hs::comp::position>()->rot = current_pos->rot;
				
	
				hs::entity *shading_center = hs::factory::create_atlas_sprite(em, 
																	   "game_sheet.png",
																	   pixel_for_colrow(player->center_col, player->center_row),
																	   hs::rect_make(0, 416, 32, 32));
//				shading_center->get<hs::comp::renderable>()->alpha = 0.9;
				shading_center->get<hs::comp::position>()->origin.z = defs::board_z+0.5;
				center->get<game_board_element>()->shading_guid = shading_center->guid;

				hs::entity *shading_aux = hs::factory::create_atlas_sprite(em, 
																			  "game_sheet.png",
																			  pixel_for_colrow(player->center_col, player->center_row),
																			  hs::rect_make(32, 416, 32, 32));
//				shading_aux->get<hs::comp::renderable>()->alpha = 0.9;
				shading_aux->get<hs::comp::position>()->origin.z = defs::board_z+0.5;
				aux->get<game_board_element>()->shading_guid = shading_aux->guid;

								
				if ((int)current_pos->rot == 0 || (int)current_pos->rot == 360)
				{
					shading_center->get<hs::comp::position>()->origin.x = current_pos->origin.x;
					shading_center->get<hs::comp::position>()->origin.y = current_pos->origin.y;
					
					shading_aux->get<hs::comp::position>()->origin.x = current_pos->origin.x + 32;
					shading_aux->get<hs::comp::position>()->origin.y = current_pos->origin.y;

					shading_center->get<hs::comp::atlas_sprite>()->src_rect = hs::rect_make(0, 416, 32, 32);
					shading_aux->get<hs::comp::atlas_sprite>()->src_rect = hs::rect_make(32, 416, 32, 32);					
				}
				
				if ((int)current_pos->rot == 90)
				{
					shading_center->get<hs::comp::position>()->origin.x = current_pos->origin.x;
					shading_center->get<hs::comp::position>()->origin.y = current_pos->origin.y;
					
					shading_aux->get<hs::comp::position>()->origin.x = current_pos->origin.x;
					shading_aux->get<hs::comp::position>()->origin.y = current_pos->origin.y+32;
					
					shading_center->get<hs::comp::atlas_sprite>()->src_rect = hs::rect_make(64, 448, 32, 32);
					shading_aux->get<hs::comp::atlas_sprite>()->src_rect = hs::rect_make(64, 416, 32, 32);			
				}
				
				if ((int)current_pos->rot == 180)
				{
					shading_center->get<hs::comp::position>()->origin.x = current_pos->origin.x+2;
					shading_center->get<hs::comp::position>()->origin.y = current_pos->origin.y;
					
					shading_aux->get<hs::comp::position>()->origin.x = current_pos->origin.x-30;
					shading_aux->get<hs::comp::position>()->origin.y = current_pos->origin.y;
					
					shading_center->get<hs::comp::atlas_sprite>()->src_rect = hs::rect_make(32, 416, 32, 32);
					shading_aux->get<hs::comp::atlas_sprite>()->src_rect = hs::rect_make(0, 416, 32, 32);					
				}
				
				if ((int)current_pos->rot == 270)
				{
					shading_center->get<hs::comp::position>()->origin.x = current_pos->origin.x;
					shading_center->get<hs::comp::position>()->origin.y = current_pos->origin.y+2;
					
					shading_aux->get<hs::comp::position>()->origin.x = current_pos->origin.x;
					shading_aux->get<hs::comp::position>()->origin.y = current_pos->origin.y-30;
					
					shading_center->get<hs::comp::atlas_sprite>()->src_rect = hs::rect_make(64, 416, 32, 32);
					shading_aux->get<hs::comp::atlas_sprite>()->src_rect = hs::rect_make(64, 448, 32, 32);					
				}

				em->get_entity_by_guid(player->shading_guid)->add<hs::comp::mark_of_death>();
				//em->remove_entity(em->get_entity_by_guid(player->shading_guid)->manager_id);
				
				if (player->center_row < defs::player_spawn_row &&
					player->aux_row < defs::player_spawn_row)
					global::g_state.current_state = global::e_gs_player_landed;
				else
					global::g_state.current_state = global::e_gs_player_landed_ontop;

				hs::audio_system::play_sound("pill_land.m4a");
				return;
			}
			
			hs::audio_system::play_sound("pill_move.m4a");
			
			player->center_row--;
			player->aux_row--;
			
			current_pos->origin = pixel_for_colrow(player->center_col, player->center_row);
			update_shading();
			return;
		}

		current_pos->origin.x = pixel_for_colrow(player->center_col, player->center_row).x;
		update_shading();
	}
Exemplo n.º 5
0
void play_game()
{
	board *b = &grid;

	do {

		switch (os_wait_for_key()) {
			case ESC_KEY:
				return;

			case UP_KEY:
				if (can_move_up(b)) {
					shift_up(b);
					merge_up(b);
					shift_up(b);
					add_big_int(&score, &merge_score);
					break;
				} else {
					continue;
				}

			case DOWN_KEY:
				if (can_move_down(b)) {
					shift_down(b);
					merge_down(b);
					shift_down(b);
					add_big_int(&score, &merge_score);
					break;
				} else {
					continue;
				}

			case LEFT_KEY:
				if (can_move_left(b)) {
					shift_left(b);
					merge_left(b);
					shift_left(b);
					add_big_int(&score, &merge_score);
					break;
				} else {
					continue;
				}

			case RIGHT_KEY:
				if (can_move_right(b)) {
					shift_right(b);
					merge_right(b);
					shift_right(b);
					add_big_int(&score, &merge_score);
					break;
				} else {
					continue;
				}

			default:
				continue;
		}

		add_tile(b);
		display_board(b);

	} while (!game_is_lost());
}