iT邦幫忙

2025 iThome 鐵人賽

DAY 15
0
自我挑戰組

順著感覺走!從零開始的 Python & Vibe Coding 遊戲創作系列 第 15

第十五天: 程式碼中的卡牌靈魂:Card 類別與 SkillEffect 定義

  • 分享至 

  • xImage
  •  

各位程式碼冒險家,歡迎來到我的「順著感覺走!從零開始的 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)。
    • 鍵 (Key): CardType.SWORDSMAN,代表劍士卡牌類型。
    • 值 (Value): {"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 以清晰結構快速響應設計理念的精神。


上一篇
第十四天: 《奇幻卡牌競技場》的策略核心:卡牌構成與精妙回合流程
下一篇
第16天: 戰場上的生存者:《奇幻卡牌競技場》Player 類別的屬性與行為
系列文
順著感覺走!從零開始的 Python & Vibe Coding 遊戲創作20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言