Пример #1
0
    def __init__(self, screen, row, col, maze):
        super(Player, self).__init__()
        self.screen = screen
        self.s_rect = screen.get_rect()
        self.im = PhotoRect(screen, "character\\character_up\\character_up_1", 64, 64)

        self.im.rect.centerx = col*64 + 32
        self.im.rect.centery = row*64 + 32
        self.maze = maze
        self.rect = self.im.rect
        self.moving_up = False
        self.moving_down = False
        self.moving_right = False
        self.moving_left = False
        self.speed = 64
        self.state = 1
        self.death_state = 1
        self.dir = "right"
        self.speed_timer = pygame.time.get_ticks()
        self.row = row
        self.col = col
        self.walls = ['T', 'B', 'R', 'L', 'G', 'M', 'N', 'O', 'Y', 'Z', 'W', 'X', 'S']
        self.dead = False
        self.sound_timer = pygame.time.get_ticks()
        self.finished = False
Пример #2
0
 def __init__(self):
     pygame.init()
     pygame.mixer.init()
     self.screen = pygame.display.set_mode((896, 896))
     self.screen_rect = self.screen.get_rect()
     self.font = pygame.font.Font(None, 50)
     self.font2 = pygame.font.Font(None, 25)
     self.won = False
     self.lost = False
     pygame.display.set_caption("Bobby The Destroyer")
     self.clock = pygame.time.Clock()
     this_folder = os.path.dirname(os.path.abspath(__file__))
     my_file = os.path.join(this_folder, 'maze_old.txt')
     self.level = Level(self.screen, my_file)
     self.player = Player(self.screen, 1, 1, self.level)
     self.guard = Guard(self.screen, 12, 1, self.player, self.level)
     self.bombs = []
     self.numfin = 0
     self.bombs.append(Bomb(self.screen, 3, 5, self.player, self.guard))
     self.bombs.append(Bomb(self.screen, 3, 8, self.player, self.guard))
     self.bombs.append(Bomb(self.screen, 10, 7, self.player, self.guard))
     self.bombs.append(Bomb(self.screen, 10, 6, self.player, self.guard))
     self.bombs.append(Bomb(self.screen, 12, 2, self.player, self.guard))
     self.bombs.append(Bomb(self.screen, 12, 10, self.player, self.guard))
     self.bombs.append(Bomb(self.screen, 7, 3, self.player, self.guard))
     self.bombs.append(Bomb(self.screen, 7, 10, self.player, self.guard))
     self.game_active = True
     self.bg = PhotoRect(self.screen, "background", 896, 896)
Пример #3
0
 def __init__(self, screen, row, col, player, level):
     self.row = row
     self.col = col
     self.screen = screen
     self.goal_col = 12  # [m]
     self.goal_row = 12  # [m]
     self.matrix_size = 1.0  # [m]
     self.rob_size = 0.0  # [m]
     self.player = player
     self.level = level
     self.velocity = 120
     self.pathx, self.pathy = [], []
     self.ph = PhotoRect(self.screen, "enemy\\enemy_down\\enemy_down_1", 64,
                         64)
     self.ph.rect.centerx = col * 64 + 32
     self.ph.rect.centery = row * 64 + 32
     self.rect = self.ph.rect
     self.obs_xpos = []
     self.obs_ypos = []
     self.prow1 = 12
     self.pcol1 = 1
     self.prow2 = 12
     self.pcol2 = 12
     self.prow3 = 8
     self.pcol3 = 12
     self.prow4 = 8
     self.pcol4 = 1
     self.anim_timer = pygame.time.get_ticks()
     self.state = 1
     self.speed_timer = pygame.time.get_ticks()
     self.prepare()
     self.seen = False
