【猜数字游戏】用wxPython实现:基本的游戏框架 + 简单的图形用户界面

【猜数字游戏】

  • 写在最前面
    • 猜数字游戏
  • 实现【猜数字游戏】
    • 安装wxPython
    • 全部代码
    • 代码解析
      • 1. 初始化界面
      • 2. 生成随机数
      • 3. 处理猜测
      • 4. 特殊功能
      • 5. 分数计算
  • 游戏小程序呈现
    • 结语

写在最前面

看到了一个比较有意思的问题
https://ask.csdn.net/questions/8038039

猜数字游戏

在这个猜数字游戏中,计算机生成一个由4位不重复的数字组成的随机数。玩家的任务是猜测这个数字。每次猜测后,程序会提供反馈,显示匹配的数字数量和位置正确的数字数量。玩家有十次猜测机会,每次错误猜测会扣分,直到正确猜中或用尽所有机会。

具体要求
1、用户从键盘输入4位不重复的数,来匹配计算机给出的4位随机数,若数字和位置均等同,表示用户赢了
2、每猜一次,计算机均给出提示信息( x , y ), x 表示数字、位置都匹配的个数, y 表示数字匹配但位置不匹配的个数。
3、若输入的是8888,先储存用户之前所猜数字,然后用用户之前所猜数字与计算机所给数字相对照,并提示用户之前所猜数字的第几位数字与计算机所给数字的第几位数字相匹配。
4、若输入的是7777,可以查看计算机所给的4位数,但需要输入密码,密码自定。
5、猜的结果以分数给出,每猜错一次扣40分,若猜对1个数,奖励20分,并且每猜一次,输出所得分。
6、用户只有十次机会猜数,若十次均未正确,算失败。

实现【猜数字游戏】

安装wxPython

关于wxPython:wxPython是一个强大的跨平台GUI(图形用户界面)工具包。这个库允许Python开发者轻松地创建丰富的本地应用程序。wxPython是wxWidgets C++类库的Python封装,它使Python程序员能够轻松地创建具有本地应用程序外观和行为的程序。

首先需要安装wxPython,可以通过pip install wxPython来安装它。

在这里插入图片描述

全部代码

实现这个猜数字游戏涉及几个关键点:生成随机数字、处理用户输入、检查匹配情况、处理特殊输入(8888和7777)、计算并显示分数,以及使用wxPython创建GUI。

下面是Python代码示例,展示了如何用wxPython来实现这个游戏的核心逻辑部分:

import wx
import randomclass GuessNumberGame(wx.Frame):def __init__(self, parent, title):super(GuessNumberGame, self).__init__(parent, title=title, size=(400, 300))self.initUI()self.Centre()self.Show()self.computer_number = self.generate_number()self.attempts = 10self.score = 400self.guess_history = []def initUI(self):panel = wx.Panel(self)vbox = wx.BoxSizer(wx.VERTICAL)self.text_ctrl = wx.TextCtrl(panel)vbox.Add(self.text_ctrl, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10)self.guess_button = wx.Button(panel, label='Guess')self.guess_button.Bind(wx.EVT_BUTTON, self.on_guess)vbox.Add(self.guess_button, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10)self.result_text = wx.StaticText(panel, label="")vbox.Add(self.result_text, flag=wx.EXPAND|wx.ALL, border=10)panel.SetSizer(vbox)def generate_number(self):digits = list(range(10))random.shuffle(digits)return ''.join(map(str, digits[:4]))def on_guess(self, event):guess = self.text_ctrl.GetValue()if guess == '7777':self.ask_password()returnif guess == '8888':self.show_history()returnself.guess_history.append(guess)x, y = self.check_guess(guess)if x == 4:self.result_text.SetLabel(f"You won! The number was {self.computer_number}")self.disable_input()else:self.score -= 40self.attempts -= 1self.result_text.SetLabel(f"Matched: {x}, Misplaced: {y}. Attempts left: {self.attempts}. Score: {self.score}")if self.attempts == 0:self.result_text.SetLabel(f"You lost! The number was {self.computer_number}")self.disable_input()def check_guess(self, guess):x = y = 0for i, num in enumerate(guess):if num in self.computer_number:if self.computer_number[i] == num:x += 1else:y += 1return x, ydef ask_password(self):password = wx.GetTextFromUser('Enter password to see the number', 'Password')if password == 'your_password':  # Replace 'your_password' with your actual passwordwx.MessageBox(f"The number is {self.computer_number}", "Number")else:wx.MessageBox("Incorrect password", "Error")def show_history(self):message = "\n".join(f"Guess {i+1}: {g}" for i, g in enumerate(self.guess_history))wx.MessageBox(message, "Guess History")def disable_input(self):self.guess_button.Disable()self.text_ctrl.Disable()if __name__ == '__main__':app = wx.App()GuessNumberGame(None, title='Guess the Number Game')app.MainLoop()

