Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [<ReflectedDefinition>]
- module Program
- open FunScript
- open FunScript.TypeScript
- let maze = "\
- ##/------------7/------------7##,\
- ##|............|!............|##,\
- ##|./__7./___7.|!./___7./__7.|##,\
- ##|o| !.| !.|!.| !.| !o|##,\
- ##|.L--J.L---J.LJ.L---J.L--J.|##,\
- ##|..........................|##,\
- ##|./__7./7./______7./7./__7.|##,\
- ##|.L--J.|!.L--7/--J.|!.L--J.|##,\
- ##|......|!....|!....|!......|##,\
- ##L____7.|L__7 |! /__J!./____J##,\
- #######!.|/--J LJ L--7!.|#######,\
- #######!.|! |!.|#######,\
- #######!.|! /__==__7 |!.|#######,\
- -------J.LJ | ! LJ.L-------,\
- ########. | **** ! .########,\
- _______7./7 | ! /7./_______,\
- #######!.|! L______J |!.|#######,\
- #######!.|! |!.|#######,\
- #######!.|! /______7 |!.|#######,\
- ##/----J.LJ L--7/--J LJ.L----7##,\
- ##|............|!............|##,\
- ##|./__7./___7.|!./___7./__7.|##,\
- ##|.L-7!.L---J.LJ.L---J.|/-J.|##,\
- ##|o..|!.......<>.......|!..o|##,\
- ##L_7.|!./7./______7./7.|!./_J##,\
- ##/-J.LJ.|!.L--7/--J.|!.LJ.L-7##,\
- ##|......|!....|!....|!......|##,\
- ##|./____JL__7.|!./__JL____7.|##,\
- ##|.L--------J.LJ.L--------J.|##,\
- ##|..........................|##,\
- ##L--------------------------J##".Split(',')
- let tl = [|
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00000011
- 0b00000100
- 0b00001000
- 0b00001000|]
- let top = [|
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00000000
- 0b11111111
- 0b00000000
- 0b00000000
- 0b00000000|]
- let tr = [|
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00000000
- 0b11000000
- 0b00100000
- 0b00010000
- 0b00010000|]
- let left = [|
- 0b00001000
- 0b00001000
- 0b00001000
- 0b00001000
- 0b00001000
- 0b00001000
- 0b00001000
- 0b00001000|]
- let blank = [|
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00000000|]
- let right = [|
- 0b00010000
- 0b00010000
- 0b00010000
- 0b00010000
- 0b00010000
- 0b00010000
- 0b00010000
- 0b00010000|]
- let bl = [|
- 0b00001000
- 0b00001000
- 0b00000100
- 0b00000011
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00000000|]
- let bottom = [|
- 0b00000000
- 0b00000000
- 0b00000000
- 0b11111111
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00000000|]
- let br = [|
- 0b00010000
- 0b00010000
- 0b00100000
- 0b11000000
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00000000|]
- let door = [|
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00000000
- 0b11111111
- 0b00000000
- 0b00000000
- 0b00000000|]
- let pill = [|
- 0b00000000
- 0b00000000
- 0b00000000
- 0b00011000
- 0b00011000
- 0b00000000
- 0b00000000
- 0b00000000|]
- let power = [|
- 0b00000000
- 0b00011000
- 0b00111100
- 0b01111110
- 0b01111110
- 0b00111100
- 0b00011000
- 0b00000000|]
- type Brush = Blue | Yellow
- let toTile c =
- match c with
- | '=' -> door, Blue
- | '_' -> top, Blue
- | '|' -> left, Blue
- | '!' -> right, Blue
- | '/' -> tl, Blue
- | '7' -> tr, Blue
- | 'L' -> bl, Blue
- | 'J' -> br, Blue
- | '-' -> bottom, Blue
- | '.' -> pill, Yellow
- | 'o' -> power, Yellow
- | _ -> blank, Blue
- [<JSEmit("return {0} << {1};")>]
- let ShiftLeft(x:int,n:int) : int = failwith "never"
- [<JSEmit("return {0} & {1};")>]
- let And(a:int,b:int) : int = failwith "never"
- let draw f (lines:int[]) =
- let width = 8
- lines |> Array.iteri (fun y line ->
- let line = line
- for x = 0 to width-1 do
- let bit = ShiftLeft(1, width - 1 - x)
- let pattern = And(line,bit)
- if pattern <> 0 then f (x,y)
- )
- type ts = Api<"../Typings/lib.d.ts">
- type Context(context:ts.CanvasRenderingContext2D) =
- member __.createBrush(r,g,b,a) =
- let id = context.createImageData(float 1,float 1)
- let d = id.data
- d.[0] <- float r; d.[1] <- float g; d.[2] <- float b; d.[3] <- float a
- id
- member __.plot(brush,x,y) =
- context.putImageData(brush, float x, float y)
- let main() =
- let map = unbox<ts.HTMLCanvasElement>(ts.document.createElement("canvas"))
- map.width <- 256.
- map.height <- 256.
- let context = map.getContext("2d")
- context.fillStyle <- "rgb(0,0,0)"
- context.fillRect (0., 0. , 256., 256.);
- let context = Context(context)
- let blue = context.createBrush (63,63,255,255)
- let yellow = context.createBrush (255,255,0,255)
- let lines = maze
- for y = 0 to lines.Length-1 do
- let line = lines.[y]
- for x = 0 to line.Length-1 do
- let c = line.[x]
- let tile, color = toTile c
- let brush = match color with Blue -> blue | Yellow -> yellow
- let f (x',y') = context.plot(brush, x*8 + x', (y+1)*8 + y')
- draw f tile
- let b = context
- let canvas = unbox<ts.HTMLCanvasElement>(ts.document.getElementById("canvas"))
- let context = canvas.getContext("2d")
- canvas.width <- 1000.
- canvas.height <- 800.
- context.drawImage(unbox<ts.HTMLElement>(map), 0., 0.)
- context.drawImage(unbox<ts.HTMLElement>(map), 256., 0.)
- context.drawImage(unbox<ts.HTMLElement>(map), 256., 256.)
- context.drawImage(unbox<ts.HTMLElement>(map), 0., 256.)
- do Runtime.Run(directory="Web", components=Interop.Components.all)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement