Fix saving, move anim playing and work on fight
This commit is contained in:
parent
3251dbe4a6
commit
3e9cd33e98
5 changed files with 40 additions and 13 deletions
16
lib/ascii.py
16
lib/ascii.py
|
@ -1,6 +1,7 @@
|
||||||
from tempfile import TemporaryDirectory
|
from tempfile import TemporaryDirectory
|
||||||
|
from time import sleep
|
||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
from os import listdir
|
from os import listdir, system
|
||||||
import yaml
|
import yaml
|
||||||
class AsciiAnimation:
|
class AsciiAnimation:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
|
@ -9,7 +10,7 @@ class AsciiAnimation:
|
||||||
|
|
||||||
def load_ascii(self,name:str):
|
def load_ascii(self,name:str):
|
||||||
"""
|
"""
|
||||||
Returns ASCII by name
|
Loads art from .asc file
|
||||||
"""
|
"""
|
||||||
|
|
||||||
with TemporaryDirectory() as tmpdir: # we enter a temporary directory
|
with TemporaryDirectory() as tmpdir: # we enter a temporary directory
|
||||||
|
@ -22,4 +23,13 @@ class AsciiAnimation:
|
||||||
if(data["speed"] != None):
|
if(data["speed"] != None):
|
||||||
self.speed = data["speed"]
|
self.speed = data["speed"]
|
||||||
with open(f"{tmpdir}/ascii/{name}/{f}",encoding="utf-8") as f: # add all frames into list
|
with open(f"{tmpdir}/ascii/{name}/{f}",encoding="utf-8") as f: # add all frames into list
|
||||||
self.frames.append(f.read())
|
self.frames.append(f.read())
|
||||||
|
|
||||||
|
def play(self):
|
||||||
|
"""
|
||||||
|
Plays the animation frame by frame
|
||||||
|
"""
|
||||||
|
for frame in self.frames:
|
||||||
|
system("cls||clear")
|
||||||
|
print(frame)
|
||||||
|
sleep(self.speed)
|
21
lib/fight.py
Normal file
21
lib/fight.py
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
import math
|
||||||
|
from .ascii import *
|
||||||
|
|
||||||
|
class FightHandler:
|
||||||
|
def __init__(self,name:str,hp:int,attacks:list,img:str="") -> None:
|
||||||
|
self.name = name
|
||||||
|
self.max = hp # starting HP
|
||||||
|
self.hp = self.max # current HP
|
||||||
|
self.attacks = attacks
|
||||||
|
self.img = img
|
||||||
|
|
||||||
|
def show(self):
|
||||||
|
p = math.trunc(self.hp/self.max*10)
|
||||||
|
h = "🟥"*p
|
||||||
|
if str(p).endswith(".5"):
|
||||||
|
h += "◾"
|
||||||
|
print(f"{self.name} {h} {self.hp}/{self.max}")
|
||||||
|
if self.img != "":
|
||||||
|
anim = AsciiAnimation()
|
||||||
|
anim.load_ascii(self.img)
|
||||||
|
anim.play()
|
10
lib/game.py
10
lib/game.py
|
@ -1,4 +1,3 @@
|
||||||
import enum
|
|
||||||
import yaml
|
import yaml
|
||||||
from yaml.loader import SafeLoader
|
from yaml.loader import SafeLoader
|
||||||
from colorama import Fore, Back
|
from colorama import Fore, Back
|
||||||
|
@ -17,8 +16,8 @@ class Game: # the game class keeps information about the loaded game
|
||||||
self.current = "start"
|
self.current = "start"
|
||||||
self.nodes = {}
|
self.nodes = {}
|
||||||
self.inventory = []
|
self.inventory = []
|
||||||
self.save = SaveManager()
|
|
||||||
self.id = data["meta"]["id"]
|
self.id = data["meta"]["id"]
|
||||||
|
self.save = SaveManager(self.id)
|
||||||
for k in data["game"]:
|
for k in data["game"]:
|
||||||
self.nodes.update({k:data["game"][k]})
|
self.nodes.update({k:data["game"][k]})
|
||||||
|
|
||||||
|
@ -37,7 +36,7 @@ class Game: # the game class keeps information about the loaded game
|
||||||
print(self.lang['quitting'])
|
print(self.lang['quitting'])
|
||||||
exit()
|
exit()
|
||||||
else: # Display continue
|
else: # Display continue
|
||||||
m = MenuManager([self.lang['continue'],self.lang['new_name'],self.lang['options'],self.lang['quit']],f"{self.name}\n{self.lang['game_by'].replace('$author',self.author)}")
|
m = MenuManager([self.lang['continue'],self.lang['new_game'],self.lang['options'],self.lang['quit']],f"{self.name}\n{self.lang['game_by'].replace('$author',self.author)}")
|
||||||
selection = m.selected
|
selection = m.selected
|
||||||
system("cls||clear")
|
system("cls||clear")
|
||||||
if(selection == 0):
|
if(selection == 0):
|
||||||
|
@ -143,10 +142,7 @@ class Game: # the game class keeps information about the loaded game
|
||||||
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
|
||||||
animation = AsciiAnimation()
|
animation = AsciiAnimation()
|
||||||
animation.load_ascii(animid)
|
animation.load_ascii(animid)
|
||||||
for frame in animation.frames:
|
animation.play()
|
||||||
system("cls||clear")
|
|
||||||
print(frame)
|
|
||||||
sleep(animation.speed)
|
|
||||||
print()
|
print()
|
||||||
|
|
||||||
def parse_colors(self,text:str) -> str: # Converts color codes into terminal colors
|
def parse_colors(self,text:str) -> str: # Converts color codes into terminal colors
|
||||||
|
|
|
@ -2,8 +2,8 @@ from os import path
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
class SaveManager: # manages save and configuration files
|
class SaveManager: # manages save and configuration files
|
||||||
def __init__(self):
|
def __init__(self,id:str):
|
||||||
self.id = "" # game ID
|
self.id = id # game ID
|
||||||
self.currentPrompt = "" # Current prompt
|
self.currentPrompt = "" # Current prompt
|
||||||
self.inventory = [] # Items in inventory
|
self.inventory = [] # Items in inventory
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
pyyaml==6.0
|
pyyaml==6.0
|
||||||
colorama==0.4.4
|
colorama==0.4.4
|
||||||
keyboard==0.13.5
|
keyboard==0.13.5
|
Reference in a new issue