一个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(); }
}
}
项目框架:
项目框架提供一个简单的方法用来检测玩家逻辑环境和项目环境。所有不许要的资源代码清理掉。
附加信息:
这里还有许多可以改进的地方(例如,牌可以用类来绘制而不是数字,动画程序需要曾强)。当然一些游戏规则也可以增加。
好我的努力是要使玩家决的有挑战性。希望你们能喜欢它
程序框架下载
游戏代码下载
介绍:
该项目提供了一个建立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(); }
}
}
项目框架:
项目框架提供一个简单的方法用来检测玩家逻辑环境和项目环境。所有不许要的资源代码清理掉。
附加信息:
这里还有许多可以改进的地方(例如,牌可以用类来绘制而不是数字,动画程序需要曾强)。当然一些游戏规则也可以增加。
好我的努力是要使玩家决的有挑战性。希望你们能喜欢它
相关文章推荐
- 介绍大家一个很好玩的网站。多人在线flash联机游戏。
- 用一个汽车游戏的例子来介绍一下事件(Event)
- 介绍一个用Kivy开发太空游戏的站点
- 一个最最简单的飞行射击游戏(J2ME)的大体框架介绍
- 转载一个简单的lua展示【COCOS2DX-LUA 脚本开发之一】LUA语言基础在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!
- 《一个都不能少》游戏介绍与总结
- 用cocos2d3.0写一个srpg游戏-srpg介绍
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植2:如何新建一个项目,引擎目录结构介绍
- 忆龙2009:一个介绍游戏开发的学习空间
- JavaScript写一个连连看的游戏
- 一个很不错介绍session的文章
- 介绍一个Android开源项目:GifView——Android显示GIF动画
- 基于ACE设计一个c++网络游戏服务器框架引擎
- Flashplayer11 And AIR3游戏应用介绍视频
- 一个不错的 png压缩工具 pngquant 使用介绍 批量压缩png
- 一个不错的 png压缩工具 pngquant 使用介绍 批量压缩png
- libxl库的介绍,对Excel操作封装得很好的一个库,兼容2007版和多字节字符(最后有破解版下载)
- 火柴游戏 这是一个纵横火柴棒游戏。如图[1.jpg],在3x4的格子中,游戏的双方轮流放置火柴棒。
- Nim Game,一个有趣的游戏,也是一道入门算法题。
- Fresco介绍 - 一个新的android图片加载库