You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame中如何存储用户输入赌注金额?解决int()转换空字符串报错

解决Pygame中用户赌注输入无法识别为变量的问题

嘿,我来帮你搞定这个问题!你遇到的invalid literal for int() with base 10: ''报错,本质是因为你一开始把空字符串amount直接转成整数了——空字符串当然没法转成int啦。而且Pygame没有像普通Python程序那样的input()函数直接获取用户输入,得通过处理键盘事件来一步步收集用户输入的字符。

下面是具体的解决步骤和示例代码:

核心思路

  1. 用一个字符串变量存储用户输入的每一个字符(比如amount_input);
  2. 在游戏循环里监听键盘事件,收集数字、处理退格、确认输入;
  3. 确认输入时先校验内容是否为有效数字,再转成整数计算余额;
  4. 在屏幕上渲染输入内容,让用户能看到自己输入的是什么。

完整示例代码

import pygame
pygame.init()

# 初始化游戏窗口和字体
screen = pygame.display.set_mode((400, 300))
font = pygame.font.Font(None, 36)

# 钱包和输入相关变量
money = 50
amount_input = ""  # 存储用户输入的字符
input_active = True  # 标记是否允许输入(可改成点击激活)
new_balance = money  # 初始化新余额为当前余额

running = True
while running:
    screen.fill((255, 255, 255))  # 清屏
    
    # 处理所有事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        
        # 只在输入激活时处理键盘输入
        if event.type == pygame.KEYDOWN and input_active:
            # 处理数字键输入
            if event.key in range(pygame.K_0, pygame.K_9 + 1):
                amount_input += event.unicode
            # 处理退格键,删除最后一个字符
            elif event.key == pygame.K_BACKSPACE:
                amount_input = amount_input[:-1]
            # 处理回车键,确认输入
            elif event.key == pygame.K_RETURN:
                # 先校验输入是否为有效数字
                if amount_input.isdigit():
                    stake = int(amount_input)
                    # 额外校验:赌注必须是正数且不超过当前余额
                    if 0 < stake <= money:
                        # 这里模拟输赢,赢了就加stake,输了就改成 money - stake
                        new_balance = money + stake
                        money = new_balance  # 更新钱包余额
                        amount_input = ""  # 清空输入框准备下次输入
                    else:
                        print("⚠️ 赌注无效:请输入大于0且不超过当前余额的数字")
                else:
                    print("⚠️ 请输入有效的数字!")
    
    # 渲染文本到屏幕上
    money_text = font.render(f"当前余额: ${money}", True, (0, 0, 0))
    input_text = font.render(f"输入赌注: {amount_input}", True, (0, 0, 0))
    balance_text = font.render(f"新余额: ${new_balance}", True, (0, 0, 0))
    
    screen.blit(money_text, (20, 20))
    screen.blit(input_text, (20, 60))
    screen.blit(balance_text, (20, 100))
    
    pygame.display.flip()  # 更新屏幕显示

pygame.quit()

关键细节说明

  • 键盘事件处理:用event.unicode直接获取按下的字符,比逐个判断数字键更简洁;
  • 输入校验:用isdigit()确保输入是纯数字,避免转int时报错;额外加了赌注合理性校验,防止用户输入负数或超过余额的金额;
  • 可视化反馈:在屏幕上实时渲染输入内容和余额,让用户清楚当前状态;
  • 可选优化:如果需要点击输入框才激活输入,可以添加一个矩形区域,监听鼠标点击事件来切换input_active的状态。

内容的提问来源于stack exchange,提问作者Katiana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 11:42:37