2013-03-11 78 views
3

這是一個班級作業,我不是要求任何人爲我完成作業,而是我已經嘗試了我的最佳能力,然後張貼在這裏,希望在我的4上獲得一些幫助我收到的錯誤以及由於某種原因我的套牌沒有被洗牌。Java程序 - 紙牌遊戲戰爭

我的作業路線:

在這個作業中,你將創建起戰爭的一個簡單的遊戲程序。在這個遊戲中,每個玩家從全套甲板上發牌。擁有最高價值卡的人獲勝。如果被髮牌的牌具有相同的價值,那麼它是平局並且雙方都不會獲勝。贏得最多回合的球員贏得比賽。玩家不需要任何輸入(不是很有趣!)。你應該打印每個玩家被髮牌的牌以及該回合的結果和比賽的最終結果。您可能想要使用用戶輸入來實現每輪之間的延遲。

我的卡類:

public class Card { 

    private int cardNum; 
    final static String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"}; 
    final static String[] ranks = {"2", "3","4","5","6","7","8", "9","10", "Jack", "Queen", "King", "Ace"}; 

    Card (int theCard) { 
     setCardNum (theCard); 
    } 

    public void setCardNum (int theCard) { 
     cardNum = (theCard >= 0 && theCard <= 51)? theCard: 0; 
    } 

    public int getCardNum() { 
     return cardNum; 
    } 

    public String toString() { 
     return ranks[cardNum%13] + " of " + suits[cardNum/13]; 
    } 

    public String getSuit() { 
     return suits[cardNum/13]; 
    } 

    public String getRank() { 
     return ranks[cardNum%13]; 
    } 

    public int getValue() { 
     return cardNum%13; 
    } 
} 

我的甲板類(在這裏我有一個洗牌的錯誤):

public class Deck { 

    private Card[] deck = new Card[52]; 
    private int topCard; 

    Deck() { 

     topCard = 0; 

     for (int i = 0; i < deck.length; i++) 
      deck[i] = new Card(i); 

    } 

    public void shuffle() { 

     topCard = 0; 

     for (int i = 0; i < 1000; i++) { 
      int j = (int)(Math.random()*52); 
      int k = (int)(Math.random()*52); 
      Card tmpCard = deck[j]; 
      deck[j] = deck[k]; 
      deck[k] = tmpCard; 
     } 
    } 

    public Card dealCard() { 
     Card theCard; 
     if (topCard < deck.length) { 
      theCard = deck[topCard]; 
      topCard++; 
     } 
     else 
      theCard = null; 

     return theCard; 
    } 
} 

我的抗戰遊戲的主程序:

import java.util.Scanner; 

public class WarGame { 

    public static void main(String[] args) { 

     Card[][] hands = new Card[2][1]; 
     Deck myDeck = new Deck(); 

     for (int i = 0; i < 53; i++) { 
      System.out.printf("\n Round %s of The War \n", i); 

      for (int c = 0; c < 1; c++) 
       for (int player = 0; player < hands.length; player++) 
        hands[player][c] = myDeck.dealCard(); 

      for (int player = 0; player < hands.length; player++) { 
       System.out.printf("Player %d: ", player); 
       printHand(hands[player]); 

       int player1; 
       int player2; 

       if (player1.getValue() > player2.getValue()) 
        System.out.println("Player One Wins The War"); 
       else if (player2.getValue() > player1.getValue()) 
        System.out.println("Player Two Wins The War"); 
       else 
        System.out.println("The War Is A Tie"); 

      } 
     } 
    } 

    public static void printHand(Card[] hand) { 

     for (int card = 0; card < hand.length; card++) 
      System.out.printf("%s", hand[card].toString()); 

     System.out.println(); 

    } 
} 

我的錯誤是如下:

----jGRASP exec: javac -g WarGame.java 

WarGame.java:31: error: int cannot be dereferenced 
if (player1.getValue() > player2.getValue()) 
    ^
WarGame.java:31: error: int cannot be dereferenced 
if (player1.getValue() > player2.getValue()) 
          ^
