Java - 使用 getter(War 纸牌游戏)在 4 名玩家中找到获胜者

Java - finding the winner between 4 players using getter (War card game)

你好,我正在尝试用它来计算 4 名玩家的获胜者(该游戏是 classic 纸牌游戏 war),但我只能让它做两个。代码的第一位是我的 Card class,第二位是主程序,其中有更多用于计算获胜者的 if 语句。我遇到的问题是方法 "getWinner"。如果需要(在底部),我也包括了甲板 class。 包裹war卡片;

public class Card
{
   private int value, suit;
   private String result, suitStr;

   /**
    * @param num represents value of card
    * @param type represents the suit of card
    */

   public Card(int num, int type)
   {
     /** 
      * Class constructor.
      */

      value = num;
      suit = type;

      switch(value)
      {
         case 1: result = "Ace";
                  break;
         case 2: result = "Two";
                 break;
         case 3: result = "Three";
                 break;
         case 4: result = "Four";
                 break;
         case 5: result = "Five";
                 break;
         case 6: result = "Six";
                 break;
         case 7: result = "Seven";
                 break;
         case 8: result = "Eight";
                 break;
         case 9: result = "Nine";
                 break;
         case 10: result = "Ten";
                 break;
         case 11: result = "Jack";
                 break;
         case 12: result = "Queen";
                 break;
         case 13: result = "King";
                 break;
         default: result = "";
                 break;
      }  


      switch(suit)
      {
         case 1: suitStr = "Clubs";
                 break;
         case 2: suitStr = "Diamonds";
                 break;
         case 3: suitStr = "Hearts";
                 break;
         case 4: suitStr = "Spades";
                 break;
      }

   }


    /**
    * getters
    */

   public int getNum()
   {
      return value;
   }



public int getSuit()
   {
      return suit;
   }

   /**
    * setters
    */

   public void setVal(int choice)
   {
      value = choice;
   }

   public void setSuit(int choice)
   {
      suit = choice;
   }

   /**
    * @param play represents Cards object
    * @return flag the String result of the game
    */ 

   public String getWinner(Card play)
   {
      String flag = "";

      if(value == play.getNum())
      {
         if(suit > play.getSuit())
            flag = "win";
         else if (suit == play.getSuit())
            flag = "tie";
         else
            flag = "lose";
      } 
      else if (value > play.getNum())
         flag = "win";
      else
         flag = "lose";

      return flag;

   }


   /** 
    * toString method
    */

   public String toString()
   {
     String info = "";
     info = info + result +  " of " + suitStr;
     return info;
   }

} /** end Cards class */

主程序

package warcard;

public class Warcard
{

   public static void main(String[] args)
   {
      // instantiation of 2 decks 
      Deck hand1, hand2, hand3, hand4;
      hand1 = new Deck();
      hand2 = new Deck();
      hand3 = new Deck();
      hand4 = new Deck();

      String result = "";

      // shuffle the decks 
      hand1.shuffle();
      hand2.shuffle();
      hand3.shuffle();
      hand4.shuffle();


      /** tracker variables
       *  wins1 tracks user's wins
       *  wins2 tracks computer's wins
       */
      int count = 0;
      int wins1 = 0;
      int wins2 = 0;
      int wins3 = 0;
      int wins4 = 0;
      int ties = 0; 


         for (int i= 0; i < 52; i++)
          { 


             Card tester = hand1.getCard(count);
             Card tester2 = hand2.getCard(count);
             Card tester3 = hand3.getCard(count);
             Card tester4 = hand4.getCard(count);
             count++;
             System.out.println("Player 1's hand: " + tester);
             System.out.println("Player 2's hand: " + tester2);
             System.out.println("Player 3's hand: " + tester3);
             System.out.println("Player 4's hand: " + tester4);
             result = tester.getWinner(tester2);


             if(result == "win")
             {
               System.out.println("Win!");
               wins1++;
             }
             else if(result == "tie")
             { 
               System.out.println("Tie!");
               ties++;
             }
             else
             {
               System.out.println("Lose!");
               wins2++;
             }

            } // end for loop

       System.out.println();
       System.out.println("Total score:");
       System.out.println();
       System.out.println("Player 1's wins: " + wins1 + "\n" + "Player 2's wins: " + wins2 + "\n" + "Player 3's wins: " + wins3 + "\n" + "Player 4's wins: " + wins4 + "\n" + "Ties: " + ties);
       if (wins1 > wins2 && wins1 > wins3 && wins1 > wins4)
          System.out.println("Player 1 won the game!");
       else if(wins2 > wins1 && wins2 > wins3 && wins2 > wins4)
           System.out.println("Player 2 wins!");
       else if(wins3 > wins1 && wins3 > wins2 && wins3 > wins4)
           System.out.println("Player 3 wins!");
       else if(wins4 > wins1 && wins4 > wins2 && wins4 > wins3)
           System.out.println("Player 4 wins!");
       else if(wins1 == wins2 && wins1 == wins3 && wins1 == wins4)
          System.out.println("It's a tie!");


   }  // end main

} // end class

甲板class

package warcard;

import java.util.Random;

public class Deck
{
   private Card[] deck;
   private int[] suit = {1, 2, 3, 4};
   private int[] numbers = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
   private int count;

   public Deck()
   {
     deck = new Card[52];
     count = 0;

      for(int i = 0; i <= 3; i++)
      {
         for(int k = 2; k <= 14; k++)
            {
              deck[count] = new Card(k, suit[i]);
               count++;
              }
       } /** 
          * end outer loop 
          */

   } 
   /**
    * end constructor 
    */



   public Card getCard(int index)
   {

     return deck[index];
   }




   public void shuffle() 
   {
      int rand;
      Random mix = new Random();

         for (int i = 0; i < deck.length; i++)
         {
            /** 
             * shuffles deck
             */

            rand = mix.nextInt(deck.length);
            Card temp = deck[i];
            deck[i] = deck[rand];
            deck[rand] = temp;

         } /**
            * end for loop
            */

   }



} /**  end DeckCards class */

据我所知,只有 tester-deck 正在与 tester2-deck 对战。如果那不是故意的,原因是,你的 4 副牌中只有 2 副 "competitive" 是不是只有 2 副在玩,对吧?

目前,您只比较了2张牌的数值;您将 testertester2 进行比较,但不包括玩家 3 或玩家 4 的牌。不仅如此,您还不知道 return 哪个 玩家赢了。相反,您只指定 p1 是赢了还是输了。

您的 String getWinner(Card) 方法需要更多参数,因此您可以将更多卡片传递给它。与所有卡片进行比较。它还应该 return 哪个 玩家赢了:

public String getWinner(Card p2, Card p3, Card p4) {
    //compare against ALL cards
    //return which player won
}

然后你会调用它,传递所有对手牌,而不仅仅是 tester2:

result = tester.getWinner(tester2, tester3, tester4);

最后,你必须修理你的记分员。不要检查 "win" 或 "lose",而是检查哪个玩家赢了:

/* could use a switch statement */
if(result == "p1") {
           System.out.println("Player 1 wins!");
           wins1++;
} else if(result == "p2") { 
           System.out.println("Player 2 wins!");
           wins2++;
} else if(result == "p3") {
           //...
} 

如果我在电脑上,我会建议更多,例如将 "battle" 封装在其他地方而不是第一个玩家的卡片中;我建议您在完成后发布到 CodeReview。如果您有任何问题,请告诉我。