代码解析

游戏代码主要分为几个部分:初始化界面、生成随机数、处理猜测、特殊功能以及分数计算。下面逐一解析:

1. 初始化界面

使用wxPython创建GUI非常直观。我们定义了一个GuessNumberGame类,继承自wx.Frame。在__init__方法中,我们调用了initUI函数来设置界面布局,并初始化了一些基本的游戏变量。

class GuessNumberGame(wx.Frame):def __init__(self, parent, title):# 窗体初始化# ...def initUI(self):# 创建并布局界面元素# ...

2. 生成随机数

在游戏开始时,需要生成一个4位的随机数。这是通过generate_number函数实现的,它使用Python标准库中的random模块来生成一个不重复的数字列表。

def generate_number(self):digits = list(range(10))random.shuffle(digits)return ''.join(map(str, digits[:4]))

3. 处理猜测

玩家每次提交猜测时,都会调用on_guess方法。这个方法会检查特殊的输入(如8888和7777),并调用check_guess函数来确定猜测的准确性。

def on_guess(self, event):# 处理猜测逻辑# ...

4. 特殊功能

如果玩家输入8888,程序会显示之前所有的猜测。输入7777时,玩家需要输入密码来查看答案。

def ask_password(self):# 请求密码查看答案# ...def show_history(self):# 显示猜测历史# ...

5. 分数计算

每次猜测后,程序都会更新玩家的分数。如果猜错,扣除40分;猜对一个数字,奖励20分。

游戏小程序呈现

在这里插入图片描述

这个程序使用wxPython创建了一个简单的图形界面,玩家可以在其中输入猜测的数字并接收反馈。程序逻辑包括生成一个随机的4位数字、检查玩家的猜测、处理特殊的输入(8888和7777),以及更新玩家的分数和剩余尝试次数。
在这里插入图片描述

若输入的是7777,可以查看计算机所给的4位数,但需要输入密码,密码自定。
注意:程序中的your_password应替换为你想要的密码,用于查看计算机生成的数字。

在这里插入图片描述
在这里插入图片描述

结语

通过使用wxPython,我们可以更轻松地为Python程序创建引人入胜的图形用户界面。

这个猜数字游戏只是wxPython众多用途中的一个小例子,但它展示了如何用Python处理逻辑和界面设计,是初学者进入编程世界的完美实例。

此外,这个示例提供了基本的游戏框架,你可以根据需要进一步美化界面或添加更多功能。

希望这个小项目能激发你的兴趣,启发你开发更多有趣的Python应用 ~

编程不仅仅是解决问题的工具,它还是探索创意的平台。

如果有问题,欢迎进一步交流 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果TF签名全称TestFlight签名,需要怎么做才可以上架呢?

如果你正在开发一个iOS应用并准备进行内测,TestFlight是苹果提供的一个免费的解决方案,它使开发者可以邀请用户参加应用的测试。以下是一步步的指南,教你如何利用TestFlight进行内测以便于应用后续可以顺利上架App Store。 1: 准备工作 在测…

ceph编译

1.执行./install-deps.sh提示deb无法安装 解决方案: 直接使用dpkg -i来安装deb,会提示缺失3个库,库名如下: cython python dh-systemd 其中cython和python手动安装好后,也会依旧报错。此时修改debian/control文件&…

客餐书房一体布局,新中式风格禅意十足。福州中宅装饰,福州装修

你是否曾经遇到过这样的痛点:装修时不知道该选择什么样的风格,让家居空间显得既时尚又实用?如果你对此感到困惑,那么新中式风格可能正是你想要的选择! 今天,我们将一起探讨一种别样的家居布局,它…

如何用量化交易“做空”来获取收益

最近的市场环境相当不好,今年一年都没有任何主线的模式情况下去交易。更多的都是题材热点聚焦,而且板块轮动过快。市场环境不好的情况下,我们如何通过“做空”来获取收益!量化做空是指利用计算机模型和算法,通过分析市…

EasyExcel如何读取全部Sheet页数据方法

一、需求描述 Excel表格里面大约有20个sheet页,每个sheet页65535条数据,需要读取全部数据,并导入至数据库。 找了好多种方式,EasyExcel比较符合,下面看代码。 二、实现方式 采用EasyExcel框架的doReadAll()方法 1、…

python监控显卡显存

文章目录 内存监控进程监控获取进程pid管理进程pid的死活 内存监控 在工作组中,经常会遇到多人争抢显卡的情况,僧多肉少,所以可以做个监控显卡的头部程序,然后再调取主程序训练模型。 我们借用pynvml,没有安装的&…

【Redis】Redis高级特性和应用(慢查询、Pipeline、事务、Lua)

