§ Скриншоты
§ Код игры на Бейсике
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
и не стирается символ.Такой подход позволяет передвигать только индексы (два индекса), и рисовать минимальное количество раз - только голову и удаление хвоста. Поскольку Бейсик спектрума работает крайне медленно, это единственное быстрое решение.