Better indentation and spacing
This commit is contained in:
parent
6bfbd22108
commit
0bdb3c16ff
11
logic.bqn
11
logic.bqn
|
@ -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,10 +82,14 @@ Game⇐{ # The Game function creates a game object
|
|||
# Calculates the bounces of a laser beam recursively
|
||||
Bounce←{(w‿d)S x:{ # Base case:
|
||||
⊑opaque∊˜⊑w⊑x? # When the beam touches an opaque object (not a mirror):
|
||||
(machine=⊑w⊑x)◶⟨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
|
||||
|
||||
(machine=⊑w⊑x)◶⟨ # 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∊˜⊑w⊑x ? # When the beam passes through an empty space:
|
||||
|
||||
# we draw the laser beam and recurse to the next:
|
||||
⟨w+d,d⟩S{ # we choose the type of laser beam to draw
|
||||
cTile←(floor‿hbeam‿vbeam‿xbeam⊐𝕩) # depending on the current tile:
|
||||
|
@ -93,6 +98,7 @@ Game⇐{ # The Game function creates a game object
|
|||
# and beam direction Horizontal | Vertical
|
||||
cTile⊏cBeam
|
||||
}⌾(w⊸⊑)x;
|
||||
|
||||
# When the beam touches a mirror:
|
||||
d←⌽d×-⊸¬lmirror=⊑w⊑x # calculate the mirror bounce direction
|
||||
⟨w+d,d⟩S x # and recurse to the next position
|
||||
|
@ -103,6 +109,7 @@ Game⇐{ # The Game function creates a game object
|
|||
# Shoot 𝕩 | 𝕩: map | calculates the bounces for each laser
|
||||
Shoot←{𝕩 {𝕨Bounce´⌽𝕩} ∾⟨<0‿¯1,<0‿1,<¯1‿0,<1‿0⟩(⊣⋈˜¨+)¨ FindIdx⟜(⊑¨𝕩)¨ lasers}
|
||||
|
||||
# --- Rule 2: -------------------------------------------------------------------
|
||||
# - The Player wins when all machines are powered:
|
||||
Win←{¬∨´∨˝machine=⊑¨Shoot 𝕩}# 𝕩: level | Win condition, no unpowered machines after shooting laser
|
||||
|
||||
|
|
Loading…
Reference in New Issue