各位程式碼冒險家,歡迎來到我的「順著感覺走!從零開始的 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 以清晰結構快速響應設計理念的精神。