ブラックジャックをjavaで実装しようとしたのですが、結果が以下のように途中まで表示されるのですが、それ以降の表示がされません。どのように修正すれば良いでしょうか?
初学者で手探りでコードを書いています。的外れなことを書いているかもしれませんが、ご教授お願いします。
表示される実行結果↓
ブラックジャックを始めます.
カードを配ります.
BlackJack.java
public class BlackJack { /** * ブラックジャック開始 * @param args * 引数 */ 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());/* プレイヤーにカードを配る*/ dealer.checkSum();/* 合計値の確認 */ /** * ディーラーの手札の合計が16以下だった場合(true)ディーラーはヒットする */ while (dealer.checkSum() == true) { dealer.hit(); dealer.setCards(dealer.myCards); break; } System.out.println("ディーラーの手札はこちらです."); while (user.checkSum() == true) { dealer.hit(); dealer.setCards(dealer.myCards); break; } System.out.println("あなたの手札はこちらです."); /** * 合計値を確認する * @return 手札の合計が16以下ならtrue,17以上ならfalse */ user.checkSum(); 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("引き分け"); } } }
Human.java
import java.util.ArrayList; public abstract class Human { protected ArrayList<Integer> myCards = new ArrayList<Integer>(); /** * 手札の値を出す */ abstract public int open(); /** * 自分の手札に引いたカードの数だけ加える * @param drawCard * 引いたカード */ abstract public void setCards(ArrayList <Integer> drawCard); /** * 合計値を確認する * @return 手札の合計が16以下ならtrue,17以上ならfalse */ abstract public boolean checkSum(); }
Dealer.java
import java.util.ArrayList; import java.util.Collections; public class Dealer extends Human { CardDeck deck = new CardDeck(); /** * 山札を作る * @param cards * 山札 */ protected ArrayList <Integer> cards = new ArrayList<Integer>(); /** * フルデッキ(52枚)を作成する * デッキをシャッフルする */ public Dealer() { for(int n=1; n<=4; n++) { for(int i=1; i<=13; i++) { cards.add(i); } } Collections.shuffle(cards); } /** * 手札にカードを2枚加える * @param setCards * 手札 * @return 手札 */ 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; } /** * 自分の手札に引いたカードの数だけ加える * @param drawCard * 引いたカード */ public void setCards(ArrayList<Integer> drawCard) { for(int i= 0; i<drawCard.size(); i++){ myCards.add(drawCard.get(i)); } } /** * 手札の値を出す.絵柄なら10を渡す * @param total * 手札の合計 * @return 合計の値を返す */ public int open() { int total = 0; for(int i=0; i<=myCards.size(); i++) { if(0<= myCards.get(i)) { total += 10; }else { total += myCards.get(i); } } return total; } /** * カードを山札から取る * @param setCards * 手札 * @return カード */ public ArrayList<Integer> hit(){ ArrayList<Integer>setCards = new ArrayList<Integer>(); setCards.add(cards.get(0)); cards.remove(0); return cards; } /** * 合計値を確認する * @return 手札の合計が16以下ならtrue,17以上ならfalse */ public boolean checkSum() { if (open() < 17 ) { return true; }else{ return false; } } }
User.java
import java.util.ArrayList; public class User extends Human { /** * 山札を作る * @param cards * 山札 */ protected ArrayList<Integer> cards = new ArrayList<Integer>(); /** * 自分の手札に引いたカードの数だけ加える * @param drawCard * 引いたカード */ public void setCards(ArrayList<Integer> drawCard) { for(int i= 0;i<drawCard.size();i++){ myCards.add(drawCard.get(i)); } } /** * 手札の値を出す * @param total * 手札の合計 * @return 合計の値を返す */ 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; } /** * 合計値を確認する * @return 手札の合計が16以下ならtrue,17以上ならfalse */ public boolean checkSum() { if (open() < 17) { return true; }else{ return false; } } }
0 コメント