/
06_drones101.jsx
77 lines (64 loc) · 1.95 KB
/
06_drones101.jsx
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
#BEGIN_PROPERTIES#
{
"commandsIntroduced":
["object.type", "object.behavior", "object.findNearest",
"object.getX", "object.getY", "object.canMove", "object.move"]
}
#END_PROPERTIES#
/****************
* drones101.js *
****************
*
* Do you remember, dear Professor, a certain introductary
* class you taught long ago? Perhaps some 're-education'
* is apropos.
*
* Lesson #1: A drone is only as useful as its mobility
* allows. You must learn to use their tools against them.
*/
function startLevel(map) {
function moveToward(obj, type) {
var target = obj.findNearest(type);
var leftDist = obj.getX() - target.x;
var upDist = obj.getY() - target.y;
var direction;
if (upDist == 0 && leftDist == 0) {
return;
} if (upDist > 0 && upDist >= leftDist) {
direction = 'up';
} else if (upDist < 0 && upDist < leftDist) {
direction = 'down';
} else if (leftDist > 0 && leftDist >= upDist) {
direction = 'left';
} else {
direction = 'right';
}
if (obj.canMove(direction)) {
obj.move(direction);
}
}
map.defineObject('attackDrone', {
'type': 'dynamic',
'symbol': 'd',
'color': 'red',
'onCollision': function (player) {
player.killedBy('an attack drone');
},
'behavior': function (me) {
moveToward(me, 'player');
}
});
map.placePlayer(1, 1);
map.placeObject(map.getWidth()-2, 12, 'attackDrone');
map.placeObject(map.getWidth()-1, 12, 'exit');
map.placeObject(map.getWidth()-1, 11, 'block');
map.placeObject(map.getWidth()-2, 11, 'block');
map.placeObject(map.getWidth()-1, 13, 'block');
map.placeObject(map.getWidth()-2, 13, 'block');
#BEGIN_EDITABLE#
#END_EDITABLE#
#END_OF_START_LEVEL#
}
function validateLevel(map) {
map.validateExactlyXManyObjects(1, 'exit');
}