Не удается распечатать карты в карточной игре
Я разрабатываю Java-карточную игру, которая близка сердцу карточной игры. У меня есть большая часть структуры, но теперь я застрял, и я не могу заставить это напечатать. У него разное количество игроков и - мне нужно раздать по пять карт каждому игроку - чтобы показать, какие карты получил каждый игрок. Я считаю, что есть проблема в методе 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;
}
}
Основной класс
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;
}
}
1 ответ
Пожалуйста, избавьтесь от этих статических методов и полей!
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;
}
Это не имеет смысла, поскольку ни одна карта не будет иметь своего собственного поля масти и ранга, поскольку они будут свойствами класса, а не экземпляра. Сделайте их все нестатическими полями и методами экземпляра.
На самом деле, скорее всего, ничего в вашем коде выше не должно быть статическим, кроме основного метода.
Редактировать:
Кроме того, это должно быть изменено:
player[i].hand.add(new Card(Card.rank, Card.suit));
Вы пытаетесь получить ранг и масть классовой карты, которая на самом деле не имеет логического смысла. Чего вы пытаетесь достичь с этим?