diff --git a/triple-dungeon/config.py b/triple-dungeon/config.py index 9a3b166..1a799cd 100644 --- a/triple-dungeon/config.py +++ b/triple-dungeon/config.py @@ -47,7 +47,7 @@ class Config(object): DEBUG = False #Monster Count to be spawned - MONSTER_COUNT = 20 + MONSTER_COUNT = 0 class Enums(Enum): diff --git a/triple-dungeon/main.py b/triple-dungeon/main.py index e1660f2..6466ba2 100644 --- a/triple-dungeon/main.py +++ b/triple-dungeon/main.py @@ -15,6 +15,7 @@ from config import Config from map import Dungeon from mobs import Player, Enemy from projectiles import Temp +from recipe import ActiveRecipe class FPSCounter: @@ -56,6 +57,7 @@ class Game(arcade.Window): self.physics_engine = None # Our physics engine # Used to keep track of our scrolling self.view_bottom = self.view_left = 0 + self.active_recipe = [] arcade.set_background_color(arcade.color.BLACK) @@ -78,6 +80,9 @@ class Game(arcade.Window): self.player.center_x, self.player.center_y = level.center() # x, y = level.center() + self.active_recipe = ActiveRecipe() + self.active_recipe.set_ghosts() + #Set up monsters for count in range(Config.MONSTER_COUNT): mob = Enemy(filename="resources/images/monsters/ghost/ghost1.png", dungeon=self.dungeon) @@ -86,28 +91,7 @@ class Game(arcade.Window): mob.scale = 4 mob.monster_type = 'ghost' self.enemy_list.append(mob) - ''' - mob = Mob(filename="resources/images/monsters/ghost/ghost1.png", dungeon=self.dungeon) - mob.center_x, mob.center_y = random.choice(self.dungeon.levelList).center() - mob.target = self.player - mob.scale = 4 - self.enemy_list.append(mob) - mob = Mob(filename="resources/images/monsters/ghost/ghost1.png", dungeon=self.dungeon) - mob.center_x, mob.center_y = random.choice(self.dungeon.levelList).center() - mob.target = self.player - mob.scale = 4 - self.enemy_list.append(mob) - mob = Mob(filename="resources/images/monsters/ghost/ghost1.png", dungeon=self.dungeon) - mob.center_x, mob.center_y = random.choice(self.dungeon.levelList).center() - mob.target = self.player - mob.scale = 4 - self.enemy_list.append(mob) - mob = Mob(filename="resources/images/monsters/ghost/ghost1.png", dungeon=self.dungeon) - mob.center_x, mob.center_y = random.choice(self.dungeon.levelList).center() - mob.target = self.player - mob.scale = 4 - self.enemy_list.append(mob) - ''' + # Setup viewport self.view_bottom = self.player.center_x - (0.5 * Config.SCREEN_WIDTH) + 300 self.view_left = self.player.center_x - (0.5 * Config.SCREEN_WIDTH) @@ -116,10 +100,6 @@ class Game(arcade.Window): self.view_bottom, Config.SCREEN_HEIGHT + self.view_bottom) - # Create monsters - # self.enemy_list.append(Enemy("resources/images/monsters/ghost/ghost1.png", 200, 200, 4)) - # self.enemy_list.append(Enemy("resources/images/monsters/frog/frog1.png", 200, 1000, 4)) - # Create the 'physics engine' self.physics_engine = arcade.PhysicsEngineSimple(self.player, self.dungeon.getWalls()) @@ -135,6 +115,7 @@ class Game(arcade.Window): self.enemy_list.draw() self.active_enemies.draw() self.bullet_list.draw() + self.active_recipe.render() if Config.DEBUG: x, y = self.player.position @@ -191,6 +172,8 @@ class Game(arcade.Window): self.prev_keypress.append(key) elif key == 65307: self.close() + elif key == 65505: + self.active_recipe.next_recipe() def on_key_release(self, key, modifiers): """Called when the user releases a key. """ @@ -207,6 +190,7 @@ class Game(arcade.Window): elif key == arcade.key.RIGHT or key == arcade.key.D: self.player.change_x = 0 self.prev_keypress.remove(key) + if self.prev_keypress: self.on_key_press(self.prev_keypress.pop(0), 0) @@ -215,8 +199,6 @@ class Game(arcade.Window): Called whenever the mouse is clicked. """ - - # Create a bullet TEMP SPRITE, currently wielding frog slingshot bullet = Temp() # Position the bullet at the player's current location @@ -322,7 +304,6 @@ class Game(arcade.Window): self.player.add_kill(enemy_hit_list[0].monster_type) enemy_hit_list[0].remove_from_sprite_lists() - # If the bullet flies off-screen, remove it. TEMP change to range calc if ( bullet.bottom < self.view_bottom or diff --git a/triple-dungeon/mobs.py b/triple-dungeon/mobs.py index 7534c2d..cfb7e25 100644 --- a/triple-dungeon/mobs.py +++ b/triple-dungeon/mobs.py @@ -63,7 +63,7 @@ class Player(Mob): # Adds a kill to kill_list. If 3 or more check the recipe then give a power up if it matches. self.kill_list.append(creature) - if self.cur_recipe == self.kill_list: + if self.cur_recipe.sort() == self.kill_list.sort(): print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++") self.kill_list = [] diff --git a/triple-dungeon/recipe.py b/triple-dungeon/recipe.py new file mode 100644 index 0000000..11630a3 --- /dev/null +++ b/triple-dungeon/recipe.py @@ -0,0 +1,60 @@ +''' +Recipes are combinations of three monsters. When a player fills a recipe they get an updgrade +''' +import arcade + +from enum import Enum + + +class Recipe(Enum): + '''A class of different recipes''' + + GHOSTS = ['ghost', 'ghost', 'ghost'] + FROGS = ['frog', 'frog', 'frog'] + GHOST_FROG = ['ghost', 'ghost', 'frog'] + FROG_GHOST = ['ghost', 'frog', 'frog'] + + +class ActiveRecipe(arcade.SpriteList): + ''' + Keeps track of the active recipe and draws it. + ''' + + def __init__(self): + super().__init__() + self.active = Recipe.GHOSTS + self.cycle_recipes = [self.set_frogs, self.set_ghosts] + self.pos = 0 + + + def render(self) -> None: + x = 0 + for sprite in self.sprite_list: + screen_right = arcade.get_viewport()[1] - 100 + screen_top = arcade.get_viewport()[3] - 80 + sprite.scale = 4 + sprite.center_x = screen_right - x + sprite.center_y = screen_top + x += 70 + sprite.draw() + + def next_recipe(self): + + self.cycle_recipes[self.pos]() + self.pos += 1 + if self.pos == len(self.cycle_recipes): + self.pos = 0 + + def set_ghosts(self) -> None: + self.active = Recipe.GHOSTS + self.sprite_list = [] + self.sprite_list.append(arcade.Sprite(filename="resources/images/monsters/ghost/ghost1.png")) + self.sprite_list.append(arcade.Sprite(filename="resources/images/monsters/ghost/ghost1.png")) + self.sprite_list.append(arcade.Sprite(filename="resources/images/monsters/ghost/ghost1.png")) + + def set_frogs(self) -> None: + self.active = Recipe.FROGS + self.sprite_list = [] + self.sprite_list.append(arcade.Sprite(filename="resources/images/monsters/frog/frog1.png")) + self.sprite_list.append(arcade.Sprite(filename="resources/images/monsters/frog/frog1.png")) + self.sprite_list.append(arcade.Sprite(filename="resources/images/monsters/frog/frog1.png")) \ No newline at end of file