diff --git a/box.png b/box.png new file mode 100644 index 0000000..b7a37e1 Binary files /dev/null and b/box.png differ diff --git a/done.png b/done.png new file mode 100644 index 0000000..db1a01d Binary files /dev/null and b/done.png differ diff --git a/floor.png b/floor.png new file mode 100644 index 0000000..fe4e1a3 Binary files /dev/null and b/floor.png differ diff --git a/peli.py b/peli.py index 21dc6b5..5965f6f 100644 --- a/peli.py +++ b/peli.py @@ -9,7 +9,7 @@ def __init__(self): self.korkeus = len(self.kartta) self.leveys = len(self.kartta[0]) - self.skaala = self.kuvat[0].get_width() + self.skaala = self.kuvat[0].get_width()#skaala = scale nayton_korkeus = self.skaala * self.korkeus nayton_leveys = self.skaala * self.leveys @@ -19,7 +19,7 @@ def __init__(self): pygame.display.set_caption("Sokoban") - self.silmukka() + self.silmukka()#self.main_loop() def lataa_kuvat(self): self.kuvat = [] diff --git a/peliEnglish.py b/peliEnglish.py new file mode 100644 index 0000000..fa6f9d1 --- /dev/null +++ b/peliEnglish.py @@ -0,0 +1,124 @@ +import pygame + +class Sokoban: + def __init__(self): + pygame.init() + + self.load_images() + self.new_game() + + self.height = len(self.map) + self.width = len(self.map[0]) + self.scale = self.images[0].get_width() + + window_height = self.scale * self.height + window_width = self.scale * self.width + self.window = pygame.display.set_mode((window_width, window_height + self.scale)) + + self.game_font = pygame.font.SysFont("Arial", 24) + + pygame.display.set_caption("Sokoban") + + self.main_loop() + + def load_images(self): + self.images = [] + for name in ["floor", "wall", "target", "box", "robot", "done", "target_robot"]: + self.images.append(pygame.image.load(name + ".png")) + + def new_game(self): + #each matrix pos represents an actrual object from self.images + + self.map = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1], + [1, 2, 3, 0, 0, 0, 1, 0, 0, 1, 2, 3, 0, 0, 0, 0, 1], + [1, 0, 0, 1, 2, 3, 0, 2, 3, 0, 0, 0, 1, 0, 0, 0, 1], + [1, 0, 4, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] + + self.moves = 0 + + def main_loop(self): + #keep adding executions going next level + while True: + self.check_events() + self.draw_window() + + def check_events(self):#decides real game moves + for event in pygame.event.get(): + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_LEFT: + self.move(0, -1) + if event.key == pygame.K_RIGHT: + self.move(0, 1) + if event.key == pygame.K_UP: + self.move(-1, 0) + if event.key == pygame.K_DOWN: + self.move(1, 0) + + if event.type == pygame.QUIT: + exit() + def move(self, move_y, move_x): + robot_old_y, robot_old_x = self.find_robot() + robot_new_y = robot_old_y + move_y + robot_new_x = robot_old_x + move_x + + if self.map[robot_new_y][robot_new_x] == 1: + return + + if self.map[robot_new_y][robot_new_x] in [3, 5]: + box_new_y = robot_new_y + move_y + box_new_x = robot_new_x + move_x + + if self.map[box_new_y][box_new_x] in [1, 3, 5]: + return + + self.map[robot_new_y][robot_new_x] -= 3 + self.map[box_new_y][box_new_x] += 3 + + self.map[robot_old_y][robot_old_x] -= 4 + self.map[robot_new_y][robot_new_x] += 4 + + self.moves += 1 + + def find_robot(self ): + for y in range(self.height): + for x in range(self.width): + if self.map[y][x] in [4, 6]: + return (y, x) + + def draw_window(self): + self.window.fill((0, 0, 0)) + + for y in range(self.height): + for x in range(self.width): + square = self.map[y][x] + self.window.blit(self.images[square], (x * self.scale, y * self.scale)) + + game_text = self.game_font.render("Moves: " + str(self.moves), True, (255, 0, 0)) + self.window.blit(game_text, (25, self.height * self.scale + 10)) + + game_text = self.game_font.render("F2 = new game", True, (255, 0, 0)) + self.window.blit(game_text, (200, self.height * self.scale + 10)) + + game_text = self.game_font.render("Esc = exit game", True, (255, 0, 0)) + self.window.blit(game_text, (400, self.height * self.scale + 10)) + + if self.game_solved(): + game_text = self.game_font.render("Congratulations, you solved the game!", True, (255, 0, 0)) + game_text_x = self.scale * self.width / 2 - game_text.get_width() / 2 + game_text_y = self.scale * self.height / 2 - game_text.get_height() / 2 + pygame.draw.rect(self.window, (0, 0, 0), (game_text_x, game_text_y, game_text.get_width(), game_text.get_height())) + self.window.blit(game_text, (game_text_x, game_text_y)) + + pygame.display.flip() + + def game_solved(self): + for y in range(self.height): + for x in range(self.width): + if self.map[y][x] in [2, 6]: + return False + return True + +if __name__ == "__main__": + Sokoban() \ No newline at end of file diff --git a/robot.png b/robot.png new file mode 100644 index 0000000..988b4a2 Binary files /dev/null and b/robot.png differ diff --git a/target.png b/target.png new file mode 100644 index 0000000..4c7eed7 Binary files /dev/null and b/target.png differ diff --git a/target_robot.png b/target_robot.png new file mode 100644 index 0000000..a8251a4 Binary files /dev/null and b/target_robot.png differ diff --git a/wall.png b/wall.png new file mode 100644 index 0000000..19eab8b Binary files /dev/null and b/wall.png differ