Пример #4
0
class Bomb(Sprite):

    def __init__(self, screen, row, col, pla, guard):
        super(Bomb, self).__init__()
        self.player = pla
        self.guard = guard
        self.screen = screen
        self.s_rect = screen.get_rect()
        self.im = PhotoRect(screen, "bomb\\bomb_0", 64, 64)
        self.im.rect.centerx = col * 64 + 32
        self.im.rect.centery = row * 64 + 32
        self.rect = self.im.rect
        self.row = row
        self.col = col

        self.timer = pygame.time.get_ticks()
        self.finished = False
        self.detonating = False
        self.stepped = False
        self.state = 1

    def boom(self):
        if not self.finished:
            if self.player.col == self.col and self.player.row == self.row and not self.stepped:
                self.stepped = True
                self.timer = pygame.time.get_ticks()
            elif self.stepped and pygame.time.get_ticks() - self.timer >= 200 and not self.detonating:
                self.detonating = True
                self.timer = pygame.time.get_ticks()
                # Check guards for if they hear it in this spot
                self.guard.get_path(self.row, self.col)
                self.guard.faster()
            elif self.detonating and pygame.time.get_ticks() - self.timer >= 100:
                self.timer = pygame.time.get_ticks()
                temp = "bomb\\bomb_" + str(self.state)
                self.rect = self.im.rect
                self.im = PhotoRect(self.screen, temp, 64, 64)
                self.im.rect = self.rect
                if self.state >= 10:
                    self.finished = True
                    # Manipulate finishing game
                else:
                    self.state += 1

    def blitme(self):
        if not self.finished:
            self.im.blitme()
Пример #5
0
    def __init__(self, screen, row, col, pla, guard):
        super(Bomb, self).__init__()
        self.player = pla
        self.guard = guard
        self.screen = screen
        self.s_rect = screen.get_rect()
        self.im = PhotoRect(screen, "bomb\\bomb_0", 64, 64)
        self.im.rect.centerx = col * 64 + 32
        self.im.rect.centery = row * 64 + 32
        self.rect = self.im.rect
        self.row = row
        self.col = col

        self.timer = pygame.time.get_ticks()
        self.finished = False
        self.detonating = False
        self.stepped = False
        self.state = 1
Пример #6
0
    def update(self):

        if pygame.time.get_ticks() - self.speed_timer >= self.velocity:
            self.speed_timer = pygame.time.get_ticks()
            if self.row == self.player.row and self.col == self.player.col:
                self.player.dead = True
            if self.row == self.goal_row and self.col == self.goal_col:
                if self.seen:
                    self.seen = False
                if self.row == self.prow1 and self.col == self.pcol1:
                    self.get_path(self.prow2, self.pcol2)
                elif self.row == self.prow2 and self.col == self.pcol2:
                    self.get_path(self.prow3, self.pcol3)
                elif self.row == self.prow3 and self.col == self.pcol3:
                    self.get_path(self.prow4, self.pcol4)
                elif self.row == self.prow4 and self.col == self.pcol4:
                    self.get_path(self.prow1, self.pcol1)
                else:
                    self.get_path(self.prow1, self.pcol1)

                self.col = self.pathx.pop()
                self.row = self.pathy.pop()
                self.ph.rect.centerx = self.col * 64 + 32
                self.ph.rect.centery = self.row * 64 + 32
                self.rect = self.ph.rect
            elif self.row != self.goal_row or self.col != self.goal_col:
                self.col = self.pathx.pop()
                self.row = self.pathy.pop()
                self.ph.rect.centerx = self.col * 64 + 32
                self.ph.rect.centery = self.row * 64 + 32
                self.rect = self.ph.rect

        if pygame.time.get_ticks() - self.anim_timer >= 10:
            self.anim_timer = pygame.time.get_ticks()
            if self.state < 10:
                self.state += 1
            else:
                self.state = 1
            temp = "enemy\\enemy_down\\enemy_down_" + str(self.state)
            self.rect = self.ph.rect
            self.ph = PhotoRect(self.screen, temp, 64, 64)
            self.ph.rect = self.rect
Пример #7
0
 def boom(self):
     if not self.finished:
         if self.player.col == self.col and self.player.row == self.row and not self.stepped:
             self.stepped = True
             self.timer = pygame.time.get_ticks()
         elif self.stepped and pygame.time.get_ticks() - self.timer >= 200 and not self.detonating:
             self.detonating = True
             self.timer = pygame.time.get_ticks()
             # Check guards for if they hear it in this spot
             self.guard.get_path(self.row, self.col)
             self.guard.faster()
         elif self.detonating and pygame.time.get_ticks() - self.timer >= 100:
             self.timer = pygame.time.get_ticks()
             temp = "bomb\\bomb_" + str(self.state)
             self.rect = self.im.rect
             self.im = PhotoRect(self.screen, temp, 64, 64)
             self.im.rect = self.rect
             if self.state >= 10:
                 self.finished = True
                 # Manipulate finishing game
             else:
                 self.state += 1
