Здравствуйте, дорогие друзья. На нашем канале мы уже создавали большое количество игр на языке программирования Python: "Камень, ножницы, бумага", "Бросок кубика", "Угадай число", "Змейка", китайскую игру "Ним" и "Тетрис". Ссылки на описание каждой игры будут в конце этой статьи.
Но сегодня мы напишем одну из самых известных и увлекательных игр - "Крестики-Нолики". В начале рассмотрим сам код с комментариями на скриншотах, а потом продублируем его в текстовом варианте.
А теперь для удобства, чтобы вы смогли скопировать себе код, мы дублируем его в текстовом варианте:
from tkinter import *
import random
root = Tk()
root.title('Крестики-нолики')
game_run = True
pole = []
kolvo_figur = 0
def new_game():
for row in range(3):
for col in range(3):
pole[row][col]['text'] = ' '
pole[row][col]['background'] = 'lavender'
global game_run
game_run = True
global kolvo_figur
kolvo_figur = 0
def click(row, col):
if game_run and pole[row][col]['text'] == ' ':
pole[row][col]['text'] = 'X'
global kolvo_figur
kolvo_figur += 1
check_win('X')
if game_run and kolvo_figur < 5:
computer_move()
check_win('O')
def check_win(smb):
for n in range(3):
check_line(pole[n][0], pole[n][1], pole[n][2], smb)
check_line(pole[0][n], pole[1][n], pole[2][n], smb)
check_line(pole[0][0], pole[1][1], pole[2][2], smb)
check_line(pole[2][0], pole[1][1], pole[0][2], smb)
def check_line(a1,a2,a3,smb):
if a1['text'] == smb and a2['text'] == smb and a3['text'] == smb:
a1['background'] = a2['background'] = a3['background'] = 'pink'
global game_run
game_run = False
def can_win(a1,a2,a3,smb):
res = False
if a1['text'] == smb and a2['text'] == smb and a3['text'] == ' ':
a3['text'] = 'O'
res = True
if a1['text'] == smb and a2['text'] == ' ' and a3['text'] == smb:
a2['text'] = 'O'
res = True
if a1['text'] == ' ' and a2['text'] == smb and a3['text'] == smb:
a1['text'] = 'O'
res = True
return res
def computer_move():
for n in range(3):
if can_win(pole[n][0], pole[n][1], pole[n][2], 'O'):
return
if can_win(pole[0][n], pole[1][n], pole[2][n], 'O'):
return
if can_win(pole[0][0], pole[1][1], pole[2][2], 'O'):
return
if can_win(pole[2][0], pole[1][1], pole[0][2], 'O'):
return
for n in range(3):
if can_win(pole[n][0], pole[n][1], pole[n][2], 'X'):
return
if can_win(pole[0][n], pole[1][n], pole[2][n], 'X'):
return
if can_win(pole[0][0], pole[1][1], pole[2][2], 'X'):
return
if can_win(pole[2][0], pole[1][1], pole[0][2], 'X'):
return
while True:
row = random.randint(0, 2)
col = random.randint(0, 2)
if pole[row][col]['text'] == ' ':
pole[row][col]['text'] = 'O'
break
for row in range(3):
line = []
for col in range(3):
button = Button(root, text=' ', width=4, height=2,
font=('Verdana', 20, 'bold'),
background='lavender',
command=lambda row=row, col=col: click(row,col))
button.grid(row=row, column=col, sticky='nsew')
line.append(button)
pole.append(line)
new_button = Button(root, text='Новая игра', command=new_game)
new_button.grid(row=3, column=0, columnspan=3, sticky='nsew')
root.mainloop()
А вот так выглядит графический интерфейс самой игры, да он примитивен, но большего и не надо:
Наша очередная компьютерная игра готова. Как вы видите ничего сложного.
На этом у меня на сегодня всё. Также предлагаю подписаться на наш Ютуб-канал ПиМ [ZveKa]. До новых встреч на просторах Яндекс Дзена.
Программируем на Python: пишем китайскую игру "Ним"
Программируем на Python: создаём игру "Змейка"
Программируем на Python: создаём игру "Тетрис"
Программируем на Python: игра "Бросок кубика"