当前位置: 首页 > news >正文

【Python】取火柴小游戏(八什博弈)

# 火柴游戏:Python编程示例

当我们想要玩一个简单而有趣的游戏,同时又想锻炼自己的编程技能时,一个经典的选择就是火柴游戏。这个游戏的规则很简单:有一堆火柴,每次可以拿走1到6根,两名玩家轮流取火柴,拿到最后一根的玩家获胜。在本篇博客中,我们将使用Python来模拟和玩这个火柴游戏。

## 游戏规则

游戏规则非常简单:

1. 有一堆火柴,初始数量可以是任意值。
2. 两名玩家轮流行动,一位是人类玩家,另一位是电脑。
3. 每位玩家可以选择拿走1到6根火柴,但不能拿走超过剩余火柴数量的火柴。
4. 游戏继续,直到只剩下一根火柴。
5. 拿到最后一根火柴的玩家获胜。

## Python实现

要实现这个游戏,我们可以使用Python编程语言。首先,我们需要初始化游戏的初始火柴数量,然后通过编写代码来模拟玩家和电脑的行动。以下是游戏的Python代码示例:

```python
import random

total = random.randint(60, 100)
print('总共 ', total, ' 根火柴')

winner = 0

while winner == 0:
    player = int(input('请输入你要取的火柴数:'))
    while player < 0 or player > 6 or total - player < 0:
        player = int(input('请重新输入你要取的火柴数:'))
    total -= player
    print('玩家选了 ', player , ' 根火柴')
    print('现在还剩 ', total , ' 根火柴')
    if total == 0:
        winner = 1
        break

    npc = total % 7 # 取的火柴数需要把对方变成7的倍数才对自己有利
    if npc == 0:
        npc = random.randint(1, 6)  # npc 无法必赢局,1-6随便选一个
    total -= npc
    print('npc 选了 ', npc , ' 根火柴')
    print('现在还剩 ', total , ' 根火柴')
    if total == 0:
        winner = 2
        break

if winner == 1:
    print("你赢了")
else:
    print("你输了")
```

## Python实现(GUI版)

可采用tkinter实现GUI版:

```python
import random
import tkinter as tk
from tkinter import messagebox

class BashGame:
    def __init__(self, root: tk.Tk):
        self.root = root
        self.root.title("取火柴")
        self.player = 0
        self.npc = 0
        self.piles = total = random.randint(60, 100)  # 初始化堆的物品数量
        self.create_gui()

    def create_gui(self):
        self.label0 = tk.Label(self.root, text=f"本轮你拿走的火柴数量: {self.player}")
        self.label0.pack(pady=10)
        self.label1 = tk.Label(self.root, text=f"本轮电脑拿走的火柴数量: {self.npc}")
        self.label1.pack(pady=10)
        self.label2 = tk.Label(self.root, text=f"当前火柴数量: {self.piles}")
        self.label2.pack(pady=10)
        self.entry = tk.Entry(self.root, width=40)
        self.entry.pack()
        self.button = tk.Button(self.root, text="拿走物品", command=self.take_items)
        self.button.pack()
        self.root.mainloop()

    def take_items(self):
        try:
            num_to_take = int(self.entry.get())
            if num_to_take < 1 or num_to_take > 6:
                messagebox.showerror("错误", "只能拿走1到6根火柴")
                return
            if num_to_take > self.piles:
                messagebox.showerror("错误", "没有足够的物品可供拿走")
                return
            self.player = num_to_take
            self.piles -= num_to_take
            self.label0.config(text=f"本轮你拿走的火柴数量: {self.player}")
            self.label2.config(text=f"当前物品数量: {self.piles}")
            if self.piles == 0:
                messagebox.showinfo("游戏结束", "你赢了!")
            else:
                # 让电脑随机拿走物品
                computer_choice = self.piles % 7
                if computer_choice == 0:
                    computer_choice = random.randint(1, 6)
                self.npc = computer_choice
                self.piles -= computer_choice
                self.label1.config(text=f"本轮电脑拿走的火柴数量: {self.npc}")
                self.label2.config(text=f"当前物品数量: {self.piles}")
                if self.piles == 0:
                    messagebox.showinfo("游戏结束", "电脑赢了!")
        except ValueError:
            messagebox.showerror("错误", "请输入一个有效的数字")

if __name__ == "__main__":
    root = tk.Tk()
    game = BashGame(root)
```

相关文章:

【Python】取火柴小游戏(八什博弈)

# 火柴游戏&#xff1a;Python编程示例 当我们想要玩一个简单而有趣的游戏&#xff0c;同时又想锻炼自己的编程技能时&#xff0c;一个经典的选择就是火柴游戏。这个游戏的规则很简单&#xff1a;有一堆火柴&#xff0c;每次可以拿走1到6根&#xff0c;两名玩家轮流取火柴&…...

【Redis安装】Ubuntu和Centos

此处安装的是 Redis5 在 Ubuntu 系统上 切换到 root 用户下&#xff0c;su 命令切换使用 apt 可以搜索 redis 相关软件包 apt search redis使用 apt 命令安装 redis apt install redis手动修改配置文件 redis.conf cd /etc/redis/ vim redis.conf修改以下两处 重启服务器 …...

【Java】ArrayList集合使用

ArrayList集合常见方法 方法名称说明public boolean add(E e)将元素插入到指定位置的arraylist中&#xff0c;返回值&#xff1a;返回boolean类型public E remove(int index)删除 arraylist里的单个元素&#xff0c;返回值&#xff1a;返回删除之前的元素public E set(int inde…...

