用Python写一个武侠游戏

前言

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

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

个人推荐python学习系列:

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

☄️python系列专栏 - 从零开始学python
完整的所有代码和游戏截图在最底部展示,以下是代码讲解
当我们开始编写一个武侠战斗游戏时,需要考虑游戏中的角色、战斗系统和基本功能。

以下代码中定义了一个基础角色类 Character,该类用于创建角色对象,包括玩家和敌人。角色有名字、生命值和攻击力等属性。我们为角色定义了初始化方法 __init__,以及受伤和攻击的方法 take_damageattack_target

python 复制代码
class Character:
    def __init__(self, name, health, attack):
        self.name = name
        self.health = health
        self.attack = attack

    def take_damage(self, damage):
        self.health -= damage
        print(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 用于使用药水来恢复生命值。

python 复制代码
class Player(Character):
    def __init__(self, name):
        super().__init__(name, health=100, attack=20)
        self.potions = 3

    def use_potion(self):
        if self.potions > 0:
            self.health += 30
            self.potions -= 1
            print(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,该函数模拟了玩家和敌人之间的战斗。玩家和敌人会轮流进行攻击,直到一方的生命值降为零。玩家可以选择攻击、使用药水或逃跑。战斗结果会根据生命值来判断胜负。

python 复制代码
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}被击败了!")
                break
            enemy.attack_target(player)
        elif action == '2':
            player.use_potion()
            enemy.attack_target(player)
        elif action == '3':
            print(f"{player.name}逃跑了,游戏结束。")
            break
        else:
            print("无效的选择,请重新输入。")

    if player.health <= 0:
        print(f"{player.name}被{enemy.name}击败了,游戏结束。")
    elif enemy.health <= 0:
        print(f"{player.name}战胜了{enemy.name},获得了胜利!")

最后,在 main 函数中,我们首先获取玩家的名字,然后随机选择一个敌人。接着,调用 battle 函数开始战斗。

python 复制代码
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 复制代码
import random


class Character:
    def __init__(self, name, health, attack):
        self.name = name
        self.health = health
        self.attack = attack

    def take_damage(self, damage):
        self.health -= damage
        print(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 = 3

    def use_potion(self):
        if self.potions > 0:
            self.health += 30
            self.potions -= 1
            print(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}被击败了!")
                break
            enemy.attack_target(player)
        elif action == '2':
            player.use_potion()
            enemy.attack_target(player)
        elif action == '3':
            print(f"{player.name}逃跑了,游戏结束。")
            break
        else:
            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()
相关推荐
Muyuan19983 分钟前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi
代码小书生14 分钟前
statistics,一个统计的 Python 库!
开发语言·python
jason.zeng@150220715 分钟前
Androidr入门环境搭建
java·kotlin
摇滚侠18 分钟前
整洁的桌面和任务栏 Java 开发工程师提效方法
java·开发语言
知识分享小能手29 分钟前
R语言入门学习教程,从入门到精通,R语言数据计算与分组统计(9)
开发语言·学习·r语言
一拳一个娘娘腔31 分钟前
红队与蓝队视角:现代网络安全攻防中的Linux命令深度解析
linux·安全
山居秋暝LS43 分钟前
安装C++版opencv和opencv_contrib
开发语言·c++·opencv
每天都要加油呀!1 小时前
多租户中间件适配
java·多租户
STLearner1 小时前
SIGIR 2026 | LLM × Graph论文总结(图增强LLM,GraphRAG,Agent,多模态,知识图谱,搜索,推
人工智能·python·深度学习·神经网络·机器学习·数据挖掘·知识图谱
FreakStudio1 小时前
MicroPython 内核开发者直接狂喜!这个 Claude 插件市场,把开发全流程做成了「对话式外挂」
python·单片机·嵌入式·面向对象·并行计算·电子diy