Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ZX-Review-1992-01-12.pdf
Скачиваний:
243
Добавлен:
28.03.2015
Размер:
2.43 Mб
Скачать

Когда я подготовил такой набор технических требований к программе, я почувствовал реальность выполнения этой задачи как с точки зрения объема занимаемой оперативной памяти, так и с точки зрения быстродействия процессора.

Предварительные исследования.

1. Дизайн экрана.

Исследовательскую часть я начал с самого важного, на мой взгляд, момента, ибо он во многом будет определять коммерческую ценность будущей программы. Я построил демонстрационный экран программы и оценил:

художественное впечатление;

объём расходуемой памяти:

быстродействие.

Всеми результатами я остался доволен. Особенно привлекательными мне показались добротные, прочные стены, разделяющие комнаты.

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

2. Раскладка оперативной памяти.

Закончив с первым этапом, я перешел ко второму. Поскольку у меня уже был определенный опыт, я поначалу воспользовался той картой оперативной памяти, которая сложилась после завершения программы "Quazatron", благо структура у этих двух программ была похожа. Я выделил участки памяти для хранения карты игрового поля, для хранения нужной мне графики, для всевозможных таблиц, массивов, для области рабочих процедур и программных переменных.

Как обычно, вскоре я обнаружил, что мои амбиции заходят слишком далеко и не все, что я запланировал, можно "втиснуть" в спектрумовское ОЗУ. Так, например, я хотел иметь 24 типа различных движущихся "монстров", но пришлось урезать их количество до 14.

3. Упаковка данных.

Убедившись, что оперативной памяти мне не хватает, я начал думать об упаковке данных. В первую очередь, мне предстояло хранить несколько карт игрового поля (по одной для каждого уровня) это наиболее емкие данные.

Я подготовил несколько различных методов, поэкспериментировал с ними и, наконец, остановился на наиболее оптимальном.

В принятом мною методе на задание комнаты на карте игрового поля расходовалось всего два байта и еще по два байта уходило на описание каждой двери. Вот как это было сделано.

Единицей измерения на карте я выбрал блок из четырех знакомест (размер 16x16 пикселов).

Для комнат в первом байте я решил хранить координату левого верхнего угла комнаты, я во втором байте размер этой комнаты. Вы знаете, что поскольку байт не может принимать значение больше 255, то мне нелегко было бы сделать достаточно большое игровое поле. Максимум 16x16 блоков по 16x16 пикселов, то есть, чуть больше одного экрана. Это, конечно, недостаточно, поэтому координата левого верхнего угла задается не как абсолютная, а как относительная, то есть это "смещение" начала N ой комнаты относительно N 1 ой комнаты. Тогда все стало на свое место (пример см. на рис. 1)

Пришлось "помудрить" и со вторым байтом, задающим размер комнаты. В итоге я остановился на том, что у меня в программе будет ограниченное количество разных типоразмеров комнат и второй байт будет задавать собственно не размер комнаты, а номер ее типоразмера. Соответствующая рабочая процедура потом по этому номеру найдет в таблице данных истинный размер комнаты (пример см. на рис. 1).

 

 

 

 

 

 

 

 

 

 

 

 

 

0

1

2

3

4

5

6

7

8

9

10

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12

13

14

15

16

17

18

19

20

21

22

23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

24

25

26

27

28

29

30

31

32

33

34

35

 

 

 

 

 

 

 

 

 

 

 

 

 

 

36

37

38

39

40

41

42

43

44

45

46

47

 

 

 

 

 

 

 

 

 

 

 

 

 

 

48

49

50

51

52

53

54

55

56

57

58

59

 

 

 

 

 

 

 

 

 

 

 

 

 

 

60

61

62

63

64

65

66

67

68

69

70

71

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. . . . . . . . . . . . . .

. . . . . . . . . . .

. . . и так далее . . . .

. . . . . . . . . . . . . .

. .

. . . . . . .

ОРГАНИЗАЦИЯ ДАННЫХ ПО КОМНАТАМ

ТИПОРАЗМЕРЫ КОМНАТ

N комнаты

смещение

типоразмер

 

 

 

 

 

 

1

0

1

 

 

2

2

6

2

1

 

 

 

 

3

24

2

 

 

 

4

18

3

 

 

 

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

 

 

и так далее

3

 

 

 

.

. . . . . . . . . . и т.д. . . . . . . . . . . .

 

 

Рис.1

 

. . . . . . . . . . . . . . . . . . . . . . . . . . . . и так далее . . . . . . . . . . . . . . . . . . . . . . . . . . .

ОРГАНИЗАЦИЯ ДАННЫХ ПО ДВЕРЯМ

ТИПЫ ДВЕРЕЙ

N двери

смещение

тип

 

1

5

1

тип 1

2

15

2

тип 2

3

21

1

 

4

6

4

тип 3

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

тип 4

 

и так далее

 

 

 

 

Рис.2

 

Аналогично было и с дверьми. Первый байт задает "смещение" координаты двери

относительно координаты предыдущей двери. Второй байт задает тип двери. Двери могут

быть четырех типов. Во первых, они могут быть вертикальными (тип 1) или горизонтальными

(тип 2), а во вторых, они еще могут быть и невидимыми (типы 3 и 4 соответственно). Пример

см. на рис. 2.

 

 

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]