Module (96%)
Section (93%)
Проект

Время выполнения

30-120 минут

Уровень сложности

Средний/Высокий

Цели

  • совершенствование навыков учащегося в использовании Python для решения сложных задач;
  • интеграция методов программирования в одну программу, состоящую из множества различных частей.

Сценарий

Ваша задача - написать простую программу, которая делает вид, будто играет с пользователем в крестики-нолики. Чтобы Вам было проще, мы решили упростить игру. Вот наши предположения:

  • компьютер (то есть Ваша программа) должен играть в игру, используя 'X';
  • пользователь (например, Вы) должен играть в игру, используя символы 'O';
  • первый ход принадлежит компьютеру - он всегда помещает свой первый 'X' в середину доски;
  • все квадраты пронумерованы строка за строкой, начиная с 1 (см. пример сеанса ниже для справки)
  • пользователь делает свой ход, вводя номер выбранного им квадрата - число должно быть действительным, т.е. оно должно быть целым числом, оно должно быть больше 0 и меньше 10, и оно не может указывать на поле, которое уже занято;
  • программа проверяет, окончена ли игра - есть четыре возможных варианта: игра должна продолжаться, игра заканчивается ничьей, Вы выигрываете или компьютер выигрывает;
  • компьютер отвечает ходом, и проверка повторяется;
  • не применяйте искусственный интеллект в какой-либо форме - случайный выбор поля, сделанный компьютером, достаточно хорош для игры.

Пример сеанса работы с программой может выглядеть следующим образом:

+-------+-------+-------+ | | | | | 1 | 2 | 3 | | | | | +-------+-------+-------+ | | | | | 4 | X | 6 | | | | | +-------+-------+-------+ | | | | | 7 | 8 | 9 | | | | | +-------+-------+-------+ Enter your move: 1 +-------+-------+-------+ | | | | | O | 2 | 3 | | | | | +-------+-------+-------+ | | | | | 4 | X | 6 | | | | | +-------+-------+-------+ | | | | | 7 | 8 | 9 | | | | | +-------+-------+-------+ +-------+-------+-------+ | | | | | O | X | 3 | | | | | +-------+-------+-------+ | | | | | 4 | X | 6 | | | | | +-------+-------+-------+ | | | | | 7 | 8 | 9 | | | | | +-------+-------+-------+ Enter your move: 8 +-------+-------+-------+ | | | | | O | X | 3 | | | | | +-------+-------+-------+ | | | | | 4 | X | 6 | | | | | +-------+-------+-------+ | | | | | 7 | O | 9 | | | | | +-------+-------+-------+ +-------+-------+-------+ | | | | | O | X | 3 | | | | | +-------+-------+-------+ | | | | | 4 | X | X | | | | | +-------+-------+-------+ | | | | | 7 | O | 9 | | | | | +-------+-------+-------+ Enter your move: 4 +-------+-------+-------+ | | | | | O | X | 3 | | | | | +-------+-------+-------+ | | | | | O | X | X | | | | | +-------+-------+-------+ | | | | | 7 | O | 9 | | | | | +-------+-------+-------+ +-------+-------+-------+ | | | | | O | X | X | | | | | +-------+-------+-------+ | | | | | O | X | X | | | | | +-------+-------+-------+ | | | | | 7 | O | 9 | | | | | +-------+-------+-------+ Enter your move: 7 +-------+-------+-------+ | | | | | O | X | X | | | | | +-------+-------+-------+ | | | | | O | X | X | | | | | +-------+-------+-------+ | | | | | O | O | 9 | | | | | +-------+-------+-------+ You won!

Требования

Реализуйте следующие функции:

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

    board[row][column]
  • каждый из элементов внутреннего списка может содержать 'O', 'X' или цифру, представляющую номер квадрата (такой квадрат считается свободным)
  • внешний вид доски должен быть точно таким же, как в примере.
  • реализовать функции, определенные для вас в редакторе.

Получить случайное целое число можно с помощью функции Python под названием randrange(). В приведенном ниже примере программы показано, как ее использовать (программа выводит десять случайных чисел от 0 до 8).

Примечание: инструкция from-import обеспечивает доступ к функции randrange, определенной во внешнем модуле Python, вызываемом random.

from random import randrange for i in range(10): print(randrange(8))

Code

def display_board(board):
# The function accepts one parameter containing the board's current status
# and prints it out to the console.


def enter_move(board):
# The function accepts the board's current status, asks the user about their move,
# checks the input, and updates the board according to the user's decision.


def make_list_of_free_fields(board):
# The function browses the board and builds a list of all the free squares;
# the list consists of tuples, while each tuple is a pair of row and column numbers.


def victory_for(board, sign):
# The function analyzes the board's status in order to check if
# the player using 'O's or 'X's has won the game


def draw_move(board):
# The function draws the computer's move and updates the board.
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×