太多值无法解压缩预期3个pygame点击问题

如何解决太多值无法解压缩预期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()

解决方法

pygame.mouse.get_pressed()

返回代表所有鼠标按钮状态的布尔值序列。

按钮的数量是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 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-