Небольшой, но полностью рабочий пример игры на yabasic.
Что умеет:
Управление: ← → — движение, пробел — выстрел, Esc — выход.
Листинг кода:
Что умеет:
- Корабль ездит стрелками ← →.
- Пробел — выстрел, попадание во врага даёт +1 к счёту.
- Враг движется по горизонтали и зацикливается.
- Esc — выход, счёт выводится через TEXT.
- Враг один, не стреляет, условий проигрыша нет — чистый каркас.
- У INKEY$ в yabasic нет автоповтора: жать стрелки и пробел надо повторно. Это особенность языка, а не баг.
Управление: ← → — движение, пробел — выстрел, Esc — выход.
Листинг кода:
Код: Выделить всё
// Простой шутер для yabasic
// Управление: стрелки влево/вправо — движение, пробел — выстрел, Esc — выход
OPEN WINDOW 400, 300
CLEAR SCREEN
SHIP_X = 150
ENEMY_X = 50
BULLET_Y = -100
BULLET_X = -100
SCORE = 0
WHILE TRUE
// Неблокирующий опрос клавиатуры: ждём не дольше 0.01 сек
K$ = INKEY$(0.01)
// Выход по Escape
IF K$ = "esc" OR K$ = CHR$(27) THEN
BREAK
ENDIF
// Управление кораблём
IF K$ = "right" THEN
SHIP_X = SHIP_X + 5
ELSEIF K$ = "left" THEN
SHIP_X = SHIP_X - 5
ELSEIF (K$ = "space" OR K$ = " ") AND BULLET_Y <= 0 THEN
BULLET_Y = 250
BULLET_X = SHIP_X + 5
ENDIF
// Ограничение движения корабля краями окна
IF SHIP_X < 0 THEN
SHIP_X = 0
ENDIF
IF SHIP_X > 390 THEN
SHIP_X = 390
ENDIF
// Движение врага (циклически по горизонтали)
ENEMY_X = ENEMY_X + 1
IF ENEMY_X > 390 THEN
ENEMY_X = 50
ENDIF
// Движение пули и проверка попадания
IF BULLET_Y > 0 THEN
BULLET_Y = BULLET_Y - 5
// Попадание: пуля в зоне врага и по X, и по Y
IF BULLET_Y < 62 AND BULLET_Y > 48 AND ABS(BULLET_X - ENEMY_X) < 12 THEN
BULLET_Y = -100
SCORE = SCORE + 1
ENDIF
// Пуля улетела за верхний край (не попала)
IF BULLET_Y < 0 THEN
BULLET_Y = -100
ENDIF
ENDIF
// Отрисовка кадра
CLEAR WINDOW
RECTANGLE SHIP_X, 250, SHIP_X + 10, 260
RECTANGLE ENEMY_X, 50, ENEMY_X + 10, 60
IF BULLET_Y > 0 THEN
CIRCLE BULLET_X, BULLET_Y, 2
ENDIF
TEXT 10, 20, "SCORE: " + STR$(SCORE)
PAUSE 0.01
WEND
END