簡介
這個專案是提供了一個21點的游戲模擬器框架。我想這個應該可以幫助賭徒測驗他們聽過的策略,程序中我偷巧繞過了一些地方,所以還有很多可以改進的地方,關于21點游戲的規則,可以查詢這篇文章。
使用的代碼
解決方案包含5個組件
l BlackJack –GUI部分
l Common – 框架使用的通用類、列舉和介面
l Game – 負責執行21點游戲的邏輯部分
l Player - 很簡單的電腦玩家
l HumanPlayer -人類玩家簡單的介面
組件圖
Common組件
Common組件包含下面的內容:
牌組類 – 管理牌組
手牌類 – 管理玩家的手牌
IPlayer介面 – 21點玩家介面
玩家選項列舉 – 玩家回合可能的設定
玩家狀態列舉 – 在場上的玩家的狀態
玩家游戲結束狀態 –在游戲結束時候玩家的狀態,是贏還是輸
Game組件會用事件通知IPlayer的方法
Game組件
Game組件包括:
PlayerStatus類 – 對Player的包裝類,資料包括當前玩家的手牌和狀態
Game類 – 21點游戲邏輯和控制
PlayerDirectory類 – 動態加載player類
游戲的簡單演算法:
開始一局新游戲
洗牌
開始新一輪
給每個玩家發2個牌
詢問每個狀態是“玩”的玩家是否還要一張牌,如果回答是,那么再給他們一張牌,如果回答不是,那么就把他的狀態改為“standing”
重復第5步知道沒有玩家是"playing"狀態
比較玩家的手牌根據游戲規則判定贏家,更新玩家的資料和游戲結束狀態。
洗牌并把牌放到牌堆里面
如果不是最后一輪,跳到第3步
描述的演算法是在Round、BeginRound、PlayerTurn、GiveCardToPlayer和EndRound的方法里。可以支持下列事件:
OnRoundEnd
OnGameEnd
OnPlayerAdded
OnPlayerRemoved
OnPlayerListCleared
OnDealerChange
游戲運行在自己的執行緒并且在回合結束的時候與GUI影片進行同步。在回合結束的時候,游戲執行緒呼叫WaitForAnimation并且等待GUI執行緒影片結束呼叫AnimationFinished的信號。StartGame,、StopGame、PauseGame和 ContinueGame都用來控制游戲
加載和初始化玩家
PlayerDirectory類負責加載并初始玩家。
其他資源通過LoadPlayer方法加載。為了創建一個Player的實體,呼叫CreateInstanceOfPlayer方法,宣告資源名字和構造引數。
playerDirectory.CreateInstanceOfPlayer("PlayerWithNameAndAge",
new object[]{ "Someone", 30 } );
簡單玩家
一個簡單玩家有下列邏輯:
如果我有黑A, 那我不動
"I如果我有21點, 那我不動
如果我手牌超過17點,那我不動
如果我的手牌不到17點,那我繼續要牌.
可以用下列代碼實作
using Common;
namespace Player
{
public class MyPlayer : IPlayer
{
private Hand _myHand = new Hand();
private string _name;
public string Name { get { return_name; } }
public void NewRound(bool newGame,
bool isDealer, intdealersFirstCard, int numberOfDecks)
{ _myHand.Restart(); }
public PlayerOptions Turn(int left)
{
if (_myHand.IsBlackJack ||_myHand.Values.Contains(21))
return PlayerOptions.Stand;
return _myHand.Values[0] <=
17 ? PlayerOptions.Hit :PlayerOptions.Stand;
}
public void GiveCard(int card) {_myHand.Add(card); }
public voidEndRound(PlayerEndGameStatus status,
List dealedCards) { }
public MyPlayer(string name) { _name =name; }
public MyPlayer() { _name ="strange name " +
GetHashCode().ToString(); }
}
}
框架
框架提供了一個簡單的方法來測驗玩家的邏輯。所有不需要的代碼已經去掉了
額外的資訊
正如我說過的那樣,還有很多提高的空間(比如卡牌應該由一個類表示而不是一個整數,影片效果可以提高)。還有,一些21點的規則沒有被實作,比如玩家的分割選項
感興趣的點
我的室友對于做一個聰明的玩家有了一些興趣,并且做了一些測驗。我希望你也會喜歡。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/74294.html
標籤:游戲策劃與運營
上一篇:用Cocos好還是白鷺好?
