swarm-0.1.0.0: data/scenarios/Testing/699-movement-fail/699-move-liquid.yaml
version: 1
name: Move to liquid
description: |
Robot moving to water location results in its drowning.
https://github.com/swarm-game/swarm/issues/699
objectives:
- condition: |
def isAliveOn = \name.\loc. try {r <- robotNamed name; l <- as r {whereami}; return $ l == loc} {return false} end;
def isDead = \name. try {robotNamed name; return false} {return true} end;
d1 <- isDead "one";
a2 <- isAliveOn "two" (1,-2);
a3 <- isAliveOn "three" (1,-3);
b <- isAliveOn "base" (0,0);
return (d1 && a2 && a3 && b)
solution: |
move; say "Fatal error: base was able to move into water and not fail!"
robots:
- name: base
dir: [1,0]
devices: ["treads", "logger"]
- name: one
dir: [1,0]
devices: ["treads", "logger"]
program: |
move; say "Fatal error: one was able to move into water and not fail or drown!"
- name: two
dir: [1,0]
devices: ["treads", "logger", "boat", "net"]
program: |
try {move} {say "Fatal error: two was unable to move into water even though it has a boat!"}
- name: three
dir: [1,0]
system: true
devices: ["logger"]
program: |
try {move} {say "Fatal error: three was unable to move into water even though it is system robot!"}
world:
default: [blank]
palette:
'~': [stone, water]
'B': [grass, null, base]
'1': [grass, null, one]
'2': [grass, null, two]
'3': [grass, null, three]
'┌': [stone, upper left corner]
'┐': [stone, upper right corner]
'└': [stone, lower left corner]
'┘': [stone, lower right corner]
'─': [stone, horizontal wall]
'│': [stone, vertical wall]
upperleft: [-1, 1]
map: |
┌──┐
│B~│
│1~│
│2~│
│3~│
└──┘