系統開發-定義類別、方法與操作介面

更新 發佈閱讀 6 分鐘
raw-image


依據之前自訂的流程圖,定義系統的類別(Class)與相關的動作(方法Method)

raw-image


並設計系統的操作介面(Interface)

raw-image


實際玩法中,只有「莊家」和「玩家」這兩個角色,若撲克牌的處理邏輯放在這些角色裡,這樣的設計可能在 莊家 和 玩家 中都直接處理撲克牌的生成、發牌和計分等邏輯。在這個設計中,所有與撲克牌相關的處理都放在 Dealer(莊家) 和 Player(玩家) 中,這會導致代碼變得難以維護,因為每個角色都需要自己處理牌的邏輯。

以上是不好的作法,若是從原本只有「莊家」和「玩家」兩個類別擴展成三個 Class (Deck, Card, Player),可以幫助學習如何將物件導向設計中的「責任分離」概念應用到實際程式中,並理解物件導向的設計和封裝。

首先將撲克牌的數據(例如花色、點數)獨立出來,建立一個 Card 類別。這樣做可以避免在其他類別中重複使用相同的牌資料定義。Card 只需處理每張牌的屬性,像是花色和點數,這樣在「莊家」和「玩家」類別中就不再需要自行定義牌的結構。

public class Card {
public string Suit { get; set; } // 花色
public int Rank { get; set; } // 點數

public Card() {} //建立類別
}

將所有與撲克牌堆(deck)相關的邏輯(如建立、洗牌、發牌)抽離成 Deck 類別。這樣一來,「莊家」和「玩家」類別只需要從 Deck 中抽牌,無需自己處理整副牌的邏輯。

public class Deck {
private Card[] cards; //牌堆(只能透過DrawCard取得,所以設定private)

public Deck() {} //建立類別
void Shuffle() {} //洗牌(生成時,自動洗牌,所以不需要設定public)
public Card DrawCard() {} //發牌,回傳Card
}

最後,Player 類別(莊家和玩家都是Player類別)可以簡化成只需處理玩家和莊家手牌的接收和計算分數。Player 會從 Deck 類別中抽取撲克牌,並計算手牌的總分。

public class Player {
public List<Card> cards { get; set; } //手牌

public Player() {} //建立類別
public void AddCard(Card d) {} //接收Deck發過來的牌,加入手牌中
public int CalculatePoints() {} //計算手牌總分
public bool IsBusted() {} //判斷手牌是否爆牌(超過21點)
}

這樣的設計讓 Deck 處理所有與牌組相關的邏輯,Card 專門表示單張牌的資料,而 Player 只需管理手牌和分數,簡化了每個類別的責任。這樣,可以清晰地看到如何將複雜的程式分割成各自獨立的模組,並讓這些模組合作來實現整體功能,以提升代碼的可維護性和可讀性。


流程函式如下

public partial class BJ21 : System.Web.UI.Page {
protected void ResetGame() {} //初始化遊戲參數與動作(初始發牌)

protected void DrawForDealer() {} //發牌給莊家
protected void DrawForPlayer() {} //發牌給玩家

//按鈕OnClick後觸發
protected void btn_hit_Click() {} //玩家要牌,呼叫DrawForPlayer()
protected void btn_stand_Click() {} //玩家停牌,換莊家要牌DrawForDealer(),直到計分比較輸贏
protected void btn_newgame_Click() {} //新牌局(下一回合),呼叫NextRound()

protected void NextRound() {} //下一回合,呼叫ResetGame()
}

完成基本類別與方法定義後,加上邏輯與法判斷,即可完成系統開發,當然過程中還使用一些資料存取技巧,後續會補上。

若想加上其他功能,例如統計總共玩過幾次,或是玩家贏過幾次的功能,等整個基本架構完成可以運作後,再來加上即可,避免程式碼複雜化,也比較容易除錯(Debug)。


