Verteiltesystheme/Code/UI/PlayingField.py

79 lines
2.3 KiB
Python
Raw Normal View History

2022-03-20 13:22:19 +01:00
from datetime import time
import time as ti
2022-03-20 09:47:49 +01:00
import pygame as pygame
from Code import Config
from Code.Config import GeneralConfig, Colors
from Code.GameLogic.Rules import Rules
from Code.UI import Square
from Code.UI.Field import Field
class GameState:
def __init__(self):
self.run = True
2022-03-20 13:22:19 +01:00
self.pause_for_input = False
2022-03-20 09:47:49 +01:00
self.field = Field()
2022-03-20 13:22:19 +01:00
self.update_field_events= []
2022-03-20 09:47:49 +01:00
def event_handler(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.run = False
2022-03-20 13:22:19 +01:00
if event.type == pygame.MOUSEBUTTONUP:
self.update_field_events.append(event)
2022-03-20 09:47:49 +01:00
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
2022-03-20 13:22:19 +01:00
self.pause_for_input = not self.pause_for_input
2022-03-20 09:47:49 +01:00
2022-03-20 13:22:19 +01:00
def update_field_with_input(self, event):
2022-03-20 09:47:49 +01:00
for line in self.field.squares:
for square in line:
if square.rect.collidepoint(event.pos):
square.update(not square.active)
2022-03-20 13:22:19 +01:00
def evolve(self):
rules = Rules()
self.field.update_squares(rules.evolve_field(self.field))
2022-03-20 09:47:49 +01:00
def redraw_field(self, window):
window.fill(Colors.BLACK)
self.field.draw_squares(window)
def run_game():
pygame.init()
pygame.display.set_caption(GeneralConfig.window_caption)
window = pygame.display.set_mode((GeneralConfig.width, GeneralConfig.height))
clock = pygame.time.Clock()
game_state = GameState()
2022-03-20 13:22:19 +01:00
time_elapsed_since_last_action = 0
2022-03-20 09:47:49 +01:00
while game_state.run:
game_state.event_handler()
2022-03-20 13:22:19 +01:00
for event in game_state.update_field_events:
game_state.update_field_with_input(event)
game_state.update_field_events.remove(event)
2022-03-20 13:22:19 +01:00
clock.tick(GeneralConfig.fps)
time_elapsed_since_last_action += clock.get_time()
2022-03-20 13:22:19 +01:00
if game_state.pause_for_input:
if time_elapsed_since_last_action > 100:
#start = ti.time()
2022-03-20 13:22:19 +01:00
game_state.evolve()
#end = ti.time()
#print(end - start)
2022-03-20 13:22:19 +01:00
time_elapsed_since_last_action = 0 # reset it to 0 so you can count again
2022-03-20 09:47:49 +01:00
game_state.redraw_field(window)
pygame.display.update()
2022-03-20 13:22:19 +01:00
2022-03-20 09:47:49 +01:00
if __name__ == "__main__":
run_game()