Python人狗大战游戏代码实现
这是一个经典的回合制对战小游戏,玩家扮演“人”与电脑控制的“狗”进行战斗。游戏采用简单的数值模拟,包含生命值、攻击力、防御力等基础属性,并加入了随机暴击和闪避机制,使对战过程更具趣味性。代码完全使用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。每次输入后,程序自动结算并显示双方状态,直至一方生命值归零。代码中包含了清晰的回合信息和伤害计算过程,适合作为学习面向对象和条件逻辑的入门案例。
你可以根据需要调整初始数值(如攻击力、暴击概率等),或添加更多技能(如回血、连击等)来扩展游戏。欢迎在评论区交流改进思路。
免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!
-
文人雅集,是中国古代文人雅士的一种重要社交方式——志同道合的文人聚在一起,吟诗作赋、弹琴论道、品茶饮酒、...浏览全文>>
-
9月24日,小艺Work正式上架应用市场,开启众测。作为面向工作与生产力场景的智能体,小艺Work覆盖办公、编码、...浏览全文>>
-
前言消费升级与场景革新双重驱动下,国内椰子产业正迈入高速增长周期。市场规模持续扩容的背后,是供需失衡、...浏览全文>>
-
蝉鸣盛夏,暑期消费旺季如期而至。立足惠民生、促消费的政策导向,紧扣文旅融合发展趋势,中国银联联动全国多...浏览全文>>
-
2026年10月20日—22日,经海南省委省批准,2026亚太(海南)海产业供应链大会(APSIC 2026)将在海口举办。大...浏览全文>>
-
【广州,2026年9月】 9月4日至6日,第71届中国国际美博会在广州·中国进出口商品交易会展馆圆满举行。本届展...浏览全文>>
-
9月11日,第三十一届中国国际家具展览会在上海新国际博览中心圆满收官。位于品牌设计馆的优立地毯,以独家产品线...浏览全文>>
-
在医学考试备考过程当中,挑选适配自身的培训机构,对于备考效率提升至关重要。当下医考圈认可度较高的两家机...浏览全文>>
-
本文速览本文梳理摩穗康山泉水机正规服务商的识别标准、服务内容、区域差异、非正规渠道风险及查询核验方法,...浏览全文>>
-
初存核心资质与行业地位特色当前国内大健康产业正处于规范化发展的关键阶段,消费者在选择健康管理服务、康养...浏览全文>>
