山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

わかりやすいJava オブジェクト指向編 プログラミング演習 その3

プレイヤとディーラの作成

ブラックジャックはプレイヤとディーラとの勝負なので、それらに対応するクラスを作ります。

プレイヤクラスでは、2枚カードを引き、全ての手札を公開します。追加でカードを引くかどうかはプレイヤに任されます。一方で、ディーラクラスでは手札を一枚公開し、手札の合計が16を超えるまでカードを引きます。

Playerクラス

import java.util.ArrayList;

public class Player {
    private CardDeck deck;
    // 手札
    protected ArrayList<Card> hand;
    // プレイヤの名前
    protected String name;
    // プレイヤのアイコン
    protected String icon;

    public Player(String name, String icon, CardDeck deck) {
        this.name = name;
        this.icon = icon;
        this.deck = deck;
        hand = new ArrayList<Card>();
        initialize();
    }

    public void initialize() {
        hand.clear();
        for(int i = 0; i < 2; i++) {
            addACard();
        }
    }
    public void addACard() {
        Card c = deck.next();
        if(c != null) {
            hand.add(c);
        }
    }
    // 手札の得点を返す
    public int score() {
        int sum = 0;
        for(Card c : hand) {
            sum += c.score();
        }
        return sum;
    }

    // スコアと手札の文字列表現を返す
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(icon).append(name);
        sb.append("  [").append(score()).append("]  ");
        for(Card c : hand) {
            sb.append(c.toString()).append("  ");
        }
        return sb.toString();
    }
    public static void main(String[] args) {
        CardDeck deck = new CardDeck(52);
        Player p = new Player("Player", "■", deck);
        p.addACard();
        System.out.println(p);

    }
}

Dealerクラス

public class Dealer extends Player{
    public Dealer(String name, String icon, CardDeck deck) {
        super(name, icon, deck);
    }
    // 手札のスコアが16を超えるまでカードを引く
    public void over16() {
        while(score() <= 16) {
            addACard();
        }
    }
    // 一枚目だけを公開する
    public String half() {
        StringBuilder sb = new StringBuilder();
        sb.append(icon).append(name);
        sb.append(" [?] ");
        halfStr(sb);
        sb.append("********");
        return sb.toString();

    }
    void halfStr(StringBuilder sb) {
        Card c = hand.get(0);
        sb.append(c.toString());
        sb.append(" ");
    }
    public static void main(String[] args) {
        CardDeck deck = new CardDeck(52);
        Dealer d = new Dealer("Dealer", "□", deck);
        // 手札を半分隠して表示する
        System.out.println(d.half());
        // 手札を全て公開する
        System.out.println(d);
        // 手札のスコアが16を超えるまでカードを引く
        d.over16();
        // 手札を表示する
        System.out.println(d);


    }
}

わかりやすいJavaオブジェクト指向編

わかりやすいJavaオブジェクト指向編

新わかりやすいJava オブジェクト指向徹底解説

新わかりやすいJava オブジェクト指向徹底解説