Ночной код - Змейка

screenshot

Сегодня ночью не мог уснуть и решил себя занять кодом: написал игру змейку. Вдохновлялся той самой змейкой, которая была на тетрисе; на том самом тетрисе, который был серый с желтыми кнопочками.

Заметка будет интересна новичкам, если есть какие то вопросы по коду - пишите.

Немного об исполнении. Для реализации перемещения я использовал время, т.е. через определенный промежуток времени наш блок (голова), исходя из заданного направления, переместится на шаг. Змейка перемещается по квадратам, в данном случаи шаг и является стороной квадрата, создается эффект что змейка как на том самом сером тетрисе с желтыми кнопочками перемещается по квадратикам экрана.

if timer()-time >= speed

Для задания движения хвоста использовал массив, который перемещал координаты головы последующим элементам массива, когда происходил шаг.

if direct = 1
     tempx=player(1).xpos// сохраняю координаты
     tempy=player(1).ypos//
     score += 5 // Начисляю очки для примера не интересен
    player(1).xpos -= tile // шаг
    playsound 3 // проигрывается музыка
    for i=2 to n // задаю хвосту новые коориднаты
        tempx1 = player(i).xpos
        tempy1 = player(i).ypos
        
        player(i).xpos = tempx
        player(i).ypos = tempy
        
        tempx = tempx1
        tempy = tempy1
    next i
    time = timer() // засекаю время до следующего шага
endif

Для того, чтобы кусок еды появился на "сетке", использовал формулу остатка от деления, т.е. наша "еда" появляться рендомно на карте; для того, чтобы привязать её к "сетке", я делил с остатком от деления координату(рендомную) на шаг, полученный результат вычитал из шага и это значение прибавлял к рендомной координате, чтобы та появилась на сетке. =]

x += 40-mod(x,40)

Для того чтобы проверить что наша змейка кушает хвост использовал вот такой метод, предлагаю вам самим разобраться во фрагменте:

for m=5 to 90 step 1
if(player(1).xpos=player(m).xpos and player(1).ypos=player(m).ypos and player(m).fl = true) // player(m).fl = true тобишь это флаг каждого куска хвоста, существует он или нет
    eact=true// флаг для окончания игры.
    playsound 2
endif
next m

Я прошу прощения за плохое исполнения ярлыка игры и стартового экрана.

Ссылка на игру:

http://file.kirovnet.ru/d/612238/snake.rar

Ссылка на исходник, хочу извиниться за плохой стиль и за отсутствие комментариев, писал сонный со всеми вытекающими:

http://file.kirovnet.ru/d/612285/snake_source.rar

Чтобы запустить исходник вам понадобиться PlayBasic, бесплатную версию можно скачать тут:

http://www.playbasic.com/files/Demos/PlayBasicLearningEdition.exe

P.S. Я понимаю что многие не знакомы с командами языка но они интуитивно-понятные и для каждого есть описание в справке.

screenshot

  • ATLUS
  • 31 марта 2012, 22:38
  • 0