わかりやすいJava オブジェクト指向編 プログラミング演習 その3
ユーティリティクラスとゲームクラス
今日でプログラミング演習を終えました。
ユーティリティクラスは、JavaのMathクラスのような働きをします。ここでは、文字列の入力を受け付けます。
ゲームクラスでは、Card, CardDeck, Player, Dealerの4つのクラスを管理してブラックジャックをします。
Utilクラス
package mylib; import java.io.BufferedReader; import java.io.InputStreamReader; public class Util { public static String getString(String s) { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String str = ""; try { System.out.println(s + " >"); str = in.readLine(); return (str.length() > 0) ? str : null; }catch(Exception e) { return ""; } } }
BlackJackクラス
import mylib.Util; public class BlackJack { private CardDeck deck; private Dealer dealer; private Player player; // クラス変数 static final String DEALER_ICON = "□"; static final String PLAYLER_ICON = "■"; static final String BANNER = "\n■□■□ Blackjack □■□■"; static final int CARDS = 52; static final String Q_CONTINUE = "続けますか(Enter)\n"; static final String Q_DEAL = "さらにカードを引きますか(Enter)\n"; static final String EVEN = "引き分け"; static final String WIN = "あなたの勝ち"; static final String LOST = "ディーラーの勝ち"; static final String ANIMATION_ICON = "□■"; static final int TIMES = 25; // 表示回数 static final int DELAY = 20; // 表示時間 //1ゲームに必要な最大カード枚数 static final int LIMIT = 17; public BlackJack(String dname, String pname) { deck = new CardDeck(CARDS); dealer = new Dealer(dname, DEALER_ICON, deck); player = new Player(pname, PLAYLER_ICON, deck); } // デッキの枚数が17未満であれば、初期化する。 public void initialize() { if(deck.size() < LIMIT) { deck.initialize(); dealer.initialize(); player.initialize(); } } // 手札を公開する public void show() { System.out.println(); System.out.println(dealer); System.out.println(player); } // ゲームを繰り返し実行する @SuppressWarnings("unused") public void play() { String str; do { System.out.println(BANNER); initialize(); // 手札を公開 親の手札は一枚だけ showHalf(); // プレイヤは必要なだけカードを引く deal(); // ディーラーの手札のスコアが16以上になるまでカードを引く dealer.over16(); // アニメーションを実行 animation(TIMES, DELAY, ANIMATION_ICON); // 全ての手札を公開する show(); // スコアを比較して判定結果を表示する judge(); }while((str=Util.getString(Q_CONTINUE)) == null); } // 子の手札を公開し、親の手札を1枚公開する public void showHalf() { System.out.println(); System.out.println(dealer.half()); System.out.println(player); } // 子が必要なだけカードを引く public void deal() { while(player.score() < 21) { String str = Util.getString(Q_DEAL); if(str != null) { break; } player.addACard(); showHalf(); } } // スコアを比較して勝敗を表示する public void judge() { int d = dealer.score(); int p = player.score(); if((d > 21 && p > 21) || d == p) { System.out.println(EVEN); }else if(p <= 21 && (d > 21 || d < p)) { System.out.println(WIN); }else { System.out.println(LOST); } } // アニメーションを表示 public void animation(int times, int delay, String icon) { System.out.println(); try { for(int i = 0; i < times; i++) { System.out.println(icon); Thread.sleep(delay); } }catch(InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) { BlackJack bj = new BlackJack("delaer", "plaer"); bj.play(); } }
- 作者: 川場隆
- 出版社/メーカー: 秀和システム
- 発売日: 2010/03/25
- メディア: 単行本
- 購入: 4人 クリック: 34回
- この商品を含むブログ (9件) を見る
- 作者: 川場隆
- 出版社/メーカー: 秀和システム
- 発売日: 2018/03/31
- メディア: 単行本
- この商品を含むブログを見る