使用面向對象思想,實現(人狗大戰)小遊戲

 學習面向對象之後,練習使用面向對象思想,實現代碼

⼈狗⼤站,2個⻆⾊,⼈和狗,遊戲開始後,⽣成2個⼈,3條狗,互相混戰,⼈被狗咬了會掉⾎,狗被⼈打了也掉⾎,狗和⼈的攻擊⼒,具備的 功能都不⼀樣。
類:⼈
屬性:⼈:攻擊⼒(打)、⽣命值(⾎)
⽅法:打
類:狗;
屬性:攻擊⼒(咬)、⽣命值(⾎)
⽅法:咬

 

# -*- coding: utf-8 -*- 
# @File : 面向對象小遊戲.py 
# 描述 : 人狗大戰
# @Time : 2020/6/3 16:27 
# @Author : 崔
# @versions : 1.0
from random import randint


class Person:
    def __init__(self, name, aggressivity, hp):   # 姓名 攻擊力 生命值
        self.name = name
        self.aggressivity = aggressivity
        self.hp = hp

    def attack(self, dog):
        atk = randint(0, self.aggressivity)
        if dog.hp > atk:
            dog.hp -= atk
            print(f"{self.name}打了{dog.name}一下")
        else:
            dog.hp -= atk
            print(f"{dog.name}死翹翹了")


class Dog:
    def __init__(self, name, aggressivity, hp):
        self.name = name
        self.aggressivity = aggressivity
        self.hp = hp

    def attack(self, person):
        atk = randint(0, self.aggressivity)  # 隨機的攻擊力
        if person.hp > atk:
            person.hp -= atk
            print(f"{self.name}咬了{person.name}一下")
        else:
            person.hp -= atk
            print(f"{person.name}被咬死了")


person = [Person("張三", 9, 100), Person("李四", 9, 100), Person("王二", 9, 100)]
dogs = [Dog("豆豆", 20, 60), Dog("貝貝", 20, 90)]

while len(person) > 0 and len(dogs) > 0:
    person[randint(0, len(person) - 1)].attack(dogs[randint(0, len(dogs) - 1)])
    for i in range(len(dogs) - 1, -1, -1):
        if dogs[i].hp <= 0:
            dogs.pop(i)  # 將已死的狗從列表中刪除
    if len(dogs) <= 0:
        break
    dogs[randint(0, len(dogs) - 1)].attack(person[randint(0, len(person) - 1)])
    for i in range(len(person) - 1, -1, -1):
        if person[i].hp <= 0:
            person.pop(i)   # 將已死的人從列表中刪除

if len(person) > 0:
    print("人獲得了勝利")
else:
    print("狗獲得了勝利")

使用了隨機攻擊的方式,因此運行結果不一定相同

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章