前提・実現したいこと
ブラックジャックの作成に挑んでいますが、コンソール上の表記がおかしいのでどのようにしたら改善されるか教えていただきたいです。
下記のようにディーラー側がカードをかなり引いてしまいます。
発生している問題・エラーメッセージ
ブラックジャックをこれから始めます!!
カードを配りますね
ディーラーの手札はこちらです‼!
あなたの手札はこちらです‼
ディーラーは[5, 10, 10, 7, 3, 13, 6, 2, 7, 4, 11, 6, 11, 9, 5, 4, 11, 8, 6, 8, 1, 10, 7, 9, 5, 12, 5, 11, 13, 8, 10, 9, 9, 7, 4, 6, 3, 13, 12, 1, 1, 2, 2, 1]
290
あなたは[2, 8]
10
あなたの勝ち
該当のソースコード
Blackjack.java public class Blackjack { public static void main(String[]args) { Dealer dealer = new Dealer(); User user = new User(); System.out.println("ブラックジャックをこれから始めます!!"); System.out.println("カードを配りますね"); dealer.setCards(dealer.deal()); user.setCards(dealer.deal()); while (dealer.checkSum()) { dealer.hit(); dealer.setCards(dealer.hit()); break; } System.out.println("ディーラーの手札はこちらです‼!"); while (user.checkSum()) { dealer.hit(); dealer.setCards(dealer.hit()); break; } System.out.println("あなたの手札はこちらです‼"); System.out.println("ディーラーは"+ dealer.myCards); System.out.println(dealer.open()); System.out.println("あなたは"+ user.myCards); System.out.println(user.open()); if(user.open() == 21) { System.out.println("ブラックジャック!あなたの勝ち"); }else if(user.open() < 21 && dealer.open()<user.open() || dealer.open()>21){ System.out.println("あなたの勝ち"); }else if(user.open() > 21){ System.out.println("バースト!あなたの負け"); }else if(dealer.open() ==21 || dealer.open() <=21 && user.open()<dealer.open()){ System.out.println("あなたの負け"); }else if(user.open() == dealer.open() || user.open()>21 && dealer.open()>21){ System.out.println("引き分け"); } } }
Dealer.java import java.util.ArrayList; import java.util.Collections; public class Dealer extends Human { protected ArrayList <Integer> cards = new ArrayList<Integer>(); public Dealer() { for(int n=1; n<=4; n++) { for(int i=1; i<=13; i++) { cards.add(i); } } Collections.shuffle(cards); } public ArrayList<Integer> deal(){ ArrayList<Integer> setCards = new ArrayList<Integer>(); setCards.add(cards.get(0)); setCards.add(cards.get(1)); cards.remove(0); cards.remove(0); return setCards; } public void setCards(ArrayList<Integer> drawCard) { for(int i= 0; i<drawCard.size(); i++){ myCards.add(drawCard.get(i)); } } public int open() { int total = 0; for(int i=0; i<myCards.size(); i++) { if(10<= myCards.get(i)) { total += 10; }else { total += myCards.get(i); } } return total; } public ArrayList<Integer> hit(){ ArrayList<Integer>setCards = new ArrayList<Integer>(); setCards.add(cards.get(0)); setCards.add(cards.get(1)); cards.remove(0); cards.remove(1); return cards; } public boolean checkSum() { if (open() < 17 ) { return true; }else{ return false; } } }
Human.java import java.util.ArrayList; public abstract class Human { protected ArrayList<Integer> myCards = new ArrayList<Integer>(); abstract public int open(); abstract public void setCards(ArrayList <Integer> drawCard); abstract public boolean checkSum(); }
User.java import java.util.ArrayList; public class User extends Human { protected ArrayList<Integer> cards = new ArrayList<Integer>(); public void setCards(ArrayList<Integer> drawCard) { for(int i= 0;i<drawCard.size();i++){ myCards.add(drawCard.get(i)); } } public int open() { int total = 0; for(int i =0; i<myCards.size(); i++) { if(10 <= myCards.get(i)) { total += 10; }else { total += myCards.get(i); } } return total; } public boolean checkSum() { if (open() < 17) { return true; }else{ return false; } } }
試したこと
Blackjack.javaのwhile文が上手く機能していまいかhitメソッドがおかしいのかなとは思うのですがそれ以上わからないのでご教授いただきたいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/08 11:09
2021/07/08 11:19
2021/07/08 11:24