Проект
Время выполнения
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 }}
×