留言
avatar-img
Phyxsius
0會員
19內容數
FIRE
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
本篇介紹單人遊戲的核心架構與邏輯,涵蓋發牌、抽牌、出牌及遊戲結算等重要步驟。文章也詳細介紹了使用 socket.io 建立連線的過程,並說明如何利用 React Hooks 管理遊戲狀態,提及後端伺服器如何處理玩家加入房間的事件,並簡要介紹了房間資訊的管理,此文將分為多篇進一步介紹遊戲事件部分。
Thumbnail
本篇介紹單人遊戲的核心架構與邏輯,涵蓋發牌、抽牌、出牌及遊戲結算等重要步驟。文章也詳細介紹了使用 socket.io 建立連線的過程,並說明如何利用 React Hooks 管理遊戲狀態,提及後端伺服器如何處理玩家加入房間的事件,並簡要介紹了房間資訊的管理,此文將分為多篇進一步介紹遊戲事件部分。
Thumbnail
C同學說想玩撲克牌遊戲。於是,昨夜大家都洗完澡後,到我們帳篷集合開打。 剛開始她拿出一幅陌生的紙牌桌遊,兩個年輕人把兩個老人家電的慘兮兮。她們在學校就玩過的,反應也比我們夫妻快多了,為了挽回自信心,我建議玩一般撲克牌裡,“大老二遊戲”。
Thumbnail
C同學說想玩撲克牌遊戲。於是,昨夜大家都洗完澡後,到我們帳篷集合開打。 剛開始她拿出一幅陌生的紙牌桌遊,兩個年輕人把兩個老人家電的慘兮兮。她們在學校就玩過的,反應也比我們夫妻快多了,為了挽回自信心,我建議玩一般撲克牌裡,“大老二遊戲”。
Thumbnail
百家樂算牌公式   如果莊閒只發兩張牌比點,開莊閒機率顯然是50:50,連算都不用算。但百家樂中莊閒勝出機率不同的關鍵,就在他的補牌規則。 閒只在 0-5 補牌,莊只在 0-6 補牌,而且莊6點只能在閒加到 6或7 時補牌。 在百家樂中對勝出結果影響較大的是4的周圍號,以簡單的加減計算牌值,
Thumbnail
百家樂算牌公式   如果莊閒只發兩張牌比點,開莊閒機率顯然是50:50,連算都不用算。但百家樂中莊閒勝出機率不同的關鍵,就在他的補牌規則。 閒只在 0-5 補牌,莊只在 0-6 補牌,而且莊6點只能在閒加到 6或7 時補牌。 在百家樂中對勝出結果影響較大的是4的周圍號,以簡單的加減計算牌值,
Thumbnail
麻將胡牌規則 麻將胡牌指的是贏下該局麻將遊戲,只要手上的16張牌+1張別人打出的牌可以組成「5個坎+1個對子」即算胡牌,由打出可以胡牌的玩家支付遊戲點數給胡牌的玩家;手上的16張牌+上1張自己摸進來的牌組成「5個坎+1個對子」即算自摸,自摸的玩家向其餘三位玩家收取遊戲點數。
Thumbnail
麻將胡牌規則 麻將胡牌指的是贏下該局麻將遊戲,只要手上的16張牌+1張別人打出的牌可以組成「5個坎+1個對子」即算胡牌,由打出可以胡牌的玩家支付遊戲點數給胡牌的玩家;手上的16張牌+上1張自己摸進來的牌組成「5個坎+1個對子」即算自摸,自摸的玩家向其餘三位玩家收取遊戲點數。
Thumbnail
這次的遊戲情境,是讓大家扮演者率領眾多手下(手牌)的老大,其中可能混雜的臥底(鬼牌)隨時會叛逃。一樣只要有一副撲克牌即可遊玩。 遊玩人數: 2~4人。 遊戲設置: 將一副撲克牌置於中央,所有人抽7張牌。 遊戲目標: 藉由猜測對方場上的花色,將之送入墓地擊潰對手,或是在最後累積最多手牌
Thumbnail
這次的遊戲情境,是讓大家扮演者率領眾多手下(手牌)的老大,其中可能混雜的臥底(鬼牌)隨時會叛逃。一樣只要有一副撲克牌即可遊玩。 遊玩人數: 2~4人。 遊戲設置: 將一副撲克牌置於中央,所有人抽7張牌。 遊戲目標: 藉由猜測對方場上的花色,將之送入墓地擊潰對手,或是在最後累積最多手牌
Thumbnail
設計發想: 此遊戲源自經典撲克牌遊戲「戰爭」,欲將原規則優化改進而生,同樣可由一副撲克牌遊玩。 遊玩人數: 2~4人。 遊戲設置: 每人將撲克牌的各1花色作為各自牌組。並將兩張鬼牌放置場上。 遊戲目標: 率先將牌組的牌全數送進墓地的玩家得勝。 遊戲流程: 1.每人從牌組秘密打出1張
Thumbnail
設計發想: 此遊戲源自經典撲克牌遊戲「戰爭」,欲將原規則優化改進而生,同樣可由一副撲克牌遊玩。 遊玩人數: 2~4人。 遊戲設置: 每人將撲克牌的各1花色作為各自牌組。並將兩張鬼牌放置場上。 遊戲目標: 率先將牌組的牌全數送進墓地的玩家得勝。 遊戲流程: 1.每人從牌組秘密打出1張
Thumbnail
這篇文章將利用之前所學過的一些東西,包括if敘述、串列、while迴圈、函數等等的觀念,來實作一個撲克牌的小遊戲-21點。
Thumbnail
這篇文章將利用之前所學過的一些東西,包括if敘述、串列、while迴圈、函數等等的觀念,來實作一個撲克牌的小遊戲-21點。
Thumbnail
翻閱了去年面試時候的題目,想想現在自己會用什麼方式重新完成這個題目,也正好最近在看python的typing模組及其他使用,使用物件導向的方式改寫了程式碼。
Thumbnail
翻閱了去年面試時候的題目,想想現在自己會用什麼方式重新完成這個題目,也正好最近在看python的typing模組及其他使用,使用物件導向的方式改寫了程式碼。
Thumbnail
如果說,設計遊戲就是提取現實生活中的靈感,發揮我們的想像力來創作。那麼遊戲化,就可以說是將遊戲設計中的一些機制,放到現實生活裡,發揮它有趣的魔力。今天,就藉著朋友的問題,來跟各位分享2個遊戲機制吧!
Thumbnail
如果說,設計遊戲就是提取現實生活中的靈感,發揮我們的想像力來創作。那麼遊戲化,就可以說是將遊戲設計中的一些機制,放到現實生活裡,發揮它有趣的魔力。今天,就藉著朋友的問題,來跟各位分享2個遊戲機制吧!
Thumbnail
這次要為大家介紹的桌遊是屬於「風險管理」類型的紙牌遊戲『亡者神抽』,它有點像「撲克牌21點」這類運氣成份很重的玩法,但這款桌遊比的不是點數超過21點的大小就會爆,而是玩家們會糾結在是否會抽到相同花色的寶藏牌而導致爆炸失去珍貴的寶物 (,,Ծ‸Ծ,, )|||
Thumbnail
這次要為大家介紹的桌遊是屬於「風險管理」類型的紙牌遊戲『亡者神抽』,它有點像「撲克牌21點」這類運氣成份很重的玩法,但這款桌遊比的不是點數超過21點的大小就會爆,而是玩家們會糾結在是否會抽到相同花色的寶藏牌而導致爆炸失去珍貴的寶物 (,,Ծ‸Ծ,, )|||
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News