我不是挂王-用python实现燕双鹰小游戏2
一.前提提要
上一篇,我们用python构建了燕双鹰的对线小游戏,经过了三次版本的更新使得玩家可以自主的和燕双鹰有互动,只是依旧还是被无情碾压,这很不平衡!对与玩家而言很不公平,于是我就想 如果 可以对燕双鹰有一定几率造成伤害的话,那么 这样的博弈才会更加有趣。
我不是挂王-用python实现燕双鹰小游戏-CSDN博客
二.修改思路
基于 Python 面向对象编程实现的文本交互小游戏,通过玩家与燕双鹰角色在不同情境下的交互操作,依据设定规则改变双方生命值,直至一方生命值归零或玩家主动退出结束游戏。
1.关键类及主要属性(YanYuanYing
类)
包含燕双鹰与玩家的状态(如讲话、有无子弹、翻滚等)及生命值属性,还有玩家攻击类型、未命中次数等用于游戏逻辑判定的属性。
2.核心行为方法(YanYuanYing
类内)
与交互相关:speak
(开启对话)、handle_shoot
(处理开枪行为)、handle_surround
(处理包围行为)、handle_loud_speak
(处理大声说话行为),各自按规则输出相应对话并影响角色状态和双方生命值。
与攻击相关:handle_player_attack
,根据玩家所选攻击类型,依概率判断命中情况,计算双方伤害及反击情况,影响生命值。
三.代码实现
1.具体代码
import random
class YanYuanYing:
def __init__(self):
self.is_speaking = False
self.has_bullet = True # 初始状态为子弹叠加态(不开枪则有子弹)
self.is_rolling = False
self.is_surrounded = False
self.is_loud_spoken_to = False
self.health = 100 # 燕双鹰的生命值属性,初始为100
self.player_health = 100 # 新增玩家的生命值属性,初始为100
self.player_attack_type = "普通攻击" # 默认普通攻击,可升级为其他厉害的功法或武器
self.miss_count = 0 # 记录玩家连续未命中次数,用于触发被动
def speak(self):
print("你举枪对准燕双鹰,并且说道:'燕双鹰你插翅难逃,投降不投降?'")
print("燕双鹰:'你的枪法不错,但还不够快。现在,你进入了我的领域。'")
self.is_speaking = True
def handle_shoot(self):
if self.is_speaking:
if self.has_bullet:
trigger_choice = input("你发现枪里有子弹,是否扣动扳机(1.是/2.否):").strip()
if trigger_choice == "1":
print("你笑道:'死到临头还给你装上了?下辈子注意!'")
print("你开枪了,但燕双鹰躲过了子弹。现在枪里没子弹了。")
self.has_bullet = False
self.miss_count += 1
elif trigger_choice == "2":
print("你犹豫了一下,没有扣动扳机。但是此时枪里有子弹。")
else:
print("无效的选择,请重新输入。")
else:
print("你尝试开枪,但发现枪里没子弹。枪没子弹了,你得想别的办法了!")
# 新增逻辑,如果在领域内开枪没子弹,有一定概率燕双鹰会主动攻击,消耗玩家生命值
if random.random() < 0.3:
self.player_health -= 15
print(f"燕双鹰趁你没子弹发起攻击,你受到15点伤害,你的生命值剩余:{self.player_health}")
else:
print("燕双鹰没有讲话,你无法进入他的领域。他开始翻滚躲避你的攻击。")
self.roll()
def roll(self):
if not self.is_speaking:
print("燕双鹰开始翻滚,他现在是无敌的并且无法被选中。")
self.is_rolling = True
else:
print("燕双鹰在讲话,他的领域已经展开,无法翻滚。")
def handle_surround(self):
if not self.is_rolling:
print("你尝试半天发现使用枪击不成,看了看周围,示意手下包抄燕双鹰:'兄弟们,上!活捉燕双鹰!'")
print("你试图包围燕双鹰,但他突然使用了反包围技能!")
self.is_surrounded = True
self.passive_second()
else:
print("燕双鹰在翻滚,无法被包围。")
def passive_second(self):
if self.is_surrounded:
print("燕双鹰触发了二段隐藏被动'后手先发',他比你更快一步!")
# 模拟燕双鹰反击,减少玩家生命值
self.player_health -= 20
print(f"燕双鹰反击,你受到20点伤害,你的生命值剩余:{self.player_health}")
# 在这里可以添加更多逻辑,比如玩家行动被打断或燕双鹰进行反击
# 为了简化,我们在这里只重置包围状态
self.is_surrounded = False
def handle_loud_speak(self):
print("你大声对燕双鹰说话。")
self.is_loud_spoken_to = True
self.loud_response()
def loud_response(self):
if self.is_loud_spoken_to:
print("燕双鹰掏出了枪,冷冷地说:'我的枪声音比你大,而且更快。'")
# 模拟燕双鹰威慑,减少玩家生命值
self.player_health -= 10
print(f"你受到10点燕双鹰威慑伤害,你的生命值剩余:{self.player_health}")
# 重置大声说话状态(根据游戏设计可能需要)
self.is_loud_spoken_to = False
def handle_player_attack(self):
damage = 0
hit_rate = 0
if self.player_attack_type == "普通攻击":
damage = 0
hit_rate = 0
elif self.player_attack_type == "初级功法":
damage = 5
hit_rate = 0.02
elif self.player_attack_type == "中级功法":
damage = 12
hit_rate = 0.05
elif self.player_attack_type == "高级功法":
damage = 20
hit_rate = 0.08
if random.random() < hit_rate:
print(f"你的{self.player_attack_type}击中了燕双鹰,造成了{damage}点伤害!")
self.miss_count = 0
self.health -= damage
print(f"燕双鹰受到{damage}点伤害,燕双鹰的生命值剩余:{self.health}")
# 明确玩家反击让燕双鹰掉血逻辑,燕双鹰受到伤害,生命值减少
yan_shuang_ying_health_loss = damage
print(f"燕双鹰受到你的反击,生命值减少{yan_shuang_ying_health_loss}点!")
# 燕双鹰有20%概率反击
if random.random() < 0.2:
counter_damage = damage * 0.5
print(f"燕双鹰反击,对你造成了{counter_damage}点伤害!")
self.player_health += counter_damage
print(f"你受到{counter_damage}点燕双鹰反击伤害,你的生命值剩余:{self.player_health}")
else:
print(f"你的{self.player_attack_type}未击中燕双鹰,燕双鹰轻松躲过了攻击。")
self.miss_count += 1
if self.miss_count >= 3:
print("你连续多次攻击未命中,但越挫越勇,下一次攻击必定命中!")
self.miss_count = 0
# 直接命中,造成伤害并判断燕双鹰反击
damage = 0
hit_rate = 1
if self.player_attack_type == "初级功法":
damage = 5
elif self.player_attack_type == "中级功法":
damage = 12
elif self.player_attack_type == "高级功法":
damage = 20
print(f"你的{self.player_attack_type}击中了燕双鹰,造成了{damage}点伤害!")
self.health -= damage
print(f"燕双鹰受到{damage}点伤害,燕双鹰的生命值剩余:{self.health}")
yan_shuang_ying_health_loss = damage
print(f"燕双鹰受到你的反击,生命值减少{yan_shuang_ying_health_loss}点!")
if random.random() < 0.2:
counter_damage = damage * 0.5
print(f"燕双鹰反击,对你造成了{counter_damage}点伤害!")
self.player_health += counter_damage
print(f"你受到{counter_damage}点燕双鹰反击伤害,你的生命值剩余:{self.player_health}")
def main():
print("欢迎来到燕双鹰小游戏!")
yanyuangying = YanYuanYing()
while True:
# 显示双方生命值
print(f"你的生命值:{yanyuangying.player_health},燕双鹰的生命值:{yanyuangying.health}")
if yanyuangying.player_health < 20:
cheat_choice = input("你血量已不足,是否开外挂(1.是/2.否):").strip()
if cheat_choice == "1":
print("你选择了开外挂,成功逃离燕双鹰的威胁,关闭手机永久远离燕双鹰,游戏结束!")
break
elif cheat_choice == "2":
print("你决定继续与燕双鹰对抗,生死在此一搏!")
else:
print("无效的选择,请重新输入。")
print("请选择你的行动:")
print("1. 讲话 2. 开枪 3. 包围 4. 大声说话 5. 使用功法 6. 退出")
action_choice = input().strip()
if action_choice == "1":
yanyuangying.speak()
elif action_choice == "2":
yanyuangying.handle_shoot()
elif action_choice == "3":
yanyuangying.handle_surround()
elif action_choice == "4":
yanyuangying.handle_loud_speak()
elif action_choice == "5":
print("请选择功法或武器:")
print("1. 普通攻击")
print("2. 初级功法")
print("3. 中级功法")
print("4. 高级功法")
attack_choice = input().strip()
if attack_choice == "1":
yanyuangying.player_attack_type = "普通攻击"
elif attack_choice == "2":
yanyuangying.player_attack_type = "初级功法"
elif attack_choice == "3":
yanyuangying.player_attack_type = "中级功法"
elif attack_choice == "4":
yanyuangying.player_attack_type = "高级功法"
else:
print("无效的选择,请重新输入。")
continue
yanyuangying.handle_player_attack()
elif action_choice == "6":
print("游戏结束,感谢你的参与!")
break
else:
print("无效的行动,请重新输入。")
# 判断游戏是否结束
if yanyuangying.player_health <= 0:
print("你已死亡,游戏结束!")
break
elif yanyuangying.health <= 0:
print("燕双鹰已被击败,游戏结束!")
break
if __name__ == "__main__":
main()
2.调试截图
四.总结反思
原本只是出于一时兴起,我构思想到了一个好玩的Python小游戏,没想到却深陷其中。我总是觉得时间不够用,同时也觉得自己的作品还有些简陋。但不可否认的是,这完全是我独立思考和创作的成果。接下来,我会逐步对其进行完善和优化,并且逐一记录总结反思。
本次优化后,虽然无法战胜燕双鹰,不过好歹有了一战之力,并且整理了玩家的被动保证了一定的输出,最后就算打不过 也可以开挂遁走。现在有了一些功法,后续有时间再继续优化加一些道具等,模拟了与燕双鹰对抗的各种场景,并且后续一点点实现窗体上的动画操作,现阶段先按照文本小游戏完成代码逻辑上的实现。
尽管我知道还有很多需要改进的地方,但我仍然希望记录下每一个版本的迭代过程,见证它的成长与蜕变。对之前版本代码感兴趣的朋友,欢迎查阅我的上一篇博客。同时,也期待各位大佬给予宝贵的建议和指导。
我不是挂王-用python实现燕双鹰小游戏-CSDN博客
整理不易,诚望各位看官点赞 收藏 评论 予以支持,这将成为我持续更新的动力源泉。若您在阅览时存有异议或建议,敬请留言指正批评,让我们携手共同学习,共同进取,吾辈自当相互勉励!