您的位置:首页 > 其它

一个Blackjack游戏的介绍

2008-04-11 14:26 274 查看
演示程序下载

程序框架下载

游戏代码下载



介绍:
该项目提供了一个建立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(); }
}
}

项目框架:
项目框架提供一个简单的方法用来检测玩家逻辑环境和项目环境。所有不许要的资源代码清理掉。
附加信息:
这里还有许多可以改进的地方(例如,牌可以用类来绘制而不是数字,动画程序需要曾强)。当然一些游戏规则也可以增加。
好我的努力是要使玩家决的有挑战性。希望你们能喜欢它
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: