Added a MainMenuDisplay class and fixed errors in display

This commit is contained in:
eichhornchen 2020-11-10 10:01:31 +01:00
parent 10bbb28471
commit 91a8919a01
6 changed files with 62 additions and 13 deletions

View File

@ -0,0 +1,11 @@
██████ █████ █ ██ ██▓ ██▀███ ██▀███ ▓█████ ██▓ ▄▄▄▄ ▄▄▄ ▄▄▄█████▓▄▄▄█████▓ ██▓ ▓█████
▒██ ▒ ▒██▓ ██▒ ██ ▓██▒▓██▒▓██ ▒ ██▒▓██ ▒ ██▒▓█ ▀ ▓██▒ ▓█████▄ ▒████▄ ▓ ██▒ ▓▒▓ ██▒ ▓▒▓██▒ ▓█ ▀
░ ▓██▄ ▒██▒ ██░▓██ ▒██░▒██▒▓██ ░▄█ ▒▓██ ░▄█ ▒▒███ ▒██░ ▒██▒ ▄██▒██ ▀█▄ ▒ ▓██░ ▒░▒ ▓██░ ▒░▒██░ ▒███
▒ ██▒░██ █▀ ░▓▓█ ░██░░██░▒██▀▀█▄ ▒██▀▀█▄ ▒▓█ ▄ ▒██░ ▒██░█▀ ░██▄▄▄▄██░ ▓██▓ ░ ░ ▓██▓ ░ ▒██░ ▒▓█ ▄
▒██████▒▒░▒███▒█▄ ▒▒█████▓ ░██░░██▓ ▒██▒░██▓ ▒██▒░▒████▒░██████▒ ░▓█ ▀█▓ ▓█ ▓██▒ ▒██▒ ░ ▒██▒ ░ ░██████▒░▒████▒
▒ ▒▓▒ ▒ ░░░ ▒▒░ ▒ ░▒▓▒ ▒ ▒ ░▓ ░ ▒▓ ░▒▓░░ ▒▓ ░▒▓░░░ ▒░ ░░ ▒░▓ ░ ░▒▓███▀▒ ▒▒ ▓▒█░ ▒ ░░ ▒ ░░ ░ ▒░▓ ░░░ ▒░ ░
░ ░▒ ░ ░ ░ ▒░ ░ ░░▒░ ░ ░ ▒ ░ ░▒ ░ ▒░ ░▒ ░ ▒░ ░ ░ ░░ ░ ▒ ░ ▒░▒ ░ ▒ ▒▒ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░
░ ░ ░ ░ ░ ░░░ ░ ░ ▒ ░ ░░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░

View File

