Крестики-нолики – это одна из самых популярных игр в мире. Игра проста и понятна даже для детей. Для того, чтобы научиться программировать на Python, можно начать с реализации игры в крестики-нолики. В этой статье мы рассмотрим, как создать игру в крестики-нолики на Python с помощью библиотеки Pygame.
Библиотека Pygame для игры крестики нолики на Python
Для начала нам понадобится установить библиотеку Pygame. Для этого мы можем использовать менеджер пакетов pip:
#
pip install pygame
#
Теперь мы можем приступить к написанию кода. Начнем с импорта необходимых библиотек:
#
import pygame
import sys
#
Создание игры крестики нолики на Python
Далее мы инициализируем библиотеку Pygame и создадим окно для игры:
#
pygame.init()
screen = pygame.display.set_mode((600, 600))
pygame.display.set_caption('Tic Tac Toe')
#
Теперь мы можем нарисовать игровое поле. Для этого мы используем функцию draw.line():
# Рисуем вертикальные линии
pygame.draw.line(screen, (0, 0, 0), (200, 0), (200, 600), 5)
pygame.draw.line(screen, (0, 0, 0), (400, 0), (400, 600), 5)
# Рисуем горизонтальные линии
pygame.draw.line(screen, (0, 0, 0), (0, 200), (600, 200), 5)
pygame.draw.line(screen, (0, 0, 0), (0, 400), (600, 400), 5)
#
Реализация ходов игры
Теперь мы можем добавить возможность игрокам походить. Для этого мы будем использовать цикл while:
#
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
# Получаем координаты клика
x, y = event.pos
# Определяем клетку, в которую кликнул игрок
if x < 200:
col = 0
elif x < 400:
col = 1
else:
col = 2
if y < 200:
row = 0
elif y < 400:
row = 1
else:
row = 2
# Рисуем крестик или нолик
if board[row][col] == 0:
board[row][col] = player
if player == 1:
pygame.draw.circle(screen, (255, 0, 0), (x, y), 50, 5)
player = 2
else:
pygame.draw.line(screen, (0, 0, 255), (x - 50, y - 50), (x + 50, y + 50), 5)
pygame.draw.line(screen, (0, 0, 255), (x + 50, y - 50), (x - 50, y + 50), 5)
player = 1
pygame.display.update()
Проверка победителя в игре
В конце мы добавим проверку на победу:
# Проверка на победу
for row in range(3):
if board[row][0] == board[row][1] == board[row][2] != 0:
print('Player', board[row][0], 'wins!')
sys.exit()
for col in range(3):
if board[0][col] == board[1][col] == board[2][col] != 0:
print('Player', board[0][col], 'wins!')
sys.exit()
if board[0][0] == board[1][1] == board[2][2] != 0:
print('Player', board[0][0], 'wins!')
sys.exit()
if board[2][0] == board[1][1] == board[0][2] != 0:
print('Player', board[2][0], 'wins!')
sys.exit()
Вот и все! Теперь мы можем запустить нашу игру и поиграть в крестики-нолики. Надеюсь, эта статья помогла вам научиться программировать на Python и реализовать игру в крестики-нолики.
Полный код игры «Крестики нолики» на Python
import random
# Создаем список для игрового поля
board = [" " for i in range(9)]
# Функция для вывода игрового поля
def print_board():
row1 = "| {} | {} | {} |".format(board[0], board[1], board[2])
row2 = "| {} | {} | {} |".format(board[3], board[4], board[5])
row3 = "| {} | {} | {} |".format(board[6], board[7], board[8])
print()
print(row1)
print(row2)
print(row3)
print()
# Функция для проверки победителя
def winner(board):
# Варианты победных комбинаций
win_comb = ((0, 1, 2), (3, 4, 5), (6, 7, 8), (0, 3, 6), (1, 4, 7), (2, 5, 8), (0, 4, 8), (2, 4, 6))
# Проверяем каждую комбинацию
for each in win_comb:
if board[each[0]] == board[each[1]] == board[each[2]] == "X":
return "Игрок победил!"
elif board[each[0]] == board[each[1]] == board[each[2]] == "O":
return "Компьютер победил!"
# Если ничья
if " " not in board:
return "Ничья!"
# Если игра продолжается
return None
# Функция для хода компьютера
def computer_move(board):
# Проверяем возможность победы компьютера
for i in range(0, 9):
if board[i] == " ":
board[i] = "O"
if winner(board) == "Компьютер победил!":
print("Компьютер выбрал ячейку {}".format(i + 1))
return
else:
board[i] = "
# Проверяем возможность победы игрока
for i in range(0, 9):
if board[i] == " ":
board[i] = "X"
if winner(board) == "Игрок победил!":
board[i] = "O"
print("Компьютер выбрал ячейку {}".format(i + 1))
return
else:
board[i] = " "
# Если нет возможности победить, то делаем случайный ход
while True:
random.seed()
computer_choice = random.randint(0, 8)
if board[computer_choice] == " ":
board[computer_choice] = "O"
print("Компьютер выбрал ячейку {}".format(computer_choice + 1))
break
# Функция для хода игрока
def player_move(board):
# Проверяем введенное значение
while True:
player_choice = int(input("Введите номер ячейки (1-9): "))
if player_choice in range(1, 10):
if board[player_choice - 1] == " ":
board[player_choice - 1] = "X"
break
else:
print("Ячейка уже занята!")
else:
print("Неверный номер ячейки!")
# Функция для начала игры
def game():
print_board()
while True:
player_move(board)
print_board()
if winner(board):
print(winner(board))
break
computer_move(board)
print_board()
if winner(board):
print(winner(board))
break
game()
super