恶魔之轮 1.0 版本
2025-02-04 13:45:25
发布于:浙江
import time
import random
def slow_print(text, delay=0.03):
"""以较慢速度逐字打印文本,模拟字幕效果"""
for char in text:
print(char, end='', flush=True)
time.sleep(delay)
print()
def introduce_rules():
"""介绍游戏规则"""
slow_print("欢迎来到恶魔之轮游戏!以下是游戏规则:")
slow_print("1. 本游戏有两名玩家进行 PK,双方初始血量均为 5 点。")
slow_print("2. 游戏开始时,每位玩家会随机获得 3 种不同的道具,每轮结束后,每位玩家再随机获得 2 种道具。")
slow_print("3. 道具及作用:")
slow_print(" - 小烟:使用后可恢复 1 点血量。")
slow_print(" - 放大镜:使用后能查看下一发子弹是实弹还是空弹。")
slow_print(" - 扳手:使用后直接对对手造成 1 点伤害。")
slow_print(" - 小刀:若下一发为实弹,使用时伤害额外加 1,即造成 2 点伤害;若为空弹,仅造成 1 点伤害。")
slow_print("4. 游戏中会随机生成实弹和空弹,两者数量之和为 10。")
slow_print("5. 实弹射击可扣减对手 1 滴血,空弹射击无伤害,射击一次对应子弹数量减 1。")
slow_print("6. 每轮玩家可以选择射击、使用道具或跳过本轮,使用完道具后仍可继续操作。")
slow_print("7. 当一方玩家的血量归零,则该玩家输掉游戏。")
def get_random_items():
"""随机获取 3 种不同道具"""
all_items = ["小烟", "放大镜", "扳手", "小刀"]
return random.sample(all_items, 3)
def add_random_items(player):
"""每轮结束后为玩家随机添加 2 种道具"""
all_items = ["小烟", "放大镜", "扳手", "小刀"]
player["items"].extend(random.choices(all_items, k=2))
def generate_bullets():
"""随机生成实弹和空弹数量,总和为 10"""
real_count = random.randint(1, 9)
empty_count = 10 - real_count
return real_count, empty_count
def shoot(shooter, target, real_count, empty_count):
"""执行射击操作"""
if real_count + empty_count == 0:
slow_print("没有子弹了,无法射击!")
return real_count, empty_count
if random.random() < real_count / (real_count + empty_count):
target["health"] -= 1
slow_print(f"{shooter['name']} 射出实弹,{target['name']} 受到 1 点伤害!")
real_count -= 1
else:
slow_print(f"{shooter['name']} 射出空弹,未造成伤害!")
empty_count -= 1
return real_count, empty_count
def use_item(player, opponent, real_count, empty_count):
"""使用道具的逻辑"""
if not player["items"]:
slow_print("你没有道具可以使用!")
return real_count, empty_count
slow_print("你拥有的道具:")
for i, item in enumerate(player["items"], start=1):
slow_print(f"{i}. {item}")
while True:
try:
choice = int(input("请输入要使用的道具编号(输入 0 取消):"))
if choice == 0:
break
elif 1 <= choice <= len(player["items"]):
item = player["items"].pop(choice - 1)
if item == "小烟":
player["health"] = min(player["health"] + 1, 5)
slow_print(f"{player['name']} 使用小烟,恢复 1 点血量,当前血量:{player['health']}。")
elif item == "放大镜":
next_is_real = random.random() < real_count / (real_count + empty_count)
bullet_type = "实弹" if next_is_real else "空弹"
slow_print(f"下一发子弹是 {bullet_type}。")
elif item == "扳手":
opponent["health"] -= 1
slow_print(f"{player['name']} 使用扳手,{opponent['name']} 受到 1 点伤害!")
elif item == "小刀":
next_is_real = random.random() < real_count / (real_count + empty_count)
damage = 2 if next_is_real else 1
opponent["health"] -= damage
bullet_type = "实弹" if next_is_real else "空弹"
slow_print(f"{player['name']} 使用小刀,下一发是 {bullet_type},{opponent['name']} 受到 {damage} 点伤害!")
if next_is_real:
real_count -= 1
else:
empty_count -= 1
break
else:
slow_print("输入无效,请重新输入!")
except ValueError:
slow_print("输入无效,请输入数字!")
return real_count, empty_count
def main():
slow_print("欢迎来到恶魔之轮游戏!")
slow_print("请选择:")
slow_print("1:我已知晓规则,直接开始!!")
slow_print("2:我还未知晓规则,请讲解")
while True:
try:
choice = int(input("请输入选项编号:"))
if choice == 1:
break
elif choice == 2:
introduce_rules()
break
else:
slow_print("输入无效,请重新输入!")
except ValueError:
slow_print("输入无效,请输入数字!")
player1 = {
"name": "玩家 1",
"health": 5,
"items": get_random_items()
}
player2 = {
"name": "玩家 2",
"health": 5,
"items": get_random_items()
}
real_count, empty_count = generate_bullets()
current_player = player1
opponent = player2
while player1["health"] > 0 and player2["health"] > 0:
slow_print(f"\n轮到 {current_player['name']} 行动!")
slow_print(f"{current_player['name']} 血量: {current_player['health']}")
slow_print(f"{opponent['name']} 血量: {opponent['health']}")
slow_print(f"实弹数量: {real_count},空弹数量: {empty_count}")
slow_print(f"{current_player['name']} 拥有的道具:{current_player['items']}")
slow_print("请选择操作:")
slow_print("1. 射击")
slow_print("2. 使用道具")
slow_print("3. 跳过本轮")
while True:
try:
action = int(input("请输入操作编号:"))
if action == 1:
real_count, empty_count = shoot(current_player, opponent, real_count, empty_count)
break
elif action == 2:
real_count, empty_count = use_item(current_player, opponent, real_count, empty_count)
slow_print("你已使用道具,可继续选择操作:")
slow_print("1. 射击")
slow_print("3. 跳过本轮")
while True:
try:
sub_action = int(input("请输入操作编号:"))
if sub_action == 1:
real_count, empty_count = shoot(current_player, opponent, real_count, empty_count)
elif sub_action == 3:
slow_print(f"{current_player['name']} 选择跳过本轮。")
else:
slow_print("输入无效,请重新输入!")
continue
break
except ValueError:
slow_print("输入无效,请输入数字!")
break
elif action == 3:
slow_print(f"{current_player['name']} 选择跳过本轮。")
break
else:
slow_print("输入无效,请重新输入!")
except ValueError:
slow_print("输入无效,请输入数字!")
if opponent["health"] <= 0:
break
current_player, opponent = opponent, current_player
add_random_items(player1)
add_random_items(player2)
winner = player1 if player1["health"] > 0 else player2
slow_print(f"\n游戏结束!{winner['name']} 获胜!")
if __name__ == "__main__":
main()
这里空空如也
有帮助,赞一个