Snake: Difference between revisions

2,535 bytes added ,  4 days ago
m (→‎{{header|Rust}}: cosmetic)
(9 intermediate revisions by 5 users not shown)
Line 1,223:
rem by Gemino Smothers 2022
rem www.lucidapogee.com
 
title "Snake!"
 
define gfxx = 330, gfxy = 296
Line 1,237 ⟶ 1,239:
let sy[0] = gfxy / 2
 
fill on
title "Snake!"
bgcolor 128, 64, 0
cls graphics
 
resize 0, 0, gfxx + 10, gfxy + 56
center
 
formid 1
fill on
staticform 1, 1, 100, 14
bgcolor 128, 64, 0
fgcolor 255, 255, 0
cls
bgcolor 0, 80, 0
colorform
 
alert "Snake! by Gemino Smothers 2022"
Line 1,368 ⟶ 1,374:
 
fgcolor 255, 255, 0
cursor 1,formid 1
printformtext "Score: ", score
updateform
 
let delay = clock
Line 1,382 ⟶ 1,389:
 
playwave "examples\boom.wav"
alert "Game over! Score: ", score</syntaxhighlight>
 
alert "Game over! Score: ", score
 
end</syntaxhighlight>
 
==={{header|FreeBASIC}}===
Line 1,519 ⟶ 1,523:
9 IF Q#5 THEN GOTO 4:Q=Q*(B=Q): COLOR=T: IF Q=0 THEN PLOT X,Y: IF Q=0 THEN PRINT "GAME OVER";: IF Q THEN PRINT "DONE";:K= PEEK (J):B=0: END </syntaxhighlight>
==={{header|Locomotive Basic}}===
[[File:Snake locomotive basic.png|thumb|''Snake'' running in CPCBasic]]
Use the cursor keys to control movement direction. If you find gameplay too easy, lower the skill parameter in line 20 or increase ml (maximum snake length).
 
