2013-01-12 4 views
-2

카드 게임 하트에 가까운 Java 카드 게임을 개발 중입니다. 구조가 많이 있지만 지금은 붙어있어 인쇄 할 수 없습니다. 그것은 다양한 플레이어를 가지고 있고 - 각 플레이어에게 5 장의 카드를 처리해야합니다. - 각 플레이어가받은 카드를 보여줍니다. 'Session.dealHands'방법에 문제가 있다고 생각합니다. 너희들도 도울 수 있길 바래.카드 게임에서 카드를 인쇄 할 수 없습니다.

세션 클래스

import java.util.ArrayList; 
import java.util.Collections; 

public class Session { 

    // Variables 
    static int numberOfPlayers = PlayGame.generateRandom(2, 10); 
    Player player[] = new Player[numberOfPlayers]; 
    static int numberOfRounds; 
    static int leadPlayer = 1; 

    // Initializes the class Deck and assign it to DeckOfCards 
    static Deck deckOfCards = new Deck(); 

    public static void initializeSession() { 
     // initializes the deck from Deck class 
     Deck.createDeck(); 
     // Creates an array of players 
     Player player[] = new Player[numberOfPlayers]; 

     for (int i = 0; i < Session.numberOfPlayers; i++) { 
      player[i] = new Player(i); 
     } 
     // Makes the possible amount of rounds determined by numberOfPlayers 
    maxRounds(); 
    whoIsLeadPlayer(); 


     System.out.println("Welcome - The Game has Startet"); 
     System.out.println("\n" + "The number of Players " + numberOfPlayers); 
     System.out.println("Number of rounds is: " + numberOfRounds); 
     System.out.println("\n" + "The leadPlayer is: " + leadPlayer); 

     //playSession(player); 
    } 
public static void whoIsLeadPlayer(){ 
    //for(leadPlayer = 1; leadPlayer < numberOfPlayers; leadPlayer++){ 
     //Player pls = new Player(); 

    //} 


} 

    private static void maxRounds() { 
      if (numberOfPlayers == 2) { 
       numberOfRounds = 5; 
      } else if (numberOfPlayers == 3) { 
       numberOfRounds = 3; 
      } else if (numberOfPlayers < 6) { 
       numberOfRounds = 2; 
      } else { 
       numberOfRounds = 1; 
      }  
    } 

    public static void playSession(Player player[]) { 
     for (int i = 0; i < Session.numberOfRounds; i++) { 

      dealHands(player); 
      playRound(player); 

     } 
    } 

    // Should be able to deal a Hand 
    public static void dealHands(Player player[]) { 
    for (int i = 0; i < 4; i++){ 
     Card currentCard = deckOfCards.getCard(PlayGame.generateRandom(0, 52)); 
     player[i].hand.add(new Card(Card.rank, Card.suit)); 
     //System.out.println(player[i].hand); 
    } 



     /*for (int i = 0; i <= 4; i++) { 
      Card currentCard = deckOfCards.getCard(PlayGame.generateRandom(0, deckOfCards.cards.size())); 
      player[i].hand.add(new Card(currentCard.getRank(), Card.getSuit())); 
     }*/ 

    } 

    public static void playRound(Player player[]) { 
     for (int i = 0; i < Session.numberOfPlayers; i++) { 
      playTurn(player); 
     } 
    } 

    public static void playTurn(Player player[]) { 
     // placeCard(); 
    } 

    private static void placeCard() { 

    } 

    public static void printCards(Player player[]) { 
     // Card card; 
     for (int i = 0; i <= Session.numberOfPlayers; i++) { 
      for (int j = 0; j <= player[i].hand.size(); j++) { 
       Card card = player[i].hand.get(j); 
       System.out.println("player" + i + "card " + card.getSuit() + "" 
         + card.getRank()); 

      } 
     } 
    } 
} 

데크 클래스

import java.util.ArrayList; 

public class Deck { 
    // Create Arraylist to store deck of cards 
    static ArrayList<Card> cards = new ArrayList<Card>(); 

    // Adds numbers to the ArrayList 
    public static void createDeck() { 
     for (int suit = 0; suit < 3; suit++) { 
      for (int rank = 0; rank < 12; rank++) { 
       cards.add(new Card(suit, rank)); 
      } 
     } 
    } 

