swarm-0.7.0.0: data/scenarios/Testing/699-movement-fail/699-move-blocked.yaml
version: 1
name: Move to blocked
description: |
Robot moving to blocked location results in its destruction.
https://github.com/swarm-game/swarm/issues/699
objectives:
- condition: |
def isAliveOn = \name.\loc. try {r <- robotNamed name; l <- as r {whereami}; pure $ l == loc} {pure false} end;
def isDead = \name. try {robotNamed name; pure false} {pure true} end;
a1 <- isAliveOn "one" (0,-1);
a2 <- isAliveOn "two" (1,-2);
b <- isAliveOn "base" (0,0);
pure (a1 && a2 && b)
solution: |
move; say "Fatal error: base was able to move into a boulder and not fail!"
robots:
- name: base
dir: east
devices: ["treads", "logger"]
- name: one
dir: east
devices: ["treads", "logger"]
program: |
move; say "Fatal error: one was able to move into a boulder and not fail!"
- name: two
dir: east
system: true
devices: ["logger"]
program: |
try {move} {say "Fatal error: two was unable to move into a boulder even though it is system robot!"}
world:
palette:
'@': [stone, boulder]
'B': [grass, null, base]
'1': [grass, null, one]
'2': [grass, null, two]
'+': [stone, wall]
upperleft: [-1, 1]
map: |
++++
+B@+
+1@+
+2@+
++++