Work on equipping items
This commit is contained in:
parent
8d58c9647a
commit
1cb78c4b8a
5 changed files with 90 additions and 13 deletions
|
@ -33,7 +33,7 @@ def main():
|
||||||
g = load(f"./games/{file}",l)
|
g = load(f"./games/{file}",l)
|
||||||
games.append(g)
|
games.append(g)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"{Back.RED}{Fore.RED}{l['error_loading']} {file}:")
|
print(f"{Back.RED}{Fore.WHITE}{l['error_loading']} {file}{Fore.RESET}{Back.RESET}:")
|
||||||
print(e)
|
print(e)
|
||||||
|
|
||||||
# PRINT OUT GAME SELECT
|
# PRINT OUT GAME SELECT
|
||||||
|
@ -42,6 +42,7 @@ def main():
|
||||||
else:
|
else:
|
||||||
names = []
|
names = []
|
||||||
for n in games:
|
for n in games:
|
||||||
|
if(n is not None):
|
||||||
names.append(n.name)
|
names.append(n.name)
|
||||||
m = MenuManager(names,f" TEXTY \n{l['available']}")
|
m = MenuManager(names,f" TEXTY \n{l['available']}")
|
||||||
games[m.selected].main_menu()
|
games[m.selected].main_menu()
|
||||||
|
|
|
@ -2,6 +2,13 @@ meta: # make sure every key is in lowercase
|
||||||
name: "My Text Adventure" # Game name
|
name: "My Text Adventure" # Game name
|
||||||
id: "examplegame" # An original game ID (please try to be original)
|
id: "examplegame" # An original game ID (please try to be original)
|
||||||
creator: "hernik" # Your name as a creator
|
creator: "hernik" # Your name as a creator
|
||||||
|
equippable:
|
||||||
|
- iron_sword:
|
||||||
|
atk: 3
|
||||||
|
starter: true
|
||||||
|
- chainmail:
|
||||||
|
def: 2
|
||||||
|
starter: true
|
||||||
|
|
||||||
game: # here goes all the game logic
|
game: # here goes all the game logic
|
||||||
start: # the starting point always HAS to be named "start" (lowercase), the order and name of the rest does not matter
|
start: # the starting point always HAS to be named "start" (lowercase), the order and name of the rest does not matter
|
||||||
|
|
41
lib/fight.py
41
lib/fight.py
|
@ -1,21 +1,60 @@
|
||||||
import math
|
import math
|
||||||
|
|
||||||
|
from lib.game import Item
|
||||||
from .ascii import *
|
from .ascii import *
|
||||||
|
from colorama import Fore
|
||||||
|
import keyboard
|
||||||
|
|
||||||
class FightHandler:
|
class FightHandler:
|
||||||
def __init__(self,name:str,hp:int,attacks:list,img:str="") -> None:
|
def __init__(self,message:str,name:str,hp:int,attacks:list,lang:dict,eq:Item,img:str="") -> None:
|
||||||
|
self.selected = 0
|
||||||
|
keyboard.add_hotkey("up",self.up)
|
||||||
|
keyboard.add_hotkey("down",self.down)
|
||||||
|
keyboard.add_hotkey("enter",self.attack)
|
||||||
self.name = name
|
self.name = name
|
||||||
self.max = hp # starting HP
|
self.max = hp # starting HP
|
||||||
self.hp = self.max # current HP
|
self.hp = self.max # current HP
|
||||||
self.attacks = attacks
|
self.attacks = attacks
|
||||||
self.img = img
|
self.img = img
|
||||||
|
self.lang = lang
|
||||||
|
self.message = message
|
||||||
|
self.equipped = eq
|
||||||
|
input()
|
||||||
|
|
||||||
|
def up(self):
|
||||||
|
if self.selected == 0:
|
||||||
|
self.selected = 2
|
||||||
|
else:
|
||||||
|
self.selected -= 1
|
||||||
|
system("cls||clear")
|
||||||
|
self.show()
|
||||||
|
|
||||||
|
def down(self):
|
||||||
|
if self.selected == 2:
|
||||||
|
self.selected = 0
|
||||||
|
else:
|
||||||
|
self.selected += 1
|
||||||
|
system("cls||clear")
|
||||||
|
self.show()
|
||||||
|
|
||||||
def show(self):
|
def show(self):
|
||||||
p = math.trunc(self.hp/self.max*10)
|
p = math.trunc(self.hp/self.max*10)
|
||||||
h = "🟥"*p
|
h = "🟥"*p
|
||||||
if str(p).endswith(".5"):
|
if str(p).endswith(".5"):
|
||||||
h += "◾"
|
h += "◾"
|
||||||
|
print(self.message)
|
||||||
print(f"{self.name} {h} {self.hp}/{self.max}")
|
print(f"{self.name} {h} {self.hp}/{self.max}")
|
||||||
if self.img != "":
|
if self.img != "":
|
||||||
anim = AsciiAnimation()
|
anim = AsciiAnimation()
|
||||||
anim.load_ascii(self.img)
|
anim.load_ascii(self.img)
|
||||||
anim.play()
|
anim.play()
|
||||||
|
s = [self.lang["attack"],self.lang["defend"],self.lang["inventory"]]
|
||||||
|
for selection in s:
|
||||||
|
if(self.selected == self.selections.index(selection)):
|
||||||
|
print(f"{Fore.RED}⚔{Fore.RESET} {selection}")
|
||||||
|
else:
|
||||||
|
print(f" {selection}")
|
||||||
|
|
||||||
|
def attack(self):
|
||||||
|
self.hp
|
||||||
|
input()
|
||||||
|
|
47
lib/game.py
47
lib/game.py
|
@ -11,13 +11,30 @@ from os import system
|
||||||
|
|
||||||
class Game: # the game class keeps information about the loaded game
|
class Game: # the game class keeps information about the loaded game
|
||||||
def __init__(self,data:dict):
|
def __init__(self,data:dict):
|
||||||
self.name = data["meta"]["name"]
|
self.name = data["meta"]["name"] # Game name
|
||||||
self.author = data["meta"]["creator"]
|
self.author = data["meta"]["creator"] # Game creator
|
||||||
self.current = "start"
|
self.current = "start" # Current prompt
|
||||||
self.nodes = {}
|
self.nodes = {} # All nodes
|
||||||
self.inventory = []
|
self.inventory = [] # Player's inventory
|
||||||
self.id = data["meta"]["id"]
|
self.id = data["meta"]["id"] # Game ID
|
||||||
self.save = SaveManager(self.id)
|
self.save = SaveManager(self.id) # saving
|
||||||
|
self.equipped = {"weapon":None,"armor":None} # Items equipped by player
|
||||||
|
if "equippable" in data["meta"].keys():
|
||||||
|
self.equippable = [] # Items that can be equipped by player
|
||||||
|
for item in data["meta"]["equippable"]:
|
||||||
|
name = list(item.keys())[0]
|
||||||
|
if "def" in item[name].keys() and "atk" in item[name].keys():
|
||||||
|
self.equippable.append(Item(name,item[name]["atk"],item[name]["def"]))
|
||||||
|
elif "def" in item[name].keys():
|
||||||
|
self.equippable.append(Item(name=name,defense=item[name]["def"]))
|
||||||
|
elif "atk" in item[name].keys():
|
||||||
|
self.equippable.append(Item(name,item[name]["atk"]))
|
||||||
|
if("starter" in item[name].keys()): # if starter, equip and add to inventory
|
||||||
|
if item[name]["starter"]:
|
||||||
|
i = next((x for x in self.equippable if x.name == list(item.keys())[0]))
|
||||||
|
self.inventory.append(i)
|
||||||
|
self.equipped[i.type] = i
|
||||||
|
|
||||||
for k in data["game"]:
|
for k in data["game"]:
|
||||||
self.nodes.update({k:data["game"][k]})
|
self.nodes.update({k:data["game"][k]})
|
||||||
|
|
||||||
|
@ -128,7 +145,7 @@ class Game: # the game class keeps information about the loaded game
|
||||||
|
|
||||||
def show_inventory(self):
|
def show_inventory(self):
|
||||||
if len(self.inventory) == 0:
|
if len(self.inventory) == 0:
|
||||||
MenuManager([self.lang["return"]],f" YOUR INVENTORY \n")
|
MenuManager([self.lang["return"]],f" {self.lang['inside_inv']} \n")
|
||||||
else:
|
else:
|
||||||
s = ""
|
s = ""
|
||||||
for i,item in enumerate(self.inventory):
|
for i,item in enumerate(self.inventory):
|
||||||
|
@ -136,7 +153,7 @@ class Game: # the game class keeps information about the loaded game
|
||||||
s += f"- {item}"
|
s += f"- {item}"
|
||||||
else:
|
else:
|
||||||
s += f"- {item}\n"
|
s += f"- {item}\n"
|
||||||
MenuManager([self.lang["return"]],f" YOUR INVENTORY \n{s}")
|
MenuManager([self.lang["return"]],f" {self.lang['inside_inv']} \n{s}")
|
||||||
self.print_text()
|
self.print_text()
|
||||||
|
|
||||||
def print_animated(self,animid): # prints the first found occurence of an ascii animation
|
def print_animated(self,animid): # prints the first found occurence of an ascii animation
|
||||||
|
@ -158,6 +175,16 @@ def load(file_path,lang): # starts to load the game from YAML
|
||||||
g.lang = lang
|
g.lang = lang
|
||||||
return g
|
return g
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"{Back.RED}{Fore.WHITE}{g.lang['error_loading']}{Fore.RESET}{Back.RESET}")
|
print(f"{Back.RED}{Fore.WHITE}ERROR{Fore.RESET}{Back.RESET}")
|
||||||
print(e)
|
print(e)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
class Item:
|
||||||
|
def __init__(self,name:str,attack:int = 0,defense:int = 0) -> None:
|
||||||
|
self.name = name
|
||||||
|
if attack == 0 and defense > 0:
|
||||||
|
self.type = "armor"
|
||||||
|
else:
|
||||||
|
self.type = "weapon"
|
||||||
|
self.attack = attack
|
||||||
|
self.defense = defense
|
|
@ -24,5 +24,8 @@ selection: 'Make a selection (number):'
|
||||||
not_number: 'Not a number selection'
|
not_number: 'Not a number selection'
|
||||||
invalid: 'Invalid selection'
|
invalid: 'Invalid selection'
|
||||||
|
|
||||||
|
attack: "Attack"
|
||||||
|
defend: "Defend"
|
||||||
|
|
||||||
error_loading: 'An exception has occured while loading the game from the YAML file'
|
error_loading: 'An exception has occured while loading the game from the YAML file'
|
||||||
no_action: 'Error: No action "$action" found in the game file.'
|
no_action: 'Error: No action "$action" found in the game file.'
|
Reference in a new issue