Better indentation and spacing

This commit is contained in:
Rampoina 2023-03-05 18:16:57 +01:00
parent 6bfbd22108
commit 0bdb3c16ff
1 changed files with 23 additions and 16 deletions

View File

@ -51,6 +51,7 @@ Game⇐{ # The Game function creates a game object
# Rules:
# -------------------------------------------------------------------------------
#
# --- Rule 1: -------------------------------------------------------------------
# - The player can push but not pull any movable object one tile away in the
# current direction to an empty tile:
@ -81,28 +82,34 @@ Game⇐{ # The Game function creates a game object
# Calculates the bounces of a laser beam recursively
Bounce{(wd)S x:{ # Base case:
opaque˜wx? # When the beam touches an opaque object (not a mirror):
(machine=wx)x, # we do nothing if it doesn't touch a machine
pmachine˙(w)x # and if it does we change it to a powered machine
@; # and the recursion stops
empties˜wx ? # When the beam passes through an empty space:
# we draw the laser beam and recurse to the next:
w+d,dS{ # we choose the type of laser beam to draw
cTile(floorhbeamvbeamxbeam𝕩) # depending on the current tile:
# floor hbeam vbeam xbeam | floor hbeam vbeam xbeam
cBeam ((×d) hbeamhbeamxbeamxbeam , vbeamxbeamvbeamxbeam)
# and beam direction Horizontal | Vertical
cTilecBeam
}(w)x;
# When the beam touches a mirror:
dd×-¬lmirror=wx # calculate the mirror bounce direction
w+d,dS x # and recurse to the next position
}
(machine=wx) # if it's not a machine:
x, # we do nothing
pmachine˙(w)x # and if it is, we change it to a powered machine
@; # and the recursion stops
empties˜wx ? # When the beam passes through an empty space:
# we draw the laser beam and recurse to the next:
w+d,dS{ # we choose the type of laser beam to draw
cTile(floorhbeamvbeamxbeam𝕩) # depending on the current tile:
# floor hbeam vbeam xbeam | floor hbeam vbeam xbeam
cBeam ((×d) hbeamhbeamxbeamxbeam , vbeamxbeamvbeamxbeam)
# and beam direction Horizontal | Vertical
cTilecBeam
}(w)x;
# When the beam touches a mirror:
dd×-¬lmirror=wx # calculate the mirror bounce direction
w+d,dS x # and recurse to the next position
}
}
# We find each laser machine and shoot a beam in its direction
# Shoot 𝕩 | 𝕩: map | calculates the bounces for each laser
Shoot{𝕩 {𝕨Bounce´𝕩} <0¯1,<01,<¯10,<10(˜¨+)¨ FindIdx(¨𝕩)¨ lasers}
# --- Rule 2: -------------------------------------------------------------------
# - The Player wins when all machines are powered:
Win{¬´˝machine=¨Shoot 𝕩}# 𝕩: level | Win condition, no unpowered machines after shooting laser