更新於 2024/09/22閱讀時間約 3 分鐘

Python 小遊戲流程 打怪練習 ( ChatGPT 輔助 )

RPG Battle Game 說明文件

簡介
這是一個簡單的回合制 RPG 遊戲,玩家與怪物進行戰鬥,雙方有不同的技能可以使用。遊戲目標是擊敗對手,將其生命值削減至零。

程式架構


1. Character 類別
Character 是一個基礎類別,表示遊戲中的角色,包括玩家和怪物。所有角色都擁有以下屬性:
• name: 角色的名字。
• hp: 角色的生命值。
• attack_power: 角色的攻擊力。

方法:
• is_alive():判斷角色是否還活著(hp 大於 0)。
• display_status():顯示角色當前的生命值。

2. Player 類別
Player 類別繼承自 Character,並增加了三個特定技能:
• fire_sword(target):使用火焰劍攻擊敵人,造成隨機 10 到 20 點傷害。
• ice_blast(target):使用冰凍衝擊,對敵人造成隨機 5 到 10 點傷害,有 50% 機率讓敵人無法行動一回合。
• heal():治療自己,恢復隨機 10 到 15 點生命值。

3. Monster 類別
Monster 類別繼承自 Character,並具有三個特定技能:
• claw_attack(target):使用爪擊攻擊敵人,造成隨機 8 到 15 點傷害。
• poison_spit(target):使用毒液噴射,使敵人中毒,每回合損失 3 到 7 點生命值。
• rage_roar():使用狂怒吼叫,提升自己下一回合的攻擊力(+5),但本回合不造成傷害。

4. game() 函數
game() 函數是整個遊戲的主邏輯,負責控制玩家與怪物之間的回合制戰鬥。遊戲流程如下:
1. 玩家和怪物分別選擇技能進行攻擊。
2. 戰鬥持續進行,直到其中一方的生命值歸零。
3. 每回合結束時,會顯示玩家與怪物的當前生命值。

遊戲流程
1. 遊戲開始時,會初始化玩家和怪物的生命值及攻擊力。
2. 玩家可以選擇以下三種技能:
• 火焰劍
• 冰凍衝擊
• 治療術
3. 每回合後,會顯示玩家和怪物的生命值狀態。
4. 怪物也會隨機選擇技能進行攻擊,並且有機會讓玩家中毒或提升自己的攻擊力。
5. 遊戲結束條件:
• 若玩家的生命值歸零,怪物獲勝。
• 若怪物的生命值歸零,玩家獲勝。

程式執行

要運行該遊戲,請執行以下步驟:
1. 安裝 Python 並確保環境已正確配置。
2. 將程式碼保存為 .py 文件。
3. 在終端或命令行中執行該文件。
4. 選擇你的技能與怪物對戰,直到一方勝利。

未來擴展
• 新增技能:可以為玩家和怪物加入更多的技能,如範圍攻擊、防禦技能等。
• 裝備系統:加入裝備系統,玩家可以選擇武器、防具來增加攻擊力或防禦力。
• 多種怪物:讓怪物種類更加豐富,每種怪物有不同的特性和弱點。


程式碼示例

import random

class Character:
"""
角色的基礎類別,包括名字、生命值和攻擊力。
Attributes:
name (str): 角色的名字。
hp (int): 角色的生命值。
attack_power (int): 角色的攻擊力。
"""
def __init__(self, name, hp, attack_power):
"""
初始化角色。
Args:
name (str): 角色的名字。
hp (int): 角色的生命值。
attack_power (int): 角色的攻擊力。
"""
self.name = name
self.hp = hp
self.attack_power = attack_power

def is_alive(self):
"""
檢查角色是否還活著。
Returns:
bool: 如果角色生命值大於 0,返回 True;否則返回 False。
"""
return self.hp > 0

def display_status(self):
"""
顯示角色當前的生命值狀態。
"""
print(f"{self.name} 的生命值: {self.hp}")


class Player(Character):
"""
玩家類別,繼承自 Character,並且擁有特定技能。
"""
def fire_sword(self, target):
"""
玩家技能:火焰劍,對目標造成 1020 點隨機傷害。
Args:
target (Character): 受到攻擊的對象。
"""
damage = random.randint(10, 20)
target.hp -= damage
print(f"{self.name} 使用了 火焰劍 對 {target.name} 造成 {damage} 點傷害!")