【proteus】8086仿真/汇编:创建项目并添加汇编代码文件

1.创建好新项目 2.点击source code 弹出VSM 3. 4.注意两个都不勾选 可以看到schematic有原理图出现 5. 再次点击source code 6.project/project settings&#xff0c;取消勾选embed 7. add 8.输入文件名保存后&#xff1a; 注意&#xff1a;proteus不用写dos的相关语句 。...

如何给Github上的开源项目提交PR?

前言 对于一个热爱开源的程序员而言&#xff0c;学会给GitHub上的开源项目提交PR这是迈出开源的第一步。今天我们就来说说如何向GitHub的开源项目提交PR&#xff0c;当然你提交的PR可以是一个项目的需求迭代、也可以是一个Bug修复、再或者是一些内容文本翻译等等&#xff0c;并…...

【Java】小计 TCP UDP的区别

面向连接 TCP面向连接&#xff0c;需要连接&#xff0c;而UDP不需要建立连接 可靠性 TCP协议通过确认应答、连接管理、流量控制、拥塞控制来确保可靠性传输&#xff1b;UDP不保证可靠性传输。 性能 TCP传输效率慢&#xff0c;需要较多的资源开销&#xff0c;UDP传输效率快&am…...

Day 1 Vue 页面框架

现在前端框架越来越像后端了&#xff0c;特别是TypeScript这样的语言出现后&#xff0c;开发前端的体验跟后端渐渐接近了。当然&#xff0c;作为一个后端&#xff0c;直接上手前端&#xff0c;还是有很多坑要填的。 本次开发&#xff0c;前端页面框架直接选择Vue。原因很简单&…...

ChatGPT课件汇总介绍

第二节:有效管理 Token,充分发挥 ChatGPT 的能力 OpenAI 官方计算token的测试地址:https://platform.openai.com/tokenizer 第三节:探索ChatGPT在不同领域的创新应用 1、小说撰写 1、我希望你能作为一个小说家。我会给你一个主题,请写出有创意的、吸引人的故事,能够长时…...

自然语言处理---RNN、LSTM、GRU模型

RNN模型 RNN模型概述 RNN(Recurrent Neural Network)&#xff0c;中文称作循环神经网络&#xff0c;它一般以序列数据为输入&#xff0c;通过网络内部的结构设计有效捕捉序列之间的关系特征&#xff0c;一般也是以序列形式进行输出。RNN的循环机制使模型隐层上一时间步产生的…...

rust学习——方法 Method

文章目录 方法 Method定义方法self、&self 和 &mut self方法名跟结构体字段名相同 带有多个参数的方法关联函数多个 impl 定义为枚举实现方法 rust 结构体与枚举的区别回答1回答2 方法 Method 从面向对象语言过来的同学对于方法肯定不陌生&#xff0c;class 里面就充斥…...

目录遍历漏洞

漏洞挖掘之目录遍历漏洞 (baidu.com) 从0到1完全掌握目录遍历漏洞 0x01 什么是目录遍历漏洞 目录遍历漏洞是由于网站存在配置缺陷&#xff0c;导致网站目录可以被任意浏览&#xff0c;这会导致网站很多隐私文件与目录泄露。 比如数据库备份文件、配置文件等&#xff0c;攻击…...

Python基础入门例程10-NP10 牛牛最好的朋友们

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 示例1 解答&#xff1a; 说明&#xff1a; 描述 牛牛有两个最好的朋友&#xff0c;他们的名字分别用input读入记录在两个字符串中&#xff0c;请使用字符串连接&#xff08;&#xff09;帮助牛牛将两个朋友的名字依…...

html web前端,登录,post请求提交 json带参

html web前端&#xff0c;登录&#xff0c;post请求提交 json带参 3ca9855b3fd279fa17d46f01dc652030.jpg <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title></t…...

防火墙实验

防火墙 ping&#xff08;网络测试工具&#xff0c;测试主机之间的可达性&#xff09;原理&#xff1a; 发送一些小的网络数据包&#xff08;ICMP数据包&#xff09;到目标主机&#xff0c;并等待目标主机返回一个响应&#xff08;通常是回显应答 Echo Reply&#xff09;。 ss…...

php中进程、线程、协程详细讲解

目录 一、什么是进程、线程、协程 1、什么是进程&#xff08;Process&#xff09;&#xff1a; 2 、什么是线程&#xff08;Thread&#xff09;&#xff1a; 3、什么是协程&#xff08;Coroutine&#xff09;&#xff1a; 二、 进程、线程、协程的关系 1、进程与线程关系 …...

无线通信中SINR的含义

在无线通信中&#xff0c;SINR代表"Signal-to-Interference-plus-Noise Ratio"&#xff0c;即信号与干扰加噪声比。这是一个重要的性能度量&#xff0c;用于评估和描述接收信号的质量&#xff0c;以及在无线通信系统中的通信性能。 SINR考虑了以下三个关键因素&…...

pnp单目相机标定测距

参考&#xff1a;opencv 单目相机pnp测距&#xff08;Cpp&#xff09;-CSDN博客...

Java反射获取内部类方法

Java反射获取内部类方法 结论一、案例准备二、测试方法&#xff1a;使用反射获取类的成员内部类和方法具体操作具体操作&#xff08;使用getDeclaredClasses&#xff09; 结论 Java 通过反射可以获得内部类&#xff0c;包括内部类属性信息和方法。 一、案例准备 创建了一个类…...

发挥服务器的无限潜能:创意项目、在线社区和更多

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…...

华为OD 绘图机器(100分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...