2012-03-19 14 views
0

だから私はカードゲームの戦争を実装する必要があります。私はそれがデッキ(arraylist)の1つのサイズにぶつかると、私のループ・ストップを除いて、すべてうまくいっています。私がしたいことは、デッキの1つが空になるまでループすることです。そして、私はそれをどのようにすることができるのか指針?私のコードは短縮される可能性があると私は理解していますが、今はそのことについて心配する必要はありません。ここに私のコードです:Javaカードゲーム。 (戦争のゲーム)

import java.util.*; 
import java.lang.*; 

public class lab9_11{ 
    public static void main(String args[]){ 

     System.out.printf("\n"); 
     System.out.printf("\n"); 
     System.out.printf("\\  //\\ |\\ |\n"); 
     System.out.printf(" \\/\\//__\\ |/ |\n"); 
     System.out.printf(" \\/ \\// \\ |\\ o\n"); 
     System.out.printf("\n"); 
     System.out.printf("Lets play a game of war.\n"); 
     System.out.printf("Type 1 to begin or 0 to exit.\n"); 
     Scanner keyboard = new Scanner(System.in); 

     int initial = keyboard.nextInt(); 

     if (initial > 1){ 
      System.out.printf("You can't read, so you shouldn't play this.\n"); 
      System.exit(-1); 
     } 

     if (initial == 0){ 
      System.exit(-1); 
     } 

     else { 
      System.out.printf("Okay, lets play!\n"); 
      System.out.printf("\n"); 
     } 
     System.out.printf("Here is a deck of 52 cards -> []:\n"); 

     int deck[] = new int[52]; 

     deck[0] = 2; //0-12 = hearts 
     deck[1] = 3; 
     deck[2] = 4; 
     deck[3] = 5; 
     deck[4] = 6; 
     deck[5] = 7; 
     deck[6] = 8; 
     deck[7] = 9; 
     deck[8] = 10; 
     deck[9] = 11; //jack of hearts 
     deck[10] = 12; //queen of hearts 
     deck[11] = 13; //king of hearts 
     deck[12] = 14; //ace of hearts 

     deck[13] = 2; //13-25 = spades 
     deck[14] = 3; 
     deck[15] = 4; 
     deck[16] = 5; 
     deck[17] = 6; 
     deck[18] = 7; 
     deck[19] = 8; 
     deck[20] = 9; 
     deck[21] = 10; 
     deck[22] = 11; //jack of spades 
     deck[23] = 12; //queen of spades 
     deck[24] = 13; //king of spades 
     deck[25] = 14; //ace of spades 

     deck[26] = 2; //0-12 = diamonds 
     deck[27] = 3; 
     deck[28] = 4; 
     deck[29] = 5; 
     deck[30] = 6; 
     deck[31] = 7; 
     deck[32] = 8; 
     deck[33] = 9; 
     deck[34] = 10; 
     deck[35] = 11; //jack of diamonds 
     deck[36] = 12; //queen of diamonds 
     deck[37] = 13; //king of diamonds 
     deck[38] = 14; //ace of diamonds 

     deck[39] = 2; //39-51 = clubs 
     deck[40] = 3; 
     deck[41] = 4; 
     deck[42] = 5; 
     deck[43] = 6; 
     deck[44] = 7; 
     deck[45] = 8; 
     deck[46] = 9; 
     deck[47] = 10; 
     deck[48] = 11; //jack of clubs 
     deck[49] = 12; //queen of clubs 
     deck[50] = 13; //king of clubs 
     deck[51] = 14; //ace of clubs 

     System.out.printf("First, lets shuffle it into 2 decks of 26.\n"); 

     Random rangen = new Random(); //Random number generator 
     for (int i=0; i < deck.length; i++) { //shuffles the deck 
      int randomPosition = rangen.nextInt(deck.length); 
      int temp = deck[i]; 
      deck[i] = deck[randomPosition]; 
      deck[randomPosition] = temp; 
     } 

     int[] player1 = new int[26]; //initializes 1st player's deck 
     int[] player2 = new int[26]; //initializes 2nd player's deck 

     System.arraycopy(deck, 0, player1, 0, player1.length); //takes 26 cards and puts into player1's deck. 
     System.arraycopy(deck, player1.length, player2, 0, player2.length);//takes the other 26 and puts into player2's deck. 
     System.out.printf(".\n"); 
     System.out.printf(".\n"); 
     System.out.printf("Here's your deck. --> [?]\n"); 
     System.out.printf(".\n"); 
     System.out.printf(".\n"); 
     System.out.printf("Here's your opponent's deck. --> [?]\n"); 
     System.out.printf(".\n"); 
     System.out.printf(".\n"); 
     System.out.printf("Okay, lets begin!\n"); 
     System.out.printf("\n"); 
     System.out.printf("\n"); 
     System.out.printf("Type 1 to flip your cards.\n"); 
     System.out.printf("Which ever player holds all the cards by the end wins.\n"); 
     int q = keyboard.nextInt(); 
     if (q == 1){ 
      System.out.printf("Lets see...\n"); 
     } 
     if (q != 1){ 
      System.out.printf("That wasn't one... type the number '1' or else the game will end because you are stupid.\n"); 
      int q2 = keyboard.nextInt(); 
       if (q != 1) { 
       System.exit(-1); 
      }  
     } 
     List<Integer> player1List = new ArrayList<Integer>();//converts array1 into arraylist1 
     for (int i = 0; i < player1.length; i++) 
     { 
      player1List.add(player1[i]); 
     } 
     System.out.println(player1List); 
     List<Integer> player2List = new ArrayList<Integer>();//converts array2 into arraylist2 
     for (int i = 0; i < player2.length; i++) 
     { 
      player2List.add(player2[i]); 
     } 
     System.out.println(player2List); 


     for (int i = 0; i < player1List.size(); i++){ 
      if (player1List.get(i) < player2List.get(i)){ 
       System.out.printf("Player 1: %d\n", player1List.get(i)); 
       System.out.printf("Player 2: %d\n", player2List.get(i)); 
       System.out.printf("Player 2 wins round!\n"); 
       player2List.add(player1List.get(i)); 
       player1List.remove(player1List.get(i)); 
      } 
      if (player1List.get(i) < player2List.get(i)){ 
       System.out.printf("Player 1: %d\n", player1List.get(i)); 
       System.out.printf("Player 2: %d\n", player2List.get(i)); 
       System.out.printf("Player 1 wins round!\n"); 
       player1List.add(player2List.get(i)); 
       player2List.remove(player2List.get(i)); 
      } 
      if (player1List.get(i) == player2List.get(i)){ 
       System.out.printf("Player 1: %d\n", player1List.get(i)); 
       System.out.printf("Player 2: %d\n", player2List.get(i)); 
       System.out.printf("It's a tie, cards return to your deck.\n"); 
      } 
     } 
     if (player1List.isEmpty() || player2List.isEmpty()){ 
      if (player1List.isEmpty()) { 
       System.out.printf("Player 2 WINS THE GAME!!!!!!\n"); 
      } 
      if (player2List.isEmpty()) { 
       System.out.printf("Player 1 WINS THE GAME!!!!!!\n"); 
      } 
     } 


     System.out.println(player1List); 

     System.out.println(player2List); 


     /* 
     System.out.printf("test.\n"); 
     System.out.printf("test1111.\n"); 
     for(int i = 0; i < player1.length; i++){ 
      System.out.println(player1[i]); 
     } 
     System.out.printf("test.\n"); 
     System.out.printf("test222.\n"); 
     for(int i = 0; i < player2.length; i++){ 
      System.out.println(player2[i]); 
     } 
     System.out.printf("test.\n"); 
     System.out.printf("test11.\n"); 
     for(int i = 0; i < win1.length; i++){ 
      System.out.println(win1[i]); 
     } 
     System.out.printf("test.\n"); 
     System.out.printf("test22.\n"); 
     for(int i = 0; i < win2.length; i++){ 
      System.out.println(win2[i]); 
     } 
     */ 

     System.out.printf("\n"); 
     System.out.printf("\n"); 
    } 
} 

