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

用Python写一个武侠游戏

 前言

在本教程中,我们将使用Python写一个武侠类的游戏,大的框架全部搭好了,很多元素都可以自己添加,让游戏更丰富

b1691e6f246947eeb06ee06469621bc2.gif

📝个人主页→数据挖掘博主ZTLJQ的主页

个人推荐python学习系列:

☄️爬虫JS逆向系列专栏 - 爬虫逆向教学

☄️python系列专栏 - 从零开始学python

完整的所有代码和游戏截图在最底部展示,以下是代码讲解

当我们开始编写一个武侠战斗游戏时,需要考虑游戏中的角色、战斗系统和基本功能。

以下代码中定义了一个基础角色类 Character,该类用于创建角色对象,包括玩家和敌人。角色有名字、生命值和攻击力等属性。我们为角色定义了初始化方法 __init__,以及受伤和攻击的方法 take_damageattack_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写一个武侠游戏

前言 在本教程中&#xff0c;我们将使用Python写一个武侠类的游戏&#xff0c;大的框架全部搭好了&#xff0c;很多元素都可以自己添加&#xff0c;让游戏更丰富 &#x1f4dd;个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列&#xff1a; ☄️爬虫JS逆向系列专栏 -…...

Java --- 异常处理

目录 一、什么是异常 二、异常抛出机制 三、如何对待异常 四、 Java异常体系 4.1、Throwable 4.2、Error 4.2、Exception 4.2.1、编译时异常 4.2.2、运行时期异常 五、异常处理 5.1、捕获异常&#xff08;try-catch&#xff09; 5.1.2、catch中异常处理方式 …...

CDN/DCDN(全站加速)排查过程中如何获取Eagle ID/UUID

目录 前言1.通过浏览器直接访问文件时获取Request ID 前言 阿里云CDN/DCDN(全站加速)为接收到的每个请求分配唯一的服务器请求ID&#xff0c;作为关联各类日志信息的标识符。当您在使用CDN/DCDN(全站加速)过程中遇到错误且希望阿里云技术支持提供协助时&#xff0c;需要提交失…...

网络安全应急响应预案培训与演练目的

1、增强网络安全意识 网络安全事故隐患往往“生成”于无形。例如&#xff0c;漏洞或黑客攻 击发生之时&#xff0c;受害方企事业单位可能处于非常危险的境地而无所察 觉&#xff0c;一些内部部门人员的网络安全意识也容易懈怠。但不论是内部 员工的疏忽还是管理上的大意&am…...

2023年高教社杯 国赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…...

7.Oracle视图创建与使用

1、视图的创建与使用 在所有进行的SQL语句之中&#xff0c;查询是最复杂的操作&#xff0c;而且查询还和具体的开发要求有关&#xff0c;那么在开发过程之中&#xff0c;程序员完成的并不是是和数据库的所有内容&#xff0c;而更多的是应该考虑到程序的设计结构。可以没有一个项…...

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、解析图&#xff1a;2.1 图&#xff1a;2.2 过程分析 三、搭建DNS域名解析服务器1、概述2、安装软件3、/bind服务中三个关键文件4、配置文…...

flink cdc初始全量速度很慢原因和优化点

link cdc初始全量速度很慢的原因之一是&#xff0c;它需要先读取所有的数据&#xff0c;然后再写入到目标端&#xff0c;这样可以保证数据的一致性和顺序。但是这样也会导致数据的延迟和资源的浪费。flink cdc初始全量速度很慢的原因之二是&#xff0c;它使用了Debezium作为捕获…...

论文笔记: MOGRIFIER LSTM

2020 ICLR 修改传统LSTM 当前输入和隐藏状态充分交互&#xff0c;从而获得更佳的上下文相关表达 1 Mogrifier LSTM LSTM的输入X和隐藏状态H是完全独立的 机器学习笔记&#xff1a;GRU_gruc_UQI-LIUWJ的博客-CSDN博客这篇论文想探索&#xff0c;如果在输入LSTM之前&#xf…...

Angular中使用drag and drop实现文件拖拽上传,及flask后端接收

效果&#xff1a;拖拽文件到组件上面时 边框变大变红 松手后发送到服务器(或者点击蓝字手动选择文件)并且把文件名显示在框内&#xff0c;美化还没做 html <div class"drapBox"><div id"drop" (dragenter)"dragenter($event)" (dragov…...

Spring Authorization Server入门 (十六) Spring Cloud Gateway对接认证服务

前言 之前虽然单独讲过Security Client和Resource Server的对接&#xff0c;但是都是基于Spring webmvc的&#xff0c;Gateway这种非阻塞式的网关是基于webflux的&#xff0c;对于集成Security相关内容略有不同&#xff0c;且涉及到代理其它微服务&#xff0c;所以会稍微比较麻…...

配置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包中的静态资源&#xff08;图片、JS、CSS&#xff09;&#xff0c; WebJar包中的静态资源都会映射到/webjars/**路径。——这种方式下&#xff0c;完全不需要将静态资源复制到应用的静态资源目录下。只要添加webjar即可。假如在应用的…...

【图论】缩点的综合应用(一)

一.缩点的概念 缩点&#xff0c;也称为点缩法&#xff08;Vertex Contraction&#xff09;&#xff0c;是图论中的一种操作&#xff0c;通常用于缩小图的规模&#xff0c;同时保持了图的某些性质。这个操作的目标是将图中的一些节点合并为一个超级节点&#xff0c;同时调整相关…...

C++—纯虚函数

一、前言 定义一个函数为虚函数&#xff0c;不代表函数为不被实现的函数。 定义函数为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数&#xff0c;才代表函数没有被实现。 定义纯虚函数是为了实现一个接口&#xff0c;起到一个规范的作用&…...