Пример #8
0
    def __init__(self, screen, levelfile):
        self.screen = screen
        self.filename = levelfile

        with open(self.filename, 'r') as f:
            self.rows = f.read().splitlines()

        self.mblocks = []
        sz = Level.WALL_SIZE

        self.mblock = PhotoRect(screen, "block", sz, sz)
        self.deltax = self.deltay = sz

        self.build()
Пример #9
0
class Player(Sprite):

    def __init__(self, screen, row, col, maze):
        super(Player, self).__init__()
        self.screen = screen
        self.s_rect = screen.get_rect()
        self.im = PhotoRect(screen, "character\\character_up\\character_up_1", 64, 64)

        self.im.rect.centerx = col*64 + 32
        self.im.rect.centery = row*64 + 32
        self.maze = maze
        self.rect = self.im.rect
        self.moving_up = False
        self.moving_down = False
        self.moving_right = False
        self.moving_left = False
        self.speed = 64
        self.state = 1
        self.death_state = 1
        self.dir = "right"
        self.speed_timer = pygame.time.get_ticks()
        self.row = row
        self.col = col
        self.walls = ['T', 'B', 'R', 'L', 'G', 'M', 'N', 'O', 'Y', 'Z', 'W', 'X', 'S']
        self.dead = False
        self.sound_timer = pygame.time.get_ticks()
        self.finished = False

    def update(self):
        temp = ""
        if not self.dead:
            if self.moving_up and pygame.time.get_ticks() - self.speed_timer >= 100:

                temp = self.maze.rows[self.row-1]
                val = temp[self.col]
                if val not in self.walls:
                    self.im.rect.y -= self.speed
                    self.row -= 1
                self.im.blitme()
                self.speed_timer = pygame.time.get_ticks()
                self.dir = 'up'
                temp = "character\\character_up\\character_up_" + str(self.state)
            elif self.moving_down and pygame.time.get_ticks() - self.speed_timer >= 100:

                temp = self.maze.rows[self.row+1]
                val = temp[self.col]
                if val not in self.walls:
                    self.row += 1
                    self.im.rect.y += self.speed
                self.im.blitme()
                self.speed_timer = pygame.time.get_ticks()
                self.dir = 'down'
                temp = "character\\character_down\\character_down_" + str(self.state)
            elif self.moving_right and pygame.time.get_ticks() - self.speed_timer >= 100:

                temp = self.maze.rows[self.row]
                if self.col < 27:
                    val = temp[self.col+1]
                else:
                    val = temp[0]
                if val not in self.walls:
                    self.im.rect.x += self.speed
                    self.col += 1
                self.im.blitme()
                self.speed_timer = pygame.time.get_ticks()
                self.dir = 'right'
                temp = "character\\character_right\\character_right_" + str(self.state)
            elif self.moving_left and pygame.time.get_ticks() - self.speed_timer >= 100:

                temp = self.maze.rows[self.row]
                val = temp[self.col-1]
                if val not in self.walls:
                    self.im.rect.x -= self.speed
                    self.col -= 1
                self.im.blitme()
                self.speed_timer = pygame.time.get_ticks()
                self.dir = 'left'
                temp = "character\\character_left\\character_left_" + str(self.state)
            elif not (self.moving_left or self.moving_right or self.moving_up or self.moving_down) \
                    and pygame.time.get_ticks() - self.speed_timer >= 100:
                temp = "character\\character_" + self.dir + "\\character_" + self.dir + "_1"
                self.state = 1
            else:
                return temp

            self.rect = self.im.rect
            self.im = PhotoRect(self.screen, temp, 64, 64)
            self.im.rect = self.rect
            if self.state >= 6:
                self.state = 1
            else:
                self.state += 1
        else:
            self.finished = True

    def blitme(self):
        self.im.blitme()
