前提・実現したいこと
Javaを使用した練習問題でブラックジャックを作成しています。
実行結果でディーラー、ユーザーそれぞれの結果の数を表示させる方法が分かりません。
似た内容の投稿を行なってしまい申し訳ありませんが、アドバイスをいただきたいです。
また、コードの書き方について更に良い書き方があったら教えていただきたいです。
よろしくお願いします。
現在の実行結果
カードを配ります
ディーラー[]
ユーザー[]
結果:引き分け
該当のソースコード
BlackJack.java
Java
1package blackjack; 2 3public class BlackJack { 4 public static void main(String[] args) { 5 6 Dealer dealer = new Dealer(); 7 User user = new User(); 8 9 System.out.println("カードを配ります"); 10 11 //dealerの結果カード 12 System.out.println("ディーラー" + dealer.myCards ←ここの書き方が分かりません); 13 14 //userの結果カード 15 System.out.println("ユーザー" + user.myCards ←ここの書き方が分かりません); 16 17 System.out.print("結果:"); 18 19 if(user.open() == 21) { 20 System.out.println("ブラックジャック!あなたの勝ち"); 21 }else if(user.open() <= 21 && dealer.open() > user.open()){ 22 System.out.println("あなたの勝ち"); 23 }else if(user.open() > 21){ 24 System.out.println("バースト!あなたの負け"); 25 }else if(user.open() < dealer.open()){ 26 System.out.println("あなたの負け"); 27 }else if(user.open() == dealer.open()){ 28 System.out.println("引き分け"); 29 } 30 } 31}
Human.java
Java
1package blackjack; 2import java.util.ArrayList; 3 4public abstract class Human { 5 6 //手札の合計値を計算する 7 abstract public int open(); 8 9 //引いたカードを手元に追加する 10 abstract public void setCards(ArrayList<Integer> set); 11 12 //手札の合計値によってまだ引くべきかを決定する 13 abstract public boolean checkSum(); 14 15 //UserとDealerの持つ手札の情報 16 ArrayList<Integer> myCards = new ArrayList<Integer>(); 17 18}
Dealer.java
Java
1package blackjack; 2import java.util.ArrayList; 3import java.util.Collections; 4 5public class Dealer extends Human { 6 7 //インスタンスが作られた時に呼び出される 8 public Dealer() { allCards(); } 9 10 //山札 11 ArrayList <Integer> cards = new ArrayList<Integer>(); 12 13 //全てのトランプを持たせてシャッフルする 14 public void allCards() { 15 for(int n=1;n<=4;n++) { 16 for(int i=1;i<=13;i++) { 17 cards.add(i); 18 } 19 } 20 Collections.shuffle(cards); 21 } 22 23 //ディーラーが配るカードを山札から2枚決める 24 ArrayList<Integer> deal = new ArrayList<Integer>(); 25 protected ArrayList<Integer> deal(){ 26 deal.add(cards.get(0)); 27 deal.add(cards.get(1)); 28 cards.remove(0); 29 cards.remove(1); 30 return deal; 31 } 32 33 //checkSum()がtrueだった場合、山札から1枚取る 34 ArrayList<Integer> hit = new ArrayList<Integer>(); 35 protected ArrayList<Integer> hit(){ 36 hit.add(cards.get(0)); 37 cards.remove(0); 38 return hit; 39 } 40 41 //手札にセットする 42 public void setCards(ArrayList<Integer> set) { 43 myCards.addAll(deal); 44 if(checkSum()) { 45 hit(); 46 myCards.addAll(hit); 47 } 48 } 49 50 //手札の合計値によってまだ引くべきかを決定する 51 public boolean checkSum() { 52 if (open() <= 15) { 53 return true; 54 }else{ 55 return false; 56 } 57 } 58 59 //手札の合計値を計算する 60 public int open() { 61 int total_cards = 0; 62 for(int i=1;i<=myCards.size();i++) { 63 if(10 <= myCards.get(i)) { 64 myCards.set(i, 10); 65 } 66 total_cards += myCards.get(i); 67 } 68 return total_cards; 69 } 70}
User.java
Java
1package blackjack; 2import java.util.ArrayList; 3 4public class User extends Human { 5 6 Dealer dealer = new Dealer(); 7 8 public void setCards(ArrayList<Integer> set) { 9 myCards.addAll(dealer.deal); 10 if(checkSum()) { 11 dealer.hit(); 12 myCards.addAll(dealer.hit); 13 } 14 } 15 16 public int open() { 17 int total_cards = 0; 18 for(int i=1;i<=myCards.size();i++) { 19 if(10 <= myCards.get(i)) { 20 myCards.set(i, 10); 21 } 22 total_cards += myCards.get(i); 23 } 24 return total_cards; 25 } 26 27 public boolean checkSum() { 28 if (open() <= 15) { 29 return true; 30 }else{ 31 return false; 32 } 33 } 34}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。