私のforループは絞り込まれています。私はそれが必要なので、arraylistsの1つが空になるまでループします。

+1

これは宿題のように見えるので宿題タグを追加しました。そうでない場合は、タグを削除してください。 –

+0

醜いコード、より多くのメソッドに分解してください。 –

+0

私は知っている、これはプログラムのためのちょうど私の基地です。クリーンアップは後になります。 –

答えて

0

あなたが経験している問題は、反復処理中のArrayListを変更したことによるものだと思います。

例えば、上記のコードで

for (int i = 0; i < player1List.size(); i++){ 

    player1List.remove(i); 

} 

、ループに入ると、i0に設定され、player1List.size()は2を返す - そうループに入ります。 このループ中に、要素がArrayListから削除され、ループの2番目の反復を確認すると、player1List.size()は1を返します(要素が削除されているため)、ループチェックに失敗します。もう一度回ります。

反復処理中のリストを変更する必要がない方法を見つける必要があります。 (おそらくclone()それ?それとも一時的な配列に要素をコピー?)

HTH

1

はあなたの片側(提供)のカードを配置する必要があるとして、私は、あなたのデッキのためのQueueを使用することをお勧めしデッキ(下部)と(このゲームに関するWikipediaのエントリーから理解できる限り)上部からカード(ポーリング)を検索します。 A LinkedListは、Queueの優れた実装です。コードはこのような何かに行くことができます:// 1つのカウンターあなたと

while(!deck1.isEmpty() && !deck2.isEmpty()) { 
    int card1 = deck1.poll(); 
    int card2 = deck2.poll(); 

    if(card1 < card2) { 
     deck2.offer(card2); 
     deck2.offer(card1); 
    } 

    if(card2 < card1) { 
     deck1.offer(card1); 
     deck1.offer(card2); 
    } 

    if(card1 == card2) { 
     deck1.offer(card1); 
     deck2.offer(card2); 
    } 
} 
0

をちょっとあなたは(;;私は< player1List.size()は、i ++はi = 0をint型)2つのカウンター、代わりのための1 を使用する必要がありますどのカードが終了したかは予測できません!以下のための (int型I = 0、J = 0;私< player1List.size()& & J < player2List.size();私は++、J ++)を別の間違いがあるこの

のように//:もし(player1List.get (i)< player2List.get(i))//条件for forループ

関連する問題