Как написать игру для ZX Spectrum 1994 г.

Оценка игровой ситуации - элементы оценок. Комплексная оценка игры.


6. ОЦЕНКА ИГРОВОЙ СИТУАЦИИ

«Оценка игровой ситуации» - довольно неоднозначное понятие. В него может входить как простой подсчет очков, числа попаданий или любой другой числовой величины, так и общий контроль ситуация в игровом пространстве, которую мы видим на экране. Разработчики игровых программ обычно стараются в равной мере использовать как количественную, так и качественную оценку, однако специфика игры часто диктует свои требования. Так, в известной игре Tetris нас больше интересует положение в «стакане», целиком захватывает процесс борьбы с фигурками, их правильная укладка, а об очках мы вспоминаем, когда игра уже закончена. Тем не менее, количество набранных очков в этой игре тоже играет важную роль, так как без них невозможно узнать, становится ли выше от раза к разу уровень нашего мастерства и каков он по сравнению с уровнем других игроков. Однако есть и такие популярные игры, как например, Tomahawk, где игровое пространство выглядит очень просто, зато количественная оценка ситуации изобилует всевозможной числовой и текстовой информацией.

Опираясь на эти и другие примеры игровых программ, можно сделать общие выводы относительно того, как формировать блок оценки игровой ситуации

Если создаваемая вами игра динамична, с быстро изменяющейся ситуацией на экране, с большим числом движущихся объектов, подобно Flying Shark, то не следует злоупотреблять числовыми данными, ограничив их одним-двумя. При этом располагать данные лучше где-то в дальней части экрана, делая изображения цифр небольшими и неброского цвета.

Если же вы разрабатываете спокойную игру с медленно развивающимся сюжетом типа Video Pool, то в этом случае все параметры игры могут характеризоваться числовыми величинами, и количество сообщений ограничивается лишь местом на экране. Возможен даже вариант, когда для демонстрации оценочных числовых характеристик отводится целый экран. Что касается оформления информации, то в рассматриваемом случае цифровые надписи желательно делать максимально отличными одна от другой, используя для этой цели символы различных форм и размеров, всевозможные рамки и цветовое оформление. Кроме того, будет нелишним сопроводить выдачу на экран особо ценной информации звуковыми эффектами.

А теперь от общих соображений перейдем к конкретным программам. Для начала рассмотрим те программы, которые использованы нами в предыдущих главах. В игре ЧИСЛА оценка результата игры чисто цифровая; нас интересует здесь даже не само неизвестное число, а количество шагов, которое делает играющий для его угадывания. Программа ЖИЗНЬ включает в себя оба вида оценок, то есть мы следим за очередной популяцией и оцениваем ее характер - идет размножение или угасание. Но для того чтобы уловить тонкости процесса развития, выведены и количественные оценки: номер поколения и количество особей в нем. Наконец, в игре СОКОБАН нет ни одной числовой характеристики, но от этого игра не становится менее интересной.

Элементы оценок

В качестве примеров будет полезно рассмотреть несколько фрагментов программ, в которых иллюстрируются разные виды оценок. Больше всего в играх распространены всевозможные подсчеты: числа очков, числа попаданий, количества оставшихся попыток (жизней), снарядов и т. д. Объясняется это прежде всего простотой программной реализации в сочетании с высокой информативностью этих оценок. Действительно, если экран сигнализирует о том, что осталось всего 1-2 снаряда, то вы наверняка не броситесь сломя голову в гущу сражения, а будете изо всех сил нажимать на клавиши или ручку джойстика, стремясь уйти от выстрелов противника.

Предположим, что в некоторой игре требуется подсчитать количество оставшихся жизней, причем на момент начала игры их было 10. Тогда, если опустить «игровые» строки программы и, наоборот, выделить те, которые отвечают за выполнение поставленной задачи, то можно предложить следующий вариант: 50 LET KOL=10: LET POP=0: LET TIME=999 100 REM * START GAME * 480 LET KOL=KOL-1

485 PRINT AT 1,5; PAPER 0; INK 4;"LIVES: ";KOL

490 IF KOL>0 THEN GO TO 100

500 PRINT AT 10,11; PAPER 2; INK 7;"GAME OVER!"

