1
0

More than 3 years have passed since last update.

メソッドを呼び出して数をカウントしたいです

Posted at

コンソールに出力したい結果は以下です

ブラックジャックへようこそ!
貴方の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;
    }



}

ネットなどでも調べてみたのですが、限界を感じ。。。
よろしければご教授願います。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0