目录 Redis的慢查询 慢查询配置 慢查询操作命令 慢查询建议 Pipeline 事务 Redis的事务原理 Redis的watch命令 Pipeline和事务的区别 Lua Lua入门 安装Lua Lua基本语法 注释 标示符 关键词 全局变量 Lua中的数据类型 Lua 中的函数 Lua 变量 Lua中的控制语句…

Unity DOTS《群体战斗弹幕游戏》核心技术分析之3D角色动画

最近DOTS发布了正式的版本, 我们来分享现在流行基于群体战斗的弹幕类游戏,实现的核心原理。今天给大家介绍大规模战斗群体3D角色的动画如何来实现。 DOTS 对角色动画支持的局限性 截止到Unity DOTS发布的版本1.0.16,目前还是无法很好的支持3D角色动画。在DOTS 的b…

蓝桥杯-02-蓝桥杯C/C++组考点与14届真题

文章目录 蓝桥杯C/C组考点与14届真题参考资源C/C组考点1. 组别2. 竞赛赛程3. 竞赛形式4. 参赛选手机器环境5. 试题形式5.1. 结果填空题5.2. 编程大题 6. 试题考查范围7. 答案提交8. 评分9. 样题样题 1:矩形切割(结果填空题)样题 2&#xff1a…

群晖NAS配置之搭建WordPress个人博客站点

群晖NAS配置之搭建WordPress个人博客站点 之前写了一些ngrok和frp给群晖nas做内网穿透,今天分享一下在群晖nas下安装wordpress的教程。 WordPress是一个开源的内容管理系统(CMS),最初是用来搭建博客的,但后来发展成为…

中职组网络安全-linux渗透测试-Server2203(环境+解析)

任务环境说明: 服务器场景:Server2203(关闭链接) 用户名:hacker 密码:123456 1.使用渗透机对服务器信息收集,并将服务器中SSH服务端口号作为flag提交; FLAG:2232 2. 使用渗透机对…

单链表相关经典算法OJ题:移除链表元素

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 题目:移除链表元素 解法一: 解法一的代码实现: 解法二: 解法二代码的实现: 总结 前言 世上有两种耀眼的…

改进LiteOS中物理内存分配算法(详细实验步骤+相关源码解读)

一、实验要求 优化TLSF算法,将Best-fit策略优化为Good-fit策略,进一步降低时间复杂度至O(1)。 优化思路: 1.初始化时预先为每个索引中的内存块挂上若干空闲块,在实际分配时避免分割(split)操作&#xff…

JAVA实战演练之自动驾驶系统

一基本概念: 1. 传感器数据处理: 自动驾驶汽车需要收集大量的数据,包括来自雷达、激光雷达(LiDAR)、摄像头等传感器的数据。这些数据需要通过JAVA程序进行处理和解析,以便汽车能够理解其周围环境。 2. 控制算法: JAVA可…

TA-Lib学习研究笔记(三)——Volatility Indicator

TA-Lib学习研究笔记(三)——Volatility Indicator 波动率指标函数组 Volatility Indicators: [‘ATR’, ‘NATR’, ‘TRANGE’] 1.ATR Average True Range 函数名:ATR 名称:真实波动幅度均值 简介:真实波动幅度均值…

力扣labuladong——一刷day61

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣865. 具有所有最深节点的最小子树二、力扣1123. 最深叶节点的最近公共祖先三、力扣1026. 节点与其祖先之间的最大差值四、力扣1120. 子树的最大平均值 …

SQL行转列,将json数组拆分成多行,一行变多行例子,(LATERAL VIEW explode)

需求背景 有一张工程师能力表,如: 张三 擅长java、c、c、c#、js 李四 擅长java、go 王五 擅长css、f# 陈六 擅长as、c、java 。。。 需要统计擅长各种语言的工程师的数量,如: java 3 c 2 go 1 代码示例 使用LATERAL VIEW expl…

自建CA并生成自签名SSL证书

文章目录 前言一键生成自签名证书命令脚本执行结果 分步来看看自建证书的过程自建CA根证书生成CA私钥生成CA自签名证书 自签名SSL证书生成服务器私钥和证书申请文件CRS使用CA根证书签名SSL证书 最终的文件列表相关名词SSL/TLS协议证书颁发机构(CA)数字证…

MacOS 14 系统 XCode15、 Flutter 开发 IOS

Flutter 系列文章目录 MacOS14 Sonoma 安装 Flutter 开发环境 MacOS 系统 Flutter开发Android 环境配置MacOS 系统 Flutter开发IOS 环境配置​​​​​​​ 前言 前面我们已经在MacOS14 M3芯片上安装好 Flutter环境,包括开发工具 VsCode 、Android Stuiod,那么fl…

vue3 子父组件、组件传值、

目录 父组件给子组件传值 子组件给父组件传值 页面index.vue 子组件footer.vue 父组件给子组件传值 index.vue页面 <div class"box"><!-- 页面使用组件的地方--><!-- parentData 子组件通过 parentData 接收test 要传给子组件的数据--><…