50 - в этой строке задаются начальные значения всех переменных, которые будут использованы в программе в качестве счетчиков! Восклицательный знак - это не типографская опечатка, а попытка привлечь ваше внимание к важному элементу программы. Сколько сил, нервов и времени бывает потрачено программистами впустую только оттого, что где-то забыли задать начальные значения каких-то величин. Для будущих опытов в программировании опишем здесь переменные, которые нам еще понадобятся:

KOL - количество жизней;

POP - число попаданий;

TIME - оставшееся до конца игры время;

100 - с этой строки начинается часть программы, реализующая алгоритм игры;

480 - после того, как на экране завершится один цикл действий, обусловленных сюжетом игры, количество жизней уменьшается на единицу. Программа может попадать на эту строку, например, при поражении вашего корабля торпедой противника или после истечения времени, отведенного на одну попытку;

490 - в следующей после изменения счетчика строке чаще всего определяется, на какую строку перейти, если значение управляющей переменной (у нас - KOL) превысит или окажется меньше заданной величины. В нашем примере - если жизни еще остались (KOL не равна 0), то можно продолжить игру (управление передастся на строку 100), в противном случае (KOL = 0) игра должна быть закончена;

500 - если условие в строке 490 не выполняется, то выводится сообщение о том, что игру пора начинать сначала или загружать другую.

Большое количество популярных игр связано с попаданием одних предметов в другие, что в переводе на язык программирования означает столкновение спрайтов, а если быть еще более точным и перейти на язык математики, -совпадение соответствующих координат. Чтобы реализовать в программе новую оценку - оценку факта попадания снаряда в цель, - достаточно вставить в нашу программку всего одну строку:

200 IF X=XS AND Y=YS THEN LET POP=POP+1:PRINT AT 1,25; PAPER 2; INK 5;"SCORE: ";POP: GO SUB 1000

Здесь X и Y соответствуют координатам цели, a XS и YS - координатам снаряда. Если горизонтальные и вертикальные координаты одновременно совпадают, то счетчик POP увеличивается на единицу, после чего на экран выводится информация об общем количестве попаданий в цель. Поскольку каждое попадание желательно сопроводить аудио- и видеоэффектами, то на этот случай в строке предусмотрен вызов соответствующей подпрограммы, которую, как мы надеемся, вы уже можете написать самостоятельно. Если хотя, бы одна из координат не совпадает, то операторы строки 200 после THEN выполняться не будут, переменная POP останется без изменений и программа перейдет на следующую строку.

Остановимся еще на одной величине, которая наиболее часто используется в игровых программах, - времени игры. Это может быть время, оставшееся до конца игры, или время, потраченное на игру с момента ее запуска. Вставим в приведенный выше фрагмент программы следующие строки:

300 LET TIME=TIME-1: PRINT AT 0,25; INK 7; PAPER 1; "TIME: ";TIME;" " 310 IF TIME=0 THEN PRINT AT 12,10; PAPER 4; INK1;"OUT OF TIME": GO TO 480

Как вы уже догадались, глядя на строку 300, здесь будет выводиться на экран время, оставшееся до конца игры (напомним, что начальная величина Т!МЕ = 999 установлена в строке 50). Одновременно со счетом происходит постоянный контроль переменной TIME в строке 310, и как только условие этой строки выполнится, на экране появится текст OUT OF TIME, который говорит о том, что время, отпущенное на выполнение задания в игре, закончилось. Затем программа переходит к строке 480, лишающей игрока одной жизни.

Этими примерами, разумеется, не исчерпывается та информация, которую можно выводить на экран во время игры. Кроме числовых характеристик, хорошо смотрятся различные текстовые сообщения о ходе игры, особенно если они выполнены на русском языке, да еще хорошим шрифтом. От того, какая информация будет появляться в процессе игры и как она будет подана, зависит очень многое, поэтому блоку оценки всегда следует уделять должное внимание.

Комплексная оценка игры

Давайте обратимся к программе БОМБЫ (рис. 6.1), в которой присутствуют оба типа оценки игровой ситуации.

Несколько слов о том, что должно происходить на экране. После нажатия любой клавиши будет нарисован слой воды синего цвета, на дне возникнет зеленая растительность, и где-то посреди нее расположится красный люк. Слева направо начнет двигаться корабль

