用Python写一个武侠游戏
前言
在本教程中,我们将使用Python写一个武侠类的游戏,大的框架全部搭好了,很多元素都可以自己添加,让游戏更丰富
📝个人主页→数据挖掘博主ZTLJQ的主页
个人推荐python学习系列:
☄️爬虫JS逆向系列专栏 - 爬虫逆向教学
☄️python系列专栏 - 从零开始学python
完整的所有代码和游戏截图在最底部展示,以下是代码讲解
当我们开始编写一个武侠战斗游戏时,需要考虑游戏中的角色、战斗系统和基本功能。
以下代码中定义了一个基础角色类
Character,该类用于创建角色对象,包括玩家和敌人。角色有名字、生命值和攻击力等属性。我们为角色定义了初始化方法__init__,以及受伤和攻击的方法take_damage和attack_target。
class Character:def __init__(self, name, health, attack):self.name = nameself.health = healthself.attack = attackdef take_damage(self, damage):self.health -= damageprint(f"{self.name}受到了{damage}点伤害,剩余生命值:{self.health}")def attack_target(self, target):damage = random.randint(0, self.attack)print(f"{self.name}发起了攻击,对{target.name}造成了{damage}点伤害")target.take_damage(damage)
在这个基础上,我们派生了玩家类
Player和敌人类Enemy。玩家类额外包含了药水的数量,并且有一个方法use_potion用于使用药水来恢复生命值。
class Player(Character):def __init__(self, name):super().__init__(name, health=100, attack=20)self.potions = 3def use_potion(self):if self.potions > 0:self.health += 30self.potions -= 1print(f"{self.name}使用了一瓶药水,恢复了30点生命值,剩余药水数:{self.potions}")else:print(f"{self.name}没有药水了!")class Enemy(Character):def __init__(self, name):super().__init__(name, health=random.randint(50, 80), attack=random.randint(10, 15))
接着,我们定义了一个战斗函数
battle,该函数模拟了玩家和敌人之间的战斗。玩家和敌人会轮流进行攻击,直到一方的生命值降为零。玩家可以选择攻击、使用药水或逃跑。战斗结果会根据生命值来判断胜负。
def battle(player, enemy):print(f"{player.name}遇到了{enemy.name}!")while player.health > 0 and enemy.health > 0:action = input("选择行动:[1] 攻击 [2] 使用药水 [3] 逃跑\n")if action == '1':player.attack_target(enemy)if enemy.health <= 0:print(f"{enemy.name}被击败了!")breakenemy.attack_target(player)elif action == '2':player.use_potion()enemy.attack_target(player)elif action == '3':print(f"{player.name}逃跑了,游戏结束。")breakelse:print("无效的选择,请重新输入。")if player.health <= 0:print(f"{player.name}被{enemy.name}击败了,游戏结束。")elif enemy.health <= 0:print(f"{player.name}战胜了{enemy.name},获得了胜利!")
最后,在
main函数中,我们首先获取玩家的名字,然后随机选择一个敌人。接着,调用battle函数开始战斗。
def main():player_name = input("请输入你的角色名:")player = Player(player_name)enemies = [Enemy("恶霸"), Enemy("刺客"), Enemy("恶徒")]enemy = random.choice(enemies)battle(player, enemy)if __name__ == "__main__":main()
以下是全代码和游戏截图
import randomclass Character:def __init__(self, name, health, attack):self.name = nameself.health = healthself.attack = attackdef take_damage(self, damage):self.health -= damageprint(f"{self.name}受到了{damage}点伤害,剩余生命值:{self.health}")def attack_target(self, target):damage = random.randint(0, self.attack)print(f"{self.name}发起了攻击,对{target.name}造成了{damage}点伤害")target.take_damage(damage)class Player(Character):def __init__(self, name):super().__init__(name, health=100, attack=20)self.potions = 3def use_potion(self):if self.potions > 0:self.health += 30self.potions -= 1print(f"{self.name}使用了一瓶药水,恢复了30点生命值,剩余药水数:{self.potions}")else:print(f"{self.name}没有药水了!")class Enemy(Character):def __init__(self, name):super().__init__(name, health=random.randint(50, 80), attack=random.randint(10, 15))def battle(player, enemy):print(f"{player.name}遇到了{enemy.name}!")while player.health > 0 and enemy.health > 0:action = input("选择行动:[1] 攻击 [2] 使用药水 [3] 逃跑\n")if action == '1':player.attack_target(enemy)if enemy.health <= 0:print(f"{enemy.name}被击败了!")breakenemy.attack_target(player)elif action == '2':player.use_potion()enemy.attack_target(player)elif action == '3':print(f"{player.name}逃跑了,游戏结束。")breakelse:print("无效的选择,请重新输入。")if player.health <= 0:print(f"{player.name}被{enemy.name}击败了,游戏结束。")elif enemy.health <= 0:print(f"{player.name}战胜了{enemy.name},获得了胜利!")def main():player_name = input("请输入你的角色名:")player = Player(player_name)enemies = [Enemy("恶霸"), Enemy("刺客"), Enemy("恶徒")]enemy = random.choice(enemies)battle(player, enemy)if __name__ == "__main__":main()

