Как сделать так, чтобы 4 штуки пошли на дно? - PullRequest
0 голосов
/ 23 января 2019

Я делаю игру «Connect 4» (в основном), и я делаю список с «кусочками», которые представлены X и O, пустое пространство представлено «.».У меня проблемы с переносом фрагментов в «дно» (я опубликую вывод консоли, чтобы быть более понятным)

пример полностью пустой доски:

   . . . . .
   . . . . .
   . . . . .
   . . . . .

Вот мойтекущий код:

 import random
 a = []
 i = 20

for o in range(0,i+1):
    o = random.choice('XO.')
    a.append(o)


 n = 5
 for group in zip(*[iter(a)] * n):
     print(*group)

Довольно простой и простой код, и он в основном работает так, как я хочу, за исключением этого (например, каждый прогон отличается):

  . X X . .
  X O . O X
  . . O . X
  X X X . X

Проблема в том, что на пустых слотах есть кусочки.Так что для этого примера мне нужно, чтобы вывод был более похож на это:

. . . . .       
. X X . X     
X O O . X
X X X O X

Я предполагаю, что проблема заключается в том, что я использую случайный модуль для размещения частей и пустых пространств ... случайным образом.Но это также довольно важная часть программы, которую я делаю.

Как я могу настроить это на работу?

Спасибо за помощь!

1 Ответ

0 голосов
/ 23 января 2019

Это можно сделать в одну строку:

import random

width = 5
height = 4

board = list(zip(*[sorted([random.choice('XO.') for _ in range(height)], key=lambda x: x != '.') for _ in range(width)]))

Пример платы:

[('.', '.', '.', '.', '.'),
 ('X', '.', '.', 'O', 'O'),
 ('X', 'O', 'X', 'O', 'O'),
 ('X', 'X', 'X', 'O', 'O')]

Объяснение: Сначала я генерирую столбцы случайным образом и сдвигаю . на передний план с помощью sorted([random.choice('XO.') for _ in range(width)], key=lambda x: x != '.'). Я повторяю это действие с for _ in range(height), давая мне горизонтальную доску. Я тогда list(zip(*)) это, чтобы сделать это прямо.


Для печати доски:

for row in board:
    print(*row)

чтобы получить

. . . . .
X . . O O
X O X O O
X X X O O
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...