SHARE
TWEET

Untitled

a guest Nov 8th, 2019 76 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import pygame
  2. import argparse
  3. from pygame.locals import *
  4.  
  5. from life import GameOfLife
  6. from ui import UI
  7.  
  8.  
  9. class GUI(UI):
  10.  
  11.     def __init__(self, life: GameOfLife, cell_size: int = 10, speed: int = 10) -> None:
  12.         super().__init__(life)
  13.         self.cell_size = cell_size
  14.         self.speed = speed
  15.  
  16.         self.width = self.life.cols * cell_size
  17.         self.height = self.life.rows * cell_size
  18.         self.screen = pygame.display.set_mode((self.width, self.height))
  19.  
  20.     def draw_lines(self) -> None:
  21.         """ Отрисовать сетку """
  22.         for x in range(0, self.width, self.cell_size):
  23.             pygame.draw.line(self.screen, pygame.Color('black'),
  24.                              (x, 0), (x, self.height))
  25.         for y in range(0, self.height, self.cell_size):
  26.             pygame.draw.line(self.screen, pygame.Color('black'),
  27.                              (0, y), (self.width, y))
  28.  
  29.     def draw_grid(self) -> None:
  30.         """
  31.         Отрисовка списка клеток с закрашиванием их в соответствующе цвета.
  32.         """
  33.         for y in range(self.life.rows):
  34.             for x in range(self.life.cols):
  35.                 if self.life.curr_generation[y][x]:
  36.                     pygame.draw.rect(self.screen, pygame.Color('green'), (x * self.cell_size + 1, y * self.cell_size + 1, self.cell_size - 1, self.cell_size - 1))
  37.  
  38.     def get_cell(self, x: int, y: int):
  39.         return x // self.cell_size, y // self.cell_size
  40.  
  41.     def run(self) -> None:
  42.         # Copy from previous assignment
  43.         pygame.init()
  44.         clock = pygame.time.Clock()
  45.         pygame.display.set_caption('Game of Life')
  46.         self.screen.fill(pygame.Color('white'))
  47.  
  48.         paused = False
  49.         running = True
  50.         while running:
  51.             for event in pygame.event.get():
  52.                 if event.type == QUIT:
  53.                     running = False
  54.                 if event.type == KEYDOWN:
  55.                     if event.key == K_SPACE:
  56.                         paused = not paused
  57.                 if event.type == MOUSEBUTTONDOWN:
  58.                     if paused:
  59.                         x, y = self.get_cell(*pygame.mouse.get_pos())
  60.                         self.life.curr_generation[y][x] = abs(self.life.curr_generation[y][x] - 1)
  61.  
  62.             self.screen.fill(pygame.Color('white'))
  63.             self.draw_lines()
  64.             self.draw_grid()
  65.             # Отрисовка списка клеток
  66.             # Выполнение одного шага игры (обновление состояния ячеек)
  67.             if paused:
  68.                 pass
  69.             else:
  70.                 if not self.life.is_max_generations_exceed:
  71.                     self.life.step()
  72.                 else:
  73.                     pygame.display.set_caption('Game of Life | Generations limit exceed')
  74.             pygame.display.flip()
  75.             clock.tick(self.speed)
  76.         pygame.quit()
  77.  
  78.  
  79. if __name__ == '__main__':
  80.     parser = argparse.ArgumentParser(description='Console Game of life')
  81.     parser.add_argument('--width', type=int, default=640, help='Screen width, px')
  82.     parser.add_argument('--height', type=int, default=480, help='Screen height, px')
  83.     parser.add_argument('--cell-size', type=int, default=10, help='Cell size, px')
  84.     parser.add_argument('--max-generations', type=int, default=float('inf'), help='Maximum generation count')
  85.     args = parser.parse_args()
  86.     game = GameOfLife((args.height // args.cell_size, args.width // args.cell_size), max_generations=args.max_generations)
  87.     gui = GUI(game)
  88.     gui.run()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top