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

Rhoda ·
更新时间:2024-09-20
· 891 次阅读

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

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面向对象

需要 登录 后方可回复, 如果你还没有账号请 注册新账号