经过卷积神经网络之后的图片的尺寸如何计算

经过卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;处理后&#xff0c;图片的尺寸会发生变化&#xff0c;这是由于卷积层、池化层等操作引起的。计算图片经过卷积神经网络后的尺寸变化通常需要考虑卷积核大小、步幅&#xff08;stride&…...

Java升级JDK17(更高版本同理),修改maven

记住三个网址就行&#xff1a;下面这个是oracle的 Java Platform, Standard Edition 17 ReferenceImplementations https://www.oracle.com/java/technologies/downloads/#jdk17-windows 另外一个 redhat旗下的&#xff1a;这个是开源的&#xff08;推荐这个&#xff01;&am…...

Go测试之.golden 文件

Go测试中的.golden 文件是干什么用的&#xff1f;请举例说明 在Go语言中&#xff0c;.golden文件通常用于测试中的黄金文件&#xff08;golden files&#xff09;。黄金文件是在测试期间记录预期输出结果的文件。测试用例运行时&#xff0c;黄金文件用于比较实际输出与预期输出…...

回归预测 | MATLAB实现GA-RF遗传算法优化随机森林算法多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GA-RF遗传算法优化随机森林算法多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现GA-RF遗传算法优化随机森林算法多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程…...

Kubernetes集群管理终极指南:使用kubectx和kubens高效切换上下文与命名空间

Kubernetes集群管理终极指南&#xff1a;使用kubectx和kubens高效切换上下文与命名空间 【免费下载链接】kubectx Faster way to switch between clusters and namespaces in kubectl 项目地址: https://gitcode.com/gh_mirrors/ku/kubectx 在Kubernetes多集群环境中&am…...

解密革命性构建工具:PoeCharm如何突破传统限制实现高效角色规划

解密革命性构建工具&#xff1a;PoeCharm如何突破传统限制实现高效角色规划 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm 在流放之路的复杂游戏生态中&#xff0c;角色构建往往成为玩家面临的最大…...

从轨迹到网络:广州休闲步行空间格局刻画 | 论文全解析与方法论深度拆解

从轨迹到网络:广州休闲步行空间格局刻画 | 论文全解析与方法论拆解 原文:From trajectories to network: Delineating the spatial pattern of recreational walking in Guangzhou》 一、论文核心概览:摘要与关键词 1.1 核心摘要解析 本文的核心内容可拆解为5个核心模块,…...

OpenClaw技能分享:GLM-4.7-Flash驱动的邮件自动处理系统

OpenClaw技能分享&#xff1a;GLM-4.7-Flash驱动的邮件自动处理系统 1. 为什么需要自动化邮件处理 每天早晨打开邮箱&#xff0c;看到堆积如山的未读邮件总让人头皮发麻。作为一个小团队的负责人&#xff0c;我经常需要处理客户咨询、内部沟通、会议邀请等各种类型的邮件。最…...

SEO排名专家的工作内容是什么_如何成为一名出色的SEO排名专家

<h2>SEO排名专家的工作内容是什么</h2> <p>SEO排名专家&#xff0c;全称搜索引擎优化专家&#xff0c;是一类致力于提升网站在搜索引擎中排名的专业人士。他们的工作内容涵盖了广泛的技术和策略&#xff0c;旨在让网站在搜索结果中获得更高的曝光率&#xff…...

技术驱动B端拓客升级:号码核验行业的痛点突围与发展新路径,氪迹科技核验筛选算法系统,法人股东核验,阶梯式价格

在B端市场竞争愈发精细化的当下&#xff0c;拓客工作的核心竞争力已从“广撒网”转向“精准触达”&#xff0c;而企业核心决策人的有效联系方式&#xff0c;正是精准拓客的关键载体。号码核验作为拓客流程的前置核心环节&#xff0c;直接决定着拓客投入的回报效率&#xff0c;更…...

SystemVerilog进阶:深入探索随机化约束的高级应用

1. 从基础到进阶&#xff1a;SystemVerilog随机化约束的核心价值 在芯片验证领域&#xff0c;随机化验证已经成为提高验证效率的黄金标准。SystemVerilog的随机化约束机制&#xff0c;就像给验证工程师配备了一个智能数据生成器&#xff0c;可以自动产生符合设计规范的测试场景…...

LEDPatternLib:非阻塞LED动画库设计与嵌入式实践

1. 项目概述LEDPatternLib 是一款面向嵌入式 LED 动画控制的轻量级、模块化 Arduino 库&#xff0c;专为资源受限的微控制器平台设计。其核心目标并非替代底层驱动&#xff0c;而是构建在成熟硬件抽象层之上的非阻塞&#xff08;non-blocking&#xff09;模式动画调度框架。该库…...

永磁同步电机全速域无位置传感器控制策略仿真研究:高频注入与改进滑膜控制方法应用

40、永磁同步电机全速域无位置传感器控制仿真&#xff08;仿真代码参考文献说明文档&#xff09; 主要内容&#xff1a; 采用高频注入改进滑膜控制方法&#xff0c;PMSM矢量控制仿真 [1]零低速域&#xff0c;采用无数字滤波器高频方波注入法&#xff0c;减少滤波的相位影响&…...

基于CATIA有限元的焊装夹具Base板应力分析与优化设计

1. 为什么焊装夹具Base板需要应力分析&#xff1f; 在汽车制造领域&#xff0c;焊装夹具是确保车身焊接精度的关键设备。其中Base板作为夹具的支撑基础&#xff0c;承受着来自机器人抓手和工件的全部载荷。很多新手工程师常犯的错误是直接套用经验公式设计&#xff0c;结果要么…...