From 1f52be6d451f5902b8a9e09af63a01681daa01fd Mon Sep 17 00:00:00 2001 From: Paktalin <likorn@ttu.ee> Date: Thu, 31 May 2018 23:31:41 +0300 Subject: [PATCH] Exercise 6.6 done. Now you can move a king, but only to accessible position --- app/src/main/java/com/example/paktalin/agilejava_exercises/Board.java | 4 +++- app/src/main/java/com/example/paktalin/agilejava_exercises/Piece.java | 30 +++++++++++++++++++++++++++++- app/src/main/java/com/example/paktalin/agilejava_exercises/Position.java | 4 ++-- app/src/main/java/com/example/paktalin/agilejava_exercises/moves/KingMoveStrategy.java | 23 +++++++++++++++++++++++ app/src/main/java/com/example/paktalin/agilejava_exercises/moves/KingMoves.java | 15 --------------- app/src/main/java/com/example/paktalin/agilejava_exercises/moves/MoveStrategy.java | 13 +++++++++++++ app/src/main/java/com/example/paktalin/agilejava_exercises/moves/Moves.java | 10 ---------- app/src/test/java/com/example/paktalin/agilejava_exercises/AllTests.java | 4 ++-- app/src/test/java/com/example/paktalin/agilejava_exercises/moves/KingMoveStrategyTest.java | 41 +++++++++++++++++++++++++++++++++++++++++ app/src/test/java/com/example/paktalin/agilejava_exercises/moves/KingMovesTest.java | 31 ------------------------------- 10 files changed, 113 insertions(+), 62 deletions(-) create mode 100644 app/src/main/java/com/example/paktalin/agilejava_exercises/moves/KingMoveStrategy.java delete mode 100644 app/src/main/java/com/example/paktalin/agilejava_exercises/moves/KingMoves.java create mode 100644 app/src/main/java/com/example/paktalin/agilejava_exercises/moves/MoveStrategy.java delete mode 100644 app/src/main/java/com/example/paktalin/agilejava_exercises/moves/Moves.java create mode 100644 app/src/test/java/com/example/paktalin/agilejava_exercises/moves/KingMoveStrategyTest.java delete mode 100644 app/src/test/java/com/example/paktalin/agilejava_exercises/moves/KingMovesTest.java diff --git a/app/src/main/java/com/example/paktalin/agilejava_exercises/Board.java b/app/src/main/java/com/example/paktalin/agilejava_exercises/Board.java index 6874cd7..0343620 100644 --- a/app/src/main/java/com/example/paktalin/agilejava_exercises/Board.java +++ b/app/src/main/java/com/example/paktalin/agilejava_exercises/Board.java @@ -33,7 +33,9 @@ public class Board { } public void move(Position from, Position to) { - layout.move(from, to); + Piece piece = layout.getPieceAtPosition(from); + if (piece.isMovable(from, to)) + layout.move(from, to); } public Piece getPieceAtPosition(String position) { diff --git a/app/src/main/java/com/example/paktalin/agilejava_exercises/Piece.java b/app/src/main/java/com/example/paktalin/agilejava_exercises/Piece.java index ac1856a..aa2c369 100644 --- a/app/src/main/java/com/example/paktalin/agilejava_exercises/Piece.java +++ b/app/src/main/java/com/example/paktalin/agilejava_exercises/Piece.java @@ -2,6 +2,9 @@ package com.example.paktalin.agilejava_exercises; import android.support.annotation.NonNull; +import com.example.paktalin.agilejava_exercises.moves.KingMoveStrategy; +import com.example.paktalin.agilejava_exercises.moves.MoveStrategy; + import java.util.List; /** @@ -9,6 +12,7 @@ import java.util.List; */ public class Piece implements Comparable<Piece> { + public enum Color {White, Black} private Type type; @@ -16,6 +20,7 @@ public class Piece implements Comparable<Piece> { private double strength; private Position position; + private MoveStrategy moveStrategy; private Piece() {} @@ -25,10 +30,22 @@ public class Piece implements Comparable<Piece> { } public enum Type { - Pawn(1, 'p'), Knight(2.5, 'n'), Rook(5, 'r'), Bishop(3, 'b'), Queen(9, 'q'), King(0, 'k'); + Pawn(1, 'p'), + Knight(2.5, 'n'), + Rook(5, 'r'), + Bishop(3, 'b'), + Queen(9, 'q'), + King(0, 'k', new KingMoveStrategy()); private double strength; private char representation; + private MoveStrategy moveStrategy; + + Type(double strength, char representation, MoveStrategy moveStrategy) { + this.strength = strength; + this.representation = representation; + this.moveStrategy = moveStrategy; + } Type(double strength, char representation) { this.strength = strength; @@ -42,6 +59,10 @@ public class Piece implements Comparable<Piece> { public double getStrength() { return strength; } + + public MoveStrategy getMoveStrategy() { + return moveStrategy; + } } public void setPosition(Position position) { @@ -90,6 +111,10 @@ public class Piece implements Comparable<Piece> { piece.getType() == currentPiece.getType(); } + boolean isMovable(Position from, Position to) { + return this.getType().getMoveStrategy().isMovable(from, to); + } + double getStrength() { return strength; } @@ -115,6 +140,9 @@ public class Piece implements Comparable<Piece> { boolean isType(Piece.Type type) { return this.getType() == type; } + public boolean isAtPosition(Position position) { + return this.position.equals(position); + } static Piece createPawn(Color color) { return new Piece(color, Type.Pawn); diff --git a/app/src/main/java/com/example/paktalin/agilejava_exercises/Position.java b/app/src/main/java/com/example/paktalin/agilejava_exercises/Position.java index 8be6c06..77c1432 100644 --- a/app/src/main/java/com/example/paktalin/agilejava_exercises/Position.java +++ b/app/src/main/java/com/example/paktalin/agilejava_exercises/Position.java @@ -47,7 +47,7 @@ public class Position { return (int)c - (int)firstColumnLetter; } - int getRow() { + public int getRow() { return row; } @@ -55,7 +55,7 @@ public class Position { return column; } - int getIntColumn() { + public int getIntColumn() { return charToInt(column); } } diff --git a/app/src/main/java/com/example/paktalin/agilejava_exercises/moves/KingMoveStrategy.java b/app/src/main/java/com/example/paktalin/agilejava_exercises/moves/KingMoveStrategy.java new file mode 100644 index 0000000..33eb874 --- /dev/null +++ b/app/src/main/java/com/example/paktalin/agilejava_exercises/moves/KingMoveStrategy.java @@ -0,0 +1,23 @@ +package com.example.paktalin.agilejava_exercises.moves; + +import com.example.paktalin.agilejava_exercises.Position; + +/** + * Created by Paktalin on 31/05/2018. + */ + +public class KingMoveStrategy implements MoveStrategy{ + + @Override + public boolean isMovable(Position from, Position to) { + int fromRow = from.getRow(); + int fromColumn = from.getIntColumn(); + + int toRow = to.getRow(); + int toColumn = to.getIntColumn(); + + if ((Math.abs(toRow - fromRow) > 1) || (Math.abs(toColumn - fromColumn) > 1)) + return false; + return true; + } +} diff --git a/app/src/main/java/com/example/paktalin/agilejava_exercises/moves/KingMoves.java b/app/src/main/java/com/example/paktalin/agilejava_exercises/moves/KingMoves.java deleted file mode 100644 index 93bdcd2..0000000 --- a/app/src/main/java/com/example/paktalin/agilejava_exercises/moves/KingMoves.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.example.paktalin.agilejava_exercises.moves; - -import com.example.paktalin.agilejava_exercises.Piece; -import com.example.paktalin.agilejava_exercises.Position; - -import java.util.Map; - - -/** - * Created by Paktalin on 31/05/2018. - */ - -public class KingMoves { - -} diff --git a/app/src/main/java/com/example/paktalin/agilejava_exercises/moves/MoveStrategy.java b/app/src/main/java/com/example/paktalin/agilejava_exercises/moves/MoveStrategy.java new file mode 100644 index 0000000..fd8d53b --- /dev/null +++ b/app/src/main/java/com/example/paktalin/agilejava_exercises/moves/MoveStrategy.java @@ -0,0 +1,13 @@ +package com.example.paktalin.agilejava_exercises.moves; + +import com.example.paktalin.agilejava_exercises.Position; + +/** + * Created by Paktalin on 31/05/2018. + */ + +public interface MoveStrategy { + + boolean isMovable(Position from, Position to); + +} diff --git a/app/src/main/java/com/example/paktalin/agilejava_exercises/moves/Moves.java b/app/src/main/java/com/example/paktalin/agilejava_exercises/moves/Moves.java deleted file mode 100644 index 3693b2e..0000000 --- a/app/src/main/java/com/example/paktalin/agilejava_exercises/moves/Moves.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.example.paktalin.agilejava_exercises.moves; - -/** - * Created by Paktalin on 31/05/2018. - */ - -public abstract class Moves { - - -} diff --git a/app/src/test/java/com/example/paktalin/agilejava_exercises/AllTests.java b/app/src/test/java/com/example/paktalin/agilejava_exercises/AllTests.java index 7fd81ba..03f8697 100644 --- a/app/src/test/java/com/example/paktalin/agilejava_exercises/AllTests.java +++ b/app/src/test/java/com/example/paktalin/agilejava_exercises/AllTests.java @@ -1,6 +1,6 @@ package com.example.paktalin.agilejava_exercises; -import com.example.paktalin.agilejava_exercises.moves.KingMovesTest; +import com.example.paktalin.agilejava_exercises.moves.KingMoveStrategyTest; import junit.framework.TestSuite; @@ -17,7 +17,7 @@ public class AllTests extends TestSuite { suite.addTestSuite(BoardTest.class); suite.addTestSuite(CharacterTest.class); suite.addTestSuite(PositionTest.class); - suite.addTestSuite(KingMovesTest.class); + suite.addTestSuite(KingMoveStrategyTest.class); return suite; } diff --git a/app/src/test/java/com/example/paktalin/agilejava_exercises/moves/KingMoveStrategyTest.java b/app/src/test/java/com/example/paktalin/agilejava_exercises/moves/KingMoveStrategyTest.java new file mode 100644 index 0000000..5668937 --- /dev/null +++ b/app/src/test/java/com/example/paktalin/agilejava_exercises/moves/KingMoveStrategyTest.java @@ -0,0 +1,41 @@ +package com.example.paktalin.agilejava_exercises.moves; + +import com.example.paktalin.agilejava_exercises.Board; +import com.example.paktalin.agilejava_exercises.Piece; +import com.example.paktalin.agilejava_exercises.Position; + +import junit.framework.TestCase; + +/** + * Created by Paktalin on 31/05/2018. + */ + +public class KingMoveStrategyTest extends TestCase { + + private Piece king; + private Board board; + + @Override + protected void setUp() throws Exception { + board = Board.createEmpty(); + board.placePiece(Piece.createKing(Piece.Color.Black), "b5"); + king = board.getPieceAtPosition("b5"); + } + + public void testMove() { + Position currentPosition = king.getPosition(); + assertEquals("b5", currentPosition.toString()); + Position accessiblePosition = Position.create("a6"); + + board.move(currentPosition, accessiblePosition); + assertTrue(king.isAtPosition(accessiblePosition)); + assertFalse(king.isAtPosition(currentPosition)); + + currentPosition = accessiblePosition; + Position notAccessiblePosition = Position.create("d4"); + board.move(currentPosition, notAccessiblePosition); + assertTrue(king.isAtPosition(currentPosition)); + assertFalse(king.isAtPosition(notAccessiblePosition)); + } + +} diff --git a/app/src/test/java/com/example/paktalin/agilejava_exercises/moves/KingMovesTest.java b/app/src/test/java/com/example/paktalin/agilejava_exercises/moves/KingMovesTest.java deleted file mode 100644 index f2f15ed..0000000 --- a/app/src/test/java/com/example/paktalin/agilejava_exercises/moves/KingMovesTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.example.paktalin.agilejava_exercises.moves; - -import com.example.paktalin.agilejava_exercises.Board; -import com.example.paktalin.agilejava_exercises.Piece; -import com.example.paktalin.agilejava_exercises.Position; - -import junit.framework.TestCase; - -/** - * Created by Paktalin on 31/05/2018. - */ - -public class KingMovesTest extends TestCase { - - private Piece king; - private Board board; - - @Override - protected void setUp() throws Exception { - board = Board.createEmpty(); - board.placePiece(Piece.createKing(Piece.Color.Black), "b5"); - king = board.getPieceAtPosition("b5"); - } - - public void testCreate() { - assertEquals("b5", king.getPosition().toString()); - board.move(Position.create("b5"), Position.create("a6")); - assertEquals("a6", king.getPosition().toString()); - } - -} -- libgit2 0.25.0