我想实现程序在按下鼠标的位置将“X”传送到屏幕上的功能。然而,一旦我运行该程序,什么也没有出现。 take_turn 函数将值存储在二维数组中,并将鼠标单击的位置存储在名为“positions”的列表中。然后,在主游戏循环中,应将 X 放置在通过位置列表迭代的所有位置中。我应该如何修改我的代码?
import pygame
import sys
pygame.init()
HEIGHT = 800
WIDTH = 600
BOARD_COLOR = (50, 50, 50)
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Game")
ROWS = 3
SIZE = 200
count = 0
board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
positions = []
font = pygame.font.Font('Poppins-ExtraBold.ttf', 150)
text = font.render('X', True, (255, 255, 255))
def draw_board(screen):
pygame.draw.line(screen, (255, 255, 255), (0, SIZE), (WIDTH, SIZE), width=5)
for i in range(0, ROWS-1):
pygame.draw.line(screen, (255, 255, 255), ((i+1)*SIZE, SIZE), ((i+1)*SIZE, HEIGHT))
pygame.draw.line(screen, (255, 255, 255), (0, ((i+1) * SIZE) + SIZE), (WIDTH, ((i+1) * SIZE) + SIZE))
def take_turn(position):
global count
global positions
if position[1] > SIZE:
if count % 2 == 0:
board[int((position[1] - SIZE) / SIZE)][int((position[0]) / SIZE)] = 1
for i in range(len(board)):
print(board[i])
positions.append((position[0], position[1]))
count += 1
else:
board[int((position[1] - SIZE) / SIZE)][int((position[0]) / SIZE)] = 2
for i in range(len(board)):
print(board[i])
count += 1
running = True
while running:
mouse = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
take_turn(mouse)
WIN.fill(BOARD_COLOR)
draw_board(WIN)
for pos in positions:
text.blit(text, pos)
pygame.display.update()
我尝试将填充函数放在游戏循环的不同位置,但没有任何变化。
代码中导致没有“X”出现在屏幕上的问题是
text.blit(text, pos)
行中的一个小错误。
blit()
函数的第一个参数应该是要绘制的表面,而第二个参数是位置。在这个例子中,你传递了
text
两次,这是不正确的。
以下是修复后的代码:
import pygame
import sys
# ... (其余的代码与之前相同)
running = True
while running:
mouse = pygame.mouse.get_pos()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
take_turn(mouse)
WIN.fill(BOARD_COLOR)
draw_board(WIN)
for pos in positions:
# 修改这里:将第一个参数改为 WIN
WIN.blit(text, pos)
pygame.display.update()
解释:
-
WIN.blit(text, pos)
: 这行代码现在将text
表面(也就是“X”)绘制到WIN
表面(也就是你的游戏窗口)上,位置由pos
指定。
通过这个修改,现在每次点击鼠标时,都应该会在对应位置看到一个“X”了。
标签:python,pygame,tic-tac-toe From: 78850620