首页 >> 生活百科 >

Python人狗大战游戏代码实现

2026-09-16 10:16:02 来源: 用户: 

这是一个经典的回合制对战小游戏,玩家扮演“人”与电脑控制的“狗”进行战斗。游戏采用简单的数值模拟,包含生命值、攻击力、防御力等基础属性,并加入了随机暴击和闪避机制,使对战过程更具趣味性。代码完全使用Python编写,可直接复制运行,适合初学者练习面向对象编程和条件逻辑。

游戏规则如下:

人初始生命值为100,攻击力为15,防御力为5。

狗初始生命值为80,攻击力为20,防御力为3。

每回合玩家可以选择“攻击”或“防御”。攻击时,伤害=攻击力-对方防御力(最低为1),并有20%概率触发暴击(伤害翻倍)。防御时,本回合受到的伤害减半。电脑会随机选择攻击或防御,概率各50%。

战斗持续至一方生命值归零,并输出胜负结果。

为了增强可读性,代码使用了三个类:`Character`(角色基类)、`Human`(人类子类)和`Dog`(狗子类)。主循环清晰地展示了每回合的攻防结算。

以下是完整代码,注释详细,可直接在CSDN的在线运行环境或本地IDE中执行。

```python

import random

class Character:

"""角色基类,包含生命值、攻击力、防御力等基本属性"""

def __init__(self, name, hp, attack, defense):

self.name = name

self.hp = hp

self.max_hp = hp

self.attack = attack

self.defense = defense

def is_alive(self):

return self.hp > 0

def take_damage(self, damage):

self.hp -= damage

if self.hp < 0:

self.hp = 0

def __str__(self):

return f"{self.name} 生命值: {self.hp}/{self.max_hp}"

class Human(Character):

"""人类角色,特有暴击能力"""

def __init__(self):

super().__init__("人", 100, 15, 5)

def attack_action(self, target):

base_damage = self.attack - target.defense

if base_damage < 1:

base_damage = 1

20%概率暴击

if random.random() < 0.2:

base_damage = 2

print(f"{self.name} 发动暴击!")

target.take_damage(base_damage)

print(f"{self.name} 攻击 {target.name},造成 {base_damage} 点伤害。")

class Dog(Character):

"""狗角色,特有较弱的防御和较高攻击"""

def __init__(self):

super().__init__("狗", 80, 20, 3)

def attack_action(self, target):

base_damage = self.attack - target.defense

if base_damage < 1:

base_damage = 1

target.take_damage(base_damage)

print(f"{self.name} 攻击 {target.name},造成 {base_damage} 点伤害。")

def battle():

"""主战斗循环,玩家通过控制台输入指令"""

player = Human()

enemy = Dog()

round_num = 1

print("=== 人狗大战开始 ===")

while player.is_alive() and enemy.is_alive():

print(f"\n 第 {round_num} 回合 ")

print(player)

print(enemy)

玩家回合

action = input("请选择行动 (1-攻击 / 2-防御): ").strip()

while action not in ['1', '2']:

action = input("无效输入,请选择 (1-攻击 / 2-防御): ").strip()

电脑随机行动

enemy_action = random.choice(['attack', 'defend'])

处理玩家防御

player_defending = (action == '2')

enemy_defending = (enemy_action == 'defend')

先结算玩家攻击(如果玩家攻击,且狗未防御)

if action == '1': 玩家攻击

if enemy_defending:

狗防御,伤害减半

damage = player.attack - enemy.defense

if damage < 1:

damage = 1

damage //= 2

if damage < 1:

damage = 1

注意:防御时暴击效果仍然存在?此处简化:防御状态暴击无效

enemy.take_damage(damage)

print(f"{player.name} 攻击,但 {enemy.name} 防御了,仅造成 {damage} 点伤害。")

else:

player.attack_action(enemy)

再结算狗攻击(如果狗攻击,且玩家未防御)

if enemy_action == 'attack': 狗攻击

if player_defending:

玩家防御,伤害减半

damage = enemy.attack - player.defense

if damage < 1:

damage = 1

damage //= 2

if damage < 1:

damage = 1

player.take_damage(damage)

print(f"{enemy.name} 攻击,但 {player.name} 防御了,仅造成 {damage} 点伤害。")

else:

enemy.attack_action(player)

如果都防御,则无事发生

if player_defending and enemy_defending:

print("双方都选择了防御,本回合无伤害。")

round_num += 1

战斗结束

print("\n=== 战斗结束 ===")

if player.is_alive():

print("人获得了胜利!")

else:

print("狗获得了胜利!")

显示最终状态

print(player)

print(enemy)

if __name__ == "__main__":

battle()

```

在CSDN或其他在线Python环境中运行此代码,控制台会提示输入数字1或2。每次输入后,程序自动结算并显示双方状态,直至一方生命值归零。代码中包含了清晰的回合信息和伤害计算过程,适合作为学习面向对象和条件逻辑的入门案例。

你可以根据需要调整初始数值(如攻击力、暴击概率等),或添加更多技能(如回血、连击等)来扩展游戏。欢迎在评论区交流改进思路。

  免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!

最新文章