Ejemplo n.º 1
0
 def test_alt_move_up(self):
     self.gamefield.bomberman.position = c.Position(1, 3)
     self.gamefield.bomberman.move_right()
     self.gamefield.make_moves()
     self.gamefield.bomberman.stop_moving_right()
     self.gamefield.bomberman.move_up()
     self.movable_move(0, c.Position(1, 3))
Ejemplo n.º 2
0
 def test_alt_move_left(self):
     self.gamefield.bomberman.position = c.Position(3, 1)
     self.gamefield.bomberman.move_down()
     self.gamefield.make_moves()
     self.gamefield.bomberman.stop_moving_down()
     self.gamefield.bomberman.move_left()
     self.movable_move(0, c.Position(3, 1))
Ejemplo n.º 3
0
 def bonus_explosion(self, bonus_type):
     self.gamefield.bomberman.place_bomb(self.gamefield)
     self.gamefield.gamefield[1][2] = bonus_type(c.Position(2, 1))
     self.gamefield.bomberman.position = c.Position(1, 3)
     cell = self.gamefield.gamefield[1][1]
     while isinstance(cell, b.Bomb) and cell.timer != 0:
         self.gamefield.make_moves()
         cell = self.gamefield.gamefield[1][1]
     self.gamefield.make_moves()
     self.assertIsInstance(self.gamefield.gamefield[1][2], ex.Explosion)
Ejemplo n.º 4
0
 def __init__(self, pos, max_speed, tick_time, acceleration=0, price=1):
     self.x_direct = None
     self.y_direct = None
     self.x_move_funcs = [(math.floor, math.floor), (math.ceil, math.floor),
                          (math.floor, math.ceil), (math.ceil, math.ceil)]
     self.y_move_funcs = [(math.floor, math.floor), (math.floor, math.ceil),
                          (math.ceil, math.floor), (math.ceil, math.ceil)]
     self.x_mv_vls = (0, self.x_move_funcs)
     self.y_mv_vls = (1, self.y_move_funcs)
     self._position = pos
     self.rounded_pos = c.Position(round(self._position.x),
                                   round(self._position.y))
     self.max_speed = max_speed
     self.tick_time = tick_time
     self.x_speed = 0
     self.y_speed = 0
     self.lifes = 1
     self.damage_standart_cd = 2
     self.damage_cd = 0
     self.dead = False
     self.max_speed = round(max_speed, 2)
     if acceleration == 0:
         self.acceleration = self.max_speed / 2
     else:
         self.acceleration = acceleration
     self.points = 0
     self.price = price
Ejemplo n.º 5
0
 def test_bomb(self):
     self.gamefield.bomberman.ex_type = exive.ExplosionType.T4
     self.gamefield.bomberman.position = c.Position(4, 2)
     self.gamefield.bomberman.place_bomb(self.gamefield)
     self.gamefield.bomberman.position = c.Position(1, 1)
     cell = self.gamefield.gamefield[2][4]
     while cell.timer != 0 and isinstance(cell, b.Bomb):
         self.gamefield.make_moves()
         cell = self.gamefield.gamefield[2][4]
     self.gamefield.make_moves()
     self.assertIsInstance(self.gamefield.gamefield[1][4], ex.Explosion)
     self.assertIsInstance(self.gamefield.gamefield[2][4], ex.Explosion)
     self.assertIsInstance(self.gamefield.gamefield[2][3], ex.Explosion)
     self.assertIsInstance(self.gamefield.gamefield[3][4], ex.Explosion)
     self.assertIsInstance(self.gamefield.gamefield[4][4], ex.Explosion)
     self.assertIsInstance(self.gamefield.gamefield[5][4], ex.Explosion)
     self.assertIsInstance(self.gamefield.movable[0], db.Dying_bomberman)
