Рубрики
Без рубрики

Написание шахматной игры в Python [день 1]

Мы находимся в блоке из-за COVID-19, и это праздник (без школы, даже масштабирования). Поэтому я решил покинуть … Теги с Python, CodeNewie.

Мы находимся в блоке из-за COVID-19, и это праздник (без школы, даже масштабирования). Поэтому я решил занять неделю с работы и наклониться, провести некоторое время с детьми. И действительно, что лучше использовать мое время, чем реализовать небольшой код проекта с моим сыном? Он изучает Python в школе, но они не получили много занятий (помните COVID-19?) И не так много мимо Распечатать , это может быть отличная возможность для него до его игры И я могу написать крутой блог-пост серии !!! Полная беспроигрышная ситуация.

В последнее время он был в шахматы, поэтому я спросил, хочет ли он реализовать текстовую игру в шахматы, и он казался искренне взволнованным (уверен, что он был не

В этой серии я буду проходить, как мы реализовали день день ото дня. Помните, что это 12 лет, и я пытаюсь использовать это как возможность обучения, я Обещание Вы к концу у нас будет все реализовано с хорошо структурированным и красиво оптимизированным кодом, но я решил начать с наивных подходов, прибывающих на выводы о том, как делать вещи лучше вместе, а не вместо меня, применяя все, что я уже знаю аванс. Я довольно уверен, мы Будет ли В конечном итоге с игрой отменить/повторить/воспроизвести с помощью команды, я знаю, даже если он еще не. В любом случае, видя процесс – это полностью часть веселья.

Я надеюсь, что вам нравятся эту серию, теперь давайте погрузимся!

Первое, что я сделал, должен был спросить его, что будут основные строительные блоки шахматной игры. Он сказал, что мы, вероятно, должны начать с доски. Как я уже говорил, он узнал Распечатать Таким образом, мы пытались «грубая сила» доска на печатных линиях и столбцах:

print("-------------------------")
print("|  |  |  |  |  |  |  |  |  |")

Не так уж плохо:

-------------------------
|  |  |  |  |  |  |  |  |  |

Видимо он уже новый о дублировании строки с * , и о использовании конец Параметр, чтобы мы изменили его на:

print("-"*25)
print("|  "*8, end="|\n")

Код был красивее, но выход был еще один ряд! Нам нужно 8. Он уже знал о петлях, но не имел опыта с синтаксисом Python Поэтому я помог ему там, и мы придумали:

for x in range(8):
  print("-"*25)
  print("|  "*8, end="|\n")

Мы заметили, что нам не хватало закрывающегося ряда, поэтому мы добавили:

print("-"*25)

после цикла. Смотреть! У нас есть доска.

------------------------------
|  |  |  |  |  |  |  |  |
------------------------------
|  |  |  |  |  |  |  |  |
------------------------------
|  |  |  |  |  |  |  |  |
------------------------------
|  |  |  |  |  |  |  |  |
------------------------------
|  |  |  |  |  |  |  |  |
------------------------------
|  |  |  |  |  |  |  |  |
------------------------------
|  |  |  |  |  |  |  |  |
------------------------------
|  |  |  |  |  |  |  |  |
------------------------------

Хорошо, это хорошо – Но если мы хотим иметь возможность на самом деле играть, нам нужна какая-то структура данных для хранения информации о статусе доски.

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

board = []
for i in range(8):
  row = []
  for j in range(8):
    row.append(None)
  board.append(row)

На данный момент я не был уверен, что это будет лучший преподавательский подход – Но я просто не мог …| Оставьте те ужасные вложенные для петель, так как они были, поэтому я преподавал ему этот список сокращений:

board = [[None]*8]*8

Я начал объяснять, что я здесь делал, но получается, так как он уже знаком с этим типом синтаксиса из строк – он только что понял, что происходит (повезло!). Теперь мы должны были изменить то, как мы распечатаем доску, чтобы … фактически распечатайте доску вместо жестких строк. Мы определили следующий метод:

def print_board(board):
  for row in board:
    print("-"*25)
    for column in row:
       print("|{}".format(column), end="")
    print("|")
  print("-"*25)

board = [[None]*8]*8

print_board(board)

Вывод:

------------------------------
|None|None|None|None|None|None|None|None|
------------------------------
|None|None|None|None|None|None|None|None|
------------------------------
|None|None|None|None|None|None|None|None|
------------------------------
|None|None|None|None|None|None|None|None|
------------------------------
|None|None|None|None|None|None|None|None|
------------------------------
|None|None|None|None|None|None|None|None|
------------------------------
|None|None|None|None|None|None|None|None|
------------------------------
|None|None|None|None|None|None|None|None|
------------------------------

Хорошо … Давайте добавим кусочки на доску. Мы решили использовать стандартную букву для каждой части, а добавить цвет W или B как префикс. Добавили:

board[0] = ["BR","BN","BB","BQ","BK","BB","BN","BR"]
board[1] = ["BP","BP","BP","BP","BP","BP","BP","BP"]
board[6] = ["BP","BP","BP","BP","BP","BP","BP","BP"]
board[7] = ["BR","BN","BB","BQ","BK","BB","BN","BR"]

Выход теперь совершенно не в балансе:

------------------------------
|BR|BN|BB|BQ|BK|BB|BN|BR|
------------------------------
|BP|BP|BP|BP|BP|BP|BP|BP|
------------------------------
|None|None|None|None|None|None|None|None|
------------------------------
|None|None|None|None|None|None|None|None|
------------------------------
|None|None|None|None|None|None|None|None|
------------------------------
|None|None|None|None|None|None|None|None|
------------------------------
|BP|BP|BP|BP|BP|BP|BP|BP|
------------------------------
|BR|BN|BB|BQ|BK|BB|BN|BR|
------------------------------

12yo указал, что мы должны иметь рядные номера и столбец букв, поэтому мы добавили их и изменили Нет Значение двух пробелов, так что он будет хорошо выстроен. После нескольких твиков мы приземлились на:

def print_board(board):
    row_number = 8
    print("  ", end="")
    print(" ----"*8)
    for row in board:
        print(row_number, end=" ")
        row_number -= 1
        for cell in row:
            print("| {} ".format(cell), end="")
        print("|")
        print("  ", end="")
        print(" ----"*8)
    print("  ", end="")
    for letter in ['a','b','c','d','e','f','g','h']:
        print("  {}  ".format(letter), end="")
    print("")

board = [["  "]*8]*8
board[0] = ["BR","BN","BB","BQ","BK","BB","BN","BR"]
board[1] = ["BP","BP","BP","BP","BP","BP","BP","BP"]
board[6] = ["BP","BP","BP","BP","BP","BP","BP","BP"]
board[7] = ["BR","BN","BB","BQ","BK","BB","BN","BR"]

print_board(board)

Вывод:

   ---- ---- ---- ---- ---- ---- ---- ----
8 | BR | BN | BB | BQ | BK | BB | BN | BR |
   ---- ---- ---- ---- ---- ---- ---- ----
7 | BP | BP | BP | BP | BP | BP | BP | BP |
   ---- ---- ---- ---- ---- ---- ---- ----
6 |    |    |    |    |    |    |    |    |
   ---- ---- ---- ---- ---- ---- ---- ----
5 |    |    |    |    |    |    |    |    |
   ---- ---- ---- ---- ---- ---- ---- ----
4 |    |    |    |    |    |    |    |    |
   ---- ---- ---- ---- ---- ---- ---- ----
3 |    |    |    |    |    |    |    |    |
   ---- ---- ---- ---- ---- ---- ---- ----
2 | BP | BP | BP | BP | BP | BP | BP | BP |
   ---- ---- ---- ---- ---- ---- ---- ----
1 | BR | BN | BB | BQ | BK | BB | BN | BR |
   ---- ---- ---- ---- ---- ---- ---- ----
    a    b    c    d    e    f    g    h  

И это было это за день.

Настройтесь в следующий раз, чтобы увидеть, как мы делаем!

Оригинал: “https://dev.to/rinaarts/writing-a-chess-game-in-python-with-my-12yo-day-1-4pe6”