If you are playing this in [https://benchmarko.github.io/CPCBasic/cpcbasic.html CPCBasic], paste the code into the top box, then click on the "Reset" and "Run" buttons below and finally click on the CPC screen so it gets keyboard focus. (The frame around the screen will turn dark).
Use the cursor keys to control movement direction. Lower the skill parameter in line 20 or increase ml (maximum length) if you find gameplay too easy.
 
If you are playing this in [https://benchmarko.github.io/CPCBasic/cpcbasic.html CPCBasic], first click on the CPC screen so it gets keyboard input and then enter "run" (clicking the Run button would deselect the screen again).
<syntaxhighlight lang="locobasic">10 mode 1:randomize time
15 ink 0,0:ink 1,6:ink 2,18:ink 3,11
20 sx=20:sy=5:dx=1:dy=0:ml=20:dim ox(ml),oy(ml):oi=1:ll=4:skill=6
20 sx=20:sy=5:dx=1:dy=0:ml=20:dim ox(ml),oy(ml):oi=1:ll=4:skill=8
30 f$=chr$(228):w$=chr$(127):b$=chr$(231)
40 pen 3:print string$(40,w$);
50 for i=2 to 20:print w$;space$(38);w$;:next
60 print string$(40,w$);
70 locate 1011, 1211:print string$(20,w$);
80 gosub 260
140 locate sx,sy:pen 2:print chr$(224);:ox(oi)=sx:oy(oi)=sy
90 frame
100 if inkey(1)>-1 then dx=1:dy=0
110 if inkey(8)>-1 then dx=-1:dy=0
120 if inkey(0)>-1 then dx=0:dy=-1
130 if inkey(2)>-1 then dx=0:dy=1
140 locate sx,sy:print chr$(224);:ox(oi)=sx:oy(oi)=sy
150 oi=oi+1:if oi>ml then oi=1
160 nx=sx+dx:ny=sy+dy
170 locate nx,ny:a$=copychr$(#0)
180 if a$=w$ or a$=b$ then sound 2,62500/20,100:locate 13,6:print "You have died!":end
190 if a$=f$ then sound 2,62500/500,10: sound 12,62500/1000,10: sound 42,62500/2000,10:p=p+100:print " ";:gosub 260:if ll<ml then ll=ll+1
200 locate 1,24:print "SCORE:"p
210 for i=1 to skill:frame:next
211 if inkey(1)>-1 then dx=1:dy=0
220 locate sx,sy:print b$;
212 if inkey(8)>-1 then dx=-1:dy=0
213 if inkey(0)>-1 then dx=0:dy=-1
214 if inkey(2)>-1 then dx=0:dy=1
215 next
220 locate sx,sy:pen 2:print b$;
230 nn=1+((oi+ml-ll) mod ml)
240 if ox(nn)>0 then locate ox(nn),oy(nn):print " ";
250 sx=nx:sy=ny:goto 90140
260 fx=rnd*39+1:fy=rnd*19+1
270 locate fx,fy:a$=copychr$(#0)
280 if a$<>" " then 260
290 pen 1:print f$;
300 return</syntaxhighlight>
 
Line 2,286 ⟶ 2,291:
OnCreate = FormCreate
end
</syntaxhighlight>
 
=={{header|EasyLang}}==
[https://easylang.dev/apps/snake.html Run it]
{{Trans|Craft Basic}}
<syntaxhighlight>
subr fruit
rx = (randint 20 - 1) * 5 + 2.5
ry = (randint 20 - 1) * 5 + 2.5
.
subr start
fruit
game = 1
sx[] = [ 52.5 0 0 0 0 ]
sy[] = [ 52.5 0 0 0 0 ]
dir = randint 4
timer 0
.
background 242
move 30 70
clear
color 997
text "SNAKE"
textsize 5
move 6 40
text "Keys or mouse for controlling"
move 6 30
text "Space or click to to start"
#
on key
if game = 0 and keybkey = " "
start
return
.
if dir mod 2 = 1
if keybkey = "ArrowRight"
dir = 2
elif keybkey = "ArrowLeft"
dir = 4
.
else
if keybkey = "ArrowUp"
dir = 1
elif keybkey = "ArrowDown"
dir = 3
.
.
.
on mouse_down
if game = 0
start
return
.
if dir mod 2 = 1
if mouse_x < sx
dir = 4
else
dir = 2
.
else
if mouse_y < sy
dir = 3
else
dir = 1
.
.
.
on timer
clear
color 997
move 2 95
text "Score: " & 10 * len sx[] - 50
color 966
move rx ry
circle 1.5
#
sx = sx[1] ; sy = sy[1]
if dir = 1
sy += 5
elif dir = 2
sx += 5
elif dir = 3
sy -= 5
elif dir = 4
sx -= 5
.
if sx < 0 or sx > 100 or sy < 0 or sy > 100
game = 0
.
color 494
for i = len sx[] downto 2
if sx = sx[i] and sy = sy[i]
game = 0
.
sx[i] = sx[i - 1]
sy[i] = sy[i - 1]
if sx[i] > 0
move sx[i] sy[i]
circle 2.5
.
.
move sx sy
circle 2.5
color 000
if dir = 2 or dir = 4
move sx sy + 1
circle 0.5
move sx sy - 1
circle 0.5
else
move sx + 1 sy
circle 0.5
move sx - 1 sy
circle 0.5
.
if sx = rx and sy = ry
len sx[] len sx[] + 3
len sy[] len sy[] + 3
fruit
.
sx[1] = sx ; sy[1] = sy
if game = 1
timer 0.15
else
color 997
move 10 10
text "Space or click new game"
.
.
</syntaxhighlight>
 
Line 3,157 ⟶ 3,291:
 
=={{header|Julia}}==
<syntaxhighlight lang="julia">using GLMakie, GeometryBasics
Makie version in 99 lines.
<syntaxhighlight lang="julia">using Makie
 
mutable struct SnakeGame
height::Int
width::Int
snake::Vector{CartesianIndex{2}}
food::CartesianIndex{2}
end
 
Line 3,203 ⟶ 3,336:
 
function play(;n=10,t=0.5)
game = NodeObservable(SnakeGame(;width=n,height=n))
scene = Scene(resolution = (1000, 1000), raw = true, camera = campixel!)
display(scene)
Line 3,224 ⟶ 3,357:
 
score_text = @lift("Score: $(length($game.snake)-1)")
text!(scene, score_text, color=:gray, position = @lift((widths($area)[1]/2, widths($area)[2])), textsizefontsize = 50, align = (:center, :top))
 
direction = Ref{Any}(nothing)
 
on(events(scene).events.keyboardbuttonskeyboardbutton) do but
if ispressed(but,.action == Keyboard.press || but.action == Keyboard.left)repeat
direction[]if but.key == CartesianIndex(-1,0)Keyboard.left
direction[] = CartesianIndex(-1,0)
elseif ispressed(but, Keyboard.up)
direction[]elseif but.key == CartesianIndex(0,1)Keyboard.up
direction[] = CartesianIndex(0,1)
elseif ispressed(but, Keyboard.down)
direction[]elseif but.key == CartesianIndex(0,-1)Keyboard.down
direction[] = CartesianIndex(0,-1)
elseif ispressed(but, Keyboard.right)
direction[]elseif but.key == CartesianIndex(1,0)Keyboard.right
direction[] = CartesianIndex(1,0)
end
end
end
Line 4,986 ⟶ 5,121:
{{libheader|Wren-dynamic}}
An embedded program so we can ask the C host to call ncurses and another library function for us.
<syntaxhighlight lang="ecmascriptwren">/* snakeSnake.wren */
 
import "random" for Random
Line 5,124 ⟶ 5,259:
<br>
Now embed this script in the following C program, compile and run it.
<syntaxhighlight lang="c">/* gcc snakeSnake.c -o snakeSnake -lncurses -lwren -lm */
 
#include <stdio.h>
Line 5,270 ⟶ 5,405:
WrenVM* vm = wrenNewVM(&config);
const char* module = "main";
const char* fileName = "snakeSnake.wren";
char *script = readFile(fileName);
WrenInterpretResult result = wrenInterpret(vm, module, script);
47

edits