Ejemplo n.º 6
0
 def create_gamefield(file_path):
     with open(file_path) as f:
         str_field = f.read().split('\n')
     f.close()
     game_info = str_field.pop(0).split()
     width = int(game_info[0]) + 2
     bonuses_count = int(game_info[1])
     mutable_walls = []
     movable = []
     gamefield = []
     Gamefield_creator.create_wall_line(gamefield, width)
     for i in range(len(str_field)):
         string = str_field[i]
         string = string[0:width]
         field_line = []
         field_line.append(wi.Wall_Immutable(c.Position(0, i + 1)))
         for j in range(len(string)):
             game_object = cells.get(string[j])
             if not game_object:
                 raise InvalidFileException
             position = c.Position(j + 1, i + 1)
             if issubclass(game_object, m.Movable):
                 field_line.append(ec.Empty(position))
                 movable.append((game_object, position))
             else:
                 if game_object is wm.Wall_Mutable:
                     field_line.append(game_object(
                         position, ex.ExplosionType(int(string[j]))))
                 else:
                     field_line.append(game_object(position))
                 if isinstance(field_line[- 1], wm.Wall_Mutable):
                     mutable_walls.append(field_line[len(field_line) - 1])
         while len(field_line) < width - 1:
             field_line.append(ec.Empty(c.Position(len(field_line), i + 1)))
         field_line.append(wi.Wall_Immutable(
             c.Position(len(field_line), i + 1)))
         gamefield.append(field_line)
     Gamefield_creator.create_wall_line(gamefield, width)
     gamefield[1][1] = ec.Empty(c.Position(1, 1))
     Gamefield_creator.randomize_bonuses(mutable_walls, bonuses_count)
     return gamefield, movable
Ejemplo n.º 7
0
 def action(self, gamefield, tick_time):
     if self.damage_cd != 0:
         self.damage_cd -= tick_time
     psbl_x_spd = 0 if not self.x_direct else self.try_move(
         gamefield, self.x_direct, self.x_speed)
     if psbl_x_spd == 0 and self.x_direct and not self.y_direct:
         values = [[self.top_y, self.left_x], [self.bot_y, self.left_x]]
         psbl_y_spd = self.alt_move(self.x_direct, self.y, gamefield,
                                    values, self.y_mv_vls, self.y_speed)
     else:
         psbl_y_spd = 0 if psbl_x_spd != 0 else self.try_move(
             gamefield, self.y_direct, self.y_speed)
         if psbl_y_spd == 0 and psbl_x_spd == 0 and self.y_direct:
             values = [[self.top_y, self.left_x],
                       [self.top_y, self.right_x]]
             psbl_x_spd = self.alt_move(self.y_direct, self.x, gamefield,
                                        values, self.x_mv_vls, self.x_speed)
     self.x_speed = psbl_x_spd
     self.y_speed = psbl_y_spd
     self.rounded_pos = c.Position(round(self._position.x),
                                   round(self._position.y))
     gamefield[self.rounded_pos.y][self.rounded_pos.x].contact(self)
     self._position = c.Position(round(self.x + self.x_speed, 2),
                                 round(self.y + self.y_speed, 2))
Ejemplo n.º 8
0
 def positive_move(self, pos, gamefield, searched_item, funcs, speed):
     speed = speed if speed >= 0 else 0
     psbl_spd = speed + self.acceleration
     psbl_spd = psbl_spd if psbl_spd <= self.max_speed else self.max_speed
     next_pos = [pos.x, pos.y]
     next_pos[searched_item] += psbl_spd
     pos = c.Position(next_pos[0], next_pos[1])
     y1 = funcs[2][0](pos.y)
     x1 = funcs[2][1](pos.x)
     y2 = funcs[3][0](pos.y)
     x2 = funcs[3][1](pos.x)
     if not (gamefield[y1][x1].is_passable(self)
             and gamefield[y2][x2].is_passable(self)):
         pos = self._position.position
         psbl_spd = math.ceil(pos[searched_item]) - pos[searched_item]
     return psbl_spd
Ejemplo n.º 9
0
 def negative_move(self, pos, gamefield, searched_item, funcs, speed):
     speed = speed if speed <= 0 else 0
     possible_speed = speed - self.acceleration
     possible_speed = possible_speed if possible_speed >= - \
         self.max_speed else - self.max_speed
     next_pos = [pos.x, pos.y]
     next_pos[searched_item] += possible_speed
     pos = c.Position(next_pos[0], next_pos[1])
     y1 = funcs[0][0](pos.y)
     x1 = funcs[0][1](pos.x)
     y2 = funcs[1][0](pos.y)
     x2 = funcs[1][1](pos.x)
     if not (gamefield[y1][x1].is_passable(self)
             and gamefield[y2][x2].is_passable(self)):
         pos = self.position.position
         possible_speed = math.floor(
             pos[searched_item]) - pos[searched_item]
     return possible_speed
Ejemplo n.º 10
0
 def test_position(self):
     movable = m.Movable(c.Position(22.3, 34.5), 0.1, 0.03)
     self.assertEqual(c.Position(22.3, 34.5), movable.position)
     movable.position = c.Position(12.3, 14.5)
     self.assertEqual(c.Position(12.3, 14.5), movable.position)
     self.assertEqual(c.Position(12, 14), movable.rounded_pos)
