-
Notifications
You must be signed in to change notification settings - Fork 1
/
StartRoom.ts
63 lines (56 loc) · 1.79 KB
/
StartRoom.ts
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
class StartLevel extends ALevel<StartWorld> {
generator: StartMapGenerator;
robot: IRobot<StartWorld>;
constructor() {
super();
this.generator = new StartMapGenerator();
this.robot = new ActionRobot<StartWorld>(this, this.resetWorld());
}
getName(): string { return "A First Program"; }
resetWorld(): StartWorld {
var map: StartMap = this.generator.getStandardMap();
return this.makeWorld(map);
}
makeWorld(map: StartMap) {
return new StartWorld(Direction.North, 12, 14, new Array<MemoryLabel>(), map);
}
getRobot(): IRobot<StartWorld> {
return this.robot;
}
getTestMaps(): StartWorld[] {
return this.generator.getTestMaps().map((mm) => this.makeWorld(mm));
}
}
class StartMapGenerator extends AMapGenerator<StartMap> {
constructor() {
super();
}
getStandardMap(): StartMap {
return new StartMap(25, 25);
}
}
class StartMap extends AGoalMap {
startx: number;
starty: number;
constructor(width: number, height: number) {
super(width, height);
this.walls[11][12] = true;
this.walls[12][12] = true;
this.walls[13][12] = true;
}
getGoalZones(): { sx: number, sy: number, ex: number, ey: number }[] {
return [{ sx: 11, sy: 8, ex: 13, ey: 10 }];
}
}
class StartWorld extends GoalWorld<StartWorld> {
map: StartMap;
constructor(direction: Direction, x: number, y: number, memories: MemoryLabel[], map: StartMap) {
super(direction, x, y, memories);
this.map = map;
}
copyWith(direction: Direction, x: number, y: number, memories: MemoryLabel[]): StartWorld {
return new StartWorld(direction, x, y, memories, this.map);
}
getGoalMap(): GoalMap { return this.map; }
}