Текстовые игры на бейсике - QBasic

Узнай цену своей работы

Формулировка задачи:

Подскажите, можно ли сделать что-то похожее на тиду или мир теней (или еще что-то от playtox)в среде бейсика? Заранее спасибо. Оффлайн, естественно

Решение задачи: «Текстовые игры на бейсике»

textual
Листинг программы
DEFINT A-Z
DECLARE SUB InitWorlds ()
DECLARE SUB InitEnemys ()
DECLARE SUB InitPlayer ()
DECLARE SUB InitWeapon ()
DECLARE FUNCTION CalcDamage% (EnemyN)  '  Вычисляем повреждения противнику
 
  CLS
 
' Опишем структуры памяти
 TYPE Weapon
  WpName AS STRING * 15
  Attack AS INTEGER              ' Атака оружия
  Chance AS SINGLE               ' Шанс удачной атаки
 END TYPE
 
'   Локация
 TYPE World
  Location AS STRING * 15        ' Имя локации
  Enemys AS INTEGER              ' Кол-во врагов
  EnemyOrientLevel AS INTEGER    ' Средний уровень врагов
  EnemyGroup AS INTEGER          ' Макс кол-во врагов за раз
 END TYPE
 
'   Игрок
 TYPE Player
  Nm AS STRING * 15              ' Имя
  Lv AS INTEGER                  ' Уровень
  Ex AS LONG                     ' Опыт
  Health AS INTEGER              ' Здоровье
  Mp AS INTEGER                  ' Магич. энергия(спецатаки)
  Weapon AS INTEGER              ' Номер оружия
 
 END TYPE
 
'   Враг
 TYPE Enemy
  Nm AS STRING * 15
  Hl AS INTEGER
 END TYPE
 
' Заведём память под структуры
 DIM SHARED PL AS Player
 DIM SHARED EN(50) AS Enemy, EnQuantity
 DIM SHARED MAP(50) AS World, Locations, CurrentMp
 DIM SHARED WPN(50) AS Weapon, Weapons
 
   '  "Технические" переменные
 DIM SHARED Regim%             ' Режим игры:   0 - тихо   1 - бой
 DIM SHARED TimeBeforeAttack   ' Время перед атакой
 DIM SHARED GameTime           ' Общее время игры
 
 
 
ON TIMER(1) GOSUB Tmr
TIMER ON
 
TimeBeforeAttack = RND * 15 + 20
   InitWorlds
   InitEnemys
   InitPlayer
   InitWeapon
 
 
 
Rdr = 1
Vbr = 1
 
  DO
    Kb$ = INKEY$
    IF Kb$ = CHR$(27) THEN ExitGame = 1
    IF Kb$ = CHR$(0) + CHR$(72) AND Vbr > 1 THEN Vbr = Vbr - 1: Rdr = 1
    IF Kb$ = CHR$(0) + CHR$(80) AND Vbr < 4 THEN Vbr = Vbr + 1: Rdr = 1
 
 
    IF Rdr = 1 THEN
       Rdr = 0  ' Отрисовка сработала, выключаем
     
      LOCATE 3, 15: PRINT "MENU"
     
      IF Vbr = 1 THEN COLOR 15, 1 ELSE COLOR 7, 0
      LOCATE 5, 10: PRINT "  Strike enemy"
      IF Vbr = 2 THEN COLOR 15, 1 ELSE COLOR 7, 0
      LOCATE 6, 10: PRINT "  Special attack"
      IF Vbr = 3 THEN COLOR 15, 1 ELSE COLOR 7, 0
      LOCATE 7, 10: PRINT "  Strike any"
      IF Vbr = 4 THEN COLOR 15, 1 ELSE COLOR 7, 0
      LOCATE 8, 10: PRINT "  Elixir"
      LOCATE Vbr + 4, 10: COLOR 10, 1: PRINT CHR$(16)
      COLOR 7, 0
     
      LOCATE 18: PRINT STRING$(80, 196)
      LOCATE 18, 3: PRINT " " + RTRIM$(PL.Nm) + " "
      LOCATE 19, 10: PRINT "Lv:"; : COLOR 10: PRINT PL.Lv; : COLOR 7
      LOCATE , 30: PRINT "Exp:"; : COLOR 10: PRINT PL.Ex; : COLOR 7
      LOCATE , 50: PRINT "Health:"; : COLOR 10: PRINT PL.Health; : COLOR 7
      LOCATE 20, 10: PRINT "Location: ";
      COLOR 10: PRINT MAP(CurrentMp).Location: COLOR 7
      LOCATE 21, 10: PRINT "Before attack:"; TimeBeforeAttack; "seconds  "
    END IF
  LOOP UNTIL ExitGame
 
END
 
Tmr:
 IF Regim% = 0 AND TimeBeforeAttack > 0 THEN
   TimeBeforeAttack = TimeBeforeAttack - 1
   Rdr = 1
 END IF
RETURN
 
FUNCTION CalcDamage% (EnemyN)
 
 
END FUNCTION
 
SUB InitEnemys
 
 EnQuantity = 4
 
 EN(1).Nm = "Scorpion"
 EN(1).Hl = 26
 
 EN(2).Nm = "Poison scum"
 EN(2).Hl = 54
 
 EN(3).Nm = "Dark skeleton"
 EN(3).Hl = 111
 
 EN(4).Nm = "Royal Guard"
 EN(4).Hl = 238
 
END SUB
 
SUB InitPlayer
  PL.Nm = "Player"
  PL.Lv = 1
  PL.Ex = 0
  PL.Health = 100
END SUB
 
SUB InitWeapon
  Weapons = 5
 
  WPN(1).WpName = "Sword of hope"
  WPN(1).Attack = 10     ' Атака 10
  WPN(1).Chance = .5     ' Шанс 50 / 50
 
  WPN(2).WpName = "Slayer of gods"
  WPN(2).Attack = 13     ' Атака 13
  WPN(2).Chance = .6     ' Шанс 60%
 
  WPN(3).WpName = "Excalibur"
  WPN(3).Attack = 21     ' Атака 21
  WPN(3).Chance = .8     ' Шанс 80%
 
  WPN(4).WpName = "Great Axe"
  WPN(4).Attack = 40     ' Атака 40
  WPN(4).Chance = .7     ' Шанс 70%
 
  WPN(5).WpName = "Powerfull Blade"
  WPN(5).Attack = 53     ' Атака 53
  WPN(5).Chance = .88    ' Шанс 88%
 
END SUB
 
SUB InitWorlds
 
 
  Locations = 5    ' Всего локаций
  CurrentMp = 1    ' Тек. локация
 
  MAP(1).Location = "Orion"
  MAP(1).Enemys = 36
  MAP(1).EnemyOrientLevel = 1
  MAP(1).EnemyGroup = 1
 
  MAP(2).Location = "Midgard"
  MAP(2).Enemys = 120
  MAP(2).EnemyOrientLevel = 4
  MAP(2).EnemyGroup = 1
 
  MAP(3).Location = "Great Prison"
  MAP(3).Enemys = 263
  MAP(3).EnemyOrientLevel = 7
  MAP(3).EnemyGroup = 2
 
  MAP(4).Location = "Underground Cementery"
  MAP(4).Enemys = 378
  MAP(4).EnemyOrientLevel = 6
  MAP(4).EnemyGroup = 5
 
  MAP(5).Location = "HELL"
  MAP(5).Enemys = 666
  MAP(5).EnemyOrientLevel = 13
  MAP(5).EnemyGroup = 10
 
END SUB

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.643 из 5
Похожие ответы