def test_can_create_an_empty_grid(self):
     game = GameOfLife(width=3, height=3, cell_size=1)
     clist = game.cell_list(randomize=False)
     self.assertEqual([[0,0,0], [0,0,0], [0,0,0]], clist)
 def test_get_neighbours_for_lower_right_corner(self):
     game = GameOfLife((self.rows, self.cols))
     game.curr_generation = self.grid
     neighbours = game.get_neighbours((5,7))
     self.assertEqual(3, len(neighbours))
     self.assertEqual(1, sum(neighbours))
    parser.add_argument('--width',
                        type=int,
                        default=640,
                        help='Enter width of window with game')
    parser.add_argument('--height',
                        type=int,
                        default=480,
                        help='Enter height of window with game')
    parser.add_argument('--cell_size',
                        type=int,
                        default=20,
                        help='Enter cell size')
    args = parser.parse_args()
    w = args.width > 0
    h = args.height > 0
    c = args.cell_size > 0

    if w and h and c and args.width // args.cell_size > 0 and args.height // args.cell_size > 0:
        gui = GUI(GameOfLife(
            (args.width // args.cell_size, args.height // args.cell_size)),
                  cell_size=args.cell_size)
        gui.run()
    else:
        print('The input received incorrect values. Tre again please')
        if not w:
            print('Incorrect value of width')
        if not h:
            print('Incorrect value of height')
        if not c:
            print('Incorrect value of cell_size')
 def test_can_create_an_empty_grid(self):
     game = GameOfLife((3, 3))
     grid = game.create_grid(randomize=False)
     self.assertEqual([[0,0,0], [0,0,0], [0,0,0]], grid)
 def test_get_neighbours(self):
     game = GameOfLife((self.rows, self.cols))
     game.curr_generation = self.grid
     neighbours = game.get_neighbours((2,3))
     self.assertEqual(8, len(neighbours))
     self.assertEqual(4, sum(neighbours))
Beispiel #6
0
            for j in range(len(life.curr_generation[i])):
                screen.addch(i, j, ord('#'))

    def run(self) -> None:
        screen = curses.initscr()
        life.create_grid()
        curses.noecho()
        curses.nodelay()
        self.draw_borders(screen)
        pause = False
        while life.is_changing and not life.is_max_generations_exceed:
            if screen.getch() == 32:
                pause = not pause
            if screen.getch() == int('q'):
                break
            if screen.getch() == int('s'):
                self.life.save('mysave.txt')
            if pause:
                screen.refresh()
                continue
            self.draw_grid(screen)
            life.step()
            screen.refresh()
        curses.endwin()


if __name__ == '__main__':
    life = GameOfLife((24, 80), max_generations=50)
    ui = Console(life)
    ui.run()
 def test_is_changing(self):
     game = GameOfLife((self.rows, self.cols))
     game.curr_generation = self.grid
     game.step()
     self.assertTrue(game.is_changing)
Beispiel #8
0
                circle = (x - self.cell_size // 2, y - self.cell_size // 2)
                pygame.draw.circle(self.screen, pygame.Color('black'), circle,
                                   self.cell_size // 2)

    def run(self) -> None:
        pygame.init()
        clock = pygame.time.Clock()
        pygame.display.set_caption('Game of Life')
        self.screen.fill(pygame.Color('white'))

        running = True
        while running:
            for event in pygame.event.get():
                if event.type == QUIT:
                    running = False

            self.screen.fill(pygame.Color('white'))
            self.draw_lines()
            self.draw_grid()
            self.life.step()

            pygame.display.flip()
            clock.tick(self.speed)

        pygame.quit()


if __name__ == "__main__":
    game = GameOfLife(size=(50, 100))
    gui = GUI(game)
    gui.run()
Beispiel #9
0
        while running:
            screen.clear()
            self.draw_borders(screen)
            self.draw_grid(screen)
            self.life.step()
            if self.life.is_max_generations_exceed:
                running = False
            screen.refresh()
            time.sleep(1 / 60)

        screen.getch()
        curses.endwin()


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Console Game of life')
    parser.add_argument('--rows', type=int, default=80, help='Number of rows')
    parser.add_argument('--cols',
                        type=int,
                        default=30,
                        help='Number of columns')
    parser.add_argument('--max-generations',
                        default=float('inf'),
                        type=int,
                        help='Maximum generation count')
    args = parser.parse_args()
    game = GameOfLife((args.cols, args.rows),
                      max_generations=args.max_generations)
    console = Console(game)
    console.run()
 def test_get_neighbours_for_right_side(self):
     game = GameOfLife(width=self.width, height=self.height, cell_size=1)
     game.clist = self.clist
     neighbours = game.get_neighbours((2,7))
     self.assertEqual(5, len(neighbours))
     self.assertEqual(2, sum(neighbours))
Beispiel #11
0
        self.screen.border(0)

    def draw_grid(self) -> None:
        """ Отобразить состояние клеток. """
        for i in range(self.life.rows):
            for j in range(self.life.cols):
                if self.life.curr_generation[i][j] == 1:
                    self.screen.addch(i + 1, j + 1, '*')
                else:
                    self.screen.addch(i + 1, j + 1, ' ')

    def run(self) -> None:
        self.draw_borders()

        running = True
        while running:
            self.draw_borders()
            self.draw_grid()
            self.screen.refresh()

            time.sleep(0.5)

            self.life.step()

        curses.endwin()


if __name__ == "__main__":
    game = GameOfLife(size=(10, 10), randomize=True)
    console = Console(game)
    console.run()
 def test_get_neighbours_for_lower_right_corner(self):
     game = GameOfLife(width=self.width, height=self.height, cell_size=1)
     game.clist = self.clist
     neighbours = game.get_neighbours((5,7))
     self.assertEqual(3, len(neighbours))
     self.assertEqual(1, sum(neighbours))
 def test_get_neighbours(self):
     game = GameOfLife(width=self.width, height=self.height, cell_size=1)
     game.clist = self.clist
     neighbours = game.get_neighbours((2,3))
     self.assertEqual(8, len(neighbours))
     self.assertEqual(4, sum(neighbours))
 def test_can_create_a_random_grid(self):
     game = GameOfLife(width=3, height=3, cell_size=1)
     random.seed(12345)
     clist = game.cell_list(randomize=True)
     self.assertEqual([[1,0,1], [1,0,1], [1,0,1]], clist)
Beispiel #15
0
                        type=str,
                        default="white",
                        help="Enter color of dead cells")
    parser.add_argument("--maxgenerations",
                        type=int,
                        default=50,
                        help="Enter max number of generations")
    parser.add_argument("--grid_path",
                        type=Path,
                        default=None,
                        help="Load grid from file")
    parser.add_argument("--randomize",
                        type=int,
                        default=1,
                        help="Should grid be randomized?")
    arguments = parser.parse_args()
    if arguments.grid_path is not None:
        gui = GUI(GameOfLife.from_file(arguments.grid_path), arguments.size,
                  arguments.speed)
    else:
        gui = GUI(
            GameOfLife(
                (arguments.rows, arguments.cols),
                arguments.randomize,
                arguments.maxgenerations,
            ),
            arguments.size,
            arguments.speed,
        )
    gui.run()
Beispiel #16
0
        for i in range(self.life.rows):
            for j in range(self.life.cols):
                if self.life.curr_generation[i][j] == 1:
                    screen.addstr(i + 1, j + 1, '*')

    def run(self) -> None:
        screen = curses.initscr()
        curses.noecho()
        curses.cbreak()

        sleep_time = 0.5
        while not self.life.is_max_generations_exceeded:
            screen.clear()
            self.draw_borders(screen)
            self.draw_grid(screen)
            screen.refresh()
            time.sleep(sleep_time)
            self.life.step()

        time.sleep(sleep_time)
        screen.clear()
        screen.addstr(0, 0, 'The Game Is Over')
        screen.refresh()
        time.sleep(2)
        curses.endwin()


if __name__ == '__main__':
    life = GameOfLife((24, 24), max_generations=10)
    ui = Console(life)
    ui.run()
Beispiel #17
0
else:
    for j in range(1, len(sys.argv), 2):
        i = sys.argv[j]
        if i == "--help":
            print(
                "\n   Чтобы установить размер окна воспользуйтесь аргументами --rows <int> --cols <int>\n"
                "   Чтобы установить максимальное число поколений в игре воспользуйтесь аргументом --max_generations <int>\n"
                "   Приятной игры!\n")
            exit(1)
        elif i == "--rows":
            sys_rows = int(sys.argv[j + 1])
        elif i == "--cols":
            sys_cols = int(sys.argv[j + 1])
        elif i == "--max_generations":
            sys_max_gen = int(sys.argv[j + 1])
        else:
            print("\nНеверный ключ командной строки: ", i, "\n")
            exit(1)

life = GameOfLife((24, 80))
if sys_cols == 0:
    sys_cols = 80
if sys_rows == 0:
    sys_rows = 24
if sys_max_gen == 0:
    sys_max_gen = 10

life = GameOfLife((sys_rows, sys_cols), max_generations=sys_max_gen)
ui = Console(life)
ui.run()
Beispiel #18
0
            for event in pygame.event.get():
                if event.type == pygame.constants.QUIT:
                    running = False
                if event.type == pygame.constants.KEYDOWN and event.key == pygame.constants.K_SPACE:
                    paused = not paused
                if event.type == pygame.constants.MOUSEBUTTONUP and event.button == 1:
                    position = pygame.mouse.get_pos()
                    x_pos = position[0] // self.cell_size
                    y_pos = position[1] // self.cell_size
                    if self.life.curr_generation[y_pos][x_pos] == 1:
                        self.life.curr_generation[y_pos][x_pos] = 0
                    else:
                        self.life.curr_generation[y_pos][x_pos] = 1
                if event.type == pygame.constants.KEYDOWN and event.key == pygame.constants.K_s:
                    self.life.save(self.save_path)
            self.draw_lines()
            if not paused:
                self.life.step()
            self.draw_grid()
            self.draw_lines()

            pygame.display.flip()
            clock.tick(self.speed)
        pygame.quit()


if __name__ == "__main__":
    life = GameOfLife((18, 25), randomize=True)
    gui = GUI(life, save_path=pathlib.Path("filegui.txt"))
    gui.run()
 def test_prev_generation_is_correct(self):
     game = GameOfLife((self.rows, self.cols))
     game.curr_generation = self.grid
     game.step()
     self.assertEqual(game.prev_generation, self.grid)
Beispiel #20
0
                    pygame.display.set_caption(
                        'Game of Life | Generations limit exceed')
            pygame.display.flip()
            clock.tick(self.speed)
        pygame.quit()


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Console Game of life')
    parser.add_argument('--width',
                        type=int,
                        default=640,
                        help='Screen width, px')
    parser.add_argument('--height',
                        type=int,
                        default=480,
                        help='Screen height, px')
    parser.add_argument('--cell-size',
                        type=int,
                        default=10,
                        help='Cell size, px')
    parser.add_argument('--max-generations',
                        default=float('inf'),
                        type=int,
                        help='Maximum generation count')
    args = parser.parse_args()
    game = GameOfLife(
        (args.height // args.cell_size, args.width // args.cell_size),
        max_generations=args.max_generations)
    gui = GUI(game, args.cell_size)
    gui.run()
 def test_is_not_changing(self):
     game = GameOfLife((self.rows, self.cols))
     game.curr_generation = self.grid
     for _ in range(self.max_generations + 1):
         game.step()
     self.assertFalse(game.is_changing)
Beispiel #22
0
            if pause:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        running = False
                    elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                        pause = True
                    elif event.type == pygame.MOUSEBUTTONUP:
                        doc = event.pos
                        row = doc[1] // self.cell_size
                        col = doc[0] // self.cell_size
                        if self.life.curr_generation[row][col]:
                            self.life.curr_generation[row][col] = 0
                        else:
                            self.life.curr_generation[row][col] = 1
                        self.draw_grid()
                        pygame.display.flip()
            else:

                self.life.step()
                self.draw_grid()
                pygame.display.flip()
                clock.tick(self.speed)
        pygame.quit()


if __name__ == "__main__":
    life = GameOfLife((20, 20), max_generations=500)
    gui = GUI(life)
    gui.run()
 def test_can_create_a_random_grid(self):
     game = GameOfLife((3, 3))
     random.seed(12345)
     grid = game.create_grid(randomize=True)
     self.assertEqual([[1,0,1], [1,0,1], [1,0,1]], grid)
Beispiel #24
0
                        type=int,
                        help="Maximum amount of generation. Default: 500")
    parser.add_argument("--speed",
                        type=int,
                        help="Speed in pygame ticks. Default: 1")

    args = parser.parse_args()

    # Iterate over arguments to set defaults
    # https://stackoverflow.com/questions/4075190/what-is-getattr-exactly-and-how-do-i-use-it
    for arg in vars(args):
        if not getattr(args, arg) and (arg == 'width' or arg == 'height'
                                       or arg == 'max_generations'):
            # setattr(x, 'y', val) is equivalent to `x.y = val`
            setattr(args, arg, 500)
        elif not getattr(args, arg) and (arg == 'cell_size'):
            setattr(args, arg, 20)
        elif not getattr(args, arg):
            setattr(args, arg, 5)

    game = GUI(
        GameOfLife(
            (args.height // args.cell_size, args.width // args.cell_size),
            True, args.max_generations), args.cell_size, args.speed)
    game.run()

# Run from save file
# if __name__ == '__main__':
#     console = GUI(GameOfLife.from_file(pathlib.Path('Save.txt')))
#     console.run()
 def test_get_neighbours_for_upper_left_corner(self):
     game = GameOfLife((self.rows, self.cols))
     game.curr_generation = self.grid
     neighbours = game.get_neighbours((0,0))
     self.assertEqual(3, len(neighbours))
     self.assertEqual(2, sum(neighbours))
        super().__init__(life)
        self.screen = curses.initscr()

    def draw_borders(self) -> None:
        self.screen.border(0)

    def draw_grid(self) -> None:
        for i in range(1, len(self.life.curr_generation) - 1):
            for j in range(1, len(self.life.curr_generation[i]) - 1):
                if self.life.curr_generation[i][j]:
                    sign = "*"
                else:
                    sign = " "
                self.screen.addch(i, j, sign)

    def run(self) -> None:
        self.draw_borders()
        running = True
        while running:
            self.draw_borders()
            self.draw_grid()
            self.screen.refresh()
            sleep(0.3)
            self.life.step()
        curses.endwin()


if __name__ == "__main__":
    life = GameOfLife((30, 30))
    Console(life).run()
 def test_get_neighbours_for_right_side(self):
     game = GameOfLife((self.rows, self.cols))
     game.curr_generation = self.grid
     neighbours = game.get_neighbours((2,7))
     self.assertEqual(5, len(neighbours))
     self.assertEqual(2, sum(neighbours))
Beispiel #28
0
                elif event.type == MOUSEBUTTONUP:
                    i, j = event.pos
                    i = i // self.cell_size
                    j = j // self.cell_size
                    if self.life.curr_generation[j][i] == 0:
                        self.life.curr_generation[j][i] = 1
                    else:
                        self.life.curr_generation[j][i] = 0
                    self.draw_grid()
                    pygame.display.flip()
            if pause:
                self.draw_grid()
                self.draw_lines()
                pygame.display.flip()
                continue

            # Отрисовка списка клеток
            # Выполнение одного шага игры (обновление состояния ячеек)
            self.draw_grid()
            self.draw_lines()
            self.life.step()

            pygame.display.flip()
            clock.tick(self.speed)
        pygame.quit()


if __name__ == '__main__':
    ui = GUI(GameOfLife((15, 15), True, 30))
    ui.run()
def main():
    game = GameOfLife(size=(48, 64))
    app = GUI(game)
    app.run()
Beispiel #30
0
                        dest="it",
                        required=False,
                        default=1000,
                        help="Количество итераций")
    parser.add_argument("--cell-size",
                        "-cs",
                        type=int,
                        dest="cs",
                        required=False,
                        default=10,
                        help="Размер ячейки")

    parser.add_argument("--input-filename",
                        "-in",
                        type=str,
                        dest="in",
                        required=False,
                        help="Путь к файлу с входными данными")

    return parser.parse_args()


if __name__ == '__main__':
    args = vars(parse_args())
    if args.get('in'):
        life = GameOfLife.from_file(pathlib.Path(args['in']))
    else:
        life = GameOfLife((args['r'], args['c']), True, args['it'])
    ui = GUI(life, cell_size=args['cs'])
    ui.run()