WarGame.java:35: error: int cannot be dereferenced 
else if (player2.getValue() > player1.getValue()) 
      ^
WarGame.java:35: error: int cannot be dereferenced 
else if (player2.getValue() > player1.getValue()) 
           ^
4 errors 

----jGRASP wedge2: exit code for process is 1. 
----jGRASP: operation complete. 

非常感謝您提供的任何幫助。

PLAYER1和player2是指每個球員給予每一輪

+1

+1首先嚐試..! – cowls 2013-03-11 17:47:04

+3

在主程序中從'player1'和'player2'中刪除'.getValue()'。這將擺脫你目前的錯誤。但是,當你嘗試比較未初始化的變量時你會遇到問題。 'player1'和'player2'究竟是指什麼? – jonhopkins 2013-03-11 17:47:37

+0

您應該使用適當的縮進格式來使代碼更容易閱讀 – cowls 2013-03-11 17:48:29

回答

0

我一半猜牌,但我不認爲你需要調用getValue()int小號

一個像

聲明
if (player1 > player2) 

是完全沒有問題,假設兩player1player2是整數

2

player1和player2是ints而不是Integers(這是一個Java類)。這意味着他們不是對象,也沒有方法。你可以直接將它們比作「Sam I Am」所說的。

您也可以施放它們作爲整數:

if((new Integer(player1)).compareTo(new Integer(player2)) > 0) 

但是,這是相當無用的,因爲你正在做的比較不需要任何的整數方法。

所以只需使用:

if (player1 > player2) 

您可以閱讀this topic更多地瞭解整數的自動裝箱。

0

您需要獲取hands中卡對象的值。您目前實際上沒有將任何內容分配給player1player2。爲了得到你需要調用的實際對象.getValue()卡的價值,就像int player1 = hands[0][0].getValue();

我更新了main功能演示應該怎麼看,還做了一些其他的變化,可能會幫助你以後。

public static void main(String[] args) { 

    Card[][] hands = new Card[2][1]; 
    Deck myDeck = new Deck(); 

    //reduced this to 26 iterations because two cards are dealt each iteration 
    for (int i = 0; i < 26; i++) { 
     System.out.printf("\n Round %s of The War \n", i); 

     //You really don't need to loop just once here... 
     //Simply assign the card to hands[player][0] since that's the only option 
     //for (int c = 0; c < 1; c++) 
      for (int player = 0; player < hands.length; player++) 
       hands[player][0] = myDeck.dealCard(); 

     for (int player = 0; player < hands.length; player++) { 
      System.out.printf("Player %d: ", player); 
      printHand(hands[player]); 
     } 

     int player1 = hands[0][0].getValue(); //get the value from the Card object 
     int player2 = hands[1][0].getValue(); 

     if (player1 > player2) 
      System.out.println("Player One Wins The War"); 
     else if (player2 > player1) 
      System.out.println("Player Two Wins The War"); 
     else 
      System.out.println("The War Is A Tie"); 

    } 
} 
+0

非常感謝,我現在明白了。 – user2157845 2013-03-11 23:48:48

+0

不客氣。很高興我能幫上忙 – jonhopkins 2013-03-12 01:14:15

1
// import needed classes and packages 
import java.util.Scanner; 
import java.text.NumberFormat; 
import java.io.IOException; 
import java.util.Locale; 
import java.text.DecimalFormat; 

