标签: playing-cards

枚举卡片排列的最佳方法是什么?

我正在寻找一个能够为特定洗牌分配值的函数.

该功能必须是双射的.甲板上有52张牌,所以有52张牌!不同的shuffle,因此域是52张卡的所有排列的集合,并且codomain是从1到52的整数!

快速有效地执行此操作的最佳算法是什么?

python algorithm math permutation playing-cards

7
推荐指数
1
解决办法
262
查看次数

在Clojure中重复向量

我是一个Clojure新手.我想获得两份卡套装的副本.我能想到的非DRY方式是

(def suits [:clubs :diamonds :hearts :spades])
(def two-times (concat suits suits))
Run Code Online (Sandbox Code Playgroud)

必须有更多功能的方式(即使它需要更多的字符:-)).如果我想要N次怎么办?有什么建议?

我试过的所有事情,比如

(replicate 2 suits)
Run Code Online (Sandbox Code Playgroud)

导致两个单独的向量:

([:clubs :diamonds :hearts :spades] [:clubs :diamonds :hearts :spades])
Run Code Online (Sandbox Code Playgroud)

如何"压扁"结构?

sequences clojure playing-cards

6
推荐指数
1
解决办法
1397
查看次数

向F#区分联合添加常量字段

是否可以向F#区分联合添加常量字段值?

我可以这样做吗?

type Suit
  | Clubs("C")
  | Diamonds("D")
  | Hearts("H")
  | Spades("S")
  with
    override this.ToString() =
      // print out the letter associated with the specific item
  end
Run Code Online (Sandbox Code Playgroud)

如果我正在编写Java枚举,我会向构造函数添加一个私有值,如下所示:

public enum Suit {
  CLUBS("C"),
  DIAMONDS("D"),
  HEARTS("H"),
  SPADES("S");

  private final String symbol;

  Suit(final String symbol) {
    this.symbol = symbol;
  }

  @Override
  public String toString() {
    return symbol;
  }
}
Run Code Online (Sandbox Code Playgroud)

f# playing-cards discriminated-union

6
推荐指数
2
解决办法
634
查看次数

F#造型扑克牌

我想在F#中代表标准扑克牌.我的目标是实现一个微软纸牌(Windows附带的一个)的克隆,一个卡片套装,面部和颜色很重要的游戏.这个练习主要是为了学习一些F#.

我考虑过使用歧视的工会:

type Suit =
    | Diamonds
    | Hearts
    | Clubs
    | Spades

type Color =
    | Red
    | Black

type Face =
    Two | Three | Four | Five | Six | Seven |
    Eight | Nine | Ten | Jack | Queen | King | Ace
Run Code Online (Sandbox Code Playgroud)

卡的记录类型:

type Card = {
    suit: Suit;
    face: Face;
    color: Color;
}
Run Code Online (Sandbox Code Playgroud)

但是,卡片的颜色可以从它的套装中推断出来 - 所有钻石和红心都是红色的,所有的俱乐部和黑桃都是黑色的.不能仅从Color确定套装.也许这样的事情是合适的:

type Suit =
    | Diamonds of Color //should always be red
    | Hearts …
Run Code Online (Sandbox Code Playgroud)

f# playing-cards

6
推荐指数
1
解决办法
781
查看次数

寻找导致24的算术运算

我正在编写一个程序来评估4张扑克牌的整数值(数字1-13),并显示一个等于24的解决方案.我有一个很大的if语句,我已经为此编写并且意识到它只是太多的解决方案来添加它们.我正在寻找有关如何将其浓缩为更优化版本的建议.代码运行正常,没有错误,这是我的整个代码:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.scene.image.ImageView;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.concurrent.atomic.AtomicReference;
import java.util.*;

public class Main extends Application {

   private Card card1;
   private Card card2;
   private Card card3;
   private Card card4;

   private int a;
   private int b;
   private int c;
   private int d;
   private int e=0;
   private int f=0;
   boolean par=false;


   @Override
   public void start(Stage primaryStage) …
Run Code Online (Sandbox Code Playgroud)

java javafx combinatorics playing-cards

6
推荐指数
1
解决办法
224
查看次数

Java - 如何创建一副牌(重点放在静态数组)? - AP计算机科学项目

这是我的第一个问题.只是为了澄清,我确实在询问之前是否有任何问题可以帮助我.如果我做错了什么事,请提前道歉,我是新人.

无论如何,对于我的AP CS课程,我必须制作卡片并在文本窗口中打印出来.我相信我非常接近完成.正如标题所说,一般来说,我如何创建一组专注于静态数组的卡片?但此外(在我下面询问的错误解决后),在查看我到目前为止生成的代码时,这是正确的方法吗?

这是给定的代码(意思是这不能改变):

public class Card
{
   private String suit;
   private String rank;
   private int value;

   public Card(String s, String r, int v)
   {
      suit = s;
      rank = r;
      value = v;
   }

   public String getSuit()       { return suit; }
   public String getRank()       { return rank; }
   public int getValue()         { return value; }

