From d4b5a1b79963f91b738cda2609841874095b310a Mon Sep 17 00:00:00 2001 From: Xevion Date: Sun, 19 Apr 2020 23:35:22 -0500 Subject: [PATCH 1/8] optimize imports and change to extend instead of double append in main.py --- triple-dungeon/main.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/triple-dungeon/main.py b/triple-dungeon/main.py index ff0841c..56e6a5b 100644 --- a/triple-dungeon/main.py +++ b/triple-dungeon/main.py @@ -8,8 +8,7 @@ import arcade from config import Config from map import Dungeon -from mobs import Player -from mobs import Enemy +from mobs import Player, Enemy class Game(arcade.Window): @@ -34,7 +33,7 @@ class Game(arcade.Window): # Our physics engine self.physics_engine = None - # list to keep track of keypresses + # list to keep track of key presses self.prev_keypress = [] # Used to keep track of our scrolling @@ -57,11 +56,12 @@ class Game(arcade.Window): # Create the dungeon dungeon = Dungeon() self.floor_list, self.wall_list = dungeon.get_lists() - # Create monsters - self.enemy_list.append(Enemy("resources/images/monsters/ghost/ghost1.png", 200, 200).get_enemy()) - self.enemy_list.append(Enemy("resources/images/monsters/frog/frog1.png", 200, 1000).get_enemy()) + self.enemy_list.extend([ + Enemy("resources/images/monsters/ghost/ghost1.png", 200, 200).get_enemy(), + Enemy("resources/images/monsters/frog/frog1.png", 200, 1000).get_enemy() + ]) # Create the 'physics engine' self.physics_engine = arcade.PhysicsEngineSimple(self.player_sprite, self.wall_list) From 7d9efa4da131f6346971568070688c6995d03e28 Mon Sep 17 00:00:00 2001 From: Xevion Date: Sun, 19 Apr 2020 23:45:01 -0500 Subject: [PATCH 2/8] create new sprites class for holding sprite paths --- triple-dungeon/config.py | 21 +++++++++++++++++++-- triple-dungeon/main.py | 6 +++--- triple-dungeon/mobs.py | 5 ++--- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/triple-dungeon/config.py b/triple-dungeon/config.py index 313b102..2c00dfb 100644 --- a/triple-dungeon/config.py +++ b/triple-dungeon/config.py @@ -3,7 +3,11 @@ config.py Holds all constants used for setting up the game. May later hold functions for loading/saving configuration files. """ +import os +BASE_PATH = os.path.dirname(os.path.abspath(__file__)) +RESOURCES = os.path.join(BASE_PATH, "resources") +IMAGES = os.path.join(RESOURCES, "images") class Config(object): """ @@ -23,9 +27,22 @@ class Config(object): # Movement speed of player, in pixels per frame PLAYER_MOVEMENT_SPEED = 7 - # How many pixels to keep as a minimum margin between the character - # and the edge of the screen. + # How many pixels to keep as a minimum margin between the character and the edge of the screen. LEFT_VIEWPORT_MARGIN = 250 RIGHT_VIEWPORT_MARGIN = 250 BOTTOM_VIEWPORT_MARGIN = 50 TOP_VIEWPORT_MARGIN = 100 + + +class Sprites(object): + """ + Simple class for holding sprite paths. + """ + + __MONSTERS = os.path.join(IMAGES, "monsters") + + SKELETON = os.path.join(__MONSTERS, "skeleton.png") + GHOST = os.path.join(__MONSTERS, "ghost", "ghost1.png") + FROG = os.path.join(__MONSTERS, "frog", "frog1.png") + + print(SKELETON, GHOST, FROG) \ No newline at end of file diff --git a/triple-dungeon/main.py b/triple-dungeon/main.py index 56e6a5b..7d7e4db 100644 --- a/triple-dungeon/main.py +++ b/triple-dungeon/main.py @@ -6,9 +6,9 @@ Holds the main game window, as well as manages basic functions for organizing th import arcade -from config import Config from map import Dungeon from mobs import Player, Enemy +from config import Config, Sprites class Game(arcade.Window): @@ -59,8 +59,8 @@ class Game(arcade.Window): # Create monsters self.enemy_list.extend([ - Enemy("resources/images/monsters/ghost/ghost1.png", 200, 200).get_enemy(), - Enemy("resources/images/monsters/frog/frog1.png", 200, 1000).get_enemy() + Enemy(Sprites.GHOST, 200, 200).get_enemy(), + Enemy(Sprites.FROG, 200, 1000).get_enemy() ]) # Create the 'physics engine' diff --git a/triple-dungeon/mobs.py b/triple-dungeon/mobs.py index d6656ab..bf72e6c 100644 --- a/triple-dungeon/mobs.py +++ b/triple-dungeon/mobs.py @@ -5,7 +5,7 @@ Organizes all classes related to Mobs, Entities, Enemies, Players and Items. import arcade -from config import Config +from config import Config, Sprites class Mob(object): @@ -37,8 +37,7 @@ class Player(Mob): super(Player, self).__init__(*args, **kwargs) def setup(self): - image_source = "resources/images/monsters/skeleton.png" - self.player_sprite = arcade.Sprite(image_source, Config.CHARACTER_SCALING) + self.player_sprite = arcade.Sprite(Sprites.SKELETON, Config.CHARACTER_SCALING) self.player_sprite.center_x = Config.SCREEN_WIDTH / 2 self.player_sprite.center_y = Config.SCREEN_HEIGHT / 2 self.player_sprite.scale = 4 From 54bf86f2c7e70553ab5bc0a3f1d2f5e17723397c Mon Sep 17 00:00:00 2001 From: Xevion Date: Sun, 19 Apr 2020 23:48:04 -0500 Subject: [PATCH 3/8] remove print, remove add_level and get_lists function, fix comment --- triple-dungeon/config.py | 2 -- triple-dungeon/main.py | 2 +- triple-dungeon/map.py | 11 +++-------- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/triple-dungeon/config.py b/triple-dungeon/config.py index 2c00dfb..edc98e8 100644 --- a/triple-dungeon/config.py +++ b/triple-dungeon/config.py @@ -44,5 +44,3 @@ class Sprites(object): SKELETON = os.path.join(__MONSTERS, "skeleton.png") GHOST = os.path.join(__MONSTERS, "ghost", "ghost1.png") FROG = os.path.join(__MONSTERS, "frog", "frog1.png") - - print(SKELETON, GHOST, FROG) \ No newline at end of file diff --git a/triple-dungeon/main.py b/triple-dungeon/main.py index 7d7e4db..641d728 100644 --- a/triple-dungeon/main.py +++ b/triple-dungeon/main.py @@ -55,7 +55,7 @@ class Game(arcade.Window): # Create the dungeon dungeon = Dungeon() - self.floor_list, self.wall_list = dungeon.get_lists() + self.floor_list, self.wall_list = dungeon.floor_list, dungeon.wall_list # Create monsters self.enemy_list.extend([ diff --git a/triple-dungeon/map.py b/triple-dungeon/map.py index c61304a..0b33104 100644 --- a/triple-dungeon/map.py +++ b/triple-dungeon/map.py @@ -59,16 +59,11 @@ class Dungeon(object): self.floor_list.extend(room_floor) self.wall_list.extend(room_wall) - - #self.level_count, self.size = level_count, size - #self.levels = [[None for y in range(size)] for x in range(size)] # array[x][y] style access + # self.level_count, self.size = level_count, size + # self.levels = [[None for y in range(size)] for x in range(size)] # array[x][y] style access def get_lists(self): - return (self.floor_list, self.wall_list) - - def add_level(self, sprit_list): - for x in sprit_list: - self.levels.append(x) + return self.floor_list, self.wall_list def render(self) -> None: """ From 6b26ac5f0d80a55280c1e216ba560a2e59db5612 Mon Sep 17 00:00:00 2001 From: Xevion Date: Sun, 19 Apr 2020 23:48:56 -0500 Subject: [PATCH 4/8] just access the public sprite instead --- triple-dungeon/main.py | 4 ++-- triple-dungeon/mobs.py | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/triple-dungeon/main.py b/triple-dungeon/main.py index 641d728..9abb7e7 100644 --- a/triple-dungeon/main.py +++ b/triple-dungeon/main.py @@ -59,8 +59,8 @@ class Game(arcade.Window): # Create monsters self.enemy_list.extend([ - Enemy(Sprites.GHOST, 200, 200).get_enemy(), - Enemy(Sprites.FROG, 200, 1000).get_enemy() + Enemy(Sprites.GHOST, 200, 200).sprite, + Enemy(Sprites.FROG, 200, 1000).sprite ]) # Create the 'physics engine' diff --git a/triple-dungeon/mobs.py b/triple-dungeon/mobs.py index bf72e6c..a833dcc 100644 --- a/triple-dungeon/mobs.py +++ b/triple-dungeon/mobs.py @@ -58,9 +58,6 @@ class Enemy(Mob): def __init__(self, *args, **kwargs) -> None: super(Enemy, self).__init__(*args, **kwargs) - def get_enemy(self): - return self.sprite - def tick(self) -> None: """ A on_update function, the Enemy Mob should scan for the player, decide how to path to it, and From 592bb8249e7be37155502e710ecf3d6acfd3de0c Mon Sep 17 00:00:00 2001 From: Xevion Date: Sun, 19 Apr 2020 23:50:28 -0500 Subject: [PATCH 5/8] forgot to remove get_lists function --- triple-dungeon/map.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/triple-dungeon/map.py b/triple-dungeon/map.py index 0b33104..012eee3 100644 --- a/triple-dungeon/map.py +++ b/triple-dungeon/map.py @@ -62,8 +62,6 @@ class Dungeon(object): # self.level_count, self.size = level_count, size # self.levels = [[None for y in range(size)] for x in range(size)] # array[x][y] style access - def get_lists(self): - return self.floor_list, self.wall_list def render(self) -> None: """ From ce53b0be2b83bcbe233471ac9a878a3bb867d05f Mon Sep 17 00:00:00 2001 From: Xevion Date: Sun, 19 Apr 2020 23:52:51 -0500 Subject: [PATCH 6/8] use modulus to skip extra rotations, use _ for repeated code --- triple-dungeon/map.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/triple-dungeon/map.py b/triple-dungeon/map.py index 012eee3..8d39b61 100644 --- a/triple-dungeon/map.py +++ b/triple-dungeon/map.py @@ -148,6 +148,6 @@ class Level: def rotate_level(self, times_rotated): m = np.array(self.level) print(m) - for i in range(0, times_rotated): + for _ in range(0, times_rotated % 4): m = np.rot90(m) self.level = m.tolist() \ No newline at end of file From a25f160e1aabc4146cdb067f68a82cee0794b538 Mon Sep 17 00:00:00 2001 From: Xevion Date: Mon, 20 Apr 2020 00:01:35 -0500 Subject: [PATCH 7/8] general refactoring in map.py, fixing PEP8 conventions --- triple-dungeon/map.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/triple-dungeon/map.py b/triple-dungeon/map.py index 8d39b61..87b4c76 100644 --- a/triple-dungeon/map.py +++ b/triple-dungeon/map.py @@ -11,6 +11,7 @@ import arcade import json import numpy as np + class Dungeon(object): """ Organizes Level objects into an easy to render and path through object. @@ -33,11 +34,10 @@ class Dungeon(object): center = Level() center.load_file('resources/levels/map1/center.json') center.render() - center_floor, center_wall = center.get_lists() + center_floor, center_wall = center.floor_list, center.wall_list self.floor_list.extend(center_floor) self.wall_list.extend(center_wall) - # get a side room room = Level() room.load_file('resources/levels/map1/room.json') @@ -62,7 +62,6 @@ class Dungeon(object): # self.level_count, self.size = level_count, size # self.levels = [[None for y in range(size)] for x in range(size)] # array[x][y] style access - def render(self) -> None: """ Calls render on all level @@ -98,10 +97,10 @@ class Level: # the dungeon can be mapped by a proper pathfinding system. self.floor_list = [] self.wall_list = [] - #self.entrances = [] + # self.entrances = [] - #@staticmethod - def load_file(self, path: str) -> Level: + @staticmethod + def load_file(path: str) -> Level: """ Builds a Level from a given file path. @@ -110,10 +109,10 @@ class Level: """ self.floor_list = arcade.SpriteList() self.wall_list = arcade.SpriteList() - with open(path) as file: level = json.load(file) + self.sprites = level['elements'] self.level = level['structure'] @@ -134,20 +133,20 @@ class Level: floor = arcade.Sprite(sprite, Config.TILE_SCALING) floor.center_x = x_pos floor.center_y = y_pos - if(cur_tile == ' '): + if cur_tile == ' ': self.floor_list.append(floor) - elif(cur_tile == 'w'): + elif cur_tile == 'w': self.wall_list.append(floor) x += 1 x = 0 y += 1 def get_lists(self): - return (self.floor_list, self.wall_list) + return self.floor_list, self.wall_list def rotate_level(self, times_rotated): m = np.array(self.level) print(m) for _ in range(0, times_rotated % 4): m = np.rot90(m) - self.level = m.tolist() \ No newline at end of file + self.level = m.tolist() From 0fb15c769861df6232f69d63ca8547993f052c5f Mon Sep 17 00:00:00 2001 From: Xevion Date: Mon, 20 Apr 2020 01:01:30 -0500 Subject: [PATCH 8/8] undo static method - will resolve into proper static method later --- triple-dungeon/map.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/triple-dungeon/map.py b/triple-dungeon/map.py index 11f3a3c..be81f45 100644 --- a/triple-dungeon/map.py +++ b/triple-dungeon/map.py @@ -100,8 +100,7 @@ class Level: self.wall_list = [] # self.entrances = [] - @staticmethod - def load_file(path: str) -> Level: + def load_file(self, path: str): """ Builds a Level from a given file path.