blob: bdfb6d4c5c8e536adfed8616f3ccf97b6233e2a5 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
package com.camilstaps.rushhour;
import android.content.Context;
import android.util.Log;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import java.util.HashSet;
import java.util.Set;
/**
* Created by camilstaps on 16-4-15.
*/
public class Board {
Set<Car> cars = new HashSet<>();
public static final int DIMENSION = 6;
private DriveListener driveListener;
/**
* Move a car if possible, and call the appropriate listeners
*/
private MoveListener moveListener = new MoveListener() {
@Override
public void onMove(Car car, int offset) {
Coordinate newC = car.wouldMoveTo(offset);
if (newC.getY() > DIMENSION - 1 || newC.getX() > DIMENSION - 1 || newC.getX() < 0 || newC.getY() < 0) {
driveListener.onBlocked();
return;
}
for (Car iter : cars) {
if (iter.occupies(newC)) {
driveListener.onBlocked();
return;
}
}
car.move(offset);
driveListener.onDrive();
}
};
public Board(Set<Car> cars) {
for (Car car : cars) {
add(car);
}
}
public Board() {
this(new HashSet<Car>());
}
public void add(Car car) {
car.setMoveListener(moveListener);
cars.add(car);
}
/**
* Add all cars to an existing layout
* RelativeLayout is assumed, although this may work with other Layouts
* @param context
* @param layout
*/
public void addToLayout(Context context, ViewGroup layout) {
for (Car car : cars) {
layout.addView(car.getImageView(
context,
(layout.getWidth() - layout.getPaddingLeft() - layout.getPaddingRight()) / DIMENSION
));
}
}
/**
* True iff the red car can move out without problems
* @return
*/
public boolean isSolved() {
for (int x = DIMENSION - 1; x >= 0; x++) {
for (Car car : cars) {
if (car.occupies(new Coordinate(x, 3))) {
if (car.canMoveHorizontally()) {
return true;
} else {
return false;
}
}
}
}
return false;
}
public void setDriveListener(DriveListener dl) {
driveListener = dl;
}
}
|