Каждый всегда хочет реализовать игру жизни Конвея. Это скучно! Давайте вместо этого сделаем полицейских и грабителей!
У вас будет две команды: полицейские и грабители. Каждая команда состоит из 5 человек, каждый из которых имеет 50 единиц здоровья. Программа будет зацикливаться непрерывно. На каждой итерации будет происходить следующее:
Для каждой команды выведите первую букву (
C
для полицейских,R
для грабителей), пробел, разделенный пробелами список HP членов и новую строку. Это статус команд. После того, как оба будут сделаны, напечатайте еще одну новую строку. Например, вот как это может выглядеть в первом раунде:C 50 50 50 50 50 R 50 50 50 50 50
Выберите случайное число от 1 до 10 (включая 1 и 10). Мы позвоним по номеру
N
. ЕслиN
даже, грабители проигрывают в этом раунде; если странно, копы проигрывают.Выберите случайного члена проигравшей команды, чье HP больше 0, и вычтите
N
HP. HP членов никогда не должен появляться ниже статуса 0.Перезапустите цикл.
Игра заканчивается, когда все члены одной команды теряют все свои HP. Затем, если победят полицейские, будет напечатано следующее:
C+
R-
и если грабители победят
R+
C-
Это код гольф, поэтому выигрывает самое короткое количество персонажей.
Вот пример реализации в Python 2:
import random
cops = [50]*5
robbers = [50]*5
while any(cops) and any(robbers):
# print the status
print 'C', ' '.join(map(str, cops))
print 'R', ' '.join(map(str, robbers))
print
# pick N
N = random.randint(1, 10)
# pick the losing team (robbers if N is even, else cops)
losers = robbers if N % 2 == 0 else cops
# pick a member whose HP is greater than 0
losing_member = random.choice([i for i in range(len(losers)) if losers[i]])
losers[losing_member] -= N
# make sure the HP doesn't visibly drop below 0
if losers[losing_member] < 0: losers[losing_member] = 0
if any(cops):
# robbers lost
print 'C+'
print 'R-'
elif any(robbers):
# cops lost
print 'C-'
print 'R+'
cops-and-robbers
!
game-of-life
.