Вот программа для игры в
Змейку (60 строк, это без появляющихся на поле препятствий)
Сначала задаём начальные
значения переменных:
Размеры поля и сторона клетки
в пикселях:
10 maxx = 30
20 maxy = 15
30 side = 20
Выделяем память для клеток
змейки
40 DIM zx(100)
50 DIM zy(100)
Начальная длина змейки
60 zl = 3
Задаём начальные координаты
клеткам змейки (напомню, головой считается клетка с самым большим номером). 
70 zx(1) = 14
80 zx(2) = 15
90 zx(3) = 16
100 zy(1) = 7
110 zy(2) = 7
120 zy(3) = 7
Скорость змейки (едет вправо)
130 vx = 1
140 vy = 0
Координаты пищи
150 fx = 20
160 fy = 3
Выделяем память для
препятствий (в этой программе препятствий не будет, но если нам понадобится их
включить, уже будет заготовка)
170 DIM px(100)
180 DIM py(100)
190 pl = 0
Готовимся рисовать
200 SCREEN 9
210 CLS
Пробегаем по всем клеткам
змейки и рисуем квадраты на экране
220 FOR n = 1 TO zl
230 LINE ((zx(n) - 1) * side, (zy(n) - 1) * side)-(zx(n) * side, zy(n) *
side), 1, BF
240 NEXT n
Рисуем квадрат в клетке с
пищей
250 LINE ((fx - 1) * side, (fy - 1) * side)-(fx * side, fy * side), 2,
BF
Слушаем клавиатуру. Клавиши WASD – смена направления движения, Q –
выход
Обратите внимание, что
несколько команд можно поместить в одну строку, разделяя их двоеточиями.
260 a$ = INKEY$
270 IF a$ = "a" OR a$ = "A" THEN vx = -1: vy = 0
280 IF a$ = "d" OR a$ = "D" THEN vx = 1: vy = 0
290 IF a$ = "w" OR a$ = "W" THEN vx = 0: vy = -1
300 IF a$ = "s" OR a$ = "S" THEN vx = 0: vy = 1
301 IF a$ = "q" OR a$ = "Q" THEN GOTO 570
Следующие 2 строки содержат
пустой цикл. Они нужны, чтобы змейка не двигалась на экране современного
компьютера слишком быстро
302 FOR i = 1 TO 1000
303 NEXT i
Находим, в каких координатах
будет голова змейки после очередного шага
310 x1 = zx(zl) + vx
320 y1 = zy(zl) + vy
Если голова попадает на еду,
то увеличиваем длину змейки и переходим на строку 390
330 IF (x1 = fx) AND (y1 = fy) THEN zl = zl + 1: GOTO 390
Строки 340-380 будут
выполняться, если змейка ничего не съела. В этом случае мы должны стереть с
экрана хвостовой квадрат и сдвинуть все координаты квадратов змейки на место
предыдущих
340 LINE ((zx(1) - 1) * side, (zy(1) - 1) * side)-(zx(1) * side, zy(1) *
side), 0, BF
350 FOR k = 1 TO zl - 1
360 zx(k) = zx(k + 1)
370 zy(k) = zy(k + 1)
380 NEXT k
Теперь задаём новые
координаты для головы змейки и рисуем её в новых координатах.
390 zx(zl) = x1
400 zy(zl) = y1
410 LINE ((x1 - 1) * side, (y1 - 1) * side)-(x1 * side, y1 * side), 1,
BF
Проверяем условия поражения.
Сначала – столкновение со стенками экрана
420 IF x1 = 0 OR y1 = 0 OR x1 > maxx OR y1 > maxy THEN GOTO 570
Затем – столкновение со своим
туловищем
430 FOR k = 1 TO zl - 1
440 IF x1 = zx(k) AND y1 = zy(k) THEN GOTO 570
450 NEXT k
Если еда съедена, её нужно
передвинуть
460 IF (x1 = fx) AND (y1 = fy) THEN GOTO 470 ELSE GOTO 260
Берём случайную клетку на
поле
470 fx = 1 + INT(RND * maxx)
480 fy = 1 + INT(RND * maxy)
Проверяем, не занята ли уже
эта случайная клетка туловищем змейки. Если занята – берём другую случайную
клетку
490 FOR k = 1 TO zl
500 IF fx = zx(k) AND fy = zy(k) THEN GOTO 470
510 NEXT k
И рисуем еду в новом
положении
520 LINE ((fx - 1) * side, (fy - 1) * side)-(fx * side, fy * side), 2, BF
Основной цикл программы
завершается, возвращаемся к слушанию клавиатуры
560 GOTO 260
Сюда мы попадём в случае
проигрыша. Сообщим игроку его счёт (длину змейки)
570 PRINT "Game over. Your score: "; zl
Вот и всё, игра готова.
Подумайте самостоятельно:
1)     
Как сделать так,
чтобы клетки ан поле были мельче?
2)     
Как рисовать пищу
не квадратом, а кругом?
3)     
Как сделать так,
чтобы змея могла двигаться ещё и по диагонали?
4)     
Как запретить
змее менять своё направление движения на строго противоположное?
5)     
Как сделать так,
чтобы со временем змея двигалась быстрее?
6) Как сделать так, чтобы после заврешения игры человека спрашивали, хочет ли он сыграть заново? 
7)     
И, если ответите
на это, будете вообще молодцы: - в каких местах программы и какие правки нужно
сделать, чтобы в игре появились препятствия?
Немає коментарів:
Дописати коментар