   public void setSuit(String s) { suit = s; }
   public void setRank(String r) { rank = r; }
   public void setValue(int v)   { value …
Run Code Online (Sandbox Code Playgroud)

java playing-cards indexoutofboundsexception

6
推荐指数
1
解决办法
294
查看次数

AI算法设计:纸牌游戏

目前我正在努力实现一个名为 Briscas 或 Briscola 的西班牙纸牌游戏,http://en.wikipedia.org/wiki/Briscola

简而言之,这是一个纸牌游戏,两队2人对战(他们看不到对方的手,甚至连队员都看不到),只在开始洗牌,然后将三张牌交给每个玩家. 以顺时针方式,每个人都扔一张牌,试图赢得那个回合。谁赢得了那个转折点。然后,仍然是顺时针方向,最后一轮获胜的玩家从牌堆顶拿一张牌,然后从他/她左边的玩家拿一张牌,依此类推。然后您将继续玩游戏,直到牌组为空。谁拥有更多积分的球队获胜。

细节:

甲板大小:40
玩家:4(2 组 2)
卡具有特定价值。(从 0 到 11)

问题

我知道直接使用 MiniMax 会很贵。这类纸牌游戏通常使用哪些算法?此外,您可以指向的任何文献也将是有益的。

谢谢

java algorithm artificial-intelligence playing-cards

5
推荐指数
1
解决办法
6124
查看次数

C# 纸牌游戏中的最佳纸牌选择

问题在于在游戏的每个时刻遵循以下规则选择最佳选项:

  • 您只能选择最左边或最右边的卡。

  • 你的对手总是先选,并且总是从最左边或最右边的牌中选择最大的牌。如果是平局,它将选择最右边的。考虑到这并不总是最好的选择。

有时不可能获胜,但无论如何,您必须展示通过与该对手(或策略,比如说)比赛可以增加的最高金额。

例子:

Cards:    1 2 4 2 8 4 3
Opponent: 3 4 2 2 = 11
Me:       1 8 4 = 13
Run Code Online (Sandbox Code Playgroud)

在这里,我在第二回合选择了 1 而不是 4,因此我可以稍后选择 8。这就是为什么选择最高的牌并不总是最好的。

我一直在尝试使用递归来实现这个解决方案,但我不确定这是最好的选择。关于如何设计这个算法有什么想法吗?

[编辑] 感谢@PengOne 的慷慨帮助。这是我试图实现的代码,但不幸的是它给了我错误。我应该修复什么?随着我的进步,我正在编辑这个。

static int cardGameValue(List<int> D, int myScore, int opponentScore)
{
    if (D.Count == 0) return myScore;
    else
    {
        if (D[0] <= D[D.Count - 1])
        {
            opponentScore += D[D.Count - 1];
            D.RemoveAt(D.Count - 1);
        }
        else
        {
            opponentScore += D[0];
            D.RemoveAt(0);
        }

        int left = cardGameValue(
                new …
Run Code Online (Sandbox Code Playgroud)

c# algorithm recursion playing-cards

5
推荐指数
1
解决办法
1641
查看次数

纸牌游戏类的OOP设计

在设计应用设计模式的以下类时,最好的方法是什么?

  • 甲板 - addCard,deal,shuffle,getTopCard,removeTopCard,removeAllCards
  • - addCard,removeCard,getCard,removeAllCards
  • DiscardPile - addCard,getTopCard,removeTopCard,removeAllCards
  • MeldPile - addCard,removeAllCards

(MeldPile掌握了桌面上的所有融合.)

对于我来说,我觉得getTopCardremoveTopCard只是一个包装getCardremoveCard,因为它只是得到一个卡的顶部位置,然后将它传递给getCardremoveCard.

我应该使用作文吗?策略模式?或者只是创建另一个名为CardPile的类并将其用作上述类的基类?真的很感激,如果你能提供一个示例代码.

java oop design-patterns playing-cards

5
推荐指数
1
解决办法
1万
查看次数

纸牌游戏的遗传算法(Dominion)

我有一个运行F#程序,运行Dominion,一款纸牌游戏.我想用遗传算法来确定最佳的游戏策略.但是,我对AI或遗传算法知之甚少.你能指点我一些好的文学入门吗?

比赛的策略包括对特定牌的反应.在每个回合中,机器人都会获得一手牌.它可以根据已经处理的内容选择玩动作卡或购买新卡.目标是尽可能多的胜利点卡结束游戏.

硬编码方法可能类似于:

def play(hand, totalDeck):
    if hand contains Smithy then use Smithy
    if hand contains enough coins for Province then buy Province
    if more than 30% of the totalDeck is Smithy, then buy coins
Run Code Online (Sandbox Code Playgroud)

我正在考虑用每张卡的总牌组的目标部分向量来描述策略:

[Smithy, Province, Copper, ...]
[.3, .2, .1, ...]
Run Code Online (Sandbox Code Playgroud)

然后为了改变机器人,我可以改变那个向量,看看变异版本是否做得更好.健身功能将是玩Dominion对抗各种其他机器人的平均分数.(一个机器人的分数取决于它与谁对抗,但希望通过对许多机器人玩很多游戏,这甚至可以解决.)

这有意义吗?我走向正确的道路吗?

f# artificial-intelligence playing-cards genetic-algorithm

5
推荐指数
2
解决办法
2195
查看次数