前提・実現したいこと
Javaで下記の問題でブラックジャックを作成しています。どうしてもエラーの解決方法が分からず、詰まってしまいました。何度も質問を投稿してしまい申し訳ありませんが、ご教授いただけたら幸いでございます。
【問題】
トランプゲームのBlackJackを作成します。
今回作成するBlackJackは、以下の条件を満たしていればOKです。
・トランプのマークは意識しなくても良いです。1-13×4の52枚。
・チップの概念は不要です。
・1は1と11で計算可能ですが、1に固定してもOKです。
・全自動でOKです。Hitの判断を手動でさせる必要はありません。
・全てのメソッドにアクセス修飾子publicをつけてください。
・全てのフィールドにアクセス修飾子protectedをつけてください。
■ Humanという抽象クラスを作成し、以下を実装してください。
openというabstractな公開メソッドを用意してください。
setCardというArrayListを引数とした、abstractな公開メソッドを用意してください。
checkSumというabstractな公開メソッドを用意してください。
myCardsというArrayListの変数を用意してください。
■ Humanを継承したDealerクラスを実装してください。
cardsというArrayListの変数を用意し、初期処理でこのcardsに全てのトランプを持たせてください。また、処理の最後にcardsの要素をシャッフルしてください
dealという公開メソッドを用意し、cardsから2枚のカードを取得し、ArrayList型の戻り値にしてください。
hitという公開メソッドを用意し、cardsから1枚のカードを取得し、ArrayList型の戻り値にしてください。
■ Humanを継承したUserクラスを実装してください。
■ DealerとUser両方に抽象メソッドを実装してください。
setCardは、引数から受けたカード情報をmyCardsに追加するように実装してください。
checkSumは、myCardsを確認し、まだカードが必要ならtrue、必要無ければfalseを戻り値にするように実装してください。
openは、myCardsのカードの合計値を戻り値とするように実装してください。
■ BlackJackクラスにてDealerとUserクラスを使ってゲームが実行できるように処理を実装してください。
カードのやり取りは自動で構いません、カードの変化と最終結果を表示してください。
発生している問題・エラーメッセージ
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:657) at java.util.ArrayList.get(ArrayList.java:433) at blackjack.Dealer.hit(Dealer.java:31) at blackjack.BlackJack.main(BlackJack.java:22)
該当のソースコード
BlackJack
1package blackjack; 2import java.util.ArrayList; 3 4public class BlackJack { 5 public static void main(String[] args) { 6 Dealer dealer = new Dealer() ; 7 User user = new User(); 8 9 user.open(); 10 11 12 System.out.println("カードを配ります"); 13 14 ArrayList<Integer>deal = new ArrayList<Integer>(); 15 dealer.deal(); 16 System.out.println(dealer.deal()); 17 18 ArrayList<Integer>hit = new ArrayList<Integer>(); 19 dealer.hit(); 20 21 while(user.checkSum() == true) { 22 dealer.hit(); 23 } 24 25 while(dealer.checkSum() == true) { 26 dealer.hit(); 27 } 28 29 if(user.open() == 21) { 30 System.out.println("ブラックジャック!あなたの勝ち"); 31 }else if(user.open() <= 21 && dealer.open() > user.open()){ 32 System.out.println("あなたの勝ち"); 33 }else if(user.open() > 21){ 34 System.out.println("バースト!あなたの負け"); 35 }else if(user.open() < dealer.open()){ 36 System.out.println("あなたの負け"); 37 }else if(user.open() == dealer.open()){ 38 System.out.println("引き分け"); 39 } 40 } 41} 42
Human
1package blackjack; 2import java.util.ArrayList; 3 4public abstract class Human { 5 //手札の合計値を計算して戻す 6 abstract public int open(); 7 8 //引いたカードを手元に追加する 9 abstract public void setCards(); 10 11 //手札の合計値によってまだ引くべきかを決定する 12 abstract public boolean checkSum(); 13 14 //UserとDealerの持つ手札の情報 15 ArrayList<Integer> myCards = new ArrayList<Integer>(); 16 17}
Dealer
1package blackjack; 2import java.util.ArrayList; 3import java.util.Collections; 4 5public class Dealer extends Human { 6 public Dealer() { allCards(); } 7 //全てのトランプを持たせてシャッフルする 8 ArrayList <Integer> cards = new ArrayList<Integer>(); 9 public void allCards() { 10 for(int n=1;n<=3;n++) { 11 for(int i=1;i<=13;i++) { 12 cards.add(i); 13 } 14 } 15 Collections.shuffle(cards); 16 } 17 18 protected ArrayList<Integer> deal(){ //ディーラーがカードを配る 19 ArrayList<Integer> deal = new ArrayList<Integer>(); 20 //山札cardsから2枚取って配列dealの0,1を入れる 21 deal.add(cards.get(0)); 22 deal.add(cards.get(1)); 23 cards.remove(0); 24 cards.remove(1); 25 return deal; 26 } 27 28 protected ArrayList<Integer> hit(){ 29 ArrayList<Integer> hit = new ArrayList<Integer>(); 30 //山札から1枚取って配列hitの0に入れる 31 hit.add(cards.get(0)); 32 cards.remove(0); 33 return hit; 34 } 35 36 public void setCards() { 37 ArrayList<Integer> set = new ArrayList<Integer>();; 38 myCards.add(cards.get(0)); 39 myCards.add(cards.get(1)); 40 myCards = set; 41 } 42 43 public boolean checkSum() { 44 if (open() <= 15) { 45 return true; 46 }else{ 47 return false; 48 } 49 } 50 51 public int open() { 52 int total_cards = 0; 53 for(int i=1;i<=myCards.size();i++) { 54 if(10 <= myCards.get(i)) { 55 myCards.set(i, 10); 56 } 57 total_cards += myCards.get(i); 58 } 59 return total_cards; 60 } 61}
User
1package blackjack; 2 3public class User extends Human { 4 public void setCards() { 5 6 } 7 8 public int open() { 9 int total_cards = 0; 10 for(int i=1;i<=myCards.size();i++) { 11 if(10 <= myCards.get(i)) { 12 myCards.set(i, 10); 13 } 14 total_cards += myCards.get(i); 15 } 16 return total_cards; 17 } 18 19 public boolean checkSum() { 20 if (open() <= 15) { 21 return true; 22 }else{ 23 return false; 24 } 25 } 26}
回答3件
あなたの回答
tips
プレビュー