RosettaCodeData/Task/Snake/J/snake.j

71 lines
1.1 KiB
Plaintext

require'ide/qt/gl2'
coinsert 'jgl2'
open=: wd@{{)n
pc s closeok;
cc n isidraw;
set n wh 400 400;
pshow;
}}
start=: {{
speed=: {.y,200
open''
snake=: 10 10,10 11,:10 12
newdot''
draw''
}}
newdot=: {{
dot=: ({~ ?@#) snake -.~ ,/(#: i.)40 40
}}
s_n_char=: {{
select. {.toupper sysdata
case. 'W' do. move 0 _1
case. 'A' do. move _1 0
case. 'S' do. move 0 1
case. 'D' do. move 1 0
end.
}}
move=: {{
s_timer=: move@y
wd 'ptimer ',":speed
head=. y+{.snake
if. head e. snake do. head gameover'' return. end.
if. _1 e. head do. (0>.head) gameover'' return. end.
if. 1 e. 40 <: head do. (39<.head) gameover'' return. end.
if. dot -: head do.
snake=: dot,snake
newdot''
else.
snake=: head,}: snake
end.
draw''
}}
draw=: {{
glclear''
glbrush glrgb 0 0 255
glrect 10*}.snake,"1(1 1)
glbrush glrgb 0 255 0
glrect 10*({.snake),1 1
glbrush glrgb 255 0 0
glrect 10*dot,1 1
glpaint''
EMPTY
}}
gameover=: {{
wd 'ptimer 0'
if. 1<#snake do.
echo 'game over'
echo 'score: ',":(#snake)*1000%speed
draw''
glbrush glrgb 255 255 0
glrect 10*x,1 1
end.
snake=: ,:_ _
}}