Пример #10
0
    def update(self):
        temp = ""
        if not self.dead:
            if self.moving_up and pygame.time.get_ticks() - self.speed_timer >= 100:

                temp = self.maze.rows[self.row-1]
                val = temp[self.col]
                if val not in self.walls:
                    self.im.rect.y -= self.speed
                    self.row -= 1
                self.im.blitme()
                self.speed_timer = pygame.time.get_ticks()
                self.dir = 'up'
                temp = "character\\character_up\\character_up_" + str(self.state)
            elif self.moving_down and pygame.time.get_ticks() - self.speed_timer >= 100:

                temp = self.maze.rows[self.row+1]
                val = temp[self.col]
                if val not in self.walls:
                    self.row += 1
                    self.im.rect.y += self.speed
                self.im.blitme()
                self.speed_timer = pygame.time.get_ticks()
                self.dir = 'down'
                temp = "character\\character_down\\character_down_" + str(self.state)
            elif self.moving_right and pygame.time.get_ticks() - self.speed_timer >= 100:

                temp = self.maze.rows[self.row]
                if self.col < 27:
                    val = temp[self.col+1]
                else:
                    val = temp[0]
                if val not in self.walls:
                    self.im.rect.x += self.speed
                    self.col += 1
                self.im.blitme()
                self.speed_timer = pygame.time.get_ticks()
                self.dir = 'right'
                temp = "character\\character_right\\character_right_" + str(self.state)
            elif self.moving_left and pygame.time.get_ticks() - self.speed_timer >= 100:

                temp = self.maze.rows[self.row]
                val = temp[self.col-1]
                if val not in self.walls:
                    self.im.rect.x -= self.speed
                    self.col -= 1
                self.im.blitme()
                self.speed_timer = pygame.time.get_ticks()
                self.dir = 'left'
                temp = "character\\character_left\\character_left_" + str(self.state)
            elif not (self.moving_left or self.moving_right or self.moving_up or self.moving_down) \
                    and pygame.time.get_ticks() - self.speed_timer >= 100:
                temp = "character\\character_" + self.dir + "\\character_" + self.dir + "_1"
                self.state = 1
            else:
                return temp

            self.rect = self.im.rect
            self.im = PhotoRect(self.screen, temp, 64, 64)
            self.im.rect = self.rect
            if self.state >= 6:
                self.state = 1
            else:
                self.state += 1
        else:
            self.finished = True
