mirror of
https://github.com/duckduckdoof/miniopolis.git
synced 2025-03-22 11:42:19 +00:00
Added basic game logic class
This commit is contained in:
parent
be57a7a3ed
commit
d2e217ae9f
3 changed files with 128 additions and 18 deletions
|
@ -42,3 +42,25 @@ TEST_MAP = MAPS + "default-map.json"
|
||||||
# Layers for Map
|
# Layers for Map
|
||||||
LAYER_STRUCTURES = "Structures"
|
LAYER_STRUCTURES = "Structures"
|
||||||
LAYER_ENVIRONMENT = "Environment"
|
LAYER_ENVIRONMENT = "Environment"
|
||||||
|
|
||||||
|
# Tile Types
|
||||||
|
LOGGER = "LoggerTile"
|
||||||
|
CROPS = "CropsTile"
|
||||||
|
HYDROPOWER = "HydroPowerTile"
|
||||||
|
HOUSING = "HousingTile"
|
||||||
|
MINER = "MinerTile"
|
||||||
|
FACTORY = "FactoryTile"
|
||||||
|
JUNCTION = "JunctionTile"
|
||||||
|
|
||||||
|
GROUND = "GroundTile"
|
||||||
|
WATER = "WaterTile"
|
||||||
|
IRON = "IronTile"
|
||||||
|
TREES = "TreesTile"
|
||||||
|
|
||||||
|
# Game Starting Resources
|
||||||
|
STARTING_RESOURCES = {
|
||||||
|
"iron": 50,
|
||||||
|
"wood": 100,
|
||||||
|
"people": 10,
|
||||||
|
"food": 200
|
||||||
|
}
|
35
lib/game_logic.py
Normal file
35
lib/game_logic.py
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
"""
|
||||||
|
game_logic.py
|
||||||
|
|
||||||
|
author: Caleb Scott
|
||||||
|
|
||||||
|
Internal logic for the game world.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# IMPORTS -----------------------------------------------------------
|
||||||
|
|
||||||
|
import arcade
|
||||||
|
from game_config import *
|
||||||
|
|
||||||
|
# CLASSES -----------------------------------------------------------
|
||||||
|
|
||||||
|
class GameLogic:
|
||||||
|
|
||||||
|
def __init__(self, scene, starting_resources):
|
||||||
|
|
||||||
|
# Initializes the game board (from arcade Scene)
|
||||||
|
# and starting resources
|
||||||
|
self.scene = scene
|
||||||
|
self.resources = starting_resources
|
||||||
|
|
||||||
|
def place_structure(self, x, y):
|
||||||
|
"""
|
||||||
|
Game logic for placing a structure, if valid.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def delete_structure(self, x, y):
|
||||||
|
"""
|
||||||
|
Game logic for deleting a structure, if valid.
|
||||||
|
"""
|
||||||
|
pass
|
|
@ -9,8 +9,9 @@ First attempt to make a tile-based colony-sim game.
|
||||||
# IMPORTS -----------------------------------------------------------
|
# IMPORTS -----------------------------------------------------------
|
||||||
|
|
||||||
import arcade
|
import arcade
|
||||||
import arcade.key
|
|
||||||
from lib.game_config import *
|
from lib.game_config import *
|
||||||
|
from lib.game_logic import GameLogic
|
||||||
|
|
||||||
# CLASSES -----------------------------------------------------------
|
# CLASSES -----------------------------------------------------------
|
||||||
|
|
||||||
|
@ -45,7 +46,11 @@ class GameBoard(arcade.Window):
|
||||||
|
|
||||||
# Tiles selection
|
# Tiles selection
|
||||||
self.selected_struct_tile = "[Nothing]"
|
self.selected_struct_tile = "[Nothing]"
|
||||||
self.selected_env_tile = "GroundTile"
|
self.selected_env_tile = GROUND
|
||||||
|
|
||||||
|
# Structure build state
|
||||||
|
self.pressed_key = None
|
||||||
|
self.build_mode = ""
|
||||||
|
|
||||||
# Render text for the game
|
# Render text for the game
|
||||||
self.structs_text = arcade.Text(
|
self.structs_text = arcade.Text(
|
||||||
|
@ -64,26 +69,71 @@ class GameBoard(arcade.Window):
|
||||||
f"SELECTED: {self.selected_struct_tile}",
|
f"SELECTED: {self.selected_struct_tile}",
|
||||||
start_x=TEXT_X, start_y=TEXT_Y - 3*TEXT_Y_WIDTH
|
start_x=TEXT_X, start_y=TEXT_Y - 3*TEXT_Y_WIDTH
|
||||||
)
|
)
|
||||||
|
self.mode_text = arcade.Text(
|
||||||
|
f"MODE: {self.build_mode}",
|
||||||
|
start_x=TEXT_X, start_y=TEXT_Y - 4*TEXT_Y_WIDTH
|
||||||
|
)
|
||||||
|
|
||||||
|
# Initialize the Game Logic class
|
||||||
|
self.game_logic = GameLogic(self.scene, STARTING_RESOURCES)
|
||||||
|
|
||||||
|
def on_key_release(self, symbol, modifiers):
|
||||||
|
if symbol == arcade.key.ESCAPE:
|
||||||
|
self.pressed_key = None
|
||||||
|
self.build_mode = ""
|
||||||
|
else:
|
||||||
|
self.pressed_key = symbol
|
||||||
|
if self.pressed_key == arcade.key.X:
|
||||||
|
self.build_mode = "Delete Structure"
|
||||||
|
elif self.pressed_key == arcade.key.L:
|
||||||
|
self.build_mode = "Place Logger (must be on trees tile)"
|
||||||
|
elif self.pressed_key == arcade.key.C:
|
||||||
|
self.build_mode = "Place Crops"
|
||||||
|
elif self.pressed_key == arcade.key.W:
|
||||||
|
self.build_mode = "Place Hydro Power (must be adjacent to water)"
|
||||||
|
elif self.pressed_key == arcade.key.H:
|
||||||
|
self.build_mode = "Place Housing"
|
||||||
|
elif self.pressed_key == arcade.key.M:
|
||||||
|
self.build_mode = "Place Miner (must be on iron tile)"
|
||||||
|
elif self.pressed_key == arcade.key.F:
|
||||||
|
self.build_mode = "Place Factory"
|
||||||
|
elif self.pressed_key == arcade.key.J:
|
||||||
|
self.build_mode = "Place Junction"
|
||||||
|
else:
|
||||||
|
self.pressed_key = None
|
||||||
|
self.build_mode = ""
|
||||||
|
|
||||||
def on_mouse_release(self, x, y, button, modifiers):
|
def on_mouse_release(self, x, y, button, modifiers):
|
||||||
|
if self.pressed_key == arcade.key.X:
|
||||||
# Check if button was held -- this means we place structure tiles or delete them
|
self.game_logic.delete_structure(x, y)
|
||||||
if button == arcade.key.X:
|
elif self.pressed_key == arcade.key.L:
|
||||||
print("Delete!")
|
self.game_logic.place_structure(LOGGER, x, y)
|
||||||
|
elif self.pressed_key == arcade.key.C:
|
||||||
# Checking structure tile type
|
self.game_logic.place_structure(CROPS, x, y)
|
||||||
s_tiles = arcade.get_sprites_at_point((x,y), self.scene[LAYER_STRUCTURES])
|
elif self.pressed_key == arcade.key.W:
|
||||||
if len(s_tiles) == 1:
|
self.game_logic.place_structure(HYDROPOWER, x, y)
|
||||||
self.selected_struct_tile = s_tiles[0].properties['type']
|
elif self.pressed_key == arcade.key.H:
|
||||||
|
self.game_logic.place_structure(HOUSING, x, y)
|
||||||
|
elif self.pressed_key == arcade.key.M:
|
||||||
|
self.game_logic.place_structure(MINER, x, y)
|
||||||
|
elif self.pressed_key == arcade.key.F:
|
||||||
|
self.game_logic.place_structure(FACTORY, x, y)
|
||||||
|
elif self.pressed_key == arcade.key.J:
|
||||||
|
self.game_logic.place_structure(JUNCTION, x, y)
|
||||||
else:
|
else:
|
||||||
self.selected_struct_tile = "[Nothing]"
|
# Checking structure tile type
|
||||||
|
s_tiles = arcade.get_sprites_at_point((x,y), self.scene[LAYER_STRUCTURES])
|
||||||
|
if len(s_tiles) == 1:
|
||||||
|
self.selected_struct_tile = s_tiles[0].properties['type']
|
||||||
|
else:
|
||||||
|
self.selected_struct_tile = "[Nothing]"
|
||||||
|
|
||||||
# Checking environment tile type
|
# Checking environment tile type
|
||||||
e_tiles = arcade.get_sprites_at_point((x,y), self.scene[LAYER_ENVIRONMENT])
|
e_tiles = arcade.get_sprites_at_point((x,y), self.scene[LAYER_ENVIRONMENT])
|
||||||
if len(e_tiles) == 1:
|
if len(e_tiles) == 1:
|
||||||
self.selected_env_tile = e_tiles[0].properties['type']
|
self.selected_env_tile = e_tiles[0].properties['type']
|
||||||
else:
|
else:
|
||||||
self.selected_env_tile = "GroundTile"
|
self.selected_env_tile = GROUND
|
||||||
|
|
||||||
def on_draw(self):
|
def on_draw(self):
|
||||||
"""
|
"""
|
||||||
|
@ -105,6 +155,9 @@ class GameBoard(arcade.Window):
|
||||||
self.resources_text.text = f"RESOURCES: People: 0, Iron: 0, Wood: 0, Food: 0"
|
self.resources_text.text = f"RESOURCES: People: 0, Iron: 0, Wood: 0, Food: 0"
|
||||||
self.resources_text.draw()
|
self.resources_text.draw()
|
||||||
|
|
||||||
|
self.mode_text.text = f"MODE: {self.build_mode}"
|
||||||
|
self.mode_text.draw()
|
||||||
|
|
||||||
# MAIN --------------------------------------------------------------
|
# MAIN --------------------------------------------------------------
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
Loading…
Add table
Reference in a new issue