12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import java.util.Random;
- public class Game {
- private PlayField field;
- private ConsoleReader consoleReader;
- private final Random move = new Random();
- public Game(int width, int height, ConsoleReader cr) {
- field = new PlayField(width, height);
- consoleReader = cr;
- }
- public void run() {
- Player[] players = new Player[] { new Player('x', false), new Player('o', true) };
- while(true) {
- for(Player player : players) {
- if(player.hasAI()) {
- if(doAITurn(player)) {
- return;
- }
- } else if(doTurn(player)) {
- return;
- }
- }
- }
- }
- public boolean hasEnded(Player player, int x, int y) {
- if(field.hasWon(player, x, y)) {
- printWinner(player);
- return true;
- }
- if(field.isDraw()) {
- System.out.println("Draw.");
- return true;
- }
- return false;
- }
- private void printWinner(Player player) {
- System.out.println("Player " + player.getToken() + " has won.");
- }
- public boolean doTurn(Player player) {
- int width = field.getWidth();
- String s = "Where do you want to set your meeple? (1-" + width + ")";
- while(true) {
- System.out.println(s);
- int x = consoleReader.readInt(s) - 1;
- if(x < 0 || x >= width) {
- continue;
- }
- int y = field.getFreeY(x);
- if(y != -1) {
- return setAndCheck(x, y, player);
- }
- }
- }
- public boolean doAITurn(Player player) {
- System.out.println("AI's turn:");
- while(true) {
- int x = move.nextInt(field.getWidth());
- int y = field.getFreeY(x);
- if(y != -1) {
- return setAndCheck(x, y, player);
- }
- }
- }
- public boolean setAndCheck(int x, int y, Player player) {
- field.setPos(x, y, player);
- field.print();
- return hasEnded(player, x, y);
- }
- }
|