CWT23 與 APH 的 Scala DSL。

警告:本文內含 APH  同人與技術混合內容,APH 為一國家擬人化創作,內容不代表真實國家情形及立場。

話說今天去了 CWT23  的攤位,結果都沒看到我原本萌的東西啊,然後在會場被萌到的大概就是灣娘吧,滿滿的灣娘在路上走來走去,真是萌煞人也。

於是,兩天的購物內容就都變成和灣娘有關的東西是也!而今天入手的就是這套 APH  紙牌遊戲,購買的原因……有阿呆毛的灣娘好萌(大誤)!

好吧……回到正題,其實買的時候很掙扎的,僅管我承認我是個阿宅,可是要在會場上像斑目那樣子的買法,我還是沒辦法的啊,更何況我還是個米蟲,還在等上工呢。

所以,在會場的時候,一直在和另一攤的萌獸DNA與戀星這兩套自製遊戲的合輯考慮,而最後還是選了灣娘卡。

理由嘛,其實是因為我覺得這種卡片遊戲好像還滿適合做成手機連線對戰遊戲的,所以打算買回來研究一下!

然後呢……回家後就不小心搞出這個 DSL  了,花費時間,好像十分鐘不到吧!結論就是 Scala  好強好厲害,最後一段設定遊戲的部份,根本就不像程式語言,可讀性莫名其妙的強,搞不好一般人都看得懂。XD

/**
 *  人物卡片擁有三個屬性:名稱、生命值、描述
 */
case class PersonCard (name: String, description: String, hp: Int) 
{
    def hasHP      (hp: Int) = PersonCard (name, description, hp)
    def describeAs (description: String) = 
        PersonCard (name, description, hp)
}

/**
 *  每個遊戲裡有複數張人物卡片
 */
case class GameBoard (title: String, 
                      personCards: List[PersonCard]) 
{
    def hasPersonCards (cards: PersonCard*) = 
        GameBoard (title, cards.toList)
}

/**
 *  神奇的轉型函式,DSL 的秘密就在這裡
 */
implicit def str2PersonCard (name: String) = 
    PersonCard (name, "", 0)

implicit def str2GameBoard (title: String) = 
    GameBoard (title, Nil)

/**
 *  今天在 CWT23 買的 APH 同人遊戲裡的一些國家卡片
 */
"APH 紙上遊戲" hasPersonCards (

    "台灣" hasHP 60  describeAs "一般來說,中國、香港、日本、韓國、台灣" +
                                "裡,台灣最好相處(因為太弱啦),雖然自" +
                                "己不覺得,但是大家都覺得她家的夜市很好" +
                                "玩。",

    "香港" hasHP 70  describeAs "被英國領養了一段時間,最近回大哥家住," +
                                "有點適應不良,對金錢很精明,但人際關係" +
                                "則有點無力,看不大出來他在想什麼。",

    "美國" hasHP 100 describeAs "熱血青年,自認是世界的警察,對於做家務" +
                                "有點懶洋洋,不過墨西哥會從後院的洞偷溜" +
                                "進來工作所以沒關係,是最近一次大流行感" +
                                "冒的病源。"
)

回響