белого цвета, причем скорость корабля в течение игры будет изменяться, чтобы нельзя было вычислить заранее время пуска бомбы. Нажимая любую клавишу, вы открываете бомбовый люк, и оттуда вырывается и устремляется к поверхности бомба, которая должна быть выпущена с таким расчетом, чтобы, дойдя до поверхности, столкнуться с кораблем. Если вы попали в корабль, то происходит взрыв, раздаются соответствующие звуки, и на табло появляется информация о попадании.

Программа 29. БОМБЫ.

30 FOR N=0 TO 71 40 READ S

50 POKE USR "A"+N,S 60 NEXT N

70 DATA 60,60,60,60,60,24,8,16

80 DATA 74,42,186,177,255,255,255,255

90 DATA 0,0,0,0,0,0,255,255

100 DATA 0,0,66,66,66,195,255,255

110 DATA 0,0,0,0,0,255,255,255

120 DATA 0,0,24,96,0,0,3,12

130 DATA 0,64,33,29,29,255,118,63

140 DATA 0,126,255,182,255,255,219,255

150 DATA 0,2,132,184,184,255,108,248

200 BORDER 1: PAPER 1: INK 6: CLS

205 PRINT AT 3,6;"********************"

210 PRINT AT 7 6;"********************"

220 FOR N=3 TO 7

230 PRINT AT N,6;"*"

240 PRINT AT N,25;"*"

250 NEXT N

260 PRINT AT 5,11; INK 3;"BППOППMППB"

270 LET C=2: LET A$="PRESS ANY KEY TO CONTINUE"

280 FOR N=1 TO 25

290 PRINT AT 18,N+3; INK C;A$(N)

300 LET C=C+1: IF C>7 THEN LET C=2

310 NEXT N

320 IF INKEY$="" THEN GO TO 280

325 REM ------------

330 BORDER 0: PAPER 0: INK 1: CLS

340 LET U=INT (RND*7+4)

350 LET KY=U-1

360 LET B=INT (RND*10+12)

370 LET B0=0: LET BX=B+1: LET BY=20

380 LET SC=0: LET BOM=10

400 FOR N=U TO 20

410 PRINT AT N,0;"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" 420 NEXT N

430 PRINT AT 21,0;INK 4;"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"

440 PRINT AT 21,8; INK 2;"CEC"

450 LET KX=0: LET KX1=KX: LET S=RND/5+.05

460 PRINT AT KY,KX-1;" ": PRINT AT KY,KX; INK 7;"GHI"

465 IF BOM=0 AND BY=20 THEN GO TO 700

470 IF INKEY$="" AND B0=0 THEN PRINT AT 21,B+1; INK 2;"E": GO TO 550

475 IF B0=0 THEN LET BOM=BOM-1

480 LET B0=1: PRINT AT 21,8+1; INK 2;"D"

490 LET BY=BY-.5: BEEP .003,BY

500 IF BY<U-1 AND BX>=KX AND BX<=KX+2 THEN LET BY=20:LET BO=0: LET SC=SC+1: GO SUB 1000: GO TO 450

510 IF BY<U-1 THEN LET B0=0: LET BY=20: PRINT AT U-1,BX; " ": GO TO 550 515 PRINT AT BY+1,BX; INK 1;"F" 520 PRINT AT BY,BX; INK 7;"A"

550 LET KX1=KX1+S: LET KX=INT KX1: IF KX1>29 THEN PRINT AT U-1,28;"ППП": GO TO 450 560 PRINT AT 0,5; INK 5;"SCORE:";SC;"ПППППBOMB:";BOM;" " 600 GO TO 460

700 BORDER 1: PAPER 1: CLS

710 LET A$="WY POPALI "+STR$ SC+" RAZ IZ 10"

720 LET M=LEN A$

730 LET C=2

740 FOR N=1 TO M

750 PRINT AT 11,N+5; INK C;A$(N) 760 LET C=C+1: IF C>7 THEN LET C=2 770 NEXT N

780 IF INKEY$="" THEN GO TO 740 790 GO TO 200 1000 REM -- WZRYW --1005 FOR M=1 TO 2 1010 FOR N=2 TO 7

1015 BEEP .003,0: BEEP .003,0: BEEP .003,0 1020 PRINT AT KY,KX; INK 2;"GHI" 1030 BORDER N

1035 BEEP .003,0: BEEP .003,0: BEEP .003,0