public class Program2 
{public static void main(String[] args) throws IOException 
    { 
    //Declare Variables 
    //Creates the cards based on their suite 
    Card heartCard; 
    Card diamondCard; 
    Card spadeCard; 
    Card clubCard; 
    int countingPlays = 0; 


    Scanner keyboard = new Scanner(System.in); //Allows Input 

    //creates the cardPile array called DeckOfCards 
    CardPile deckOfCards = new CardPile(); 

    //Creates Player1's Card Pile 
    CardPile player1Pile = new CardPile(); 

    //Creates Player2's Card Pile 
    CardPile player2Pile = new CardPile(); 

    //Creates the cards to fill the array (1-14 of hearts/diamonds/spades/clubs). 
    for(int i = 2; i < 15; i++) 
    { 
     char heart = '\u0003'; 
     char diamond ='\u0004'; 
     char spade = '\u0005'; 
     char club = '\u0006'; 

     deckOfCards.add(heartCard = new Card(heart, i)); 
     deckOfCards.add(diamondCard = new Card(diamond, i)); 
     deckOfCards.add(spadeCard = new Card(spade, i)); 
     deckOfCards.add(clubCard = new Card(club, i)); 
    } 

    //prints out the deck of Cards 
    System.out.println("Deck Of Cards: " + deckOfCards); 

    //shuffles the cards 
    deckOfCards.shuffle(); 

    //Prints out the deck of cards after they are shuffled 
    System.out.println("Deck of Cards after shuffled: " + deckOfCards); 

    //Checking the size of the Deck 
    System.out.println("" + deckOfCards.size()); 

    //Takes the deckOfCards and splits them up into 2 piles for Player1 and Player2 
    for(int i = 0; i < 26; i++) 
    { 
     player1Pile.add(deckOfCards.getTopCard()); 
     player2Pile.add(deckOfCards.getTopCard()); 
    } 

    //Prints out the deck of Cards and then the player 1's pile and player 2's pile 

    System.out.println("Player 1's Cards: " + player1Pile); 
    System.out.println("Player 2's Cards: " + player2Pile); 

    //checking the size of each players Pile 


    //Prints the header for the game 
    System.out.println("Lets have a war!!!"); 


    //Testing tricky spot where the getTopCard removes a the topcard 
    /* 
    Card removedTopCard = player1Pile.getTopCard(); 
    System.out.println("Getting player1Pile: " + removedTopCard); 
    player1Pile.add(removedTopCard); 
    System.out.println("Player1Pile is " + player1Pile); 
    System.out.println("Player1Pile size is " +player1Pile.size()); 
    */ 

    //Starts the game of War 
    try 
    { //do while the sizes of the player piles are greater than 0. 
     do 
     { 
      //gets the top cards of each players Pile 
      Card player1RemovedTopCard = player1Pile.getTopCard(); 
      Card player2RemovedTopCard = player2Pile.getTopCard(); 

      //Compares the 2 cards to test which is bigger. If player 1's card is smaller than player 2 is the winner 
      if(player1RemovedTopCard.compareTo(player2RemovedTopCard) < player2RemovedTopCard.compareTo(player1RemovedTopCard)) 
      { 
       System.out.println("Player 1: " + player1RemovedTopCard + " Player 2: " + player2RemovedTopCard); 
       System.out.println("Player 2 is the Winner"); 
       player2Pile.add(player1RemovedTopCard); 
       player2Pile.add(player2RemovedTopCard); 
       System.out.println("Player 1 has: " + player1Pile.size() + " cards left."); 
       System.out.println("Player 2 has:" + player2Pile.size() + " cards left."); 
       System.out.println("\n"); 
       keyboard.nextLine(); 
      } 
      //Compares the 2 cards to test which is bigger. If player 2's card is smaller than player 1 is the winner. 
      else if(player1RemovedTopCard.compareTo(player2RemovedTopCard) > player2RemovedTopCard.compareTo(player1RemovedTopCard)) 
      { 
       System.out.println("Player 1: " + player1RemovedTopCard + " Player 2: " + player2RemovedTopCard); 
       System.out.println("Player 1 is the Winner"); 
       player1Pile.add(player1RemovedTopCard); 
       player1Pile.add(player2RemovedTopCard); 
       System.out.println("Player 1 has: " + player1Pile.size() + " cards left."); 
       System.out.println("Player 2 has:" + player2Pile.size() + " cards left."); 
       System.out.println("\n"); 
       keyboard.nextLine(); 
      } 
      //Else it is a war 
      else 
      { 
       System.out.println("Player 1: " + player1RemovedTopCard + " Player 2: " + player2RemovedTopCard); 
       System.out.println("WAR!!!!!!!"); 
       //War if the player has only 4 cards left. 
       if(player1Pile.size() == 1 || player2Pile.size() == 1) 
       { 
        Card player1RemovedTopCard2 = player1Pile.getTopCard(); 

        Card player2RemovedTopCard2 = player2Pile.getTopCard(); 
        System.out.println("Player1's 2nd card is: " + player1RemovedTopCard2 + " Player2's 2nd card is: " + player2RemovedTopCard2); 
        if(player1RemovedTopCard2.compareTo(player2RemovedTopCard2) > player2RemovedTopCard2.compareTo(player1RemovedTopCard2)) 
        { 
         System.out.println("Player 1 is the winner of the War! "); 
         player1Pile.add(player1RemovedTopCard); 
         player1Pile.add(player1RemovedTopCard2); 
         player1Pile.add(player2RemovedTopCard); 
         player1Pile.add(player2RemovedTopCard2); 
         System.out.println("Player 1 has: " + player1Pile.size() + " cards left."); 
         System.out.println("Player 2 has: " + player2Pile.size() + " cards left."); 
         System.out.println("\n"); 
         keyboard.nextLine(); 
        } 
        else if(player1RemovedTopCard2.compareTo(player2RemovedTopCard2) < player2RemovedTopCard2.compareTo(player1RemovedTopCard2)) 
        { 
         System.out.println("Player 2 is the winner of the War! "); 
         player2Pile.add(player1RemovedTopCard); 
         player2Pile.add(player1RemovedTopCard2); 
         player2Pile.add(player2RemovedTopCard); 
         player2Pile.add(player2RemovedTopCard2); 
         System.out.println("Player 1 has: " + player1Pile.size() + " cards left."); 
         System.out.println("Player 2 has: " + player2Pile.size() + " cards left."); 
         System.out.println("\n"); 
         keyboard.nextLine(); 
        } 
        else 
        { 
         if(player2Pile.size() == 0) 
         { 
          player1Pile.add(player2RemovedTopCard2); 
          player1Pile.add(player2RemovedTopCard); 
          player1Pile.add(player1RemovedTopCard2); 
          player1Pile.add(player1RemovedTopCard); 
         } 
         else 
         { 
          player2Pile.add(player2RemovedTopCard2); 
          player2Pile.add(player2RemovedTopCard); 
          player2Pile.add(player1RemovedTopCard2); 
          player2Pile.add(player1RemovedTopCard); 
         } 
        } 
       } 
       //War if the player has only 2 cards left. 
       else if(player1Pile.size() == 2 || player2Pile.size() == 2) 
       { 
        Card player1RemovedTopCard2 = player1Pile.getTopCard(); 
        Card player1RemovedTopCard3 = player1Pile.getTopCard(); 

        Card player2RemovedTopCard2 = player2Pile.getTopCard(); 
        Card player2RemovedTopCard3 = player2Pile.getTopCard(); 

        do 
        { 
         System.out.println("Player1's 3rd card is: " + player1RemovedTopCard3 + " Player2's 3rd card is: " + player2RemovedTopCard3); 
         if(player1RemovedTopCard3.compareTo(player2RemovedTopCard3) > player2RemovedTopCard3.compareTo(player1RemovedTopCard3)) 
         { 
          System.out.println("Player 1 is the winner of the War! "); 
          player1Pile.add(player1RemovedTopCard); 
          player1Pile.add(player1RemovedTopCard2); 
          player1Pile.add(player1RemovedTopCard3); 
          player1Pile.add(player2RemovedTopCard); 
          player1Pile.add(player2RemovedTopCard2); 
          player1Pile.add(player2RemovedTopCard3); 
          System.out.println("Player 1 has: " + player1Pile.size() + " cards left."); 
          System.out.println("Player 2 has: " + player2Pile.size() + " cards left."); 
          System.out.println("\n"); 
          keyboard.nextLine(); 
         } 
         else if(player1RemovedTopCard3.compareTo(player2RemovedTopCard3) < player2RemovedTopCard3.compareTo(player1RemovedTopCard3)) 
         { 
          System.out.println("Player 2 is the winner of the War! "); 
          player2Pile.add(player1RemovedTopCard); 
          player2Pile.add(player1RemovedTopCard2); 
          player2Pile.add(player1RemovedTopCard3); 
          player2Pile.add(player2RemovedTopCard); 
          player2Pile.add(player2RemovedTopCard2); 
          player2Pile.add(player2RemovedTopCard3); 
          System.out.println("Player 1 has: " + player1Pile.size() + " cards left."); 
          System.out.println("Player 2 has: " + player2Pile.size() + " cards left."); 
          System.out.println("\n"); 
          keyboard.nextLine(); 
         } 
        //Continues the war if the top card at the end of the war are still equal 
        }while(player1RemovedTopCard3.compareTo(player2RemovedTopCard3) == player2RemovedTopCard3.compareTo(player1RemovedTopCard3)); 
       } 
       //War if the player has only 3 cards left. 
       else if(player1Pile.size() == 3 || player2Pile.size() == 3) 
       { 
        Card player1RemovedTopCard2 = player1Pile.getTopCard(); 
        Card player1RemovedTopCard3 = player1Pile.getTopCard(); 
        Card player1RemovedTopCard4 = player1Pile.getTopCard(); 

        Card player2RemovedTopCard2 = player2Pile.getTopCard(); 
        Card player2RemovedTopCard3 = player2Pile.getTopCard(); 
        Card player2RemovedTopCard4 = player2Pile.getTopCard(); 

        do 
        { 
         System.out.println("Player1's fourth card is: " + player1RemovedTopCard4 + " Player2's fourth card is: " + player2RemovedTopCard4); 
         if(player1RemovedTopCard4.compareTo(player2RemovedTopCard4) > player2RemovedTopCard4.compareTo(player1RemovedTopCard4)) 
         { 
          System.out.println("Player 1 is the winner of the War! "); 
          player1Pile.add(player1RemovedTopCard); 
          player1Pile.add(player1RemovedTopCard2); 
          player1Pile.add(player1RemovedTopCard3); 
          player1Pile.add(player1RemovedTopCard4); 
          player1Pile.add(player2RemovedTopCard); 
          player1Pile.add(player2RemovedTopCard2); 
          player1Pile.add(player2RemovedTopCard3); 
          player1Pile.add(player2RemovedTopCard4); 
          System.out.println("Player 1 has: " + player1Pile.size() + " cards left."); 
          System.out.println("Player 2 has: " + player2Pile.size() + " cards left."); 
          System.out.println("\n"); 
          keyboard.nextLine(); 
         } 
         else if(player1RemovedTopCard4.compareTo(player2RemovedTopCard4) < player2RemovedTopCard4.compareTo(player1RemovedTopCard4)) 
         { 
          System.out.println("Player 2 is the winner of the War! "); 
          player2Pile.add(player1RemovedTopCard); 
          player2Pile.add(player1RemovedTopCard2); 
          player2Pile.add(player1RemovedTopCard3); 
          player2Pile.add(player1RemovedTopCard4); 
          player2Pile.add(player2RemovedTopCard); 
          player2Pile.add(player2RemovedTopCard2); 
          player2Pile.add(player2RemovedTopCard3); 
          player2Pile.add(player2RemovedTopCard4); 
          System.out.println("Player 1 has: " + player1Pile.size() + " cards left."); 
          System.out.println("Player 2 has: " + player2Pile.size() + " cards left."); 
          System.out.println("\n"); 
          keyboard.nextLine(); 
         } 
        //Continues the war if the top card at the end of the war are still equal 
        }while(player1RemovedTopCard4.compareTo(player2RemovedTopCard4) == player2RemovedTopCard4.compareTo(player1RemovedTopCard4)); 
       } 
       //war if player has more than 4 cards 
       else if(player1Pile.size() >= 4 || player2Pile.size() >= 4) 
       { 
        Card player1RemovedTopCard2 = player1Pile.getTopCard(); 
        Card player1RemovedTopCard3 = player1Pile.getTopCard(); 
        Card player1RemovedTopCard4 = player1Pile.getTopCard(); 
        Card player1RemovedTopCard5 = player1Pile.getTopCard(); 

        Card player2RemovedTopCard2 = player2Pile.getTopCard(); 
        Card player2RemovedTopCard3 = player2Pile.getTopCard(); 
        Card player2RemovedTopCard4 = player2Pile.getTopCard(); 
        Card player2RemovedTopCard5 = player2Pile.getTopCard(); 
        do 
        { 
         System.out.println("Player1's 5th card is: " + player1RemovedTopCard5 + " Player2's 5th card is: " + player2RemovedTopCard5); 
         if(player1RemovedTopCard5.compareTo(player2RemovedTopCard5) > player2RemovedTopCard5.compareTo(player1RemovedTopCard5)) 
         { 
          System.out.println("Player 1 is the winner of the War! "); 
          player1Pile.add(player1RemovedTopCard); 
          player1Pile.add(player1RemovedTopCard2); 
          player1Pile.add(player1RemovedTopCard3); 
          player1Pile.add(player1RemovedTopCard4); 
          player1Pile.add(player1RemovedTopCard5); 
          player1Pile.add(player2RemovedTopCard); 
          player1Pile.add(player2RemovedTopCard2); 
          player1Pile.add(player2RemovedTopCard3); 
          player1Pile.add(player2RemovedTopCard4); 
          player1Pile.add(player2RemovedTopCard5); 
          System.out.println("Player 1 has: " + player1Pile.size() + " cards left."); 
          System.out.println("Player 2 has: " + player2Pile.size() + " cards left."); 
          System.out.println("\n"); 
          keyboard.nextLine(); 
         } 
         else if(player1RemovedTopCard5.compareTo(player2RemovedTopCard5) < player2RemovedTopCard5.compareTo(player1RemovedTopCard5)) 
         { 
          System.out.println("Player 2 is the winner of the War! "); 
          player2Pile.add(player1RemovedTopCard); 
          player2Pile.add(player1RemovedTopCard2); 
          player2Pile.add(player1RemovedTopCard3); 
          player2Pile.add(player1RemovedTopCard4); 
          player2Pile.add(player1RemovedTopCard5); 
          player2Pile.add(player2RemovedTopCard); 
          player2Pile.add(player2RemovedTopCard2); 
          player2Pile.add(player2RemovedTopCard3); 
          player2Pile.add(player2RemovedTopCard4); 
          player2Pile.add(player1RemovedTopCard5); 
          System.out.println("Player 1 has: " + player1Pile.size() + " cards left."); 
          System.out.println("Player 2 has: " + player2Pile.size() + " cards left."); 
          System.out.println("\n"); 
          keyboard.nextLine(); 
         } 
        //Continues the war if the top card at the end of the war are still equal 
        }while(player1RemovedTopCard5.compareTo(player2RemovedTopCard5) == player2RemovedTopCard5.compareTo(player1RemovedTopCard5)); 
       } 
      } 
      //Adds to the plays that keep track of how many plays have been made 
      countingPlays++; 
      //. If there are 10 plays it shuffles and prints out a message that the cards have been shuffled. 
      if(countingPlays >= 10) 
      { 
       player1Pile.shuffle(); 
       player2Pile.shuffle(); 
       System.out.println("Cards Shuffled"); 
       //resets the counter to 0 
       countingPlays = 0; 
      } 
     //Continues the game of war while the players piles are bigger than 0 
     }while(player1Pile.size() > 0 || player2Pile.size() > 0); 
    } 

    //Catches the Array 0 error and prints out who is the winner based on who has zero cards. 
    catch (IndexOutOfBoundsException theException) //tries to catch this type... 
     { 
      if(player1Pile.size() == 0) 
      { 
       System.out.println("Winner is Player 2"); 
      } 
      else 
      System.out.println("Winner is Player 1"); 

     } 

    } //end of main 
}//end of class