相关文章:
用Python写一个武侠游戏
前言 在本教程中,我们将使用Python写一个武侠类的游戏,大的框架全部搭好了,很多元素都可以自己添加,让游戏更丰富 📝个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列: ☄️爬虫JS逆向系列专栏 -…...
Java --- 异常处理
目录 一、什么是异常 二、异常抛出机制 三、如何对待异常 四、 Java异常体系 4.1、Throwable 4.2、Error 4.2、Exception 4.2.1、编译时异常 4.2.2、运行时期异常 五、异常处理 5.1、捕获异常(try-catch) 5.1.2、catch中异常处理方式 …...
CDN/DCDN(全站加速)排查过程中如何获取Eagle ID/UUID
目录 前言1.通过浏览器直接访问文件时获取Request ID 前言 阿里云CDN/DCDN(全站加速)为接收到的每个请求分配唯一的服务器请求ID,作为关联各类日志信息的标识符。当您在使用CDN/DCDN(全站加速)过程中遇到错误且希望阿里云技术支持提供协助时,需要提交失…...
网络安全应急响应预案培训与演练目的
1、增强网络安全意识 网络安全事故隐患往往“生成”于无形。例如,漏洞或黑客攻 击发生之时,受害方企事业单位可能处于非常危险的境地而无所察 觉,一些内部部门人员的网络安全意识也容易懈怠。但不论是内部 员工的疏忽还是管理上的大意&am…...
2023年高教社杯 国赛数学建模思路 - 复盘:校园消费行为分析
文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…...
7.Oracle视图创建与使用
1、视图的创建与使用 在所有进行的SQL语句之中,查询是最复杂的操作,而且查询还和具体的开发要求有关,那么在开发过程之中,程序员完成的并不是是和数据库的所有内容,而更多的是应该考虑到程序的设计结构。可以没有一个项…...
rust学习-不安全操作
在 Rust 中,不安全代码块用于避开编译器的保护策略 四种不安全操作 解引用裸指针通过 FFI (Foreign Function Interface,外部语言函数接口)调用函数调用不安全的函数内联汇编(inline assembly)解引用裸指针 原始指针(raw pointer,裸指针)* 和引用 &T 有类似的功…...
RHCE——八、DNS域名解析服务器
RHCE 一、概述1、产生原因2、作用3、连接方式4、因特网的域名结构4.1 拓扑4.2 分类4.3 域名服务器类型划分 二、DNS域名解析过程1、分类2、解析图:2.1 图:2.2 过程分析 三、搭建DNS域名解析服务器1、概述2、安装软件3、/bind服务中三个关键文件4、配置文…...
flink cdc初始全量速度很慢原因和优化点
link cdc初始全量速度很慢的原因之一是,它需要先读取所有的数据,然后再写入到目标端,这样可以保证数据的一致性和顺序。但是这样也会导致数据的延迟和资源的浪费。flink cdc初始全量速度很慢的原因之二是,它使用了Debezium作为捕获…...
论文笔记: MOGRIFIER LSTM
2020 ICLR 修改传统LSTM 当前输入和隐藏状态充分交互,从而获得更佳的上下文相关表达 1 Mogrifier LSTM LSTM的输入X和隐藏状态H是完全独立的 机器学习笔记:GRU_gruc_UQI-LIUWJ的博客-CSDN博客这篇论文想探索,如果在输入LSTM之前…...
Angular中使用drag and drop实现文件拖拽上传,及flask后端接收
效果:拖拽文件到组件上面时 边框变大变红 松手后发送到服务器(或者点击蓝字手动选择文件)并且把文件名显示在框内,美化还没做 html <div class"drapBox"><div id"drop" (dragenter)"dragenter($event)" (dragov…...
Spring Authorization Server入门 (十六) Spring Cloud Gateway对接认证服务
前言 之前虽然单独讲过Security Client和Resource Server的对接,但是都是基于Spring webmvc的,Gateway这种非阻塞式的网关是基于webflux的,对于集成Security相关内容略有不同,且涉及到代理其它微服务,所以会稍微比较麻…...
配置Flink
配置flink_1.17.0 1.Flink集群搭建1.1解压安装包1.2修改集群配置1.3分发安装目录1.4启动集群、访问Web UI 2.Standalone运行模式3.YARN运行模式4.K8S运行模式 1.Flink集群搭建 1.1解压安装包 链接: 下载Flink安装包 解压文件 [gpbhadoop102 software]$ tar -zxvf flink-1.1…...
39、springboot的前端静态资源的WebJar支持(bootstrap、jquery等)及自定义图标和首页
★ WebJar支持 Spring Boot支持加载WebJar包中的静态资源(图片、JS、CSS), WebJar包中的静态资源都会映射到/webjars/**路径。——这种方式下,完全不需要将静态资源复制到应用的静态资源目录下。只要添加webjar即可。假如在应用的…...
【图论】缩点的综合应用(一)
一.缩点的概念 缩点,也称为点缩法(Vertex Contraction),是图论中的一种操作,通常用于缩小图的规模,同时保持了图的某些性质。这个操作的目标是将图中的一些节点合并为一个超级节点,同时调整相关…...
C++—纯虚函数
一、前言 定义一个函数为虚函数,不代表函数为不被实现的函数。 定义函数为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数,才代表函数没有被实现。 定义纯虚函数是为了实现一个接口,起到一个规范的作用&…...
经过卷积神经网络之后的图片的尺寸如何计算
经过卷积神经网络(Convolutional Neural Network,CNN)处理后,图片的尺寸会发生变化,这是由于卷积层、池化层等操作引起的。计算图片经过卷积神经网络后的尺寸变化通常需要考虑卷积核大小、步幅(stride&…...
Java升级JDK17(更高版本同理),修改maven
记住三个网址就行:下面这个是oracle的 Java Platform, Standard Edition 17 ReferenceImplementations https://www.oracle.com/java/technologies/downloads/#jdk17-windows 另外一个 redhat旗下的:这个是开源的(推荐这个!&am…...
Go测试之.golden 文件
Go测试中的.golden 文件是干什么用的?请举例说明 在Go语言中,.golden文件通常用于测试中的黄金文件(golden files)。黄金文件是在测试期间记录预期输出结果的文件。测试用例运行时,黄金文件用于比较实际输出与预期输出…...
回归预测 | MATLAB实现GA-RF遗传算法优化随机森林算法多输入单输出回归预测(多指标,多图)
回归预测 | MATLAB实现GA-RF遗传算法优化随机森林算法多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现GA-RF遗传算法优化随机森林算法多输入单输出回归预测(多指标,多图)效果一览基本介绍程…...
IT6500电源蜂鸣器太吵?教你用Python远程静音并实现电压步进扫描
IT6500电源蜂鸣器静音与电压步进扫描的Python实战指南 深夜的实验室里,IT6500电源的蜂鸣器突然响起,刺耳的"哔哔"声打破了宁静,这种场景对于电子工程师来说再熟悉不过。本文将带你用Python彻底解决这个恼人的问题,同时实…...
Cisco Packet Tracer新手必看:5分钟搞定路由器静态路由配置(附避坑指南)
Cisco Packet Tracer静态路由配置实战:从零到精通的完整指南 刚接触网络工程的朋友们,第一次在Cisco Packet Tracer中配置静态路由时,是不是经常遇到"网络不通"的困扰?作为网络通信的基础技能,静态路由配置看…...
智能邮件秘书:OpenClaw+Qwen3.5-9B自动分类与回复
智能邮件秘书:OpenClawQwen3.5-9B自动分类与回复 1. 为什么需要自动化邮件处理? 每天早晨打开邮箱时,看到堆积如山的未读邮件总会让人头皮发麻。作为一位经常需要处理客户咨询的技术顾问,我最高纪录是一天收到187封邮件。即使每…...
velocity-subtemplate-variable-fix
为什么你的 Velocity 子模板变量总是失效?一行代码解决了阅读前提:你正在用 Velocity 做模板引擎开发,主模板能正常渲染,但子模板里一用变量就报空指针或者路径找不到。先说我的血泪史 昨晚被一个问题折磨了两个小时: …...
告别标注烦恼:用DINOv2自监督模型,在Intel Image数据集上3个epoch实现93%准确率
零标注成本实战:DINOv2自监督模型在Intel Image数据集上的高效迁移方案 当我在实验室第一次尝试用传统方法训练一个图像分类模型时,面对数千张需要手动标注的图片,几乎要放弃这个课题。直到发现了自监督学习这个宝藏领域——特别是DINOv2这样…...
Edge浏览器专属:B站直播实时字幕插件开发全记录(附源码下载)
Edge浏览器实现B站直播实时字幕的技术解析与实战 作为一名长期关注Web语音技术的开发者,我最近在Edge浏览器上成功实现了一个B站直播实时字幕插件。这个项目的核心价值在于解决了无字幕直播场景下的信息获取难题——根据用户反馈,超过68%的观众会在没有字…...
如何高效使用AsrTools:快速上手指南与实用功能详解
如何高效使用AsrTools:快速上手指南与实用功能详解 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate tex…...
Matlab实战:5步搞定微电网源储荷协调调度(附完整CPLEX调用代码)
Matlab实战:微电网源储荷协调调度的5个工程化技巧 微电网调度是新能源时代的核心技术难题之一。面对风光发电的波动性和负荷需求的多变性,如何实现源、储、荷三者的动态平衡,成为电力工程师们每天都要应对的挑战。不同于学术论文中复杂的理论…...
手把手教你用Python打造一个简易图片颜色替换工具(含Tkinter GUI界面)
用Python和Tkinter构建智能图片颜色替换工具:从零到一的完整开发指南 在数字图像处理领域,颜色替换是一个基础但极其实用的功能。想象一下,你有一张产品照片需要快速调整主色调,或者需要将证件照的背景色统一更换——传统方式可能…...
从零搭建SRS流媒体服务器:实现RTMP推拉流的实战部署指南
1. 为什么选择SRS搭建流媒体服务器? 最近几年直播和实时视频的需求爆发式增长,很多开发者都在寻找轻量高效的流媒体服务器方案。我测试过不少开源方案,最终发现SRS(Simple Realtime Server)是最适合个人和小团队自建的…...

