各位程式碼冒險家,歡迎來到我的「順著感覺走!從零開始的 Python & Vibe Coding 遊戲創作」第十五天!今天,我們將正式把《奇幻卡牌競技場》的設計藍圖轉化為實際的程式碼。我們將深入探索遊戲中卡牌的核心結構,透過 Python 的強大功能,為每一張卡牌注入其獨特的生命與能力。這不僅是遊戲邏輯的基礎,更是我們在 Vibe Coding 理念下,讓程式碼直覺、流暢地反映設計意圖的關鍵一步。
Vibe Coding 強調完全順著感覺走,忘記程式碼本身的存在,將程式設計的重點從語法轉移到高階設計和想法表達上,讓開發者能專注於創意和整體架構。
enum.Enum 模組首先,我們需要以清晰、可讀且不易出錯的方式來定義遊戲中所有卡牌的種類。在《奇幻卡牌競技場》中,共有 9 種不同的職業類型,例如劍士、弓箭手、盜賊等。為此,我們將運用 Python 標準函式庫中的 enum.Enum 模組來建立一個 CardType 列舉。
這使得每種卡牌類型都成為一個具有明確名稱和值的常數,例如 CardType.SWORDSMAN,大幅提升了程式碼的可維護性和語義清晰度。
card.txt 中的 CardType 程式碼實現:
from enum import Enum
class CardType(Enum):
SWORDSMAN = "劍士"
ARCHER = "弓箭手"
THIEF = "盜賊"
MAGE = "魔法師"
ELEMENTALIST = "元素使"
BARD = "吟遊詩人"
MERCHANT = "商人"
PRIEST = "祭司"
ALCHEMIST = "煉金術師"
from enum import Enum: 從 Python 的 enum 模組中導入 Enum 類別。class CardType(Enum):: 我們定義了一個名為 CardType 的類別,並讓它繼承自 Enum,這表示 CardType 將是一個枚舉 (enumeration)。SWORDSMAN = "劍士" 等:這些是枚舉的成員。SWORDSMAN 是成員的名稱,而 "劍士" 則是其對應的值。這樣,我們就可以用 CardType.SWORDSMAN 來代表劍士卡牌類型,並透過 .value 屬性取得其中文名稱 "劍士"。dataclasses.dataclass 裝飾器接著,為了代表遊戲中的單張卡牌,我們需要建立一個 Card 類別。我們將使用 Python 3.7+ 引入的 dataclasses.dataclass 裝飾器來定義這個類別。dataclass 能大幅簡化主要用於儲存資料的類別撰寫,自動生成初始化方法 (__init__),讓程式碼更精簡。
每一張 Card 物件都將包含一個 card_type 屬性,其值來自於我們剛剛定義的 CardType 列舉,這就建立了一張卡牌與其類型之間的直接連結。
card.txt 中的 Card 類別程式碼實現:
from dataclasses import dataclass
@dataclass
class Card:
card_type: CardType
from dataclasses import dataclass: 從 dataclasses 模組導入 dataclass 裝飾器。@dataclass: 這個裝飾器會自動為 Card 類別生成一些特殊方法 (如 __init__),簡化了資料類別的定義。card_type: CardType: 這是 Card 類別的屬性,它是一個型別提示 (type hint),表明 card_type 預期會是 CardType 枚舉的一個成員。SkillEffect 字典遊戲的策略深度源於每種卡牌的獨特技能效果。為了高效且集中地管理這些技能,我們設計了一個名為 SkillEffect 的字典 (Dictionary)。這個字典以 CardType 作為鍵 (Key),而對應的**值 (Value)**則是一個包含技能詳細參數的另一個字典。
card.txt 中的 SkillEffect 字典程式碼實現:
SkillEffect = {
CardType.SWORDSMAN: {"damage": 15},
CardType.ARCHER: {"damage": 12},
CardType.THIEF: {"damage": 8, "extra_moves": 1},
CardType.MAGE: {"damage": 10, "pierce_shield": True},
CardType.ELEMENTALIST: {"damage": 6, "shield": 10},
CardType.BARD: {"heal": 5, "shield": 5},
CardType.MERCHANT: {"extra_moves": 1},
CardType.PRIEST: {"heal": 15},
CardType.ALCHEMIST: {"damage": 5, "heal": 10},
}
SkillEffect = { ... }: 定義了一個 Python 字典,變數名稱為 SkillEffect。CardType.SWORDSMAN: {"damage": 15}: 這是一個鍵值對 (Key-Value Pair)。
CardType.SWORDSMAN,代表劍士卡牌類型。{"damage": 15},這本身也是一個字典,描述了劍士卡牌的技能效果——造成 15 點傷害。CardType.MAGE: {"damage": 10, "pierce_shield": True}: 魔法師卡牌有特殊的 "pierce_shield": True 屬性,表示其 10 點傷害可以無視護盾。CardType.BARD: {"heal": 5, "shield": 5}: 吟遊詩人作為支援型卡牌,包含 "heal": 5 (恢復 5 點生命) 和 "shield": 5 (提供 5 點護盾)。這種設計讓所有卡牌的技能效果都集中在一處,易於查找、修改和擴展。當我們想調整數值或新增效果時,只需修改這個字典即可,無需深入複雜的遊戲邏輯,這也正體現了 Vibe Coding 以清晰結構快速響應設計理念的精神。