WMICraft/logic/game.py

76 lines
2.4 KiB
Python

import sys
import pygame
from common.constants import *
from common.helpers import print_numbers
from logic.level import Level
from ui.logs import Logs
from ui.screens.credits import Credits
from ui.screens.main_menu import MainMenu
from ui.screens.options import Options
from ui.stats import Stats
from logic.health_bar import HealthBar
class Game:
def __init__(self):
pygame.init()
pygame.display.set_caption(GAME_TITLE)
pygame.display.set_icon(pygame.image.load('./resources/icons/sword.png'))
self.screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
self.clock = pygame.time.Clock()
self.bg = pygame.image.load("./resources/textures/bg.jpg")
self.screens = {'credits': Credits(self.screen, self.clock), 'options': Options(self.screen, self.clock)}
def main_menu(self):
menu = MainMenu(self.screen, self.clock, self.bg,
self.game,
self.screens['options'].display_screen,
self.screens['credits'].display_screen)
menu.display_screen()
def game(self):
logs = Logs(self.screen)
level = Level(self.screen, logs)
# setup clock for rounds
NEXT_TURN = pygame.USEREVENT + 1
pygame.time.set_timer(NEXT_TURN, TURN_INTERVAL)
# create level
level.create_map()
stats = Stats(self.screen,
level.list_knights_blue,
level.list_knights_red) # has to be called after level.create_map()
print_numbers_flag = False
running = True
while running:
self.screen.blit(self.bg, (0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
if event.key == pygame.K_n:
print_numbers_flag = not print_numbers_flag
if event.type == NEXT_TURN: # is called every 'TURN_INTERVAL' milliseconds
level.handle_turn()
stats.update()
logs.draw()
level.update()
if print_numbers_flag:
print_numbers()
pygame.display.update()
self.clock.tick(FPS_COUNT)