def ice_blast(self, target):
"""
玩家技能:冰凍衝擊,對目標造成 510 點傷害,並有 50% 機率冰凍對手一回合。
Args:
target (Character): 受到攻擊的對象。
Returns:
bool: 如果目標被冰凍,返回 True;否則返回 False。
"""
damage = random.randint(5, 10)
target.hp -= damage
freeze = random.choice([True, False])
print(f"{self.name} 使用了 冰凍衝擊 對 {target.name} 造成 {damage} 點傷害!")
if freeze:
print(f"{target.name} 被冰凍,無法行動一回合!")
return freeze

def heal(self):
"""
玩家技能:治療術,恢復 1015 點生命值。
"""
heal_amount = random.randint(10, 15)
self.hp += heal_amount
print(f"{self.name} 使用了 治療術,恢復了 {heal_amount} 點生命值!")


class Monster(Character):
"""
怪物類別,繼承自 Character,並且擁有特定技能。
"""
def claw_attack(self, target):
"""
怪物技能:爪擊,對目標造成 815 點隨機傷害。
Args:
target (Character): 受到攻擊的對象。
"""
damage = random.randint(8, 15)
target.hp -= damage
print(f"{self.name} 使用了 爪擊 對 {target.name} 造成 {damage} 點傷害!")

def poison_spit(self, target):
"""
怪物技能:毒液噴射,讓目標中毒,每回合造成 37 點持續傷害。
Args:
target (Character): 受到攻擊的對象。
Returns:
int: 中毒後每回合造成的傷害值。
"""
poison_damage = random.randint(3, 7)
print(f"{self.name} 使用了 毒液噴射,{target.name} 中毒了\
,每回合損失 {poison_damage} 點生命值!")
return poison_damage

def rage_roar(self):
"""
怪物技能:狂怒吼叫,增加自己下一回合的攻擊力(加 5 點),本回合不造成傷害。
"""
print(f"{self.name} 使用了 狂怒吼叫,下一回合的攻擊力提升!")
self.attack_power += 5


def game():
"""
遊戲的主邏輯,模擬玩家和怪物之間的回合制戰鬥。
玩家和怪物輪流進行攻擊,直到一方的生命值歸零為止。
"""
player = Player("玩家", 50, 10)
monster = Monster("怪物", 40, 8)
poison_damage = 0
frozen = False

print("戰鬥開始!")

while player.is_alive() and monster.is_alive():
print("\n=== 玩家回合 ===")
player.display_status() # 顯示玩家狀態
monster.display_status() # 顯示怪物狀態

# 玩家選擇技能
print("1. 火焰劍\n2. 冰凍衝擊\n3. 治療術")
choice = input("選擇你的技能(1-3):")

if choice == "1":
player.fire_sword(monster)
elif choice == "2":
frozen = player.ice_blast(monster)
elif choice == "3":
player.heal()

if not monster.is_alive():
print("怪物被打敗了!你贏了!")
break

print("\n=== 怪物回合 ===")
if frozen:
print(f"{monster.name} 被冰凍,無法行動!")
frozen = False
else:
# 怪物選擇技能
monster_action = random.choice(["claw", "poison", "rage"])
if monster_action == "claw":
monster.claw_attack(player)
elif monster_action == "poison":
poison_damage = monster.poison_spit(player)
elif monster_action == "rage":
monster.rage_roar()

# 處理中毒效果
if poison_damage > 0:
player.hp -= poison_damage
print(f"{player.name} 受到中毒傷害,損失 {poison_damage} 點生命值!")
if not player.is_alive():
print("你被打敗了!")
break

# 回合結束時顯示雙方狀態
print("\n回合結束狀態:")
player.display_status()
monster.display_status()

if player.is_alive():
print("恭喜,你贏了!")
else:
print("遊戲結束,怪物勝利!")


if __name__ == "__main__":
game()
分享至
成為作者繼續創作的動力吧!
© 2025 vocus All rights reserved.