§ Скриншоты
§ Код игры на Бейсике
10 BORDER 0: PAPER 0: INK 7: CLS 20 DIM a(16, 2) 30 DIM b(16, 2) 40 LET a(1,1)=1: LET a(1,2)=1 50 FOR i=0 TO 31: PRINT AT 0,i;"*": PRINT AT 20,i;"*": NEXT i 60 FOR i=0 TO 20: PRINT AT i,0;"*": PRINT AT i,31;"*": NEXT i 70 LET n=1 80 FOR i=1 TO 8 90 LET b(i,1)=2+INT(RND*28) 100 LET b(i,2)=2+INT(RND*18) 110 PRINT AT b(i,2), b(i,1); "x" 120 NEXT i 130 LET x=16 140 LET y=8 160 LET t=1: LET h=1 170 PRINT AT a(t,2), a(t,1); " " 180 LET t=t+1: IF t>15 THEN LET t=1 190 LET h=h+1: IF h>15 THEN LET h=1 200 LET i$=INKEY$ 210 IF i$="1" THEN LET n=1 220 IF i$="2" THEN LET n=2 230 IF i$="3" THEN LET n=3 240 IF i$="4" THEN LET n=4 250 IF n=1 THEN LET x=x-1 260 IF n=2 THEN LET y=y-1 270 IF n=3 THEN LET y=y+1 280 IF n=4 THEN LET x=x+1 290 IF x<1 OR y<1 OR x=31 OR y=20 THEN STOP 300 LET a(h,1)=x: LET a(h,2)=y 310 PRINT AT a(h,2), a(h,1); "@" 320 FOR i=1 TO 8 330 IF b(i,1)=x AND b(i,2)=y THEN LET b(i,1)=0: GO TO 190 340 NEXT i 350 GO TO 170
§ Описание алгоритма
Змейка реализована в виде передвижения по массивуa()
. Указывается индекс начала h
и конца (хвост) t
. При каждом движении змейки передвигается h++
и t++
, при этом удаляется символ из адреса, который был в a(t)
и ставится новый адрес символа в a(h)
. При достижении h=16
, циклично переворачивается в h=1
, так же с t
. Если змейка съедает фрукт, то тогда прибавляется только h
, хвост остается в неизменной позиции t
и не стирается символ.Такой подход позволяет передвигать только индексы (два индекса), и рисовать минимальное количество раз - только голову и удаление хвоста. Поскольку Бейсик спектрума работает крайне медленно, это единственное быстрое решение.