diff --git a/DATA/Levels/Default/data.json b/DATA/Levels/Default/data.json new file mode 100644 index 0000000..2fce87e --- /dev/null +++ b/DATA/Levels/Default/data.json @@ -0,0 +1 @@ +{"name": "Default", "start_point": {"x": 4, "y": 8}, "enemy_types": [[{"type": "little_spider", "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png"}], [{"type": "wolf", "sprite": "DATA/Sprites/Enemies/Tier 2/wolf.png"}]], "enemy_spawns": [{"x": 1, "y": 2}, {"x": 3, "y": 12}, {"x": 1, "y": 6}, {"x": 10, "y": 10}], "size": [13, 10], "floor": [{"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 0}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 1}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 2}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 3}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 4}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 13, "y": 5}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 0, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 6}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 0, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 7}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 1, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 2, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 12, "y": 8}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 3, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 4, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 5, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 9, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 10, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 11, "y": 9}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 6, "y": 10}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 7, "y": 10}, {"sprite": "DATA/Sprites/Floor/floor_grey.png", "x": 8, "y": 10}]} \ No newline at end of file diff --git a/DATA/Levels/level_1/data.json b/DATA/Levels/level_1/data.json new file mode 100644 index 0000000..f1c7b75 --- /dev/null +++ b/DATA/Levels/level_1/data.json @@ -0,0 +1,108 @@ +{ + "name": "default", + "starting_position": { + "x": 6, + "y": 1 + }, + "enemies": [ + { + "type": "spider", + "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png", + "x": 1, + "y": 6 + }, + { + "type": "spider", + "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png", + "x": 1, + "y": 2 + }, + { + "type": "spider", + "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png", + "x": 12, + "y": 3 + }, + { + "type": "spider", + "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png", + "x": 10, + "y": 8 + } + ], + "floor": [ + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 0, + "x_start": 6, + "x_end": 8 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 1, + "x_start": 3, + "x_end": 11 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 1, + "x_start": 3, + "x_end": 11 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 2, + "x_start": 1, + "x_end": 12 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 3, + "x_start": 0, + "x_end": 12 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 4, + "x_start": 0, + "x_end": 12 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 5, + "x_start": 1, + "x_end": 13 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 6, + "x_start": 1, + "x_end": 13 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 7, + "x_start": 1, + "x_end": 13 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 8, + "x_start": 4, + "x_end": 11 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 9, + "x_start": 5, + "x_end": 8 + }, + { + "sprite": "DATA/Sprites/Floor/floor_grey.png", + "y": 10, + "x_start": 5, + "x_end": 6 + } + ] + +} \ No newline at end of file diff --git a/DATA/Sprites/Enemies/Tier 0/healthy_food.aseprite b/DATA/Sprites/Enemies/Tier 0/healthy_food.aseprite new file mode 100644 index 0000000..42d44fa Binary files /dev/null and b/DATA/Sprites/Enemies/Tier 0/healthy_food.aseprite differ diff --git a/DATA/Sprites/Enemies/Tier 0/healthy_food.png b/DATA/Sprites/Enemies/Tier 0/healthy_food.png new file mode 100644 index 0000000..e0c2b3a Binary files /dev/null and b/DATA/Sprites/Enemies/Tier 0/healthy_food.png differ diff --git a/DATA/Sprites/Enemies/Tier 1/little-spider.aseprite b/DATA/Sprites/Enemies/Tier 1/little-spider.aseprite new file mode 100644 index 0000000..c58316a Binary files /dev/null and b/DATA/Sprites/Enemies/Tier 1/little-spider.aseprite differ diff --git a/DATA/Sprites/Enemies/Tier 1/little-spider.png b/DATA/Sprites/Enemies/Tier 1/little-spider.png new file mode 100644 index 0000000..cfa5a30 Binary files /dev/null and b/DATA/Sprites/Enemies/Tier 1/little-spider.png differ diff --git a/DATA/Sprites/Floor/floor_grey.aseprite b/DATA/Sprites/Floor/floor_grey.aseprite new file mode 100644 index 0000000..48b6918 Binary files /dev/null and b/DATA/Sprites/Floor/floor_grey.aseprite differ diff --git a/DATA/Sprites/Floor/floor_grey.png b/DATA/Sprites/Floor/floor_grey.png new file mode 100644 index 0000000..f3131c0 Binary files /dev/null and b/DATA/Sprites/Floor/floor_grey.png differ diff --git a/DATA/Sprites/Floor/move_ghost.aseprite b/DATA/Sprites/Floor/move_ghost.aseprite new file mode 100644 index 0000000..b59773c Binary files /dev/null and b/DATA/Sprites/Floor/move_ghost.aseprite differ diff --git a/DATA/Sprites/Floor/move_ghost.png b/DATA/Sprites/Floor/move_ghost.png new file mode 100644 index 0000000..874d83b Binary files /dev/null and b/DATA/Sprites/Floor/move_ghost.png differ diff --git a/DATA/Sprites/Floor/simple_border.aseprite b/DATA/Sprites/Floor/simple_border.aseprite new file mode 100644 index 0000000..dd98e11 Binary files /dev/null and b/DATA/Sprites/Floor/simple_border.aseprite differ diff --git a/DATA/Sprites/Floor/simple_border.png b/DATA/Sprites/Floor/simple_border.png new file mode 100644 index 0000000..dc16d67 Binary files /dev/null and b/DATA/Sprites/Floor/simple_border.png differ diff --git a/DATA/Sprites/Snake/body-rotate.aseprite b/DATA/Sprites/Snake/body-rotate.aseprite new file mode 100644 index 0000000..cc4ef42 Binary files /dev/null and b/DATA/Sprites/Snake/body-rotate.aseprite differ diff --git a/DATA/Sprites/Snake/body-rotate.png b/DATA/Sprites/Snake/body-rotate.png new file mode 100644 index 0000000..06c3c36 Binary files /dev/null and b/DATA/Sprites/Snake/body-rotate.png differ diff --git a/DATA/Sprites/Snake/body.aseprite b/DATA/Sprites/Snake/body.aseprite new file mode 100644 index 0000000..b2d7e37 Binary files /dev/null and b/DATA/Sprites/Snake/body.aseprite differ diff --git a/DATA/Sprites/Snake/body.png b/DATA/Sprites/Snake/body.png new file mode 100644 index 0000000..0a66164 Binary files /dev/null and b/DATA/Sprites/Snake/body.png differ diff --git a/DATA/Sprites/Snake/head.aseprite b/DATA/Sprites/Snake/head.aseprite new file mode 100644 index 0000000..039b8f7 Binary files /dev/null and b/DATA/Sprites/Snake/head.aseprite differ diff --git a/DATA/Sprites/Snake/head.png b/DATA/Sprites/Snake/head.png new file mode 100644 index 0000000..370d62f Binary files /dev/null and b/DATA/Sprites/Snake/head.png differ diff --git a/DATA/Sprites/Snake/tail.aseprite b/DATA/Sprites/Snake/tail.aseprite new file mode 100644 index 0000000..f55b22a Binary files /dev/null and b/DATA/Sprites/Snake/tail.aseprite differ diff --git a/DATA/Sprites/Snake/tail.png b/DATA/Sprites/Snake/tail.png new file mode 100644 index 0000000..ec9f76b Binary files /dev/null and b/DATA/Sprites/Snake/tail.png differ diff --git a/__pycache__/fill_level.cpython-313.pyc b/__pycache__/fill_level.cpython-313.pyc new file mode 100644 index 0000000..34fb338 Binary files /dev/null and b/__pycache__/fill_level.cpython-313.pyc differ diff --git a/fill_level.py b/fill_level.py new file mode 100644 index 0000000..9bece64 --- /dev/null +++ b/fill_level.py @@ -0,0 +1,108 @@ +import json + + +class filler(): + def __init__(self, name = "None", floor_code = []): + self.name = name + self.floor_code = floor_code if floor_code else self.get_default_floor_code() + + def export2json(self): + filename = f"DATA/Levels/{self.name}/data.json" + with open(filename, 'w') as f: + json.dump(self.level_data, f) + + def fill_level(self, floor_code, name = "Default"): + self.level_data = { + "name": name, + "start_point": { + "x": 4, + "y": 8, + }, + "enemy_types": [ + [ + { + "type": "little_spider", + "sprite": "DATA/Sprites/Enemies/Tier 1/little-spider.png", + } + ], + [ + { + "type": "wolf", + "sprite": "DATA/Sprites/Enemies/Tier 2/wolf.png", + } + ], + ], + "enemy_spawns": [ + { "x" : 1, "y" : 2 }, + { "x" : 3, "y" : 12 }, + { "x" : 1, "y" : 6 }, + { "x" : 10, "y" : 10 } + ], + "size" : [], + "floor": [] + } + # Загрузка пола + + # floor_code - закодированная информация об уровне, представляет собой ас массив последовательностей 2х чисел: + # начало пола, конец пола + # Ключами являются координаты по y + + sprite = "DATA/Sprites/Floor/floor_grey.png" + y = 0 + x_max = 1 + y_max = 1 + + while y < 15: + if y in floor_code: + for x_len in floor_code[y]: + x = x_len["s"] + while x <= x_len["e"]: + if x > x_max: x_max = x + self.level_data["floor"].append({"sprite": sprite, "x": x, "y": y}) + x = x+1 + if y > y_max: y_max = y + y = y + 1 + else: + break + + self.level_data["size"] = [x_max, y_max] + + def get_default_floor_code(self): + return { + 0: [ + { "s" : 5, "e" : 6 }, + { "s" : 10, "e" : 12 }, + ], + 1:[ + { "s" : 5, "e" : 13 }, + ], + 2:[ + { "s" : 4, "e" : 13 }, + ], + 3:[ + { "s" : 1, "e" : 13 }, + ], + 4:[ + { "s" : 1, "e" : 13 }, + ], + 5:[ + { "s" : 1, "e" : 13 }, + ], + 6:[ + { "s" : 0, "e" : 12 }, + ], + 7:[ + { "s" : 0, "e" : 12 }, + ], + 8:[ + { "s" : 1, "e" : 12 }, + ], + 9:[ + { "s" : 3, "e" : 11 }, + ], + 10:[ + { "s" : 6, "e" : 8 }, + ] + } + + diff --git a/main.py b/main.py index e69de29..fc74e4c 100644 --- a/main.py +++ b/main.py @@ -0,0 +1,208 @@ +import arcade +import json +import math +from fill_level import filler + +SCREEN_WIDTH = 800 +SCREEN_HEIGHT = 600 + +class body(): + def __init__(self, x, y, rotate, type): + self.x = x + self.y = y + self.rotate = rotate + self.type = type + +class SNAKE(): + def __init__(self, star_point_x, star_point_y, start_rotate = 90): + self.body = [ + body(star_point_x, star_point_y, start_rotate, "head"), + body(star_point_x - 1, star_point_y, start_rotate, "tail") + ] + def move(self, vector): + self.body[0].rotate = vector * 90 + i = 0 + while i < len(self.body): + if self.body[i].type == "body" or self.body[i].type == "tail": + self.body[i].x = self.body[i-1].x + self.body[i].y = self.body[i-1].y + self.body[i].rotate = self.body[i-1].rotate + i = i + 1 + a = int(math.cos(-self.body[0].rotate * math.pi / 180)) + self.body[0].x = int(-math.sin(-self.body[0].rotate * math.pi / 180)) + self.body[0].x + self.body[0].y = int(math.cos(-self.body[0].rotate * math.pi / 180)) + self.body[0].y + + # print(f"Move {vector}") + +class Level_data(): + def __init__(self, level_data_json = []): + if level_data_json: + self.fill_grid(level_data_json) + + def fill_grid(self, level_data_json): + self.name = level_data_json["name"] + self.floor = level_data_json["floor"] + self.size = level_data_json["size"] + self.enemy_types = level_data_json["enemy_types"] + self.enemy_spawns = level_data_json["enemy_spawns"] + self.start_point = level_data_json["start_point"] + +class MYGAME(arcade.Window): + Sprites = [] + + def __init__(self, width, height): + super().__init__(width, height) + arcade.set_background_color(arcade.color.AMAZON) + + def setup(self, level_name): + + print(f"Upload level: {level_name}") + + with open(f'./DATA/Levels/{level_name}/data.json', 'r') as file: + self.Lvl_data = Level_data(json.load(file)) + + if self.Lvl_data.name : + print(f"{self.Lvl_data.name} loaded") + else: + print("Error to load level") + + self.player_list = arcade.SpriteList() + self.floor_list = arcade.SpriteList() + self.eat_list = arcade.SpriteList() + self.enemies_list = arcade.SpriteList() + self.enemy_spanw = arcade.SpriteList() + + grid = fill_empty_grid() + self.floor_grid = self.arr2grid(self.Lvl_data.floor, grid) + self.print_grid(self.floor_grid) + self.snake = SNAKE(self.Lvl_data.start_point["x"], self.Lvl_data.start_point["y"]) + + # Счет + self.score = 0 + self.scale_ = 1.3 + + screen_center = [SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2] + self.level_start = [screen_center[0] - self.Lvl_data.size[0] * 16 * self.scale_, screen_center[1] - self.Lvl_data.size[1] * 16 * self.scale_] + + # Загрузка змеи + for body in self.snake.body: + snake_sprite = arcade.Sprite(f"./DATA/Sprites/Snake/{body.type}.png", self.scale_) + snake_sprite.angle = 90 + snake_sprite.center_x = self.level_start[0] - 16 + ( body.x + 1 ) * 32 * self.scale_ + snake_sprite.center_y = self.level_start[1] - 16 + ( body.y + 1 ) * 32 * self.scale_ + self.player_list.append(snake_sprite) + + # Загрузка пола + for floor in self.Lvl_data.floor: + floor_sprite = arcade.Sprite(floor["sprite"], self.scale_) + floor_sprite.center_x = self.level_start[0] - 16 + ( floor["x"] + 1 ) * 32 * self.scale_ + floor_sprite.center_y = self.level_start[1] - 16 + ( floor["y"] + 1 ) * 32 * self.scale_ + self.floor_list.append(floor_sprite) + + # Загрузка врагов + # if "enemies" in self.level_data: + # for enemy in self.level_data["enemies"]: + # enemy_sprite = arcade.Sprite(enemy["sprite"], 1) + # enemy_sprite.center_x = enemy["x"] * 32 + # enemy_sprite.center_y = enemy["y"] * 32 + # self.enemies_list.append(enemy_sprite) + + def update(self): + if len(self.snake.body) > 0: + i = 0 + while i < len(self.snake.body): + self.player_list[i] = arcade.Sprite(f"./DATA/Sprites/Snake/{self.snake.body[i].type}.png", self.scale_) + self.player_list[i].angle = self.snake.body[i].rotate + self.player_list[i].center_x = self.level_start[0] - 16 + ( self.snake.body[i].x + 1 ) * 32 * self.scale_ + self.player_list[i].center_y = self.level_start[1] - 16 + ( self.snake.body[i].y + 1 ) * 32 * self.scale_ + i = i + 1 + + def print_grid(self, grid): + x = 0 + y = 15 + print_ = '' + while y > 0: + while x < 15: + print_ += " " if grid[y][x] == 0 else "1 " + x += 1 + print(print_) + print_ = '' + y -= 1 + x = 0 + + + def arr2grid(self, arr, grid): + for point in arr: + grid[point["y"]][point["x"]] = 1 + return grid + + # Обработка нажатий + MOVEMENT_SPEED = 1 + + def on_key_press(self, key, modifiers): + """Вызывается при нажатии пользователем клавиши""" + + # Get the first sprite (head) from the player list + if len(self.player_list) > 0: + + if key in (arcade.key.UP, arcade.key.W): + if self.floor_grid[self.snake.body[0].y + 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 180: + self.snake.move(0) + + elif key in (arcade.key.DOWN, arcade.key.S): + if self.floor_grid[self.snake.body[0].y - 1][self.snake.body[0].x] == 1 and self.snake.body[0].rotate != 0: + self.snake.move(2) + + elif key in (arcade.key.LEFT, arcade.key.A): + if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x - 1] == 1 and self.snake.body[0].rotate != 90: + self.snake.move(3) + + elif key in (arcade.key.RIGHT, arcade.key.D): + if self.floor_grid[self.snake.body[0].y][self.snake.body[0].x + 1] == 1 and self.snake.body[0].rotate != 270: + self.snake.move(1) + + def on_key_release(self, key, modifiers): + """Вызывается, когда пользователь отпускает клавишу""" + if len(self.player_list) > 0: + self.player_sprite = self.player_list[0] + + if key in (arcade.key.UP, arcade.key.DOWN, arcade.key.W, arcade.key.S): + self.player_sprite.change_y = 0 + elif key in (arcade.key.LEFT, arcade.key.RIGHT, arcade.key.A, arcade.key.D): + self.player_sprite.change_x = 0 + def on_draw(self): + self.update() + # Очищаем экран перед каждой отрисовкой + self.clear() + # Отрисовываем все спрайты + self.floor_list.draw() + self.enemies_list.draw() + self.eat_list.draw() + self.player_list.draw() + + +def fill_empty_grid(): + grid = [] + y = 0 + x = 0 + while y < 15: + grid.append([]) + while x < 15: + grid[y].append([x]) + grid[y][x] = 0 + x = x + 1 + y = y + 1 + x = 0 + return grid + +def main(): + filler_ = filler("Default") + filler_.fill_level(filler_.floor_code) + filler_.export2json() + + game = MYGAME(SCREEN_WIDTH, SCREEN_HEIGHT) + game.setup( "Default" ) + arcade.run() + +if __name__ == "__main__": + main() \ No newline at end of file