扑克工具
一个帮助扑克玩家的实用程序。
引言
这是一套供扑克玩家使用的工具。我在 Windows 桌面和 VS.NET 内置的模拟器上测试了该应用程序。令我惊讶的是,同一个可执行文件无需修改即可在两个平台上运行。该应用程序是为适应不同的屏幕尺寸而编写的。
zip 文件包含所有必需的源代码和可执行文件。我非常讨厌下载一个项目却无法立即使用它。你应该能够解压文件,加载解决方案,并准备好编辑代码。或者,从 bin/debug 目录获取可执行文件并直接在那里运行。
我不确定 CAB 文件分发是否会起作用。我没有任何方法来测试它们。我只是创建了它们并将它们包含在 zip 文件中。
背景
此应用程序是作为 Code Project Compact Framework 竞赛的参赛作品编写的。我也将其用作学习 C# / .NET / Compact Framework 的方式。我主要是一名 C++ / Win32 工具程序员,因此这个项目极具挑战性。
卡牌图像
对于大的卡牌图像,我使用了 Win2K 中 Cards.dll 中的图像,并将它们添加到一个 .NET Compact Framework 兼容的 resx 文件中。Resourcer 程序帮助了我,但它不适用于 .NET Compact Framework 兼容的 resx 文件,所以我不得不直接编辑 XML。
我修复了方块 J 的牌,使其有 2 只眼睛,所以现在只有 2 张单眼 J 而不是 3 张。
我还添加了一套在小尺寸查看时看起来不错的卡牌。
牌型评估器
我在 Steve Brecher 的网站上找到了一些公共领域的 C 源代码,用于评估扑克牌型。我非常想使用这段代码。于是,我将其放入 C++ DLL 中并进行了尝试。我可以在 Windows 中使用 DLL,但在模拟器中不行。
因此,我下载了嵌入式 VC++ V4 编译器,并尝试创建特定于平台的 DLL。我也没能成功。
如果有人感兴趣,源代码 zip 文件中有一个名为 **Save** 的子目录。我在该子目录中包含了 DLL 源代码。如果有人能让模拟器链接到这些 DLL 之一,我对结果很感兴趣。
最后,我只是将一个 C 源文件翻译成了 C#,然后继续了。HandEval.cpp 文件的翻译很直接。
使用应用程序
应用程序启动时,您会看到这个包含三个按钮的屏幕。
牌型排名显示
如果您按下第一个按钮“牌型排名”,您将看到以下屏幕。
这是一个扑克牌型排名列表。您可以根据需要调整大小。如果您愿意,可以打印出来,或者将其显示在您的电脑屏幕上,以便新手扑克玩家查看。
筹码分配器
主菜单上的第二个按钮会弹出筹码分配器。首先要注意的是,屏幕顶部有一个工具栏。按钮是:“加载”、“保存”、“分配”、“均分”和“买入”。
第一步是设置您的筹码的价值和数量,并将它们保存到文件中。
此屏幕旨在帮助在家中进行扑克游戏或锦标赛的人们。我为家庭使用购买了一套 450 个筹码。在不同的情况下,很难弄清楚如何分配筹码。
筹码分配器可用于几种情况:**锦标赛**、**发牌员选择**、**兑现**和**游戏续局**。
**锦标赛** - 在玩锦标赛风格的扑克时,您希望将所有筹码平均分配给玩家。所以,首先,您将设置前两行的筹码值和数量。然后输入锦标赛的玩家人数(最多十人)。然后按“分配”按钮。这将把筹码平均分配给所有玩家。此时您可能会剩下一些筹码。如果您真的想为本次锦标赛使用所有筹码,可以按“均分”按钮。这将使用所有剩余的筹码并将它们分配给每个人,以便每个人都有均分的金额。筹码数量可能不会完全相同,但美元价值对每个人来说都是一样的。
**发牌员选择** - 在玩发牌员选择游戏时,您可以让用户“买入”以接收他们的筹码。因此,首先设置筹码值和数量。确保您从一个空白的牌桌开始(取消勾选所有玩家)。例如,在我玩的游戏中,我们大约有 5 名玩家,每个人都喜欢玩 5 美分的底注,并希望用大约 10-20 美元的现金进行游戏。知道这一点,我需要对我的筹码进行估值,以便支持大约 100 美元。面额从 0.05 美元到 1 美元不等。
此时,我将点击“买入”按钮,看到以下屏幕。
所以,玩家 1 将给我 10 美元,并想要一个好的筹码分布,总共 50 个筹码。在此屏幕上,我会输入玩家 #1,金额 $10,总筹码 50,然后点击“计算”按钮。当点击“计算”按钮时,列表视图将填充各种实现此分布的方法。我会查看列表并选择一个我喜欢的组合,然后选择它。
选择正确的组合后,我将按“应用”按钮将此筹码组合添加到玩家 1。如果我按两次“应用”,那么我就给了他 20 美元。然后您可以切换到玩家 2,为他给的 15 美元提供一套筹码。
请注意,由于舍入误差,有时买入算法会少给 1 美分,所以请务必检查结果。
当所有玩家都完成“买入”后,按“完成”按钮。
**兑现** - 当发牌员选择游戏中的玩家结束时,您可以使用筹码分配器快速计算出他们的筹码值多少钱。
确保筹码值正确,然后数出玩家拥有的筹码数量,并将计数输入筹码分配器的一行空白处。它们的总价值将显示在右侧。它还将显示他们拥有的筹码数量,作为快速的核对。
**游戏续局** - 如果您正在进行一场无限注德州扑克锦标赛,但对每个人来说都太晚了,您可以使用筹码分配器输入每个玩家的所有筹码数量。保存文件。然后可以截屏。稍后继续比赛时,您可以加载文件并按照文件中的说明分配筹码。
请记住,由于此应用程序可以在 Windows 桌面和 Pocket PC 上运行,因此您可以在桌面上进行一些初步设置并保存文件,然后将其移动到 Pocket PC 上,以便在扑克游戏中随身携带。
视频扑克游戏
点击主菜单上的最后一个按钮将弹出一个视频扑克游戏。
这是一个标准的“Jacks or Better”游戏。它在这里帮助您打发时间并练习您的扑克策略。
未来工具
德州扑克摊牌赔率
我曾打算使用 Steve Brecher 网站上的 Showdown.cpp 文件来创建一个德州扑克摊牌屏幕。如前所述,我无法让 DLL 工作,而 CPP 文件包含大量指针和结构,翻译起来非常复杂。我希望在某个时候完成摊牌工具。
代码细节
我为这个项目编写了大量的代码。欢迎您浏览和评论。我认为我写的最有趣的代码涉及绘制位图、调整窗体大小和创建控件数组。
这是一个绘制资源文件中大位图卡牌的代码示例:
Image newImage;
int x = 0, y = 0;
GraphicsUnit units = GraphicsUnit.Pixel;
ImageAttributes imageAttr = new ImageAttributes();
if (shown == false)
newImage = Resources.GetImage("backside.bmp");
else
newImage = image;
if (w<0) w = (int)cardSize.Width;
if (h<0) h = (int)cardSize.Height;
Rectangle destRect = new Rectangle(xPos, yPos, w, h);
drawingSurface.DrawImage(newImage, destRect, x, y,
newImage.Width, newImage.Height, units, imageAttr);
Font drawFont = new Font("Courier New", 8,
System.Drawing.FontStyle.Bold);
SolidBrush drawBrush = new SolidBrush(Color.Black);
SizeF sizeString = drawingSurface.MeasureString(
"HOLD", drawFont);
x = (int)(xPos + cardSize.Width/2 - sizeString.Width/2);
if (x<xPos) x = xPos;
if (hold)
drawingSurface.DrawString("HOLD", drawFont,
drawBrush, x, yPos+h);
else
drawingSurface.DrawString(" ", drawFont,
drawBrush, x, yPos+h);
关注点
总的来说,这个项目非常有趣。使用 C# 和 IDE 很有趣。由于这个项目,我对 C++ 指针和 typedefs 的理解也更深了。
.NET Compact Framework 有些令人沮丧,因为它只是整个 .NET Framework 的一个子集。但由于它允许您生成可在 PDA 和桌面设备上使用的可执行文件,我认为它值得您考虑作为目标平台。再次,请记住,由于此应用程序可以在 Windows 桌面和 Pocket PC 上运行,因此您可以在桌面上进行一些初步设置并保存文件,然后将其移动到 Pocket PC 上,以便在扑克游戏中随身携带。
唉,程序员总是很难放下项目,转向其他领域。
请随时提出建议或错误报告。根据收到的反馈,我将尝试改进扑克工具集。
历史
- 2004 年 5 月 1 日 - 初始发布。