Текстовые игры на бейсике - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д