Создание консольной игры Супер Ним на Python

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Приветствую всех хабровчан! Я являюсь студенткой Финансового Университета при Правительстве РФ и обучаюсь на направлении Прикладная математика и информатика. Сегодня мне хотелось бы поделиться своим туториалом для изучающих Python с нуля. Идея для создания этой статьи появилась на паре практикума по программированию, где данная задача была проектом для сдачи. Если этот туториал зайдет, то будут следующие выпуски.

В этом уроке мы напишем несложную консольную игру Супер Ним по следующим правилам:

На шахматной доске в некоторых клетках случайно разбросаны фишки или пуговицы. Игроки ходят по очереди. За один ход можно снять все фишки с какой-либо горизонтали или вертикали, на которой они есть. Выигрывает тот, кто заберет последние фишки.

В нашем случае примем за фишки/пуговицы единицы, а пустые клетки станут нулями. Создадим шахматную доску при помощи списков и random:

from random import randint
print('  '+'a',' '+'b',' '+'c',' '+'d',' '+'e',' '+'f',' '+'g',' '+'h')
list = [[],[],[],[],[],[],[],[]]
for el in list:
  for i in range(8):
      el.append(randint(0,1))

В данном коде мы создаем доску с рандомно заданными нулями и единицами, а также выводим верхние координаты от a до h.

Теперь создадим координаты для горизонталей(от 1 до 8) и свяжем все буквы и числа с нашими полями:

for idx,i in enumerate(list):
  print((chr(ord('1')+idx))+str(i))
x={'a':0,'b':1,'c':2,'d':3,'e':4,'f':5,'g':6,'h':7}
y={'1':0, '2':1, '3':2, '4':3, '5':4, '6':5, '7':6, '8':7}

Попробуем написать логику ввода координат обоими игроками:

arr=[]
def play():
  a=""
  while a!="Игрок 1 победил" and a!="Игрок 2 победил":
      if 1 in list[0] or 1 in list[1] or 1 in list[2] or 1 in list[3] or 1 in list[4] or 1 in list[5] or 1 in list[6] or 1 in list[7]:
        print("\nИгрок 1 вводит координаты")
        letter=input()
        f(letter)
        arr.append(1)
      if 1 in list[0] or 1 in list[1] or 1 in list[2] or 1 in list[3] or 1 in list[4] or 1 in list[5] or 1 in list[6] or 1 in list[7]:
        print("\nИгрок 2 вводит координаты")
        letter=input()
        f(letter)
        arr.append(2)
      else:
        if arr[-1]==1:
          a="Игрок 1 победил"
        else:
          a="Игрок 2 победил"
      print(a)

Здесь функция будет проверять, остались ли еще единицы на поле и выводить победителя в случае их отсутствия. Если же они остались, то функция реализует чередование ввода координат игроками. Кроме того, мы создадим некую "базу данных" в виде списка, который хранит в себе номер игрока, который ввел координаты. Именно проверяя последний элемент данного списка, можно определить победителя. Как мы видим, в функции play вызывается функция f, которая принимает за аргумент букву, которую ввел игрок. Давайте ее напишем:

def f(letter):
  string_1 = "abcdefgh"
  string_2="12345678"
  if letter in string_1:
    for i in list:
      i[x[letter]]= 0
  if letter in string_2:
    list[y[letter]]=[0]*8
  
  print('  '+'a',' '+'b',' '+'c',' '+'d',' '+'e',' '+'f',' '+'g',' '+'h')
  for idx,i in enumerate(list):
    print((chr(ord('1')+idx))+str(i))

Функция f убирает все единицы, находящиеся на выбранной горизонтали или вертикали, а затем снова выводить поле с координатами после обновления значений.

После всего написанного кода мы можем запустить функцию play() и играть. Спасибо за прочтение, надеюсь, данный урок будет полезен новичкам!

Для тех, кто хочет прокачать свои навыки использования python, предлагаю сделать следующее:

  • принять за второго игрока саму программу, которая будет делать рандомный ход

  • попробовать вывести верхние координаты циклом for(как цифры сбоку)

  • сократить код посредством избавления от большого количества if/else

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Был ли полезен гайд?
0% Да 0
0% Нет 0
Никто еще не голосовал. Воздержавшихся нет.
Источник: https://habr.com/ru/articles/764674/


Интересные статьи

Интересные статьи

Чтобы уверенно пересечь незнакомую местность, можно или двигаться быстрее, или подыскивать удобную дорожку. Другими словами, слишком пристальное внимание к скорости как таковой может вас притормозить....
Ранее у нас в блоге уже был материал про лучших в Kaggle, а сегодня представляю вам интервью с признанным дата-сайентистом и гроссмейстером Kaggle Филиппом Сингером, который поделится сво...
Собрал небольшую демо для win и linux. Этот экспериментальный прототип фокусируется на игре с видом сверху, и реализации системы бесконечного уровня в движке Godot. Биомашинки в комплекте...
Python — особенный язык в плане итераций и их реализации, в этой статье мы подробно разберём устройство итерируемых объектов и пресловутого цикла for. Особенности, с которыми вы часто можете сто...
Недавно в Redash приступили к смене одной системы выполнения задач на другую. А именно — они начали переход с Celery на RQ. На первом этапе на новую платформу перевели лишь те задания, которые не...