Я сделал следующую игру для c -ta c -toe на python с использованием pygames, но теперь мой профессор сказал, что я не могу использовать pygames и должен использовать graphics.py, может кто-нибудь помочь изменить зависимость следующего кода?
XO
сохраняет либо 'x'
, либо 'o'
в зависимости от шанса игрока, TTT
хранит текущее состояние доски, drawXO2()
dr aws символы на доске в соответствии с click()
import pygame as pg, sys
from pygame.locals import *
import time
import pandas as pd
# initialize global variables
XO = 'x'
winner = None
draw = False
width = 400
height = 400
white = (255, 255, 255)
line_color = (10, 10, 10)
TTT = [[None] * 3, [None] * 3, [None] * 3]
pg.init()
fps = 30
CLOCK = pg.time.Clock()
screen = pg.display.set_mode((width, height + 100), 0, 32)
pg.display.set_caption("Tic Tac Toe")
opening = pg.image.load('op.png')
x_img = pg.image.load('X.png')
o_img = pg.image.load('O.png')
# resizing images
x_img = pg.transform.scale(x_img, (80, 80))
o_img = pg.transform.scale(o_img, (80, 80))
opening = pg.transform.scale(opening, (width, height + 100))
def game_opening():
screen.blit(opening, (0, 0))
pg.display.update()
time.sleep(1)
screen.fill(white)
# Drawing vertical lines
pg.draw.line(screen, line_color, (width / 3, 0), (width / 3, height), 7)
pg.draw.line(screen, line_color, (width / 3 * 2, 0), (width / 3 * 2, height), 7)
# Drawing horizontal lines
pg.draw.line(screen, line_color, (0, height / 3), (width, height / 3), 7)
pg.draw.line(screen, line_color, (0, height / 3 * 2), (width, height / 3 * 2), 7)
draw_status()
def nextmove():
global TTT
df = pd.read_csv("Dataset.txt", sep=":", names=['strings', 'moves'])
a = df[['strings']]
b = df[['moves']]
status = a.to_numpy()
next_move = b.to_numpy()
status = status.flatten()
next_move = next_move.flatten()
str = ""
for i in range(3):
for j in range(3):
if TTT[i][j] == 'x':
str += "X"
elif TTT[i][j] == 'o':
str += "O"
else:
str += " "
print(str)
print(TTT)
for i in range(2112):
if str == status[i]:
next = int(next_move[i])
return next
def draw_status():
global draw
if winner is None:
message = XO.upper() + "'s Turn"
else:
message = winner.upper() + " won!"
if draw:
message = 'Game Draw!'
font = pg.font.Font(None, 30)
text = font.render(message, 1, (255, 255, 255))
# copy the rendered message onto the board
screen.fill((0, 0, 0), (0, 400, 500, 100))
text_rect = text.get_rect(center=(width / 2, 500 - 50))
screen.blit(text, text_rect)
pg.display.update()
def check_win():
global TTT, winner, draw
# check for winning rows
for row in range(0, 3):
if ((TTT[row][0] == TTT[row][1] == TTT[row][2]) and (TTT[row][0] is not None)):
# this row won
winner = TTT[row][0]
pg.draw.line(screen, (250, 0, 0), (0, (row + 1) * height / 3 - height / 6), \
(width, (row + 1) * height / 3 - height / 6), 4)
break
# check for winning columns
for col in range(0, 3):
if (TTT[0][col] == TTT[1][col] == TTT[2][col]) and (TTT[0][col] is not None):
# this column won
winner = TTT[0][col]
# draw winning line
pg.draw.line(screen, (250, 0, 0), ((col + 1) * width / 3 - width / 6, 0), ((col + 1) * width / 3 - width / 6, height), 4)
break
# check for diagonal winners
if (TTT[0][0] == TTT[1][1] == TTT[2][2]) and (TTT[0][0] is not None):
# game won diagonally left to right
winner = TTT[0][0]
pg.draw.line(screen, (250, 70, 70), (50, 50), (350, 350), 4)
if (TTT[0][2] == TTT[1][1] == TTT[2][0]) and (TTT[0][2] is not None):
# game won diagonally right to left
winner = TTT[0][2]
pg.draw.line(screen, (250, 70, 70), (350, 50), (50, 350), 4)
if (all([all(row) for row in TTT]) and winner is None):
draw = True
draw_status()
def drawXO(row, col):
global TTT, XO
if row == 1:
posx = 30
if row == 2:
posx = width / 3 + 30
if row == 3:
posx = width / 3 * 2 + 30
if col == 1:
posy = 30
if col == 2:
posy = height / 3 + 30
if col == 3:
posy = height / 3 * 2 + 30
TTT[row - 1][col - 1] = XO
if (XO == 'x'):
screen.blit(x_img, (posy, posx))
XO = 'o'
else:
screen.blit(o_img, (posy, posx))
XO = 'x'
pg.display.update()
# print(posx,posy)
# print(TTT)
def drawXO2():
global TTT, XO
AImove = nextmove()
row = int(AImove / 3)
col = AImove % 3
print(row)
print(col)
if row == 0:
posx = 30
if row == 1:
posx = width / 3 + 30
if row == 2:
posx = width / 3 * 2 + 30
if col == 0:
posy = 30
if col == 1:
posy = height / 3 + 30
if col == 2:
posy = height / 3 * 2 + 30
TTT[row][col] = XO
if (XO == 'x'):
screen.blit(x_img, (posy, posx))
XO = 'o'
else:
screen.blit(o_img, (posy, posx))
XO = 'x'
pg.display.update()
def userClick():
# get coordinates of mouse click
x, y = pg.mouse.get_pos()
# get column of mouse click (1-3)
if (x < width / 3):
col = 1
elif (x < width / 3 * 2):
col = 2
elif (x < width):
col = 3
else:
col = None
# get row of mouse click (1-3)
if (y < height / 3):
row = 1
elif (y < height / 3 * 2):
row = 2
elif (y < height):
row = 3
else:
row = None
# print(row,col)
if (row and col and TTT[row - 1][col - 1] is None):
global XO
# draw the x or o on screen
drawXO(row, col)
check_win()
def reset_game():
global TTT, winner, XO, draw
time.sleep(3)
XO = 'x'
draw = False
game_opening()
winner = None
TTT = [[None] * 3, [None] * 3, [None] * 3]
game_opening()
# run the game loop forever
while True:
for event in pg.event.get():
if event.type == QUIT:
pg.quit()
sys.exit()
elif event.type is MOUSEBUTTONDOWN:
# the user clicked; place an X or O
userClick()
if winner or draw:
reset_game()
drawXO2()
check_win()
if winner or draw:
reset_game()
pg.display.update()
CLOCK.tick(fps)