Адрес: ул. Б. Очаковская 32 Москва Россия
Наши официальные канал и чат в telegram, группа в ВКонтакте

Простой шутер на yabasic: рабочий каркас для обучения (корабль, враг, выстрел, счёт)

Рабочий каркас шутера на yabasic: движение, выстрел, счёт, выход по Esc. Проверено на Linux 2.90. Отличный шаблон для детей

Скачать бесплатные программы для Yabasic на Windows, Linux, MacOS, PlayStation 2
Аватара пользователя
Anton
Site Admin
Сообщения: 259
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Тема касается GNU\Linux Простой шутер на yabasic: рабочий каркас для обучения (корабль, враг, выстрел, счёт)

Сообщение Anton »

Простой шутер на yabasic: рабочий каркас для обучения (корабль, враг, выстрел, счёт)
Небольшой, но полностью рабочий пример игры на yabasic.

Что умеет:
  • Корабль ездит стрелками ← →.
  • Пробел — выстрел, попадание во врага даёт +1 к счёту.
  • Враг движется по горизонтали и зацикливается.
  • Esc — выход, счёт выводится через TEXT.
Что оставлено простым специально:
  • Враг один, не стреляет, условий проигрыша нет — чистый каркас.
  • У INKEY$ в yabasic нет автоповтора: жать стрелки и пробел надо повторно. Это особенность языка, а не баг.
Идеи для доработки: несколько врагов, кулдаун выстрела, ответный огонь, жизни и «Game Over», звук через BEEP.

Управление: ← → — движение, пробел — выстрел, 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
У вас нет необходимых прав для просмотра вложений в этом сообщении.