Пример #11
0
class Guard:
    def __init__(self, screen, row, col, player, level):
        self.row = row
        self.col = col
        self.screen = screen
        self.goal_col = 12  # [m]
        self.goal_row = 12  # [m]
        self.matrix_size = 1.0  # [m]
        self.rob_size = 0.0  # [m]
        self.player = player
        self.level = level
        self.velocity = 120
        self.pathx, self.pathy = [], []
        self.ph = PhotoRect(self.screen, "enemy\\enemy_down\\enemy_down_1", 64,
                            64)
        self.ph.rect.centerx = col * 64 + 32
        self.ph.rect.centery = row * 64 + 32
        self.rect = self.ph.rect
        self.obs_xpos = []
        self.obs_ypos = []
        self.prow1 = 12
        self.pcol1 = 1
        self.prow2 = 12
        self.pcol2 = 12
        self.prow3 = 8
        self.pcol3 = 12
        self.prow4 = 8
        self.pcol4 = 1
        self.anim_timer = pygame.time.get_ticks()
        self.state = 1
        self.speed_timer = pygame.time.get_ticks()
        self.prepare()
        self.seen = False

    def prepare(self):

        for i in range(13):
            self.obs_xpos.append(i)
            self.obs_ypos.append(0.0)
        for i in range(13):
            self.obs_xpos.append(13.0)
            self.obs_ypos.append(i)
        for i in range(14):
            self.obs_xpos.append(i)
            self.obs_ypos.append(13.0)
        for i in range(14):
            self.obs_xpos.append(0.0)
            self.obs_ypos.append(i)

        #######################################################
        for i in range(1):
            self.obs_xpos.append(12)
            self.obs_ypos.append(i + 7)
        #######################################################
        for i in range(1):
            self.obs_xpos.append(11)
            self.obs_ypos.append(i + 11)

        for i in range(4):
            self.obs_xpos.append(11)
            self.obs_ypos.append(i + 2)
        #######################################################
        for i in range(1):
            self.obs_xpos.append(10)
            self.obs_ypos.append(i + 11)
        for i in range(1):
            self.obs_xpos.append(10)
            self.obs_ypos.append(i + 9)
        for i in range(4):
            self.obs_xpos.append(10)
            self.obs_ypos.append(i + 2)

        ######################################################
        for i in range(1):
            self.obs_xpos.append(9)
            self.obs_ypos.append(i + 11)

        for i in range(1):
            self.obs_xpos.append(9)
            self.obs_ypos.append(i + 9)

        #######################################################

        for i in range(4):
            self.obs_xpos.append(8)
            self.obs_ypos.append(i + 4)

        for i in range(1):
            self.obs_xpos.append(8)
            self.obs_ypos.append(i + 2)
        ########################################################
        for i in range(1):
            self.obs_xpos.append(7)
            self.obs_ypos.append(i + 11)

        for i in range(1):
            self.obs_xpos.append(7)
            self.obs_ypos.append(i + 9)

        for i in range(1):
            self.obs_xpos.append(7)
            self.obs_ypos.append(i + 6)

        for i in range(1):
            self.obs_xpos.append(7)
            self.obs_ypos.append(i + 2)

        #######################################################

        for i in range(1):
            self.obs_xpos.append(6)
            self.obs_ypos.append(i + 11)

        for i in range(1):
            self.obs_xpos.append(6)
            self.obs_ypos.append(i + 9)

        for i in range(1):
            self.obs_xpos.append(6)
            self.obs_ypos.append(i + 6)

        for i in range(1):
            self.obs_xpos.append(6)
            self.obs_ypos.append(i + 2)

        #########################################################

        for i in range(4):
            self.obs_xpos.append(5)
            self.obs_ypos.append(i + 4)

        for i in range(1):
            self.obs_xpos.append(5)
            self.obs_ypos.append(i + 2)
        #########################################################

        for i in range(1):
            self.obs_xpos.append(4)
            self.obs_ypos.append(i + 11)
        for i in range(1):
            self.obs_xpos.append(4)
            self.obs_ypos.append(i + 9)

        ##########################################################

        for i in range(1):
            self.obs_xpos.append(3)
            self.obs_ypos.append(i + 11)

        for i in range(1):
            self.obs_xpos.append(3)
            self.obs_ypos.append(i + 9)

        for i in range(4):
            self.obs_xpos.append(3)
            self.obs_ypos.append(i + 2)

        ##########################################################

        for i in range(1):
            self.obs_xpos.append(2)
            self.obs_ypos.append(i + 11)

        for i in range(4):
            self.obs_xpos.append(2)
            self.obs_ypos.append(i + 2)

        ##########################################################

        for i in range(1):
            self.obs_xpos.append(1)
            self.obs_ypos.append(i + 7)
        self.get_path(self.goal_row, self.goal_col)

    def get_path(self, grow, gcol):
        self.goal_col, self.goal_row = gcol, grow
        self.pathx, self.pathy = a_star_alg(self.col, self.row, gcol, grow,
                                            self.obs_xpos, self.obs_ypos,
                                            self.matrix_size, self.rob_size)

    def update(self):

        if pygame.time.get_ticks() - self.speed_timer >= self.velocity:
            self.speed_timer = pygame.time.get_ticks()
            if self.row == self.player.row and self.col == self.player.col:
                self.player.dead = True
            if self.row == self.goal_row and self.col == self.goal_col:
                if self.seen:
                    self.seen = False
                if self.row == self.prow1 and self.col == self.pcol1:
                    self.get_path(self.prow2, self.pcol2)
                elif self.row == self.prow2 and self.col == self.pcol2:
                    self.get_path(self.prow3, self.pcol3)
                elif self.row == self.prow3 and self.col == self.pcol3:
                    self.get_path(self.prow4, self.pcol4)
                elif self.row == self.prow4 and self.col == self.pcol4:
                    self.get_path(self.prow1, self.pcol1)
                else:
                    self.get_path(self.prow1, self.pcol1)

                self.col = self.pathx.pop()
                self.row = self.pathy.pop()
                self.ph.rect.centerx = self.col * 64 + 32
                self.ph.rect.centery = self.row * 64 + 32
                self.rect = self.ph.rect
            elif self.row != self.goal_row or self.col != self.goal_col:
                self.col = self.pathx.pop()
                self.row = self.pathy.pop()
                self.ph.rect.centerx = self.col * 64 + 32
                self.ph.rect.centery = self.row * 64 + 32
                self.rect = self.ph.rect

        if pygame.time.get_ticks() - self.anim_timer >= 10:
            self.anim_timer = pygame.time.get_ticks()
            if self.state < 10:
                self.state += 1
            else:
                self.state = 1
            temp = "enemy\\enemy_down\\enemy_down_" + str(self.state)
            self.rect = self.ph.rect
            self.ph = PhotoRect(self.screen, temp, 64, 64)
            self.ph.rect = self.rect

    def sight(self):
        if not self.player.dead and not self.seen:
            if self.player.row == self.row:
                if self.player.col < self.col:
                    for x in range(self.player.col, int(self.col)):
                        if self.level.rows[int(self.row)][x] == 'M':
                            return False
                    self.seen = True
                    self.get_path(self.player.row, self.player.col)
                elif self.player.col > self.col:
                    for x in range(int(self.col), self.player.col):
                        if self.level.rows[int(self.row)][x] == 'M':
                            return False
                    self.seen = True
                    self.get_path(self.player.row, self.player.col)
            elif self.player.col == self.col:
                if self.player.row < self.row:
                    for x in range(self.player.row, int(self.row)):
                        if self.level.rows[x][int(self.col)] == 'M':
                            return False
                    self.seen = True
                    self.get_path(self.player.row, self.player.col)
                elif self.player.row > self.row:
                    for x in range(int(self.row), self.player.row):
                        if self.level.rows[x][int(self.col)] == 'M':
                            return False
                    self.seen = True
                    self.get_path(self.player.row, self.player.col)

    def faster(self):
        self.velocity = self.velocity * 0.8

    def blitme(self):
        self.ph.blitme()
