/* * 練習問題16.12 p.388 * 練習問題16.11の結果を修正して、findResouceとfindResourcesを実装することで、プレーヤーの戦略が * 付属するリソースを使用できるようにしなさい。 */ /* * 練習問題16.11 p.386 * GameとPlayerを発展させて三目並べのような簡単なゲームを実装しなさい。 * いくつかのPlayerの実装を、それぞれ何回か実行してスコアーを取りなさい。 */ package ch16.ex16_12; import java.util.Random; // ゲームの中身 /* * 数字の大小しか返ってこないシステムに対して、如何に早く数字を当てられるか */ public class Game { private static int playerNumber = 0; private int score = 0; private int target = 0; enum Reply { GREATER, LESS, EQUAL; } public Game() { // Randomクラスのインスタンス化 Random rnd = new Random(); // 当てる数字の決定(0~30) target = rnd.nextInt(30); } public static void main(String[] args) { String name; // クラス名 // while((name = getNextPlayer(args)) != null) for (int i = 0; i < args.length; i++) { name = args[i]; try { PlayerLoader loader = new PlayerLoader(); Class<? extends Player> classOf = loader.loadClass(name).asSubclass(Player.class); Player player = classOf.newInstance(); Game game = new Game(); player.play(game); game.reportScore(name); } catch(Exception e) { reportException(name, e); } } } // ...他のメソッドの定義... public static String getNextPlayer(String[] args) { if (playerNumber <= args.length) { return args[playerNumber]; } return null; } public static void reportException(String name, Exception e) { System.out.println("name: " + name); System.out.println(e); } public void reportScore(String name) { System.out.println("Score of " + name + " is: " + score); } public Reply check(int answer) { if (answer == target) { return Reply.EQUAL; } else if (answer > target) { return Reply.GREATER; } else if (answer < target) { return Reply.LESS; } System.out.println("Error occurs. "); return null; } public void setScore(int score) { this.score = score; } }