一个Blackjack游戏的介绍

演示程序下载

程序框架下载

游戏代码下载

介绍:
该项目提供了一个建立Blackjack 游戏的框架。我不知道对有些人是否有用?好,可以为爱玩这个游戏的人提供测试的机会。首先必须简单介绍一下,在后面我将一些放到一起 ,所以有足够的功能扩展空间。对于该游戏的规则和相关信息,请看 Wikipedia的相关文章。

使用代码:
代码包含了五个模块:
BlackJack - GUI程序
Common - 一个Common类,由框架调用的枚举和函数
Game -用来处理游戏逻辑
Player - 电脑控制的玩家
HumanPlayer - 玩家控制


界面:图表,一般信息,包含:

Deck class -绘制扑克
Hand class - 管理玩家
IPlayer interface - 玩家界面
PlayerOptions enum -玩家一轮中的选项
PlayerInGameStatus enum - 当前玩家状态 (playing 或 standing)
PlayerEndGameStatus enum - 游戏结束时玩家状态 (赢, 输...)


游戏成分:
游戏成分包含:
PlayerStatus 类 -  玩家的打包类;玩家的当前数据和状态。
Game 类 - 游戏的逻辑控制
PlayerDirectory 类 - 动态调用玩家成员对象
游戏单一的运算法则:
开始一个新游戏
洗牌
开始新的一局
给所有玩家发两张牌
询问所有玩家在"playing"状态下,是否想要续牌:如果是,给玩家再发一张牌;如果不,将状态该成"standing" 。
对所有在"playing"状态下的玩家重复第5步。
比较玩家的牌值通过游戏规则来决定输赢,刷新玩家状态结束游戏
洗牌,压牌并放到最后
如果不是最后一局返回到第3步
一局的算法是,开始一局,轮到玩家,发牌给玩家,结束一局这些是由Game类的BeginRound, PlayerTurn, GiveCardToPlayer and EndRound 方法完成。游戏可以用事件来监控(Game类成员):


OnRoundEnd
OnGameEnd
OnPlayerAdded
OnPlayerRemoved
OnPlayerListCleared
OnDealerChange

游戏运行在GUI同步动画的线程,这在每一局结束后运行。在每局结束后,游戏线程调用WaitForAnimation并等待直到GUI线程中动画结束的函数AnimationFinished被调用。StartGame, StopGame, PauseGame 和 ContinueGame方法用来控制游戏。
调用和玩家操作:
PlayerDirectory类拥有调用玩家操作和功能的函数。在该类结构中,如果包含了一个玩家的类则所有./Players文件夹下的文件将被检测和调用。玩家类的名称必须是MyPlayer并且一定在玩家的命名空间。
其它文件在LoadPlayer方法中被添加并指定路径来编译。为了建立一个玩家的示例,只需要调用CreateInstanceOfPlayer,指定集合名称和构造参数。
playerDirectory.CreateInstanceOfPlayer("PlayerWithNameAndAge",
    new object[]{ "Someone", 30 } );
简单的玩家
一个玩家用一种简单逻辑:

 

 “如果我有blackjack就stand”
 “如果有21点,就stand”
 “如果17点以上,就stand”
 “如果少于17点,就再要一张”
 这些由以下代码执行:
  Collapseusing 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, int dealersFirstCard, 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 void EndRound(PlayerEndGameStatus status,
            List<int> dealedCards) { }

        public MyPlayer(string name) { _name = name; }

        public MyPlayer() { _name = "strange name " +
            GetHashCode().ToString(); }
    }
}


项目框架:
项目框架提供一个简单的方法用来检测玩家逻辑环境和项目环境。所有不许要的资源代码清理掉。
附加信息:
这里还有许多可以改进的地方(例如,牌可以用类来绘制而不是数字,动画程序需要曾强)。当然一些游戏规则也可以增加。
好我的努力是要使玩家决的有挑战性。希望你们能喜欢它 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值