Пример #12
0
class Game:
    BLACK = (47, 47, 47)

    def __init__(self):
        pygame.init()
        pygame.mixer.init()
        self.screen = pygame.display.set_mode((896, 896))
        self.screen_rect = self.screen.get_rect()
        self.font = pygame.font.Font(None, 50)
        self.font2 = pygame.font.Font(None, 25)
        self.won = False
        self.lost = False
        pygame.display.set_caption("Bobby The Destroyer")
        self.clock = pygame.time.Clock()
        this_folder = os.path.dirname(os.path.abspath(__file__))
        my_file = os.path.join(this_folder, 'maze_old.txt')
        self.level = Level(self.screen, my_file)
        self.player = Player(self.screen, 1, 1, self.level)
        self.guard = Guard(self.screen, 12, 1, self.player, self.level)
        self.bombs = []
        self.numfin = 0
        self.bombs.append(Bomb(self.screen, 3, 5, self.player, self.guard))
        self.bombs.append(Bomb(self.screen, 3, 8, self.player, self.guard))
        self.bombs.append(Bomb(self.screen, 10, 7, self.player, self.guard))
        self.bombs.append(Bomb(self.screen, 10, 6, self.player, self.guard))
        self.bombs.append(Bomb(self.screen, 12, 2, self.player, self.guard))
        self.bombs.append(Bomb(self.screen, 12, 10, self.player, self.guard))
        self.bombs.append(Bomb(self.screen, 7, 3, self.player, self.guard))
        self.bombs.append(Bomb(self.screen, 7, 10, self.player, self.guard))
        self.game_active = True
        self.bg = PhotoRect(self.screen, "background", 896, 896)

    def update_screen(self):

        self.screen.fill(Game.BLACK)
        if self.player.finished:
            self.game_active = False
        elif self.numfin == 8:
            self.game_active = False
            surface = self.font.render("YOU WIN!", True, (255, 255, 255))
            text_rect = surface.get_rect(center=(self.screen_rect.centerx,
                                                 self.screen_rect.centerx))
            self.screen.blit(surface, text_rect)
        if self.game_active:
            self.bg.blitme()
            self.level.blitme()

            self.player.update()
            self.player.blitme()
            self.guard.sight()  # added this
            self.guard.update()
            self.guard.blitme()
            for b in self.bombs:
                b.boom()
                b.blitme()
                if b.finished:
                    self.numfin += 1
                    self.bombs.remove(b)

        elif self.player.dead:
            surface = self.font.render("GAME OVER", True, (255, 255, 255))
            text_rect = surface.get_rect(center=(self.screen_rect.centerx,
                                                 self.screen_rect.centerx))
            self.screen.blit(surface, text_rect)

        pygame.display.flip()

    def play(self):
        loop = GameLoop(self.player, self.level)

        while not loop.finished:
            loop.check_events()
            self.update_screen()
            self.clock.tick(60)
            self.won = loop.won