Мы находимся в блоке из-за 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”