Ostatnio aktywny 1751739830

a snake game that runs on the Myte playground !

Rewizja af759532e5a51ee79a48d4ad69844e22a452caaa

snake.nv Surowy Playground
1| 'INSTRUCTIONS' | ~~
2 you can move using the WASD keys !
3
4|| '@include' (
5 https://gist.casuallyblue.dev/autumn/056799f483464c668e0a6a2d9db099df/raw/HEAD/game.nv
6 https://gist.casuallyblue.dev/autumn/e1c6774f800249be87a94240042135db/raw/HEAD/reduce.nv
7)
8
9'DOM' (<query h2 <style text-align = center > >)
10
11'snake' . head 5 11 . body 4 11 . body 3 11
12'direction' right
13'movement speed' 5
14'timer' 0
15'food' 19 11
16'score' 0
17'cell size' 16
18'grid size' 23
19
20'' start game
21'' set score text
22
23| '' start game 'cell size' $cell? 'grid size' $grid?
24| '' (@reduce @main =
25 start a { $cell $grid * } by { $cell $grid * } game .)
26
27| '' game loop
28| '' check if w is pressed
29 '' check if a is pressed
30 '' check if s is pressed
31 '' check if d is pressed
32 '' check if r is pressed
33 '' update movement timer
34 '' check if snake can eat food
35 '' draw background
36 '' draw snake
37 '' draw food
38 '' check if snake died
39 '' next frame
40
41| 'key pressed' w 'direction' down? |
42| 'key pressed' a 'direction' right? |
43| 'key pressed' s 'direction' up? |
44| 'key pressed' d 'direction' left? |
45| 'key pressed' w | 'new direction' up
46| 'key pressed' a | 'new direction' left
47| 'key pressed' s | 'new direction' down
48| 'key pressed' d | 'new direction' right
49
50| '' move? 'direction' $_ 'new direction' $direction |
51 'direction' $direction
52
53| '' move 'direction' up? | '' move snake 'vector' + 0 - 1
54| '' move 'direction' left? | '' move snake 'vector' - 1 + 0
55| '' move 'direction' down? | '' move snake 'vector' + 0 + 1
56| '' move 'direction' right? | '' move snake 'vector' + 1 + 0
57
58| '' move snake? 'vector' $1 $2 $3 $4 'snake' head $x $y 'grid size' $size?
59| 'new body position' $x $y
60 '' (@reduce seen = head { $x $2 $1 0 $size 1 - wrap }
61 { $y $4 $3 0 $size 1 - wrap } .)
62
63| '' move snake? 'snake' body $x $y 'new body position' $nx $ny
64| 'new body position' $x $y
65 'seen' body $nx $ny
66
67| '' move snake 'new body position' $x $y | '' reset snake
68
69| '' update movement timer 'paused'? |
70| '' update movement timer 'movement speed' $speed? 'timer' $speed
71| '' move 'timer' 0
72
73| '' update movement timer 'timer' $time
74| '' (@reduce timer = { $time 1 + } .)
75
76| '' check if snake can eat food 'snake' head $x $y? 'food' $x $y?
77| '' move food to random location
78 '' extend snake
79 '' increase score
80 '' set score text
81| '' check if snake can eat food |
82
83| '' move food to random location 'food' $x $y 'grid size' $max?
84| '' (@reduce food = { 0 $max random } { 0 $max random } .)
85
86| '' increase score 'score' $score
87| '' (@reduce score = { $score 1 + } .)
88
89| '' set score text 'score' $score?
90| 'DOM' (<query h2 @clear @append [Score: ] @append $score >)
91
92| '' extend snake? 'snake' $segment $x $y | 'seen' $segment $x $y
93| '' extend snake | '' duplicate tail segment
94| '' duplicate tail segment 'seen' $segment $x $y?
95| 'snake' $segment $x $y '' reset snake
96
97| '' check if snake died? 'snake' head $x $y | 'head' $x $y
98| '' check if snake died 'snake' body $x $y 'head' $x $y? |
99 '' . reset snake . replace head . snake died
100| '' check if snake died? 'snake' body $x $y | 'seen' body $x $y
101| '' check if snake died | '' reset snake '' replace head
102| '' replace head 'head' $x $y | 'snake' head $x $y
103
104| '' snake died 'score' $score?
105| 'paused'
106 'DOM' (<query h2 @clear @append
107 [Game over! Press R to restart. Score: ]
108 @append $score
109 >)
110
111| 'key pressed' r 'paused' | '' restart game
112| 'key pressed' r |
113
114| '' restart game? 'seen' $segment $x $y |
115| '' restart game? 'snake' $segment $x $y |
116| '' restart game 'direction' $direction 'food' $x $y 'score' $score
117| 'snake' . head 5 11 . body 4 11 . body 3 11
118 'direction' right
119 'food' 19 11
120 'score' 0 '' set score text
121
122| '' draw background
123| '@graphics' clear #000c0f
124
125| '' draw snake? 'snake' head $x $y 'pixel_position' $px $py 'cell size' $size?
126| '@graphics' draw square $px $py $size #5af7ff
127 'seen' head $x $y
128
129| '' draw snake? 'snake' body $x $y 'pixel_position' $px $py 'cell size' $size?
130| '' (@reduce @graphics = draw square
131 { $px 1 + } { $py 1 + } { $size 2 - } #10b0b0 .)
132 'seen' body $x $y
133
134| '' draw snake? 'snake' $segment $x $y?
135| '' convert $x $y to pixel position
136
137| '' draw snake | '' reset snake
138
139| '' draw food 'pixel_position' $x $y 'cell size' $size?
140| '@graphics' draw circle $x $y $size #f0b050
141| '' draw food? 'food' $x $y?
142| '' convert $x $y to pixel position
143
144| '@graphics' draw square $x $y $size $color '@@canvas context' $c?
145| '@js' $c.fillStyle = $color;
146 $c.fillRect($x, $y, $size, $size);
147
148| '@graphics' draw circle $x $y $width $color '@@canvas context' $c?
149| '@js' $c.beginPath();
150 const r = $width / 2;
151 $c.arc(Number($x) + r, Number($y) + r, r, 0, 2 * Math.PI);
152 $c.fillStyle = $color;
153 $c.fill();
154
155| '' convert $x $y to pixel position 'cell size' $scalar?
156| '' (@reduce pixel_position = { $x $scalar * } { $y $scalar * } .)
157
158| '' reset snake? 'seen' $segment $x $y | 'snake' $segment $x $y
159| '' reset snake |
160