1、请用面向对象的思想编写一个小游戏,人狗大站。 2个角色,人和狗,游戏开始后,生成2个人,3条狗,互相混战,人被狗咬了会掉血,狗被人打了也掉血,狗和人的攻击力,具备的功能都不一样。
时间: 2023-10-02 18:09:46 浏览: 46
下面是一个简单的人狗大站游戏的面向对象代码实现,包含人、狗、战斗等类:
```python
import random
class Person:
def __init__(self, name, hp, atk):
self.name = name
self.hp = hp
self.atk = atk
def attack(self, dog):
dog.be_attacked(self.atk)
def be_attacked(self, dog_atk):
self.hp -= dog_atk
def is_alive(self):
return self.hp > 0
class Dog:
def __init__(self, name, hp, atk):
self.name = name
self.hp = hp
self.atk = atk
def attack(self, person):
person.be_attacked(self.atk)
def be_attacked(self, person_atk):
self.hp -= person_atk
def is_alive(self):
return self.hp > 0
class Battle:
def __init__(self, persons, dogs):
self.persons = persons
self.dogs = dogs
def start(self):
while len(self.persons) > 0 and len(self.dogs) > 0:
attacker, defender = self.choose_attacker_and_defender()
if isinstance(attacker, Person):
attacker.attack(defender)
else:
attacker.attack(defender)
self.check_alive()
def choose_attacker_and_defender(self):
attacker = random.choice(self.persons + self.dogs)
if isinstance(attacker, Person):
defender = random.choice(self.dogs)
else:
defender = random.choice(self.persons)
return attacker, defender
def check_alive(self):
self.persons = [person for person in self.persons if person.is_alive()]
self.dogs = [dog for dog in self.dogs if dog.is_alive()]
# 测试代码
persons = [Person("Tom", 100, 10), Person("Jerry", 80, 15)]
dogs = [Dog("Spike", 120, 8), Dog("Tyke", 80, 12), Dog("Tuffy", 60, 20)]
battle = Battle(persons, dogs)
battle.start()
print("Result:")
print("Persons:")
for person in persons:
print(f"{person.name}, HP: {person.hp}")
print("Dogs:")
for dog in dogs:
print(f"{dog.name}, HP: {dog.hp}")
```
在上面的代码中,我们定义了`Person`和`Dog`两个类来表示人和狗,都具有`name`、`hp`和`atk`属性,以及`attack`和`be_attacked`方法。`Battle`类表示战斗,具有`start`方法开始进行战斗,`choose_attacker_and_defender`方法随机选择攻击者和防守者,`check_alive`方法检查战斗是否结束。
在测试代码中,我们生成了2个人和3只狗,然后创建`Battle`实例进行战斗,最后输出战斗结果。