§ Скриншоты


§ Код игры на Бейсике

110 BORDER 0: PAPER 0: INK 7: CLS
220 DIM a(16, 2)
330 DIM b(16, 2)
440 LET a(1,1)=1: LET a(1,2)=1
550 FOR i=0 TO 31: PRINT AT 0,i;"*": PRINT AT 20,i;"*": NEXT i
660 FOR i=0 TO 20: PRINT AT i,0;"*": PRINT AT i,31;"*": NEXT i
770 LET n=1
880 FOR i=1 TO 8
990 LET b(i,1)=2+INT(RND*28)
10100 LET b(i,2)=2+INT(RND*18)
11110 PRINT AT b(i,2), b(i,1); "x"
12120 NEXT i
13130 LET x=16
14140 LET y=8
15160 LET t=1: LET h=1
16170 PRINT AT a(t,2), a(t,1); " "
17180 LET t=t+1: IF t>15 THEN LET t=1
18190 LET h=h+1: IF h>15 THEN LET h=1
19200 LET i$=INKEY$
20210 IF i$="1" THEN LET n=1
21220 IF i$="2" THEN LET n=2
22230 IF i$="3" THEN LET n=3
23240 IF i$="4" THEN LET n=4
24250 IF n=1 THEN LET x=x-1
25260 IF n=2 THEN LET y=y-1
26270 IF n=3 THEN LET y=y+1
27280 IF n=4 THEN LET x=x+1
28290 IF x<1 OR y<1 OR x=31 OR y=20 THEN STOP
29300 LET a(h,1)=x: LET a(h,2)=y
30310 PRINT AT a(h,2), a(h,1); "@"
31320 FOR i=1 TO 8
32330 IF b(i,1)=x AND b(i,2)=y THEN LET b(i,1)=0: GO TO 190
33340 NEXT i
34350 GO TO 170

§ Описание алгоритма

Змейка реализована в виде передвижения по массиву a(). Указывается индекс начала h и конца (хвост) t. При каждом движении змейки передвигается h++ и t++, при этом удаляется символ из адреса, который был в a(t) и ставится новый адрес символа в a(h). При достижении h=16, циклично переворачивается в h=1, так же с t. Если змейка съедает фрукт, то тогда прибавляется только h, хвост остается в неизменной позиции t и не стирается символ.
Такой подход позволяет передвигать только индексы (два индекса), и рисовать минимальное количество раз - только голову и удаление хвоста. Поскольку Бейсик спектрума работает крайне медленно, это единственное быстрое решение.