71 lines
1.1 KiB
Plaintext
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=: ,:_ _
|
|
}}
|