Browse Source

new structure

Marvin Löschenkohl 3 years ago
parent
commit
6dd707d668
5 changed files with 282 additions and 279 deletions
  1. 3 0
      .gitignore
  2. 24 24
      src/ConsoleReader.java
  3. 69 69
      src/Main.java
  4. 140 140
      src/PlayField.java
  5. 46 46
      src/Player.java

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+bin
+.classpath
+.project

+ 24 - 24
Four in Line/src/ConsoleReader.java → src/ConsoleReader.java

@@ -1,25 +1,25 @@
-import java.util.Scanner;
-
-public class ConsoleReader implements AutoCloseable {
-    private Scanner scanner = new Scanner(System.in);
-
-    public int readInt(String error) {
-        while(true) {
-            String s = scanner.nextLine();
-            try {
-                return Integer.parseInt(s);
-            } catch(NumberFormatException nfe) {
-                System.out.println(error);
-            }
-        }
-    }
-
-    public String readLine() {
-        return scanner.nextLine();
-    }
-
-    @Override
-    public void close() {
-        scanner.close();
-    }
+import java.util.Scanner;
+
+public class ConsoleReader implements AutoCloseable {
+    private Scanner scanner = new Scanner(System.in);
+
+    public int readInt(String error) {
+        while(true) {
+            String s = scanner.nextLine();
+            try {
+                return Integer.parseInt(s);
+            } catch(NumberFormatException nfe) {
+                System.out.println(error);
+            }
+        }
+    }
+
+    public String readLine() {
+        return scanner.nextLine();
+    }
+
+    @Override
+    public void close() {
+        scanner.close();
+    }
 }

+ 69 - 69
Four in Line/src/Main.java → src/Main.java

@@ -1,69 +1,69 @@
-public class Main {
-
-    public static void main(String[] args) {
-        PlayField field = new PlayField(6, 7);
-
-        try(ConsoleReader cr = new ConsoleReader()) {
-            do {
-                doGame(cr, field);
-            } while(askPlayAgain(cr, field));
-        }
-    }
-
-    public static void doGame(ConsoleReader cr, PlayField field) {
-        Player me = new Player(1, "x", false);
-        Player opp = new Player(2, "o", true);
-
-        Player[] players = new Player[2];
-        players[0] = me;
-        players[1] = opp;
-
-        while(true) {
-            for(Player player : players) {
-                int column;
-                if(player.hasKi()) {
-                    column = player.getKiTurn(field);
-                } else {
-                    column = player.getTurn(cr, field);
-                }
-                int row = field.getFreeRow(column);
-
-                field.setPos(row, column, player);
-                field.print();
-                if(hasGameEnded(field, player, row, column)) {
-                    break;
-                }
-            }
-        }
-    }
-
-    public static boolean hasGameEnded(PlayField field, Player player, int row, int column) {
-        if(field.hasWon(player, row, column)) {
-            printWinner(player);
-            return true;
-        }
-        if(field.isDraw()) {
-            System.out.println("Draw.");
-            return true;
-        }
-        return false;
-    }
-
-    public static void printWinner(Player player) {
-        System.out.println("Player " + player.getToken() + " has won.");
-    }
-
-    private static boolean askPlayAgain(ConsoleReader cr, PlayField field) {
-        while(true) {
-            System.out.println("New game? Y/N");
-            String s = cr.readLine();
-            if(s.equals("Y")) {
-                field.reset();
-                return true;
-            } else if(s.equals("N")) {
-                System.out.println("Game closed.");
-                return false;
-            }
-        }
-    }
-}
+public class Main {
+
+    public static void main(String[] args) {
+        PlayField field = new PlayField(6, 7);
+
+        try(ConsoleReader cr = new ConsoleReader()) {
+            do {
+                doGame(cr, field);
+            } while(askPlayAgain(cr, field));
+        }
+    }
+
+    public static void doGame(ConsoleReader cr, PlayField field) {
+        Player me = new Player(1, "x", false);
+        Player opp = new Player(2, "o", true);
+
+        Player[] players = new Player[2];
+        players[0] = me;
+        players[1] = opp;
+
+        while(true) {
+            for(Player player : players) {
+                int column;
+                if(player.hasKi()) {
+                    column = player.getKiTurn(field);
+                } else {
+                    column = player.getTurn(cr, field);
+                }
+                int row = field.getFreeRow(column);
+
+                field.setPos(row, column, player);
+                field.print();
+                if(hasGameEnded(field, player, row, column)) {
+                    break;
+                }
+            }
+        }
+    }
+
+    public static boolean hasGameEnded(PlayField field, Player player, int row, int column) {
+        if(field.hasWon(player, row, column)) {
+            printWinner(player);
+            return true;
+        }
+        if(field.isDraw()) {
+            System.out.println("Draw.");
+            return true;
+        }
+        return false;
+    }
+
+    public static void printWinner(Player player) {
+        System.out.println("Player " + player.getToken() + " has won.");
+    }
+
+    private static boolean askPlayAgain(ConsoleReader cr, PlayField field) {
+        while(true) {
+            System.out.println("New game? Y/N");
+            String s = cr.readLine();
+            if(s.equals("Y")) {
+                field.reset();
+                return true;
+            } else if(s.equals("N")) {
+                System.out.println("Game closed.");
+                return false;
+            }
+        }
+    }
+}

+ 140 - 140
Four in Line/src/PlayField.java → src/PlayField.java

@@ -1,140 +1,140 @@
-public class PlayField {
-    private int rows;
-    private int columns;
-    private final int[][] fields;
-
-    public PlayField(int rows, int columns) {
-        this.rows = rows;
-        this.columns = columns;
-        fields = new int[rows][columns];
-    }
-
-    public final void setPos(int row, int column, Player player) {
-        fields[row][column] = player.getIndex();
-    }
-
-    public int getRows() {
-        return rows;
-    }
-
-    public int getColumns() {
-        return columns;
-    }
-
-    public void print() {
-        for(int i = 1; i <= getColumns(); i++) {
-            System.out.print("[" + i + "]");
-        }
-        System.out.println();
-        for(int[] row : fields) {
-            for(int column : row) {
-                if(column == 0) {
-                    printSlot(" ");
-                } else if(column == 1) {
-                    printSlot("x");
-                } else {
-                    printSlot("o");
-                }
-            }
-            System.out.println();
-        }
-    }
-
-    public void printSlot(String value) {
-        System.out.print("[" + value + "]");
-    }
-
-    public void reset() {
-        for(int row = 0; row < getRows(); row++) {
-            for(int column = 0; column < getColumns(); column++) {
-                fields[row][column] = 0;
-            }
-        }
-    }
-
-    public int getFreeRow(int column) {
-        for(int row = getRows() - 1; row >= 0; row--) {
-            if(fields[row][column] == 0) {
-                return row;
-            }
-        }
-        return -1;
-    }
-
-    public boolean hasFreeRow(int column) {
-        for(int row = getRows() - 1; row >= 0; row--) {
-            if(fields[row][column] == 0) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public boolean isDraw() {
-        for(int row = 0; row < getRows(); row++) {
-            for(int column = 0; column < getColumns(); column++) {
-                if(fields[row][column] == 0) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
-    public boolean hasWon(Player player, int r, int c) {
-        // Horizontal left
-        if(checkDirection(player, r, c, "left", "")) {
-            return true;
-        }
-        // Horizontal right
-        if(checkDirection(player, r, c, "right", "")) {
-            return true;
-        }
-        // Vertical (only down)
-        if(checkDirection(player, r, c, "", "down")) {
-            return true;
-        }
-        // Diagonal left up
-        if(checkDirection(player, r, c, "left", "up")) {
-            return true;
-        }
-        // Diagonal left down
-        if(checkDirection(player, r, c, "left", "down")) {
-            return true;
-        }
-        // Diagonal right up
-        if(checkDirection(player, r, c, "right", "up")) {
-            return true;
-        }
-        // Diagonal right down
-        if(checkDirection(player, r, c, "right", "down")) {
-            return true;
-        }
-        return false;
-    }
-
-    public boolean checkDirection(Player player, int r, int c, String horizontal, String vertical) {
-        int index = player.getIndex();
-        int h = 0;
-        int v = 0;
-        if(horizontal == "left") {
-            h = -1;
-        } else if(horizontal == "right") {
-            h = 1;
-        }
-        if(vertical == "up") {
-            v = -1;
-        } else if(vertical == "down") {
-            v = 1;
-        }
-        try {
-            if(fields[r][c] == index && fields[r + v][c + h] == index && fields[r + 2 * v][c + 2 * h] == index && fields[r + 3 * v][c + 3 * h] == index) {
-                return true;
-            }
-        } catch(ArrayIndexOutOfBoundsException e) {
-
-        }
-        return false;
-    }
-
-}
+public class PlayField {
+    private int rows;
+    private int columns;
+    private final int[][] fields;
+
+    public PlayField(int rows, int columns) {
+        this.rows = rows;
+        this.columns = columns;
+        fields = new int[rows][columns];
+    }
+
+    public final void setPos(int row, int column, Player player) {
+        fields[row][column] = player.getIndex();
+    }
+
+    public int getRows() {
+        return rows;
+    }
+
+    public int getColumns() {
+        return columns;
+    }
+
+    public void print() {
+        for(int i = 1; i <= getColumns(); i++) {
+            System.out.print("[" + i + "]");
+        }
+        System.out.println();
+        for(int[] row : fields) {
+            for(int column : row) {
+                if(column == 0) {
+                    printSlot(" ");
+                } else if(column == 1) {
+                    printSlot("x");
+                } else {
+                    printSlot("o");
+                }
+            }
+            System.out.println();
+        }
+    }
+
+    public void printSlot(String value) {
+        System.out.print("[" + value + "]");
+    }
+
+    public void reset() {
+        for(int row = 0; row < getRows(); row++) {
+            for(int column = 0; column < getColumns(); column++) {
+                fields[row][column] = 0;
+            }
+        }
+    }
+
+    public int getFreeRow(int column) {
+        for(int row = getRows() - 1; row >= 0; row--) {
+            if(fields[row][column] == 0) {
+                return row;
+            }
+        }
+        return -1;
+    }
+
+    public boolean hasFreeRow(int column) {
+        for(int row = getRows() - 1; row >= 0; row--) {
+            if(fields[row][column] == 0) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean isDraw() {
+        for(int row = 0; row < getRows(); row++) {
+            for(int column = 0; column < getColumns(); column++) {
+                if(fields[row][column] == 0) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    public boolean hasWon(Player player, int r, int c) {
+        // Horizontal left
+        if(checkDirection(player, r, c, "left", "")) {
+            return true;
+        }
+        // Horizontal right
+        if(checkDirection(player, r, c, "right", "")) {
+            return true;
+        }
+        // Vertical (only down)
+        if(checkDirection(player, r, c, "", "down")) {
+            return true;
+        }
+        // Diagonal left up
+        if(checkDirection(player, r, c, "left", "up")) {
+            return true;
+        }
+        // Diagonal left down
+        if(checkDirection(player, r, c, "left", "down")) {
+            return true;
+        }
+        // Diagonal right up
+        if(checkDirection(player, r, c, "right", "up")) {
+            return true;
+        }
+        // Diagonal right down
+        if(checkDirection(player, r, c, "right", "down")) {
+            return true;
+        }
+        return false;
+    }
+
+    public boolean checkDirection(Player player, int r, int c, String horizontal, String vertical) {
+        int index = player.getIndex();
+        int h = 0;
+        int v = 0;
+        if(horizontal == "left") {
+            h = -1;
+        } else if(horizontal == "right") {
+            h = 1;
+        }
+        if(vertical == "up") {
+            v = -1;
+        } else if(vertical == "down") {
+            v = 1;
+        }
+        try {
+            if(fields[r][c] == index && fields[r + v][c + h] == index && fields[r + 2 * v][c + 2 * h] == index && fields[r + 3 * v][c + 3 * h] == index) {
+                return true;
+            }
+        } catch(ArrayIndexOutOfBoundsException e) {
+
+        }
+        return false;
+    }
+
+}

+ 46 - 46
Four in Line/src/Player.java → src/Player.java

@@ -1,46 +1,46 @@
-import java.util.Random;
-
-public class Player {
-    private int index;
-    private String token;
-    private boolean ki;
-    private final Random move = new Random();
-
-    public Player(int index, String token, boolean ki) {
-        this.index = index;
-        this.token = token;
-        this.ki = ki;
-    }
-
-    public int getIndex() {
-        return index;
-    }
-
-    public String getToken() {
-        return token;
-    }
-
-    public boolean hasKi() {
-        return ki;
-    }
-
-    public int getTurn(ConsoleReader cr, PlayField field) {
-        int columns = field.getColumns();
-        String s = "Where do you want to set your meeple? (1-" + columns + ")";
-        while(true) {
-            System.out.println(s);
-            int column = cr.readInt(s) - 1;
-            if(column >= 0 && column < columns && field.hasFreeRow(column)) {
-                return column;
-            }
-        }
-    }
-
-    public int getKiTurn(PlayField field) {
-        int column;
-        do {
-            column = move.nextInt(field.getColumns());
-        } while(!field.hasFreeRow(column));
-        return column;
-    }
-}
+import java.util.Random;
+
+public class Player {
+    private int index;
+    private String token;
+    private boolean ki;
+    private final Random move = new Random();
+
+    public Player(int index, String token, boolean ki) {
+        this.index = index;
+        this.token = token;
+        this.ki = ki;
+    }
+
+    public int getIndex() {
+        return index;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public boolean hasKi() {
+        return ki;
+    }
+
+    public int getTurn(ConsoleReader cr, PlayField field) {
+        int columns = field.getColumns();
+        String s = "Where do you want to set your meeple? (1-" + columns + ")";
+        while(true) {
+            System.out.println(s);
+            int column = cr.readInt(s) - 1;
+            if(column >= 0 && column < columns && field.hasFreeRow(column)) {
+                return column;
+            }
+        }
+    }
+
+    public int getKiTurn(PlayField field) {
+        int column;
+        do {
+            column = move.nextInt(field.getColumns());
+        } while(!field.hasFreeRow(column));
+        return column;
+    }
+}