#コンソールに出力したい結果は以下です
ブラックジャックへようこそ!
貴方の1枚目のカードはハートのQ
ディーラーの1枚目のカードはダイヤのA
貴方の2枚目のカードはハートのA
ディーラーの2枚めのカードは秘密だよ
あなたの現在のポイントは11です
カードを引きますか? Yes:y or No:n
ーーーーーーーーーーーーーーーーーーーーーーーー
プレイヤーの何枚目、という部分をメソッドを使い1、2、3・・・としたいです。
##現状は以下です
ブラックジャックへようこそ!
貴方の0枚目のカードはハートのQ
ディーラーの1枚目のカードはダイヤのA
貴方の0枚目のカードはハートのA
ディーラーの2枚めのカードは秘密だよ
あなたの現在のポイントは11です
カードを引きますか? Yes:y or No:n
##ソースコードを載せます
package blackjack; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class MainGame { public static void main(String[] args) { System.out.println("ブラックジャックへようこそ!"); List<Integer> deck = new ArrayList<Integer>(52); Deck.shuffleDeck(deck); // メソッドを呼び出す // シャッフルしたカードを表示。デバック用 // for(Integer i : deck) { // System.out.println(i); // } List<Integer> player = new ArrayList<>(); //プレイヤーの手札リストを作成 List<Integer> dealer = new ArrayList<>(); //ディーラーの手札リストを作成 //プレイヤー・ディーラーがカードを2枚引く player.add(deck.get(0)); dealer.add(deck.get(1)); player.add(deck.get(2)); dealer.add(deck.get(3)); //プレイヤー・ディーラーの手札のポイントを表示 System.out.println("貴方の" + Player.getPlayerHands() + "枚目のカードは" + Deck.toDescription(player.get(0))); System.out.println("ディーラーの1枚目のカードは" + Deck.toDescription(dealer.get(0))); System.out.println("貴方の" + Player.getPlayerHands() + "枚目のカードは" + Deck.toDescription(player.get(1))); System.out.println("ディーラーの2枚めのカードは秘密だよ"); //プレイヤー、ディーラーのポイントを集計 int playerPoint = Deck.sumPoint(player); int dealerPoint = Deck.sumPoint(dealer); System.out.println("あなたの現在のポイントは" + playerPoint + "です"); //プレイヤーがカードを引くフェーズ while (true) { System.out.println("カードを引きますか? Yes:y or No:n"); //キーボードの入力を受け付けて、変数strに代入する Scanner scan = new Scanner(System.in); String str = scan.next(); if ("n".equals(str)) { break; } else if ("y".equals(str)) { //手札に山札から1枚加える player.add(deck.get(Deck.deckCount)); //山札と手札を一枚進める Deck.deckCount++; Player.setPlayerHands(Player.getPlayerHands() + 1); System.out.println("あなたの" + Player.getPlayerHands() + "枚目のカードは" + Deck.toDescription(player.get(Player.getPlayerHands() - 1))); playerPoint = Deck.sumPoint(player); System.out.println("現在の合計は" + playerPoint); //プレイヤーのバーストチェック if (Deck.isBusted(playerPoint)) { System.out.println("残念、バーストしてしまいました。ディーラーの勝ちです。"); return; } } else { System.out.println("あなたの入力は" + str + "です。y か n を入力してください。"); } } //ディーラーが手札を17以上にするまでカードを引くフェーズ while (true) { //手札が17以上の場合ブレーク if (dealerPoint >= 17) { break; } else { //手札に山札から1枚加える dealer.add(deck.get(Deck.deckCount)); //山札を1枚進める Deck.deckCount++; //ディーラーの合計ポイントを計算 dealerPoint = Deck.sumPoint(dealer); //ディーラーのバーストチェック if (Deck.isBusted(dealerPoint)) { System.out.println("ディーラーがバーストしました。あなたの勝ちです!"); return; } } } //ポイントを比較する System.out.println("あなたのポイントは" + playerPoint); System.out.println("ディーラーのポイントは" + dealerPoint); if (playerPoint == dealerPoint) { System.out.println("引き分けです。"); } else if (playerPoint > dealerPoint) { System.out.println("勝ちました!"); } else { System.out.println("負けました・・・"); } } }
package blackjack; import java.util.Collections; import java.util.List; public class Deck { static int deckCount; //山札の進行状況を記録する変数deckCountを定義 // 山札(deck)に値を入れ、シャッフルするメソッド public static void shuffleDeck(List<Integer> deck) { // リストに1-52の連番を代入 for (int i = 1; i <= 52; i++) { deck.add(i); } // 山札をシャッフル Collections.shuffle(deck); } //現在の合計ポイントを計算するメソッド public static int sumPoint(List<Integer> list) { int sum = 0; for (int i = 0; i < list.size(); i++) { sum = sum + toPoint(toNumber(list.get(i))); } return sum; } //山札の数をカードの数に置き換えるメソッド private static int toNumber(int cardNumber) { int number = cardNumber % 13; if (number == 0) { number = 13; } return number; } //山札の通し番号を得点計算用のポイントに変換するメソッド J/Q/Kは10とする public static int toPoint(int num) { if (num == 11 || num == 12 || num == 13) { num = 10; } return num; } //山札の数を(スート)の(ランク)の文字列に置き換えるメソッド public static String toDescription(int cardNumber) { String rank = toRank(toNumber(cardNumber)); String suit = toSuit(cardNumber); return suit + "の" + rank; } //カード番号をランクに変換するメソッド(A,J,Q,Kなど) private static String toRank(int number) { switch (number) { case 1: return "A"; case 11: return "J"; case 12: return "Q"; case 13: return "K"; default: String str = String.valueOf(number); return str; } } //山札の数をスートに置き換えるメソッド private static String toSuit(int cardNumber) { switch ((cardNumber - 1) / 13) { case 0: return "クラブ"; case 1: return "ダイヤ"; case 2: return "ハート"; case 3: return "スペード"; default: return "例外です"; } } //手札がバーストしているか判定するメソッド public static boolean isBusted(int point) { if (point <= 21) { return false; } else { return true; } } }
package blackjack; public class Player { private static int playerHands; //プレイヤーの手札枚数を記録する変数playerHandsを定義 public static int getPlayerHands() { return playerHands; } public static void setPlayerHands(int playerHands) { Player.playerHands = playerHands; } }
ネットなどでも調べてみたのですが、限界を感じ。。。
よろしければご教授願います。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。