当前位置: 首页 > 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…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...

算法—栈系列

一&#xff1a;删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...

深度解析云存储:概念、架构与应用实践

在数据爆炸式增长的时代&#xff0c;传统本地存储因容量限制、管理复杂等问题&#xff0c;已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性&#xff0c;成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理&#xff0c;云存储正重塑数据存储与…...

【技巧】dify前端源代码修改第一弹-增加tab页

回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码&#xff0c;在知识库增加一个tab页"HELLO WORLD"&#xff0c;完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…...

npm install 相关命令

npm install 相关命令 基本安装命令 # 安装 package.json 中列出的所有依赖 npm install npm i # 简写形式# 安装特定包 npm install <package-name># 安装特定版本 npm install <package-name><version>依赖类型选项 # 安装为生产依赖&#xff08;默认&…...

【Axure高保真原型】图片列表添加和删除图片

今天和大家分享图片列表添加和删除图片的原型模板&#xff0c;效果包括&#xff1a; 点击图片列表的加号可以显示图片选择器&#xff0c;选择里面的图片&#xff1b; 选择图片后点击添加按钮&#xff0c;可以将该图片添加到图片列表&#xff1b; 鼠标移入图片列表的图片&…...