Python人狗大战CSDN在线代码实现详解
“人狗大战”是一款经典的编程练习小游戏,通过Python的面向对象编程可以轻松模拟出人与狗互相攻击、比拼血量的战斗逻辑。本文提供一套完整且可直接运行的代码,并逐个模块讲解设计思路,适合初学者巩固类、对象、循环和随机数等知识点。

游戏规则很简单:玩家控制角色“人”,电脑控制角色“狗”。双方各自拥有生命值(血量)和攻击力,轮流出手,直至一方血量归零。代码采用控制台交互,无需安装额外图形库,复制粘贴即可在本地运行。
首先定义两个类:`Person`和`Dog`。每个类都包含`name`(名字)、`hp`(血量)和`attack`(攻击力)三个基本属性,以及一个`attack_enemy`方法用于对敌方造成伤害。为了让战斗更真实,攻击力会加上一个随机浮动(±2),模拟暴击或失误。
```python
import random
class Person:
def __init__(self, name, hp, attack):
self.name = name
self.hp = hp
self.attack = attack
def attack_enemy(self, enemy):
damage = self.attack + random.randint(-2, 2)
enemy.hp -= damage
print(f"{self.name} 对 {enemy.name} 造成了 {damage} 点伤害!{enemy.name} 剩余血量 {enemy.hp}")
```
`Dog`类结构完全相同,但初始参数可以不同,比如血量稍低、攻击力稍高,以增加游戏平衡性。
```python
class Dog:
def __init__(self, name, hp, attack):
self.name = name
self.hp = hp
self.attack = attack
def attack_enemy(self, enemy):
damage = self.attack + random.randint(-2, 2)
enemy.hp -= damage
print(f"{self.name} 对 {enemy.name} 造成了 {damage} 点伤害!{enemy.name} 剩余血量 {enemy.hp}")
```
接下来编写游戏主循环。创建两个实例:一个代表玩家(人),一个代表敌人(狗)。玩家可以选择先手出击,然后狗自动反击,如此交替,直到任何一方血量≤0。循环内部需要检测双方存活状态,如果一方死亡则跳出循环并宣布胜者。
```python
def main():
print("=" 30)
print(" 人狗大战")
print("=" 30)
创建角色
player = Person("玩家", 100, 20)
enemy = Dog("恶犬", 80, 25)
turn = 0 0表示玩家回合,1表示狗回合
while player.hp > 0 and enemy.hp > 0:
if turn == 0:
input("按回车键攻击...")
player.attack_enemy(enemy)
if enemy.hp <= 0:
print(f"\n{enemy.name} 被击败了!你赢了!")
break
turn = 1
else:
print("\n恶犬正在准备反击...")
enemy.attack_enemy(player)
if player.hp <= 0:
print(f"\n{player.name} 被击败了!游戏结束!")
break
turn = 0
print("-" 30)
```
为了让每次运行的结果不同,可以增加随机初始血量和攻击力的功能。玩家也可以选择是否手动设置,或者脚本自动生成。下面的代码演示了固定数值的简洁版本,读者可根据需要修改构造函数参数。
最后,在脚本末尾调用`main()`函数。完整代码如下:
```python
import random
class Person:
def __init__(self, name, hp, attack):
self.name = name
self.hp = hp
self.attack = attack
def attack_enemy(self, enemy):
damage = self.attack + random.randint(-2, 2)
enemy.hp -= damage
print(f"{self.name} 对 {enemy.name} 造成了 {damage} 点伤害!{enemy.name} 剩余血量 {enemy.hp}")
class Dog:
def __init__(self, name, hp, attack):
self.name = name
self.hp = hp
self.attack = attack
def attack_enemy(self, enemy):
damage = self.attack + random.randint(-2, 2)
enemy.hp -= damage
print(f"{self.name} 对 {enemy.name} 造成了 {damage} 点伤害!{enemy.name} 剩余血量 {enemy.hp}")
def main():
print("=" 30)
print(" 人狗大战")
print("=" 30)
player = Person("玩家", 100, 20)
enemy = Dog("恶犬", 80, 25)
turn = 0
while player.hp > 0 and enemy.hp > 0:
if turn == 0:
input("按回车键攻击...")
player.attack_enemy(enemy)
if enemy.hp <= 0:
print(f"\n{enemy.name} 被击败了!你赢了!")
break
turn = 1
else:
print("\n恶犬正在准备反击...")
enemy.attack_enemy(player)
if player.hp <= 0:
print(f"\n{player.name} 被击败了!游戏结束!")
break
turn = 0
print("-" 30)
if __name__ == "__main__":
main()
```
运行这段代码时,控制台会显示回合制战斗日志。玩家每次按下回车键,就会对狗发动一次攻击,随后狗自动反击。由于引入了随机伤害值,每局游戏的结果都不完全相同,增加了重复可玩性。
如果希望扩展这个游戏,可以考虑添加以下功能:装备系统(武器、护甲)、技能(如闪避、暴击)、多只狗同时作战、图形界面(使用Pygame或Tkinter)、保存战斗记录等。这些内容将进一步提升代码的复杂度和趣味性,适合作为进阶练习。
文章提供的代码已在Python 3.8+环境下测试通过,无需任何第三方库。读者可直接将代码复制到自己的`.py`文件中运行,体验一场简单却刺激的人狗对决。
免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!
-
河曲县景点有石径弹院、岱岳庙、状元塔、明长城遗址河曲段、白朴公园等。浏览全文>>
-
汽车上的rpm是发动机转速单位,英文全称为revolutions per minute,中文意思是每分钟转数,简单说就是发动机...浏览全文>>
-
查询农村社保个人账户,最直接的方法是进入参保地人社部门线上渠道,完成实名认证登录后,在“社保查询”“个...浏览全文>>
-
俄罗斯可以买的特产包括套娃、巧克力、蜂蜜、松子、奶制品、伏特加、鱼子酱、琥珀首饰、茶叶和面包零食。这些...浏览全文>>
-
太平人寿一般指太平人寿保险有限公司,是一家以人寿保险业务为核心业务的保险主体;如果你说的“人寿”是指“...浏览全文>>
-
布依族四月八是布依族群众在农历四月初八前后举行的传统节日,大家会祭祖、祈福、对歌、吃特色食物、赶集交流...浏览全文>>
-
多数城市的地铁卡充值可以选用微信支付。用户在地铁官方App、微信小程序、自助服务终端或人工窗口办理时,通常...浏览全文>>
-
水环境观察通常围绕五大类项目展开:外观状态类、常规指标类、生物生态类、输入路径类、维护提升类。这样的分...浏览全文>>
-
嗒可以组成嗒嗒、滴嗒、吧嗒、嗒嗒声、吧嗒嘴等常用词语,最自然的用法是把它放在带节奏感的声音描写里。这个...浏览全文>>
-
外出打工是否需要开证明,通常取决于你要办理哪类事项。多数情况下,外出务工并不需要一张统一的“外出打工证...浏览全文>>
- 太平人寿是不是人寿 人寿保险简介
- 布依族四月八是什么节日 民俗介绍
- 地铁卡充值可以用微信支付吗 微信渠道说明
- 水污染有哪些 常见观察类别说明
- 嗒可以组什么词语 常见搭配
- 夔州是现在的哪个城市 重庆奉节
- 市场部工作都包括什么啊 市场部职责说明
- 在微信里怎么弄各种图片符号 微信图片符号使用技巧
- 巴沙鱼的营养价值是什么 低脂高蛋白
- 汽车上DPF是什么意思 DPF功能说明
- 属猪女和属猴男的婚姻相配吗 幸福相处指南
- 固态硬盘用mbr还是gpt 分区选择
- 己所不欲勿施于人下一句 完整原文和出处
- 请教怎样种植观赏葫芦 家庭种植指南
- 汽车phev是什么意思 插电混动说明
- 喝多少水会水中毒 科学补水建议
- 带居字的成语有哪些 常用成语整理
- 旅游经济学是如何产生的 起源说明
- 明前茶是什么 春茶科普
- 地质三书指的是什么 地质三书详细解读