Ejemplo n.º 11
0
 def test_right_x(self):
     movable = m.Movable(c.Position(22.3, 34.5), 0.1, 0.03)
     self.assertEqual(23, movable.right_x)
Ejemplo n.º 12
0
 def test_wall_mutable_image_name_exists(self):
     self.image_name_exists(
         wm.Wall_Mutable(c.Position(1, 1),
                         exive.ExplosionType.T1).image_name)
Ejemplo n.º 13
0
 def test_points(self):
     movable = m.Movable(c.Position(22.3, 34.5), 0.1, 0.03)
     self.assertEqual(movable.points, 0)
     movable.add_points(5)
     self.assertEqual(movable.points, 5)
Ejemplo n.º 14
0
 def test_movable_down_move(self):
     self.gamefield.bomberman.move_down()
     self.movable_move(
         0, c.Position(1, 1 + self.gamefield.bomberman.acceleration))
Ejemplo n.º 15
0
 def test_bomb_bonus_picking(self):
     self.gamefield.gamefield[1][1] = bb.Bomb_bonus(c.Position(1, 1))
     self.gamefield.make_moves()
     self.assertEqual(self.gamefield.bomberman.bombs_count, 2)
Ejemplo n.º 16
0
 def test_explosion_image_name_exists(self):
     self.image_name_exists(ex.Explosion(c.Position(1, 1)).image_name)
Ejemplo n.º 17
0
 def test_movable_right_move(self):
     self.gamefield.bomberman.move_right()
     self.movable_move(
         0, c.Position(1 + self.gamefield.bomberman.acceleration, 1))
Ejemplo n.º 18
0
 def test_bomb_bonus_image_name_exists(self):
     self.image_name_exists(bb.Bomb_bonus(c.Position(1, 1)).image_name)
Ejemplo n.º 19
0
 def position(self, position):
     self._position = position
     self.rounded_pos = c.Position(round(self._position.x),
                                   round(self._position.y))
Ejemplo n.º 20
0
 def create_wall_line(gamefield, width):
     field_line = []
     for i in range(width):
         field_line.append(wi.Wall_Immutable(c.Position(i, len(gamefield))))
     gamefield.append(field_line)
Ejemplo n.º 21
0
 def test_speed_bonus_picking(self):
     self.gamefield.gamefield[1][1] = sb.Speed_bonus(c.Position(1, 1))
     self.gamefield.make_moves()
     self.assertEqual(self.gamefield.bomberman.max_speed, 0.12 * 1.15)
Ejemplo n.º 22
0
 def test_range_bonus_picking(self):
     self.gamefield.gamefield[1][1] = rb.Range_bonus(c.Position(1, 1))
     self.gamefield.make_moves()
     self.assertEqual(self.gamefield.bomberman.bomb_range, 2)
Ejemplo n.º 23
0
 def test_top_y(self):
     movable = m.Movable(c.Position(22.3, 34.5), 0.1, 0.03)
     self.assertEqual(34, movable.top_y)
Ejemplo n.º 24
0
 def test_range_bonus_image_name_exists(self):
     self.image_name_exists(rb.Range_bonus(c.Position(1, 1)).image_name)
Ejemplo n.º 25
0
 def test_bot_y(self):
     movable = m.Movable(c.Position(22.3, 34.5), 0.1, 0.03)
     self.assertEqual(35, movable.bot_y)
Ejemplo n.º 26
0
 def test_speed_bonus_image_name_exists(self):
     self.image_name_exists(sb.Speed_bonus(c.Position(1, 1)).image_name)
Ejemplo n.º 27
0
 def test_movable_up_move(self):
     self.gamefield.bomberman.move_up()
     self.movable_move(0, c.Position(1, 1))
Ejemplo n.º 28
0
 def test_wall_immutable_image_name_exists(self):
     self.image_name_exists(wi.Wall_Immutable(c.Position(1, 1)).image_name)
Ejemplo n.º 29
0
 def test_rounded_pos(self):
     movable = m.Movable(c.Position(22.3, 34.5), 0.1, 0.03)
     self.assertEqual(movable.rounded_pos.x, round(movable.x))
     self.assertEqual(movable.rounded_pos.y, round(movable.y))
Ejemplo n.º 30
0
 def test_alt_move_down(self):
     self.gamefield.bomberman.move_right()
     self.gamefield.make_moves()
     self.gamefield.bomberman.stop_moving_right()
     self.gamefield.bomberman.move_down()
     self.movable_move(0, c.Position(1, 1))