- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用从一副 52 张牌中随机抽样创建了 N 三手牌。现在,我想在 N 个人手中找到赢家。
这些是寻找赢家的规则。
卡片的获胜优先级为降序,获得这些卡片的概率为升序。
即
获得试用的概率最小,优先获胜的概率最大,依此类推。
我已经检查了试用的顺序是否正常。
boolean trial = this.checkTrial();
if(!trial){
boolean doubleRun = this.checkDoubleRun();
if(!doubleRun){
boolean run = this.checkRun();
if(!run){
boolean color = this.checkColor();
if(!color){
boolean same = this.checkSame();
if(!same){
this.checkHighest();
System.out.println("Normal");
}
else{
System.out.println("Same");
}
}
else{
System.out.println("Color");
}
}
else{
System.out.println("Run");
}
}
else{
System.out.println("Double Run");
}
}
else{
System.out.println("Trial");
}
这是最好的方法吗?
我有两个选择在这两者中找到获胜牌的最佳方法是什么?
如有任何建议,我们将不胜感激。
最佳答案
正如我所看到的,您需要构建一个扑克牌游戏系统,包括 3 张扑克牌或 3 张 patti 或同花顺,让我们识别所有涉及的对象
class Card {
char color;
short number;
public Card(char color, short number) {
this.color = color;
this.number = number;
}
public char getColor() {
return color;
}
public void setColor(char color) {
this.color = color;
}
public short getNumber() {
return number;
}
public void setNumber(short number) {
this.number = number;
}
}
class Deck {
char[] deckColors = {'♦', '♠', '♣', '♥'};
short[] cardNum = {(short) 'A', (short) '2', (short) '3', (short) '4', (short) '5', (short) '6', (short) '7',
(short) '8', (short) '9', (short) 'T', (short) 'J', (short) 'Q', (short) 'K'};
int cardCount;
public Card[] getShuffledDeck() {
Random r = new Random();
Card[] deckCards = new Card[(deckColors.length * cardNum.length)];
int cnt = 0;
for (char c : deckColors) {
for (short s : cardNum) {
deckCards[cnt++] = new Card(c, s);
}
}
Card[] shuffledDeck = new Card[deckCards.length];
int addedCount = 0;
while (addedCount < deckCards.length) {
int tInt = r.nextInt((deckCards.length));
Card c = deckCards[tInt];
if (c != null) {
shuffledDeck[addedCount++] = c;
deckCards[tInt] = null;
} else {
}
}
return shuffledDeck;
}
}
class Hand {
Card[] cards;
int handRank;
public Hand(Card[] cards) {
this.cards = new Card[3];
//sort all cards
if (cards[0].getNumber() > cards[1].getNumber()) {
if (cards[0].getNumber() > cards[2].getNumber()) {
//0 index is highest card
this.cards[2] = cards[0];
if (cards[2].getNumber() > cards[1].getNumber()) {
//2 is second highest
this.cards[1] = cards[2];
this.cards[0] = cards[1];
} else {
//1 is second highest
this.cards[1] = cards[1];
this.cards[0] = cards[2];
}
} else {
//2 index is highest
this.cards[2] = cards[2];
if (cards[0].getNumber() > cards[1].getNumber()) {
//0 is second highest
this.cards[1] = cards[0];
this.cards[0] = cards[1];
} else {
//1 is second highest
this.cards[1] = cards[1];
this.cards[0] = cards[0];
}
}
} else {
if (cards[1].getNumber() > cards[2].getNumber()) {
//1 index is highest card
this.cards[2] = cards[1];
if (cards[2].getNumber() > cards[0].getNumber()) {
//2 is second highest
this.cards[1] = cards[2];
this.cards[0] = cards[0];
} else {
//0 is second highest
this.cards[1] = cards[0];
this.cards[0] = cards[2];
}
} else {
//2 index is highest
this.cards[2] = cards[2];
if (cards[0].getNumber() > cards[1].getNumber()) {
//0 is second highest
this.cards[1] = cards[0];
this.cards[0] = cards[1];
} else {
//1 is second highest
this.cards[1] = cards[1];
this.cards[0] = cards[0];
}
}
}
}
public int getHandRank() {
return handRank > 0 ? handRank : calculateHandRank();
}
public int calculateHandRank() {
//assuming 3 cards dealt
//Trial - ColorSeq - Seq - Color - Pair
int[] powerOf2s = {1, 2, 4, 8, 16};
return ((cards[0].getNumber() == cards[1].getNumber() && cards[1].getNumber() == cards[2].getNumber()) ? 1 : 0) * powerOf2s[4]
+ (((cards[2].getNumber() - 1 == cards[1].getNumber() && cards[1].getNumber() - 1 == cards[0].getNumber()) && (cards[2].getColor() == cards[1].getColor() && cards[1].getColor() == cards[0].getColor())) ? 1 : 0) * powerOf2s[3]
+ ((cards[2].getNumber() - 1 == cards[1].getNumber() && cards[1].getNumber() - 1 == cards[0].getNumber()) ? 1 : 0) * powerOf2s[2]
+ (((cards[2].getColor() == cards[1].getColor() && cards[1].getColor() == cards[0].getColor())) ? 1 : 0) * powerOf2s[1]
+ ((cards[0].getNumber() == cards[1].getNumber() || cards[1].getNumber() == cards[2].getNumber() || cards[0].getNumber() == cards[2].getNumber()) ? 1 : 0) * powerOf2s[0];
}
}
现在你只需要查看所有玩家手牌中哪个玩家的手牌等级最高,如果两个玩家恰好有相同的手牌等级则按 Hand.cards[2],[1], 顺序查看谁的牌大[0].
如果需要任何解释,请告诉我。
算法可以大大改进,给出的代码示例只是为了展示思路。
关于java - 如何确定 3 Card Game to Find Winner 中的纸牌图案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43713602/
我正在制作一个简单的游戏,其中敌人在屏幕上四处移动,我们需要射击他们。我想模块化我的代码,所以我想用一个函数替换游戏循环逻辑。但是一旦我这样做,就会有一个下降以 fps 为单位。在while循环中调用
我使用的是标准匹配用户界面和两台 iPad iOS6。问题是当我在第一台设备中创建新的匹配项时,第二台设备应该在我查看匹配用户界面时看到现有的匹配项,但事实并非如此。我确定我的代码是正确的。这是方法:
在 The Practical Guide to Defect Prevention ,作者提到在软件开发中提高生产力的一种创造性方法是实现“生产力游戏”,员工以类似于在 Stack Overflow
我无法让游戏中心与我的应用一起工作。 每当我尝试对用户进行身份验证时,它都会返回以下错误: "The requested operation could not be completed becaus
我是 Game Maker 的新手。我已经创建了一个基于物理的小游戏的机制,并且我使用了 YoYo Games 教程中概述的方法来创建复杂的物理对象 (http://www.yoyogames.com
我正在编写一个 GML 脚本,想知道如何使消息出现在下一行: 例如。 show_message("Hello" + *something* + "World") 输出: Hello World 最佳答
关于这个已经有几个问题,但我按照他们的步骤解决了它,但它似乎对我不起作用。这是我所做的: 1.我仔细检查了 xcode 项目中的包标识符是否与供应门户上的供应配置文件完全相同(它还表示已启用 Game
GameKit 是否允许您以编程方式邀请特定的 Game Center friend 参加比赛,即不提供 GC ViewController?以下 handleInviteFromGameCenter
我正在 Game Maker: Studio 1.4 中构建客户端/服务器应用程序,需要运行游戏的两个实例进行测试。不幸的是,IDE 的运行/调试按钮在启动第一个副本后会自行禁用。有没有办法配置 ID
游戏已启动,我收到了用户的状态,一切就绪。我正在尝试构建一个问答游戏。我正在从远程服务器获取所有信息,其中包括基于问题的图像 Assets 。我可以获取远程数据,但无法显示图像。看来 facebook
我正在努力度过让 Game Center 集成发挥作用的第一阶段。我已经走到这一步了: 我创建了一个干净的新应用,在应用委托(delegate)中添加了 GameKit header 和基本的 aut
DragonRuby Game Toolkit 中好像没有按钮的概念。如何创建按钮等 UI 组件? 最佳答案 按钮(和任何其他 UI 组件)可以解构为 primitives: 按钮有一个点击空间(通常
我正在使用 DragonRuby Game Toolkit 构建游戏。 如何检测一个对象(例如 Sprite)是否与另一个 Sprite 发生碰撞? 这是放置在屏幕上的两个 Sprite 。关于如何检
我已经在我的应用中成功实现了 Game Center 排行榜,并使用 iOS 模拟器进行了测试。将新版本提交到 iTunes Connect 后,沙盒分数会转换到真正的 Game Center 吗?我
我读到 Unity 在渲染清晰文本时出现问题,我尝试了几种不同的修复方法:在导入的字体上设置较大的字体大小,并将字符设置更改为 unicode,使文本大小变大,然后缩放它向下,将过滤模式设置为指向像素
假设角色在游戏中跳跃需要一整秒,如果 FPS 为 10fps、30fps、100fps 等,游戏开发人员如何将跳跃时间保持在 1 秒? - 如果你明白我的意思,你会如何阻止游戏的 fps 基本上影响游
我一直在询问有关我的 Libgdx 游戏 Google Play 游戏服务配置错误的问题。到目前为止,我已经解决了登录错误,但现在我被困在解锁成就上。所以我发布我的代码可能有人可以帮助我。 这是我在
我正在将我的 Android 应用程序更新到最新的 Facebook SDK (4.0.0)。当我创建 GameRequestDialog 时,它向我显示此消息:“游戏请求仅适用于游戏”,而不是向我的
我创建了 GameOver.sks 和 GameOver.swift。如何在默认的 sprite-kit 项目中连接它们,例如 GameSense.sks 和 GameSense.swift? 最佳答
当前收到一个错误,指出无法找到我的 bean 中的 bankOffer 属性。 它来 self 的 game.jsp 文件,如下所示:
我是一名优秀的程序员,十分优秀!