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