@ -15,8 +15,8 @@ class Display:
def __init__(self, screen: Any, texture: Any): def __init__(self, screen: Any, texture: Any):
self.screen = screen self.screen = screen
self.texture = texture self.texture = texture
self.mapdisplay = MapDisplay(self.screen, self.texture, curses.LINES * 4//5, curses.COLS) self.mapdisplay = MapDisplay(self.texture, curses.LINES * 4//5, curses.COLS)
self.statsdisplay = StatsDisplay(self.screen, curses.LINES//5, curses.COLS) self.statsdisplay = StatsDisplay(curses.LINES//5, curses.COLS, curses.LINES * 4//5, 0)
def refresh(self, m : Map, p : Player) -> None: def refresh(self, m : Map, p : Player) -> None:
self.map = m self.map = m

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
from typing import Any from typing import Any
import curses
from dungeonbattle.display.display import Display from dungeonbattle.display.display import Display
from dungeonbattle.display.texturepack import TexturePack from dungeonbattle.display.texturepack import TexturePack
@ -11,19 +12,18 @@ class MapDisplay:
self.map: Map self.map: Map
self.player: Player self.player: Player
def __init__(self, screen: Any, pack: TexturePack, height : int, width : int): def __init__(self, pack: TexturePack, height : int, width : int):
self.screen = screen
self.height = height self.height = height
self.width = width self.width = width
self.pack = pack self.pack = pack
self.pad = self.newpad(m.height, m.width + 1) self.pad = curses.newpad(m.height, m.width + 1)
def update_pad(self) -> None: def update_pad(self) -> None:
self.pad.addstr(0, 0, self.map.draw_string(self.pack)) self.pad.addstr(0, 0, self.map.draw_string(self.pack))
for e in self.map.entities: for e in self.map.entities:
self.pad.addstr(e.y, e.x, self.pack.PLAYER) self.pad.addstr(e.y, e.x, self.pack.PLAYER)
def display(self) -> None: def display(self, y, x) -> None:
deltay, deltax = (self.height // 2) + 1, (self.width // 2) + 1 deltay, deltax = (self.height // 2) + 1, (self.width // 2) + 1
pminrow, pmincol = y - deltay, x - deltax pminrow, pmincol = y - deltay, x - deltax
sminrow, smincol = max(-pminrow, 0), max(-pmincol, 0) sminrow, smincol = max(-pminrow, 0), max(-pmincol, 0)
@ -42,4 +42,4 @@ class MapDisplay:
self.map = m self.map = m
self.player = p self.player = p
y, x = self.map.currenty, self.map.currentx y, x = self.map.currenty, self.map.currentx
return self.display() self.display(y,x)

View File

@ -1,12 +1,11 @@
from dungeonbattle.menus import Menu from dungeonbattle.menus import Menu, MainMenu
from typing import Any from typing import Any
import curses import curses
class MenuDisplay: class MenuDisplay:
position: int position: int
def __init__(self, menu : Menu, screen: Any, height : int, width : int, topleftx: int, toplefty: int) : def __init__(self, menu : Menu, height : int, width : int, topleftx: int, toplefty: int) :
self.screen = screen
self.values = menu.values self.values = menu.values
self.width = width self.width = width
self.height = height self.height = height
@ -46,3 +45,25 @@ class MenuDisplay:
self.pad.refresh(cornery, 0, self.toplefty+1, self.topleftx+1, self.pad.refresh(cornery, 0, self.toplefty+1, self.topleftx+1,
self.height-2 + self.toplefty, self.height-2 + self.toplefty,
self.width-2 + self.topleftx) self.width-2 + self.topleftx)
class MainMenuDisplay:
def __init__(self, menu : MainMenu) :
self.menu = menu
self.pad = curses.newpad(curses.LINES, curses.COLS)
with open("ascii_art.txt", "r") as file:
title = file.read().split("\n")
width = len(title[0])
height = len(title)
for i in range(len(title)) :
self.pad.addstr(4+i,curses.COLS//2-width//2-1,title[i])
self.pad.refresh(0,0,0,0,curses.LINES,curses.COLS)
self.menudisplay = MenuDisplay(self.menu, 15, 15, height+8, curses.COLS//2-15//2-1)
def refresh(self, position) -> None:
self.menudisplay.refresh(position)

View File

@ -1,4 +1,5 @@
from typing import Any from typing import Any
import curses
from dungeonbattle.display.display import Display from dungeonbattle.display.display import Display
from dungeonbattle.entities.player import Player from dungeonbattle.entities.player import Player
@ -7,15 +8,14 @@ from dungeonbattle.entities.player import Player
class StatsDisplay(Display): class StatsDisplay(Display):
self.player: Player self.player: Player
def __init__(self, screen: Any, height: int, width: int, def __init__(self, height: int, width: int,
topleftx: int, toplefty: int): topleftx: int, toplefty: int):
super().__init__(screen)
self.width = width self.width = width
self.height = height self.height = height
self.topleftx = topleftx self.topleftx = topleftx
self.toplefty = toplefty self.toplefty = toplefty
self.pad = self.newpad(height, width) self.pad = curses.newpad(height, width)
def update_pad(self) -> None: def update_pad(self) -> None:
string = "" string = ""

View File

@ -0,0 +1,17 @@
import curses
import time
def main(screen) :
pad = curses.newpad(curses.LINES, curses.COLS)
with open("ascii_art.txt", "r") as file:
title = file.read().split("\n")
width = len(title[0])
for i in range(len(title)) :
pad.addstr(4+i,curses.COLS//2-width//2-1,title[i])
pad.refresh(0,0,0,0,curses.LINES,curses.COLS)
time.sleep(1)
curses.wrapper(main)