/* Connect 4 */ /* Referee (code fragment) */ /* requires implementation of Board b */ /* Author: Carsten Schuermann */ //import BjarkeSorensen.*; // import Tore.*; // import CarstenSchuermann.*; import Player.Player; class IllegalMove extends Exception { int i; IllegalMove (int i) { this.i = i; } } /* Cut the class board, add your own */ class ConnectFour { Board b; Player p1; /* p1 plays true */ Player p2; /* p2 plays false */ ConnectFour (Player p1, Player p2) { init (); this.p1 = p1; this.p2 = p2; p1.init(true); p2.init(false); } void init () { b = new Board (); } void illegal (String s, int i) { System.out.println ("Illegal Move: Player " + s + " moved to " + i); } /* Invariant: Board b is ok, might be full. No winner yet. */ int move (Boolean player) { b.print (); if (player) {System.out.println (p1.name() + " please make your move");} else {System.out.println (p2.name() + " please make your move");} if (b.tie ()) { System.out.println ("Tie!"); return 0;} else { if (player) { int m = p1.move (); System.out.println ("Move:" + m); try {b.insert (m, player); } catch (IllegalMove exn) {this.illegal (p1.name(), exn.i); return 2;} if (b.win (player)) {System.out.println ("Winner:" + p1.name()); return 1;} p2.inform (m); } else { int m = p2.move (); System.out.println ("Move:" + m); try {b.insert (m, player);} catch (IllegalMove exn) {this.illegal (p2.name(), exn.i); return 1;} if (b.win (player)) {System.out.println ("Winner:" + p2.name()); return 2;} p1.inform (m); }; return (move (! player)); } } int run () { this.init (); int result = this.move (true); b.print (); return (result); } public static void main (String [] args) throws java.lang.ClassNotFoundException, java.lang.InstantiationException, java.lang.IllegalAccessException { String a = args[0]; Class ac = Class.forName(a); Object ao = ac.newInstance (); String b = args[1]; Class bc = Class.forName(b); Object bo = bc.newInstance (); ConnectFour c = new ConnectFour ((Player) ao, (Player)bo); c.run (); } }