当前位置: 首页 > 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()

 

http://www.lryc.cn/news/142539.html

相关文章:

  • Java --- 异常处理
  • CDN/DCDN(全站加速)排查过程中如何获取Eagle ID/UUID
  • 网络安全应急响应预案培训与演练目的
  • 2023年高教社杯 国赛数学建模思路 - 复盘:校园消费行为分析
  • 7.Oracle视图创建与使用
  • rust学习-不安全操作
  • RHCE——八、DNS域名解析服务器
  • flink cdc初始全量速度很慢原因和优化点
  • 论文笔记: MOGRIFIER LSTM
  • Angular中使用drag and drop实现文件拖拽上传,及flask后端接收
  • Spring Authorization Server入门 (十六) Spring Cloud Gateway对接认证服务
  • 配置Flink
  • 39、springboot的前端静态资源的WebJar支持(bootstrap、jquery等)及自定义图标和首页
  • 【图论】缩点的综合应用(一)
  • C++—纯虚函数
  • 经过卷积神经网络之后的图片的尺寸如何计算
  • Java升级JDK17(更高版本同理),修改maven
  • Go测试之.golden 文件
  • 回归预测 | MATLAB实现GA-RF遗传算法优化随机森林算法多输入单输出回归预测(多指标,多图)
  • springboot整合rabbitmq死信队列
  • 高中信息技术教资考试模拟卷(22下)
  • Linux中shadow及passwd格式内容解析
  • 计算机视觉 – Computer Vision | CV
  • 2.Redis 通用命令
  • 【学习FreeRTOS】第18章——FreeRTOS软件定时器
  • C++--两个数组的dp问题(2)
  • 利用人工智能彻底改变库存管理:综合指南
  • 连接器信号完整性仿真教程 七
  • Wireshark数据抓包分析之UDP协议
  • Java小游戏