From e964c53cb66c19d2da77d619020833e9f08536c0 Mon Sep 17 00:00:00 2001 From: Jannis Harder Date: Mon, 2 May 2011 23:33:46 +0200 Subject: Rekursives Verschieben getestet und heile gemacht git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@70 72836036-5685-4462-b002-a69064685172 --- src/jrummikub/model/StoneTray.java | 6 ++++-- test/jrummikub/model/StoneTrayTest.java | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/jrummikub/model/StoneTray.java b/src/jrummikub/model/StoneTray.java index 07719cf..20dde3d 100644 --- a/src/jrummikub/model/StoneTray.java +++ b/src/jrummikub/model/StoneTray.java @@ -15,7 +15,7 @@ import jrummikub.util.Pair; */ public class StoneTray implements Iterable> { - protected List> objects = new ArrayList>(); + protected ArrayList> objects = new ArrayList>(); /** Possible move directions in case of overlapping Stones/Sets */ @@ -68,8 +68,9 @@ public class StoneTray implements drop(object, position, null); } + @SuppressWarnings("unchecked") private void drop(E object, Position position, Direction direction) { - for (Pair i : objects) { + for (Pair i : (List>)objects.clone()) { Position currentPosition = i.getSecond(); E currentObject = i.getFirst(); if (!objectsOverlap(object, position, currentObject, @@ -100,6 +101,7 @@ public class StoneTray implements currentPosition.getY()); break; } + objects.remove(i); drop(currentObject, newPosition, direction); } diff --git a/test/jrummikub/model/StoneTrayTest.java b/test/jrummikub/model/StoneTrayTest.java index 57f3d1a..6c1c170 100644 --- a/test/jrummikub/model/StoneTrayTest.java +++ b/test/jrummikub/model/StoneTrayTest.java @@ -109,6 +109,27 @@ public class StoneTrayTest { assertEquals(1, secondPosition.getX(), 0.00001); assertEquals(-2, secondPosition.getY(), 0.00001); } + + @Test + public void testDoubleShift() { + Thing firstThing = new Thing(5, 5); + testTray.drop(firstThing, new Position(0, 0)); + + Thing secondThing = new Thing(5, 0.1f); + testTray.drop(secondThing, new Position(5, 0)); + + Thing thirdThing = new Thing(3, 3); + testTray.drop(thirdThing, new Position(-2, 1)); + Position firstPosition = testTray.getPosition(firstThing); + Position secondPosition = testTray.getPosition(secondThing); + Position thirdPosition = testTray.getPosition(thirdThing); + assertEquals(1, firstPosition.getX(), 0.00001); + assertEquals(0, firstPosition.getY(), 0.00001); + assertEquals(6, secondPosition.getX(), 0.00001); + assertEquals(0, secondPosition.getY(), 0.00001); + assertEquals(-2, thirdPosition.getX(), 0.00001); + assertEquals(1, thirdPosition.getY(), 0.00001); + } @Test public void testWrongPickUp() { @@ -128,6 +149,7 @@ public class StoneTrayTest { assertSame(testTray.pickUp(testPosition), firstThing); assertNull(testTray.pickUp(testPosition)); } + @Test public void testIterate() { -- cgit v1.2.3