簡體   English   中英

如何從java中的字符串數組中獲取兩個隨機值的和?

[英]how to get the sum of the two random value from an array of strings in java?

我正在做一個紙牌對游戲,該游戲從一個字符串數組生成兩個隨機值..我想知道的是如何從字符串數組中獲取兩個隨機值的和以確定獲勝者。 這是代碼

import java.util.*;

public class Cards {
private String suit;
private String face;
private String[] cardSuits;
private String[] cardFaces;
private Random ran;

public Cards() {
    ran = new Random();
    cardSuits = new String[] { "of Spade", "of Hearts", "of Diamonds",
            "of Clubs" };
    cardFaces = new String[] { "Ace", "2", "3", "4", "5", "6", "7", "8", "9",
            "10", "Jack", "Queen", "King" };

}

public String setPlayerCardSuit() {
    suit = cardSuits[ran.nextInt(4)];
    return suit;

}

public String setPlayerCardFace() {
    face = cardFaces[ran.nextInt(13)];
    return face;
}

public String setPlayerCardSuit2() {
    suit = cardSuits[ran.nextInt(4)];
    return suit;

}

public String setPlayerCardFace2() {
    face = cardFaces[ran.nextInt(13)];
    return face;
}

public String setCompCardSuit() {
    suit = cardSuits[ran.nextInt(4)];
    return suit;

}

public String setCompCardFace() {
    face = cardFaces[ran.nextInt(13)];
    return face;
}

public String setCompCardSuit2() {
    suit = cardSuits[ran.nextInt(4)];
    return suit;

}

public String setCompCardFace2() {
    face = cardFaces[ran.nextInt(13)];
    return face;
}

public void getResults() {
    System.out.println("Here are your cards: " + setPlayerCardFace() + " "
            + setPlayerCardSuit() + " and " + setPlayerCardFace2() + " "
            + setPlayerCardSuit2());
}

public void getCompCard() {
    System.out.println("Here's the computer's cards: " + setCompCardFace()
            + " " + setCompCardSuit() + " and " + setCompCardFace2() + " "
            + setCompCardSuit2());
}

}

這是測試Cards Class的代碼:

import javax.swing.JOptionPane;

public class TestCards {
public static void main(String[] args) {
    Cards playerCards = new Cards();
    Cards computerCards = new Cards();

    int confirm, x = 1;
    while (x == 1) {
        JOptionPane.showMessageDialog(null,
                "Random Card game \nPlease press OK to Start Game",
                "Card Pair Game", JOptionPane.INFORMATION_MESSAGE);

        JOptionPane.showMessageDialog(
                null,
                "Here are your Cards: " + playerCards.setPlayerCardFace()
                        + " " + playerCards.setPlayerCardSuit() + " and "
                        + playerCards.setPlayerCardFace2() + " "
                        + playerCards.setPlayerCardSuit2()
                        + "\nThe Computer's Cards are: "
                        + computerCards.setCompCardFace() + " "
                        + computerCards.setCompCardSuit() + " and "
                        + computerCards.setCompCardFace2() + " "
                        + computerCards.setCompCardSuit2());


        confirm = JOptionPane.showConfirmDialog(null, "Game Ends. Again?",
                "Game Over", JOptionPane.YES_NO_OPTION);

        if (confirm != JOptionPane.YES_OPTION) {
            x = 2;
        }
    }
}
}

現在缺少的是確定獲勝者的代碼。

PS:我是Java編程的初學者..因此,如果您看到代碼的異常用法,請耐心等待:)


我已經嘗試了Dylan的建議,但似乎無法使其工作..而是使用了他的想法,並將此代碼添加到Cards類中。

