我不是挂王-用python实现燕双鹰小游戏
一.准备工作
1.前言提要
作为程序员在浩瀚的数字宇宙中,常常感觉现实世界是一台精密运作的虚拟机,其底层的物理逻辑如同铁律般难以撼动。然而我们拥有在虚拟世界中自由驰骋、创造无限可能的独特力量。突发奇我想用Python写出燕双鹰的小游戏,这样想想就很有趣。
2.背景提要
关于燕双鹰 这个挂王,我的印象里是:
听见燕双鹰讲话就陷入他的领域, 你的枪处于有子弹和没子弹叠加态, 如果你不开枪 枪里就有子弹,你选择开枪就会没子弹; 如果你不听他讲话,他的领域无法展开,可是却会触发燕双鹰的翻滚技能,在翻滚过程中,燕双鹰处于无敌状态 并且无法选中燕双鹰;此外,燕双鹰还有一个被动, 当你包围燕双鹰时,他会使用反包围包围你,并且触发二段隐藏被动 后手先发, 此二段被动 状态下,不管你干什么 燕双鹰总是会快你一步; 除外 燕双鹰还有一个被动技能,如果你对燕双鹰大声说话,他会掏出枪告诉你 ,他的枪声音更大......
二.代码实现
一直在完善优化,记录了3个版本的代码和运行截图。
1.初始版本
此初始版本还原设定,用文字游戏的方式还原了各种情况下, 触发燕双鹰的技能和被动的相应效果,并且加入了一定的概率
#根据设定 还原游戏,并且加入一定概率使得,更加趣味
import random
# 定义玩家状态
class Player:
def __init__(self):
self.has_bullet = True
self.alive = True
# 定义燕双鹰状态
class YanShuangYing:
def __init__(self):
self.in_domain = False
self.rolling = False
self.surrounded = False
# 游戏主函数
def game():
player = Player()
yan_shuang_ying = YanShuangYing()
print("欢迎来到燕双鹰小游戏!")
while player.alive:
print("你现在面临选择:")
print("1. 听燕双鹰讲话(可能陷入他的领域)")
print("2. 不听燕双鹰讲话(他会触发翻滚技能)")
choice = int(input("请输入你的选择(1或2):"))
if choice == 1:
yan_shuang_ying.in_domain = True
print("你听见了燕双鹰讲话,陷入了他的领域!")
if random.random() < 0.5:
print("你决定开枪!")
player.has_bullet = False
else:
print("你选择不开枪,枪里还有子弹。")
elif choice == 2:
yan_shuang_ying.rolling = True
print("你不听燕双鹰讲话,他触发了翻滚技能,现在处于无敌状态且无法选中!")
# 模拟包围情况
if random.random() < 0.3:
yan_shuang_ying.surrounded = True
print("你包围了燕双鹰,但是他触发了反包围并激活二段隐藏被动!")
# 模拟大声说话情况
if random.random() < 0.2:
print("你大声说话了,燕双鹰掏出枪说:不要跟我大吼大叫,劳资的枪声音更大!")
# 判断玩家是否存活等情况
if yan_shuang_ying.in_domain and player.has_bullet == False and random.random() < 0.3:
print("燕双鹰趁你没子弹攻击了你,你死了!")
player.alive = False
if __name__ == "__main__":
game()
2.优化版本
此版本增加了对玩家输入的验证,并优化了输出信息,使其更加符合游戏情境。
#增加了对玩家输入的验证,并优化了输出信息,使其更加符合游戏情境。
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 # 新增生命值属性
def speak(self):
print("你举枪对准燕双鹰,并且说道:'燕双鹰你插翅难逃,投降不投降?'")
print("燕双鹰:'你的枪法不错,但还不够快。现在,你进入了我的领域。'")
self.is_speaking = True
def handle_shoot(self):
if self.is_speaking:
if self.has_bullet:
print("你笑道:'死到临头还给你装上了?下辈子注意!'")
print("你开枪了,但燕双鹰躲过了子弹。现在枪里没子弹了。")
self.has_bullet = False
else:
print("你尝试开枪,但发现枪里没子弹。")
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.health -= 20
print(f"燕双鹰反击,你受到伤害,生命值剩余:{self.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.health -= 10
print(f"你受到燕双鹰威慑,生命值剩余:{self.health}")
# 重置大声说话状态(根据游戏设计可能需要)
self.is_loud_spoken_to = False
def main():
print("欢迎来到燕双鹰小游戏!")
yanyuangying = YanYuanYing()
while True:
# 显示生命值
print(f"你的生命值:{yanyuangying.health}")
action = input("请输入你的行动(讲话/开枪/包围/大声说话/退出):").strip().lower()
if action == "讲话":
yanyuangying.speak()
elif action == "开枪":
yanyuangying.handle_shoot()
elif action == "包围":
yanyuangying.handle_surround()
elif action == "大声说话":
yanyuangying.handle_loud_speak()
elif action == "退出":
print("游戏结束,感谢你的参与!")
break
else:
print("无效的行动,请重新输入。")
# 判断游戏是否结束
if yanyuangying.health <= 0:
print("你已死亡,游戏结束!")
break
# 重置一些状态以便下次行动(根据游戏设计可能需要)
if yanyuangying.is_rolling:
print("燕双鹰翻滚结束,回到了正常状态。")
yanyuangying.is_rolling = False
if __name__ == "__main__":
main()
3.修复版本
此版本增加了应对枪没子弹一直卡壳以及玩家血量低时可选择开外挂的相关逻辑
#增加了应对枪没子弹一直卡壳以及玩家血量低时可选择开外挂的相关逻辑
#增加了应对枪没子弹一直卡壳以及玩家血量低时可选择开外挂的相关逻辑
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 # 新增生命值属性
def speak(self):
print("你举枪对准燕双鹰,并且说道:'燕双鹰你插翅难逃,投降不投降?'")
print("燕双鹰:'你的枪法不错,但还不够快。现在,你进入了我的领域。'")
self.is_speaking = True
def handle_shoot(self):
if self.is_speaking:
if self.has_bullet:
trigger_choice = input("你发现枪里有子弹,是否扣动扳机(是/否):").strip().lower()
if trigger_choice == "是":
print("你笑道:'死到临头还给你装上了?下辈子注意!'")
print("你开枪了,但燕双鹰躲过了子弹。现在枪里没子弹了。")
self.has_bullet = False
elif trigger_choice == "否":
print("你犹豫了一下,没有扣动扳机。但是此刻,枪里确实有子弹。")
else:
print("无效的选择,请重新输入。")
else:
print("你尝试开枪,但发现枪里没子弹。枪没子弹了,你得想别的办法了!")
# 新增逻辑,如果在领域内开枪没子弹,有一定概率燕双鹰会主动攻击,消耗玩家生命值
if random.random() < 0.3:
self.health -= 15
print(f"燕双鹰趁你没子弹发起攻击,你受到伤害,生命值剩余:{self.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.health -= 20
print(f"燕双鹰反击,你受到伤害,生命值剩余:{self.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.health -= 10
print(f"你受到燕双鹰威慑,生命值剩余:{self.health}")
# 重置大声说话状态(根据游戏设计可能需要)
self.is_loud_spoken_to = False
def main():
print("欢迎来到燕双鹰小游戏!")
yanyuangying = YanYuanYing()
while True:
# 显示生命值
print(f"你的生命值:{yanyuangying.health}")
if yanyuangying.health < 20:
cheat_choice = input("你血量已不足,是否开外挂(是/否):").strip().lower()
if cheat_choice == "是":
print("你选择了开外挂,成功逃离燕双鹰的威胁,关闭手机永久远离燕双鹰,游戏结束!")
break
elif cheat_choice == "否":
print("你决定继续与燕双鹰对抗,生死在此一搏!")
else:
print("无效的选择,请重新输入。")
action = input("请输入你的行动(讲话/开枪/包围/大声说话/退出):").strip().lower()
if action == "讲话":
yanyuangying.speak()
elif action == "开枪":
yanyuangying.handle_shoot()
elif action == "包围":
yanyuangying.handle_surround()
elif action == "大声说话":
yanyuangying.handle_loud_speak()
elif action == "退出":
print("游戏结束,感谢你的参与!")
break
else:
print("无效的行动,请重新输入。")
# 判断游戏是否结束
if yanyuangying.health <= 0:
print("你已死亡,游戏结束!")
break
# 重置一些状态以便下次行动(根据游戏设计可能需要)
if yanyuangying.is_rolling:
print("燕双鹰翻滚结束,回到了正常状态。")
yanyuangying.is_rolling = False
if __name__ == "__main__":
main()
三.总结反思
1.初始版本
- Player类:定义了玩家的基本状态,包括是否有子弹、是否存活等。
- YanShuangYing类:表示燕双鹰的状态,如是否处于领域内、是否翻滚、是否被包围等。
- game函数:作为游戏的主函数,循环中让玩家选择是否听燕双鹰讲话,根据选择触发燕双鹰的技能或被动效果,并加入概率因素模拟随机情况。同时判断玩家是否存活。
2.优化版本
- YanYuanYing类(重命名):新增生命值属性,并细化方法处理不同行为,如speak(讲话)、handle_shoot(开枪)、roll(翻滚)、handle_surround(包围)、passive_second(二段隐藏被动)、handle_loud_speak(大声说话)等。
- main函数:作为新的游戏主流程,循环中显示玩家生命值,接收玩家输入(讲话、开枪、包围、大声说话、退出等),验证输入后调用对应方法。同时判断游戏是否结束(生命值≤0)并重置部分状态,输出信息更加贴合游戏情境。
3.修复版本
- YanYuanYing类:在handle_shoot方法中增加询问玩家是否扣动扳机的逻辑(子弹充足时),并完善枪没子弹时的处理,如燕双鹰可能主动攻击玩家。
- main函数:当玩家生命值低于20时,增加询问玩家是否开外挂的逻辑。选择开外挂则游戏结束,选择继续则继续游戏循环。进一步完善游戏细节和可玩性,减少异常情况。
每次改进虽有都瑕疵,但技术探索难免。针对无敌的燕双鹰,后续我计划加上道具,提升可玩性。游戏中“开挂”一时爽,持续优化才长久,哈哈!我坚信,不断努力优化定能克服。
整理不易,诚望各位看官点赞 收藏 评论 予以支持,这将成为我持续更新的动力源泉。若您在阅览时存有异议或建议,敬请留言指正批评,让我们携手共同学习,共同进取,吾辈自当相互勉励!