from Game import Game from Box import Box from Door import Door from PressurePlate import PressurePlate from Trail import Trail import pygame class GameView: game = Game() cellWidth = 64 _tickTime = 700 _previousTick = None 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._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()