如何解决太多值无法解压缩预期3个pygame点击问题
我目前正在从事CS50项目,研究井字游戏所需的AI。但是我无法运行Runner.py文件,因为出现以下错误:
回溯(最近通话最近):文件 “ /Users/newtracksuit/Downloads/tictactoe/runner.py”,第57行,在 click,_,_ = pygame.mouse.get_pressed()ValueError:太多值无法解包(预期3)
这是提供的完整代码,我尚未为tic-tac-toe程序编写任何实际功能,只需要了解为什么这还行不通
import pygame
import sys
import time
import tictactoe as ttt
pygame.init()
size = width,height = 600,400
# Colors
black = (0,0)
white = (255,255,255)
screen = pygame.display.set_mode(size)
mediumFont = pygame.font.Font("OpenSans-Regular.ttf",28)
largeFont = pygame.font.Font("OpenSans-Regular.ttf",40)
moveFont = pygame.font.Font("OpenSans-Regular.ttf",60)
user = None
board = ttt.initial_state()
ai_turn = False
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
screen.fill(black)
# Let user choose a player.
if user is None:
# Draw title
title = largeFont.render("Play Tic-Tac-Toe",True,white)
titleRect = title.get_rect()
titleRect.center = ((width / 2),50)
screen.blit(title,titleRect)
# Draw buttons
playXButton = pygame.Rect((width / 8),(height / 2),width / 4,50)
playX = mediumFont.render("Play as X",black)
playXRect = playX.get_rect()
playXRect.center = playXButton.center
pygame.draw.rect(screen,white,playXButton)
screen.blit(playX,playXRect)
playOButton = pygame.Rect(5 * (width / 8),50)
playO = mediumFont.render("Play as O",black)
playORect = playO.get_rect()
playORect.center = playOButton.center
pygame.draw.rect(screen,playOButton)
screen.blit(playO,playORect)
# Check if button is clicked
click,_,_ = pygame.mouse.get_pressed()
if click == 1:
mouse = pygame.mouse.get_pos()
if playXButton.collidepoint(mouse):
time.sleep(0.2)
user = ttt.X
elif playOButton.collidepoint(mouse):
time.sleep(0.2)
user = ttt.O
else:
# Draw game board
tile_size = 80
tile_origin = (width / 2 - (1.5 * tile_size),height / 2 - (1.5 * tile_size))
tiles = []
for i in range(3):
row = []
for j in range(3):
rect = pygame.Rect(
tile_origin[0] + j * tile_size,tile_origin[1] + i * tile_size,tile_size,tile_size
)
pygame.draw.rect(screen,rect,3)
if board[i][j] != ttt.EMPTY:
move = moveFont.render(board[i][j],white)
moveRect = move.get_rect()
moveRect.center = rect.center
screen.blit(move,moveRect)
row.append(rect)
tiles.append(row)
game_over = ttt.terminal(board)
player = ttt.player(board)
# Show title
if game_over:
winner = ttt.winner(board)
if winner is None:
title = f"Game Over: Tie."
else:
title = f"Game Over: {winner} wins."
elif user == player:
title = f"Play as {user}"
else:
title = f"Computer thinking..."
title = largeFont.render(title,30)
screen.blit(title,titleRect)
# Check for AI move
if user != player and not game_over:
if ai_turn:
time.sleep(0.5)
move = ttt.minimax(board)
board = ttt.result(board,move)
ai_turn = False
else:
ai_turn = True
# Check for a user move
click,_ = pygame.mouse.get_pressed()
if click == 1 and user == player and not game_over:
mouse = pygame.mouse.get_pos()
for i in range(3):
for j in range(3):
if (board[i][j] == ttt.EMPTY and tiles[i][j].collidepoint(mouse)):
board = ttt.result(board,(i,j))
if game_over:
againButton = pygame.Rect(width / 3,height - 65,width / 3,50)
again = mediumFont.render("Play Again",black)
againRect = again.get_rect()
againRect.center = againButton.center
pygame.draw.rect(screen,againButton)
screen.blit(again,againRect)
click,_ = pygame.mouse.get_pressed()
if click == 1:
mouse = pygame.mouse.get_pos()
if againButton.collidepoint(mouse):
time.sleep(0.2)
user = None
board = ttt.initial_state()
ai_turn = False
pygame.display.flip()
解决方法
返回代表所有鼠标按钮状态的布尔值序列。
按钮的数量是4或6,这取决于pygame的版本。我建议按订阅获取单个按钮的状态:
buttons = pygame.mouse.get_pressed()
if button[0] == 1:
# [...]
,
执行pygame.mouse.get_pressed()
时返回什么?我看到(0,0)
是您的代码期望的三个参数。
您可以计算出代码返回的内容并添加必要数量的下划线,但是如果您对其余参数不感兴趣,则可以使用*
处理其余的返回值,例如
click,*_ = pygame.mouse.get_pressed()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。