コンソールに出力したい結果は以下です
ブラックジャックへようこそ!
貴方の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 extends Deck {
private static int playerHands; //プレイヤーの手札枚数を記録する変数playerHandsを定義
public static int getPlayerHands() {
return playerHands;
}
public static void setPlayerHands(int playerHands) {
Player.playerHands = playerHands;
}
}
ネットなどでも調べてみたのですが、限界を感じ。。。
よろしければご教授願います。