public int playerValues(){
    int temp = 0;
    if(face != cardFaces[0] && face != cardFaces[10] && face != cardFaces[11] && face != cardFaces[12]){
        temp = Integer.parseInt(face);
    }else if(face == cardFaces[0]){
        temp = 1;
    }else if(face == cardFaces[10]){
        temp = 11;
    }else if(face == cardFaces[11]){
        temp = 12;
    }else if(face == cardFaces[12]){
        temp = 13;
    }
    return temp;
}
public int computerValues(){
    int temp = 0;
    if(face != cardFaces[0] && face != cardFaces[10] && face != cardFaces[11] && face != cardFaces[12]){
        temp = Integer.parseInt(face);
    }else if(face == cardFaces[0]){
        temp = 1;
    }else if(face == cardFaces[10]){
        temp = 11;
    }else if(face == cardFaces[11]){
        temp = 12;
    }else if(face == cardFaces[12]){
        temp = 13;
    }
    return temp;
}

您有一個問題,並非所有卡都是唯一的。 兩個玩家可以擁有相同的卡。 他們甚至可能都是同一張牌。

相反,您應該生成所有可能的卡的列表。 我建議使用Card類。 使用Collections.shuffle進行隨機播放。 這樣,所有玩家將擁有不同的牌。

您需要比較一組卡的規則。 首先用英語定義它們,然后將它們翻譯為代碼。

您不應該使用字符串數組來保存卡片面,而應該使用具有名稱(用於顯示)和值(用於計算面之和)的CardFace數組。 由於只有13個值,因此應該是一個枚舉:

public enum CardFace {
    ACE("Ace, 1),
    TWO("2", 2),
    ...
    KINK("King", 13);

    private String face;
    private int value;

    private CardFace(String face, int value) {
        this.face = face;
        this.value = value;
    }

    public String getFace() {
        return this.face;
    }

    public int getValue() {
        return this.value;
    }
}

我真的建議您的Card是班級或至少是枚舉。 然后總結它們將是有意義的。

另外,請解釋這兩個

public String setCompCardFace()
public String setCompCardFace2()  //identical

您幾乎需要的是讓每個玩家都像開始時一樣擁有Cards實例

public class Cards extends ArrayList<Card>

但是一路上您迷路了,將這兩者混為一類,實際上什么也沒做。

所以在你的卡上放這些

public class Card 
{
    private String suit;
    private String face;

    public Card(String face, String color)
    {
        suit = color; this.face = face;
    }

    @Override
    public int compareTo(Card otherCard); //implement this yourself
 }

使用String.parseInt()方法將返回字符串中的數字。 但是,由於它們沒有數字,因此您在王牌,種類,女王,插孔方面會遇到問題。 我建議創建如下語句:

if(!cardFaces[x].equals("Ace")&&!cardFaces[x].equals("Queen")&&!cardFaces[x].equals("King")&&!cardFaces[x].equals("Jack"))
  {
    int temp = cardFaces[x].parseInt();
   }
else if(cardFaces[x].equals("Ace")
{
  int temp = 1;
}
else if(cardFaces[x].equals("King") || cardFaces[x].equals("Queen") || cardFaces[x].equals("Jack"))
{
 int temp = 10;

我設法通過修改TestCard類來確定獲勝者,而不是從字符串數組中顯示兩個隨機值。 我將其更改為僅顯示數組中的一個值。 這樣我就確定了誰是贏家。

似乎沒有人談論過獲得組合,因此我將在這里進行討論。 如果您不了解任何內容,請隨時在此處評論。

直接沖洗-您需要一個for循環。

首先,您應該按升序(1、2、3、4、5等)對玩家的紙牌數組進行排序。 現在,從第一個條目(最低的)開始檢查。

請注意,陣列卡僅以整數存儲手的值。

// Variables to store the current and previous cards.
int previous = 0;
int current = 0; 

cards = Arrays.sort(cards); // Sort cards into ascending order

boolean straightFlush = false;

for (i = 0; i < cards.length; i++) {
    current = cards[i];
    if (!current == cards[0]) { // If current is not the first card, execute the rest. You don't want random errors popping up, do you? :)
        // Check if it is the last card - a straight flush would then be present
        if (current == cards[cards.length - 1]) {
            straightFlush = true;
            break;
        }

        // Checks if current - 1 != previous or the current card is not consecutive to the previous card
        if (current - 1 != previous) {
            break;
        }
    }
...

那么如何比較雙手呢? 如果是同花順,則在牌中找到最大值。

我將很快發布更多有關此的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM