Python面向对象-回合制游戏攻击模式–基础

面向对象这里我学了几天了,一道坎,感觉有些难,分享一下我的一个作业。需求目前是达到了,但是太啰嗦。

1.使用面向对象思想,写出下列场景:
玩家攻击(攻击力)敌人,敌人(血量)受伤后掉血,还可能死亡(播放动画),
敌人攻击(攻击力)玩家,玩家(血量)受伤后碎屏,还可能死亡(游戏结束),

设计上要满足类与类行为不同,就是他们的职责不同,比如题目中的攻击是一个,掉血又是另一种行为,死亡依然是一种行为,所以应该分三个类。
攻击力,血量,玩家或者敌人,这些都是类中的数据。
但是在本次,我把后两个类合一起了,我只做了两个类,死亡那个完全可以通过受伤的血量变化来判断。下面是我的做法。

class Atk_game:
"""
数据类
"""
def __init__(self,name = "",hp = 0,atk = 0,id = 0):
self.name = name
self.hp = hp
self.atk = atk
self.id = id
def print_message(self,list_player,list_enimy): #显示每回合数据用的
self.id += 1 #做个回合累加计数
print("第%d回合"%(self.id))
for item in list_player:
print(item.name,item.hp,item.atk,)
for item in list_enimy:
print(item.name,item.hp,item.atk,)
class Atk:
"""
攻击类
"""
def __init__(self):
self.game = Atk_game() #调用上一个类

def atk_enimy(self,list_player,list_enimy): #意思是玩家攻击敌人的时候
# self.game.id += 1
list_enimy[0].hp -= list_player[0].atk #这里没有考虑护甲,拳拳到肉
if list_enimy[0].hp <= 0: #攻击力多少,对面就掉多少
print("敌人死亡")
pass #播放动画(这里目前没要求让做)
def atk_player(self,list_player,list_enimy): #意思是敌人攻击玩家的时候
# self.game.id += 1
list_player[0].hp -= list_enimy[0].atk
print("碎屏") #这是玩家受伤后的屏幕效果,类似于其他游戏掉血红屏的样子
if list_player[0].hp <= 0:
print("玩家死亡")
game01 = Atk_game("player",1000,100)
game02 = Atk_game("enimy",2000,51)
list01 = [game01] list02 = [game02] g01 = Atk_game()
a01 = Atk()
while True: #这里就是两个人一直打直到一方的hp没了
a01.atk_enimy(list01,list02)
a01.atk_player(list01,list02)
g01.print_message(list01,list02)
if list01[0].hp<=0 or list02[0].hp <=0:
break

再给大家看一下控制台效果。

碎屏
第1回合
player 949 100
enimy 1900 51
碎屏
第2回合
player 898 100
enimy 1800 51
碎屏
第3回合
player 847 100
enimy 1700 51
碎屏
第4回合
player 796 100
enimy 1600 51
碎屏
第5回合
player 745 100
enimy 1500 51
碎屏

好了,我分享结束了,如果有哪里我错误很愚蠢,很简陋的话,一定告诉我。希望我们共同进步。
谢谢观看!祝你们学业进步,身体健康,事业有成,家庭和睦。

作者:xiaoboluo111

相关推荐

在这里插入图片描述

听说你也要自学python,看这就够了(一)

在这里插入图片描述

python中os常用方法详解

python之装饰器,多重装饰器,多层函数装饰器

python内置函数简单应用示例