Итак, когда я запускаю свою программу, примерно каждый раз в 4 раза она просто начнет бесконечно зацикливаться. В других случаях он работает нормально. Обратите внимание, что моя военная игра не является технически абсолютно правильной. Я не совсем уверен, как хранить карты, которые игроки выигрывают в своих отдельных колодах, а затем перетасовывать их обратно, как только у них заканчиваются карты. И мой метод для дуэли, вероятно, не самый лучший. Это очень долго. В настоящее время мне нужно исправить эту проблему с циклом.Бесконечная петля в карточной игре «Война» - Java
О, я также использую только 24 карты, и используются только 5,6,7,8,9 и 10 из каждого костюма.
Главная
import java.util.Random;
public class Main {
static Player player1 = new Player("player1");
static Player player2 = new Player("player2");
static Card[] deck = {new Card("Hearts", 5), new Card("Hearts", 6), new Card("Hearts", 7), new Card("Hearts", 8), new Card("Hearts", 9), new Card("Hearts", 10),
new Card("Diamonds", 5), new Card("Diamonds", 6), new Card("Diamonds", 7), new Card("Diamonds", 8), new Card("Diamonds", 9), new Card("Diamonds", 10),
new Card("Spades", 5), new Card("Spades", 6), new Card("Spades", 7), new Card("Spades", 8), new Card("Spades", 9), new Card("Spades", 10),
new Card("Clubs", 5), new Card("Clubs", 6), new Card("Clubs", 7), new Card("Clubs", 8), new Card("Clubs", 9), new Card("Clubs", 10)
};
public static void main(String args[]){
shuffleArray(deck);
dealDeck();
int i=0;
while (i<1){
printCard();
if(player1.cards.size()>0 && player2.cards.size()>0){
Duel();
}
else{
if(player1.numCards>player2.numCards){
System.out.println("Player 1 has won.");
i++;
}
else if(player2.numCards>player1.numCards){
System.out.println("Player 2 has won.");
i++;
}
duelsWon();
totalCompares();
}
}
}
private static void shuffleArray(Card[] array)
{
int index;
Card temp;
Random random = new Random();
for (int i = array.length - 1; i > 0; i--)
{
index = random.nextInt(i + 1);
temp = array[index];
array[index] = array[i];
array[i] = temp;
}
}
public static void dealDeck(){
for(int i=0;i<24;i=i+2){
player1.dealCard(deck[i]);
player2.dealCard(deck[i+1]);
}
}
public static void duelsWon(){
System.out.printf("%-20s %-20s\n", player1.name+"'s duels won", player2.name+"'s duels won");
System.out.printf("%-20s %-20s\n", player1.duelsWon, player2.duelsWon);
}
public static void totalCompares(){
System.out.printf("%-10s\n", "Total Compares");
System.out.printf("%-10s\n", player1.totalCompares+player2.totalCompares);
}
public static void printCard(){
System.out.printf("%-20s %-20s\n", player1.name, player2.name);
for(int i = 0;i<24;i++){
System.out.printf("%-20s %-20s\n", player1.getCard(i), player2.getCard(i));
} System.out.println();
}
public static void Duel(){
Card p1 = player1.drawCard();
Card p2 = player2.drawCard();
System.out.println(p1);
System.out.println(p2);
if(p1.compareTo(p2)>0){
player1.dealCard(p1);
player1.dealCard(p2);
player1.duelsWon++;
player1.totalCompares++;
}
else if(p2.compareTo(p1)>0){
player2.dealCard(p1);
player2.dealCard(p2);
player2.duelsWon++;
player2.totalCompares++;
}
else{
if(player1.cards.size()>=3 && player2.cards.size()>3){
int i=0;
while(i<1){
Card p1C1 = player1.drawCard();
Card p1C2 = player1.drawCard();
Card p1C3 = player1.drawCard();
Card p2C1 = player2.drawCard();
Card p2C2 = player2.drawCard();
Card p2C3 = player2.drawCard();
if(p1C3.compareTo(p2C3)>0){
player1.dealCard(p1);
player1.dealCard(p2);
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p1C3);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
player1.dealCard(p2C3);
player1.duelsWon++;
player1.totalCompares++;
i++;
}
else if(p2C3.compareTo(p1C3)>0){
player2.dealCard(p1);
player2.dealCard(p2);
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p1C3);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
player2.dealCard(p2C3);
player2.duelsWon++;
player2.totalCompares++;
i++;
}
else{
if(p1C2.compareTo(p2C2)>0){
player1.dealCard(p1);
player1.dealCard(p2);
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p1C3);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
player1.dealCard(p2C3);
player1.duelsWon++;
player1.totalCompares++;
i++;
}
else if(p2C2.compareTo(p1C2)>0){
player2.dealCard(p1);
player2.dealCard(p2);
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p1C3);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
player2.dealCard(p2C3);
player2.duelsWon++;
player2.totalCompares++;
i++;
}
else{
if(p1C1.compareTo(p2C1)>0){
player1.dealCard(p1);
player1.dealCard(p2);
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p1C3);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
player1.dealCard(p2C3);
player1.duelsWon++;
player1.totalCompares++;
i++;
}
else if(p2C1.compareTo(p1C1)>0){
player2.dealCard(p1);
player2.dealCard(p2);
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p1C3);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
player2.dealCard(p2C3);
player2.duelsWon++;
player2.totalCompares++;
i++;
}
else{
}
}
}
}
}
else{
if(player2.cards.size()==3){
Card p1C1 = player1.drawCard();
Card p1C2 = player1.drawCard();
Card p1C3 = player1.drawCard();
Card p2C1 = player2.drawCard();
Card p2C2 = player2.drawCard();
Card p2C3 = player2.drawCard();
if(p1C3.compareTo(p2C3)>0){
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p1C3);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
player1.dealCard(p2C3);
}
else if(p2C3.compareTo(p2C3)>0){
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p1C3);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
player2.dealCard(p2C3);
}
else{
if(p1C2.compareTo(p2C2)>0){
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p1C3);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
player1.dealCard(p2C3);
}
else if(p2C2.compareTo(p1C2)>0){
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p1C3);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
player2.dealCard(p2C3);
}
else{
if(p1C1.compareTo(p2C1)>0){
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p1C3);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
player1.dealCard(p2C3);
}
else if(p2C1.compareTo(p1C1)>0){
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p1C3);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
player2.dealCard(p2C3);
}
else{
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p1C3);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
player1.dealCard(p2C3);
}
}
}
}
else if(player1.cards.size()==3){
Card p1C1 = player1.drawCard();
Card p1C2 = player1.drawCard();
Card p1C3 = player1.drawCard();
Card p2C1 = player2.drawCard();
Card p2C2 = player2.drawCard();
Card p2C3 = player2.drawCard();
if(p1C3.compareTo(p2C3)>0){
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p1C3);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
player1.dealCard(p2C3);
}
else if(p2C3.compareTo(p2C3)>0){
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p1C3);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
player2.dealCard(p2C3);
}
else{
if(p1C2.compareTo(p2C2)>0){
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p1C3);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
player1.dealCard(p2C3);
}
else if(p2C2.compareTo(p1C1)>0){
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p1C3);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
player2.dealCard(p2C3);
}
else{
if(p1C1.compareTo(p2C1)>0){
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p1C3);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
player1.dealCard(p2C3);
}
else if(p2C1.compareTo(p1C1)>0){
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p1C3);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
player2.dealCard(p2C3);
}
else{
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p1C3);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
player2.dealCard(p2C3);
}
}
}
}
else if(player2.cards.size()==2){
Card p1C1 = player1.drawCard();
Card p1C2 = player1.drawCard();
Card p2C1 = player2.drawCard();
Card p2C2 = player2.drawCard();
if(p1C2.compareTo(p2C2)>0){
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
}
else if(p2C2.compareTo(p1C2)>0){
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
}
else{
if(p1C1.compareTo(p2C1)>0){
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
}
else if(p2C1.compareTo(p1C1)>0){
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
}
else{
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
}
}
}
else if(player1.cards.size()==2){
Card p1C1 = player1.drawCard();
Card p1C2 = player1.drawCard();
Card p2C1 = player2.drawCard();
Card p2C2 = player2.drawCard();
if(p1C2.compareTo(p2C2)>0){
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
}
else if(p2C2.compareTo(p1C2)>0){
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
}
else{
if(p1C1.compareTo(p2C1)>0){
player1.dealCard(p1C1);
player1.dealCard(p1C2);
player1.dealCard(p2C1);
player1.dealCard(p2C2);
}
else if(p2C1.compareTo(p1C1)>0){
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
}
else{
player2.dealCard(p1C1);
player2.dealCard(p1C2);
player2.dealCard(p2C1);
player2.dealCard(p2C2);
}
}
}
else if(player2.cards.size()==1){
Card p1C1 = player1.drawCard();
Card p2C1 = player2.drawCard();
if(p1C1.compareTo(p2C1)>0){
player1.dealCard(p1C1);
player1.dealCard(p2C1);
}
else if(p2C1.compareTo(p1C1)>0){
player2.dealCard(p1C1);
player2.dealCard(p2C1);
}
else{
player1.dealCard(p1C1);
player1.dealCard(p2C1);
}
}
else if(player1.cards.size()==1){
Card p1C1 = player1.drawCard();
Card p2C1 = player2.drawCard();
if(p1C1.compareTo(p2C1)>0){
player1.dealCard(p1C1);
player1.dealCard(p2C1);
}
else if(p2C1.compareTo(p1C1)>0){
player2.dealCard(p1C1);
player2.dealCard(p2C1);
}
else{
player2.dealCard(p1C1);
player2.dealCard(p2C1);
}
}
}
}
}
}
Игрок
import java.util.ArrayList;
public class Player {
public ArrayList<Card> cards=new ArrayList<Card>();
public int numCards;
public int topOfDeck;
public String name;
public int duelsWon;
public int totalCompares;
public Player(String name){
this.name=name;
numCards=0;
topOfDeck = 0;
duelsWon = 0;
totalCompares = 0;
}
public void dealCard(Card newCard){
cards.add(newCard);
numCards++;
}
public String getCard(int n){
if(n < cards.size()) {
return cards.get(n).toString();
}else{
return "\\";
}
}
public Card drawCard(){
Card c = cards.remove(0);
topOfDeck++;
topOfDeck = topOfDeck % 24;
return c;
}
}
Card
public class Card implements Comparable<Card> {
private String suit;
private int number;
public Card(String suit, int number){
this.suit = suit;
this.number = number;
}
public String getSuit(){
return suit;
}
public int getNumber(){
return number;
}
@Override
public int compareTo(Card otherCard){
if (this.number>otherCard.getNumber()){
return 1;
}else if(otherCard.getNumber()>this.number){
return -1;
}else{
return 0;
}
}
@Override
public String toString(){
return number+" of "+suit;
}
}
Вы смогли определить, какой цикл вызывает бесконечный цикл? Например, вы пытались добавить отладку 'System.out.print (" loop1 ")' в любую из циклов? По крайней мере, у нас есть идея, какой из циклов вы застреваете, поскольку мы будем регистрировать цикл проблем. – MKreegs
У меня нет, но я попробую следующее. Я собираюсь уйти, но когда я вернусь, я сделаю это. Благодарю. – Aero
Попробуйте указать [MCVE (минимальный, полный и проверенный пример)] (http://stackoverflow.com/help/mcve). –