from Game import Game from Box import Box from Door import Door from PressurePlate import PressurePlate from Trail import Trail import pygame class GameView: def __init__(self, timeBased = False): self.timeBased = timeBased self.game = Game([ """#####O##### # # # # # # # # # # # # # # # # # # # # # # # # #####I#####""", """#####D##### # + # # _ # # # # # # # # # # # # # # # #####I#####""", """#####D##### # + # # + # # + # # + # # + # # b _ # # # # # # # #####I#####""", """#####D##### # #+# # # #+# # # #+# # # #+# # # b _ # # # # # # # # # #####I#####""", """#####D##### #+++++ # #+ # #+ # #_ # #####D##### # + # # b + # # + # # _ # #####I#####""", """########### # # # # # # # # # # # # # # # # # # #####I#####""", ]) self.cellWidth = 64 self._tickTime = 700 self._previousTick = None self.nextControlDirection = None def isRunning(self): return not self.game.isLost() def width(self): return self.game.width() * self.cellWidth def height(self): return self.game.height() * self.cellWidth def render(self, surface): surface.fill("black") for cell in self.game.walls.walls(): self._drawBoxOfColor(surface, "white", cell.x, cell.y) for static in self.game.statics: match static: case Door(): if static.isOpen(): self._drawBoxOfColor(surface, "lightgray", static.pos.x, static.pos.y) else: self._drawBoxOfColor(surface, "gray", static.pos.x, static.pos.y) case PressurePlate(): self._drawBoxOfColor(surface, "yellow", static.pos.x, static.pos.y) case Trail(): if static.isOn(): self._drawBoxOfColor(surface, "pink", static.pos.x, static.pos.y) else: self._drawBoxOfColor(surface, "purple", static.pos.x, static.pos.y) for box in self.game.boxes: self._drawBoxOfColor(surface, "brown", box.pos.x, box.pos.y) for cell in self.game.snake.cells: self._drawBoxOfColor(surface, "red", cell.x, cell.y) def _drawBoxOfColor(self, surface, color, x, y): pygame.draw.rect(surface, color, pygame.Rect( x*self.cellWidth, y*self.cellWidth, self.cellWidth, self.cellWidth )) def update(self, time): if self.timeBased and ((self._previousTick == None) or (self._previousTick + self._tickTime <= time)): self._previousTick = time if self.nextControlDirection != None: self.game.snake.heading = self.nextControlDirection self.nextControlDirection = None self.game.tick() elif (not self.timeBased) and self.nextControlDirection != None: self.game.snake.heading = self.nextControlDirection self.nextControlDirection = None self.game.tick()