-
Notifications
You must be signed in to change notification settings - Fork 0
/
coatide.py
43 lines (38 loc) · 1.78 KB
/
coatide.py
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
import js as __js
import pyodide as __py
class CoatiFehler(BaseException): pass
class GegenSteinGelaufen(CoatiFehler): pass
class HierIstKeinWurm(CoatiFehler): pass
class HierIstSchonEinWurm(CoatiFehler): pass
class MehrereBaelleBewegt(CoatiFehler): pass
__errors = {
"towardsstone": GegenSteinGelaufen("Du kannst nicht auf ein Feld laufen, auf dem ein Stein liegt."),
"noworm": HierIstKeinWurm("Du kannst keinen Wurm aufheben, wenn kein Wurm daliegt."),
"aworm": HierIstSchonEinWurm("Du kannst keinen Wurm auf ein Feld legen, auf dem schon einer liegt."),
"multipleballs": MehrereBaelleBewegt("Man kann nicht mehrere Bälle gleichzeitig schieben.")
}
def __jsfunc(func):
def __wrapper(*args, **kwargs):
error = None
try:
result = func(*args, **kwargs)
except __py.ffi.JsException as e:
try:
error = __errors[str(e).removeprefix("Error: ")]
except KeyError as a:
raise CoatiFehler("Dieser Fehler sollte nicht entstehen! Please report it (the entire message) on GitHub! (Go to Welcome Guide and click the desired link)") from e
if error is not None:
raise error
__js.saveState()
return result
return __wrapper;
weiter = __jsfunc(__js.window.coati.move)
drehe_links = __jsfunc(__js.window.coati.turnLeft)
drehe_rechts = __jsfunc(__js.window.coati.turnRight)
wurm_ablegen = __jsfunc(__js.window.coati.putWorm)
wurm_aufheben = __jsfunc(__js.window.coati.removeWorm)
auf_wurm = __jsfunc(__js.window.coati.onWorm)
ball_vorne = __jsfunc(__js.window.coati.ballFront)
stein_vorne = __jsfunc(__js.window.coati.stoneFront)
stein_links = __jsfunc(__js.window.coati.stoneLeft)
stein_rechts = __jsfunc(__js.window.coati.stoneRight)