    // Get Card Method to get a card from the Card class 
    public Card getCard(int iD) { 
     //Card card = ID; 
     Card gC = new Card(Card.getRank(), Card.getSuit()); 
     cards.remove(iD); 
     return gC; 
    } 
} 

카드 클래스

import java.util.*; 

public class Card { 

    static int rank; 
    static int suit; 

    public static int getRank() { 
     return rank; 
    } 

    public void setRank(int rank) { 
     this.rank = rank; 
    } 

    public static int getSuit() { 
     return suit; 
    } 

    public void setSuit(int suit) { 
     this.suit = suit; 
    } 

    public Card(int rank, int suit) { 
     this.rank = rank; 
     this.suit = suit; 
    } 
} 

플레이어 클래스

import java.util.ArrayList; 
import java.util.Collections; 

public class Player { 

    boolean leadPlayer; 
    int score; 
    ArrayList<Card> hand = new ArrayList<Card>(); 

    // Getters and Setter methods to be implemented later 
    public int getScore() { 
     return score; 
    } 

    public void setScore(int score) { 
     this.score = score; 
    } 

    public int getPlayerID() { 
     return playerID; 
    } 

    public void setPlayerID(int playerID) { 
     playerID = 1; 
     this.playerID = playerID; 
    } 

    public ArrayList<Card> getHand() { 
     return hand; 
    } 

    public void setHand(ArrayList<Card> hand) { 
     this.hand = hand; 
    } 

    public boolean isLeadPlayer() { 
     return leadPlayer; 
    } 

    public void setLeadPlayer(boolean leadPlayer) { 
     Session.leadPlayer++; 
     this.leadPlayer = leadPlayer; 
    } 

    int playerID; 

    // Constructor to call when using a Player 
    public Player(int playerID) { 
     this.playerID = playerID; 
    } 
} 

Main 클래스

import java.util.Random; 

public class PlayGame { 

    // Starts the program 
    public static void main(String[] args) { 

     Session.initializeSession(); 

    } 

    public static int generateRandom(int min, int max) { 
     Random r = new Random(); 
     int random = r.nextInt(max - min) + min; 
     return random; 
    } 
} 
+0

전체 프로젝트가 아니라 [SSCCE] (http://sscce.org/)를 게시하십시오. –

+0

코드가 잘못 작동하는 방식을 알려주는 것이 좋습니다. 당신에게 예외가 생기고 있습니까? 모든 카드는 동일한 카드입니까? –

답변

3

그 정적 메소드와 필드를 제거하십시오! 그들이 클래스가 아니라 인스턴스의 속성이 될 것이기 때문에 어떤 카드가 자신의 양복과 순위 필드가 없습니다로

public class Card { 

    static int rank; // ??????? 
    static int suit; // ??????? 

    public static int getRank() { // ??????? 
     return rank; 
    } 

    public void setRank(int rank) { 
     this.rank = rank; 
    } 

    public static int getSuit() { // ??????? 
     return suit; 
    } 

이는 이해되지 않는다. 그들 모두를 비 정적 인 인스턴스 필드와 메소드로 만듭니다.

실제로 위의 코드에서 main 메소드를 제외하고는 정적이 아니어야합니다.

편집 :
또한,이 변경해야합니다 : 당신은 정말 논리적하지 않는 클래스 카드의 계급과 소송을 얻기 위해 노력하고

player[i].hand.add(new Card(Card.rank, Card.suit)); 

감각. 이걸로 무엇을 이루려고합니까?

+0

좋습니다. 그렇다면 세션 클래스에서 어떻게 구현할 수 있습니까? 그것은 정적을 제거하면 불평. :) – user1938165

+0

@ user1938165 : 잘못된 것을 고치고 있습니다. 정적을 사용하라는 말은 아닙니다. 정적이 아닌 필드에 정적으로 액세스 할 수 없다는 것입니다. 해결 방법은 정적 인 방법으로 액세스하지 않는 것입니다. Card 클래스가 아닌 Card 인스턴스 (객체)를 통해서만 액세스하십시오. 위의 편집 편집을 참조하십시오. –