1040 PRINT AT KY,KX; INK 3;"GHI"

1045 PAUSE 10

1050 NEXT N: NEXT M

1055 PRINT AT KY,KX;"ППП"

1060 BORDER 0

1070 RETURN

30... 150 - кодирование и ввод в память компьютера графических символов, которым соответствуют следующие изображения: А - бомба,

В - подводная растительность, С - фрагмент подводного люка, D - открывающаяся часть люка, Е - крышка люка, F - вода,

G - нос корабля, Н - средняя часть корабля, I - корма корабля;

200...270 - вывод на экран заставки игры;

280...310 - последняя часть заставки выводится таким образом, чтобы буквы переливались разными цветами;

320 - вывод разноцветной фразы будет продолжаться до тех пор, пока игрок не нажмет какую-либо клавишу;

330...380 - переменным присваиваются первоначальные значения. U - уровень воды, КХ - горизонтальная координата корабля, В - положение люка по горизонтали, В0 = 0 - бомба не выпушена, В0=1 - бомба из люка вышла, но до поверхности не дошла, ВХ - координата х бомбы, BY координата у бомбы, SC -набранные очки, ВОМ - количество имеющихся бомб, S - скорость движения корабля;

400...420 - на экране изображается толща воды; 430 - вывод изображений зеленой растительности на дне моря; 440 - установка пускателя бомб красного цвета, символ Е изображает закрытый люк;

450 - задание начальных координат и скорости корабля; 460 - вывод корабля;

465 - проверяется, остались ли в наличии бомбы;

470 - если никакая клавиша не нажата, и бомба не выпущена (80 = 0), то рисуется закрытая крышка люка, после чего происходит переход на строку 550; 480 - если клавиша нажата, то выводится изображение открытой крышки; 490 - изменение вертикальной координаты бомбы BY и подача звукового сигнала, свидетельствующего о ее движении вверх. Во время подъема бомбы высота сигнала меняется пропорционально переменной BY;

500 - проверка следующих условий: бомба дошла до поверхности и бомба соприкоснулась с кораблем. Если оба условия выполняются, то вызывается подпрограмма WZRYW, имитирующая взрыв, а затем появляется новый корабль, и

все начинается заново;

510 - проверка условия бомба дошла до поверхности, но не попала в корабль. Если это условие выполняется, то устанавливаются значения некоторых переменных, изображение бомбы на поверхности закрашивается, после чего происходит переход на строку 550;

515, 520 - изображение на экране бомбы, поднимающейся к поверхности из глубины;

550 - изменение горизонтальной координаты корабля, проверка - дошел он до края экрана (моря) или нет;

560 - вывод числовых характеристик игры - числа набранных очков и количества оставшихся бомб. Таким образом, результаты игры постоянно присутствуют в двух оценочных надписях: SCORE и BOMB;

600 - если бомбы еще есть, то переход на начало цикла игры;

700...780 - вывод на экран заключительной надписи о результатах игры. Каждая буква текста переливается разными цветами;

1000... 1070 - подпрограмма со звуковыми эффектами, имитирующая взрыв корабля.

Подводя итог, можно сказать следующее.

В этой простой игре присутствуют обе оценки: качественная и количественная.

Качественную оценку можно соотнести со строками программы 450...550, то есть с теми операторами, которые формируют сложную динамическую (меняющуюся во времени и пространстве) картину, на которую играющий в состоянии оказывать определенное воздействие. Это воздействие влияет на результат игры и является чрезвычайно важным фактором.

Числовые характеристики игры, которые индицируются во время всего сражения, играют в этой игре вспомогательную роль. Их обеспечивают строки программы 560 и 700...770, причем тот набор данных, который мы видим, является минимально необходимым, то есть без этих результатов невозможно судить о ходе игры. Однако можно учитывать и другие параметры: скорость корабля, глубину цели, размеры цели и т. д. Это потребует внесения некоторых изменений в программу и преобразования игрового пространства. Попробуйте!




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Вступление - Читайте второй номер нашей газеты, и удивляйтесь.
Смех - маленький кусочек смеха , которого нам так не хватает в нашей нелегкой жизни.
Юмор - Про сестру Жирного.
interview - unbeliever^xtm
Наболело - самоедство авторов газеты об отсутвии реакции читателей.

В этот день...   21 ноября