-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsample.txt
279 lines (232 loc) · 15.2 KB
/
sample.txt
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
☆★☆ サンプルプログラムについて ☆★☆
このマニュアルでは、「MSXべーしっ君たーぼ」付属のサンプルプログラムの
使い方について説明しています。基本的な使い方については、「『MSXべーしっ
君たーぼ』について その1(基本編)」をご参照下さい。命令の使用方法につ
いては「『MSXべーしっ君たーぼ』について その2(命令編)」をご参照下さい。
また「MSXべーしっ君たーぼ」使用にあたっての注意点や、高度な使い方につ
いては、「『MSXべーしっ君たーぼ』について その3(応用編)」をご参照下さ
い。
MSXは、アスキーの商標です。
MSX-DOSは、Microsoft Corporationの登録商標です。
【はじめに】
「MSXべーしっ君たーぼ」のディスク内には、サンプルプログラムが付属していま
す。「MSXべーしっ君たーぼ」の実力を試したり、プログラミングの参考にするため
にご利用下さい。
このサンプルプログラムをご利用される前に、ディスクのバックアップを取ること
をお勧めします。
《 注意 》
1) 「MSXべーしっ君たーぼ」添付のサンプルプログラムは、お客様が個人でお
使いになる範囲内で、複写、改造を行なってもかまいません。ただし、複写、
改造したサンプルプログラムを配布することは禁止します。
2) 以下のサンプルプログラムを実行する際に、画面にゴミが表示される場合が
あります。これはスプライトです。このゴミが表示された場合は、
VDP(9)=VDP(9) OR 2
という命令を実行して下さい。この命令は、スプライト表示を禁止するもの
です。なお、SCREEN文などではスプライト表示の許可・不許可は設定できま
せん。
再びスプライトを表示させるためには、
VDP(9)=VDP(9) AND &HFD
を実行して下さい。
【サンプルA】 迷路
[プログラム名] MAZE.BAS
[対応機種] MSX2+/MSX turbo R
[解説]
「RUN」命令で実行します。最初に迷路の作り方をたずねてきますので、番号
で答えて下さい。迷路が完成したら、スペースキーを押して下さい。次に解き方
をたずねてきます。これも数字を入力して下さい。「自分で解く(3D)」を選択し
た場合は、カーソルキーでスタート地点からゴールまで移動します。スペースキ
ーを押すと、横スクロールで2D迷路が現われます。自分の位置は赤い四角で表さ
れています。もう一度スペースキーを押すと、元の3D迷路に戻ります。
カーソルキーは
[↑] … 前進
[→] … 右方向に進む
[←] … 左方向に進む
に割り当てられています。2D画面では、上方向が北、下方向が南、右方向が東、
左方向が西です。
[アルゴリズム]
○ 高速型
1つの四角形を考えます。そして、その真ん中から上下左右いずれかに向かっ
て、1本の線を引きます。(図1)
これが、このアルゴリズムの基本です。今度は、この四角を横に2つ並べて同
じことをしてみます(図2)。ここで注意しなければならないことは、2つの壁が重
なってはいけないということです。壁が重なると、外枠とつながらない、いわゆ
る「島」と呼ばれる壁ができてしまいます。今度はさらに縦に広げます。(図3)。
+---+ +---+---+
| | | |
| ・→| | ・--→・ |
| | | ↓ |
+---+ +---+---+
図1 図2
+---+---+ +---+---+
| | | |
| ・--→・ | | ・--→・ |
| | | | ↑ | |
+ | + + | | +
| ↓ | | | ↓ |
|←・ ・→| | ・←--・ |
| | | |
+---+---+ +---+---+
図3 図4
もうひとつ注意すべき点として、図4のような場合があります。このような
「島」を作らないために、「2段目以降は上に線を伸ばしてはいけない」という
制約をつけています。
以上がこのアルゴリズムです。実際のプログラムでは、350行で「どちらに伸
ばすか?」、370~430行のPOINT命令が「壁が重なっているか?」、さらに370行の
「Y=8+K」は「一番上の段か?」という処理をしています。
○ 壁伸長型
こちらは高速型に比べてアルゴリズムは簡単ですが、プログラムが多少複雑に
なります。
こちらのアルゴリズムも先ほどのように、最初四角の中に基準となる点を設定
します(図5)。そして、点から点へと伸ばせるだけ線を伸ばします(図6)。この線
が外枠につながる壁に衝突したら、次の基点から線を伸ばし始めます(図7)。自
分の引いてきた線に囲まれてしまった場合(図8)は、また最初の地点に戻って線
を引き始めます。
+-------+ +-------+
| | | |
| ・ ・ ・ | | ・→・ ・→|
| | | ↓ ↑ |
| ・ ・ ・ | | ・ ・→・ |
| | | |
| ・ ・ ・ | | ・ ・ ・ |
| | | |
+-------+ +-------+
図5 図6
+-------+ +--------
| | |
| ・-+ +-| | ・→・→・→・
| | | | | |
| ・ +-+ | | +-+-+ ・
| ↓ | | |
| ・→・→・ | | +→・ + ・
| ↓ | | | |
+-------+ | +-+-+ ・
図7 図8
(図7)の場合も含めて、伸ばしている線が外枠につながる壁にぶつかったら、
今引いた線を「外枠につながる壁」にして、次の基点から同じ処理をします。
実際のプログラムでは、今伸ばしている線を赤色で、外枠につながる壁を白色
で表示しています。
[解き方]
いわゆる「左手法」の変形版を使っています。左手法が必ず左に回るのに対し
て、本プログラムではランダムに曲がります。行き止まりになった道にはカラー
コード1(黒に設定)で線を書いています。したがって同じ道は2度と通らないよう
になっています。
[MSX2への移植のヒント]
このプログラムはMSX2+/MSX turbo R用ですから、そのままではMSX2では動き
ません。特に問題となるのが、2430~2570行の横スクロールによる画面の切り替
えです。この部分はSET PAGE命令を使用することにより、MSX2でも実行が可能に
なります。
また、漢字の部分も変更する必要があります。CALL KANJI命令やPRINT文中の
漢字のメッセージなどがそうです。漢字BASIC(「日本語カートリッジ」(ソニー)
や、「日本語MSX-DOS2」(アスキー)などに内蔵)をお持ちの方は、漢字部分を変
更する必要はありません。
[変数表]
AL 迷路作成アルゴリズム選択
D 今、自分の向かっている方向
FLG3D 自分で特か、MSXで解くかを示す
K 道の幅
K1~K6 自分の周りの壁の状態
KH 道の幅の半分
KX 外枠の一番右側のX座標
KY 外枠の一番左側のY座標
I 各種作業用(ワーク)
S カーソルキーの状態
SC 現在、迷路を表示している画面
X 現在、基準にしているX座標
XX Xを基準として伸びている壁のX座標
Y 現在、基準にしているY座標
YY Yを基準として伸びている壁のY座標
【サンプルB】 クイックライン
[プログラム名] Q.BAS
[対応機種] MSX2/MSX2+/MSX turbo R
[解説]
このプログラムは、線を引くプログラムです。「CALL RUN」命令で実行します。
MSX-BASICでもそのまま「RUN」命令で実行できますので、「MSXべーしっ君たー
ぼ」の実行スピードがどの程度速いかをご覧下さい。
[アルゴリズム]
140~160行で、配列変数を線の本数分だけランダムな位置に初期化し、170行
で線全体が動いていく方向を決めます。180行のCとOは、170行で決めた方向への
移動量です。200行で前に書かれた線を消し、220~230行で新たに引く線の始点
を決めます。もし画面からはみ出しそうになったら、縦、横それぞれ独立に方向
を反転します。終点は前回に書いた線の始点を使っています。これは240行で処
理をしています。そして、線を引き、新しく計算した始点を記憶しておきます。
その後は、この処理を繰り返します。
[変数表]
X() 始点のX座標
Y() 始点のY座標
A() 終点のX座標
B() 終点のY座標
以上の配列変数には、線100本分の座標を入れておく。
N 動かす線の数
K 線全体が動いていく方向(X座標)
L 線全体が動いていく方向(Y座標)
C Kの増加分
O Lの増加分
P 線の色
【サンプルC】 グラフィック画面文字出力
[プログラム名] GRPCHR.BAS
[対応機種] MSX/MSX2/MSX2+/MSX turbo R
[解説]
「MSXべーしっ君たーぼ」では、「OPEN」、「PRINT#」が使えないので、それ
を補うためのグラフィック画面に文字を出力するプログラムです。このプログラ
ムは「CALL RUN」で実行します。
10 DEFINT A-Z
20 SCREEN 5
30 X=100:Y=100
40 '#I &H2A,X,&H22,&HB7,&HFC,&H2A,Y,&H22,&HB9,&HFC
50 FOR I=65 TO 69
60 '#I &H3A,I,&HCD,&H8D,&H00
70 NEXT I
80 IF LEN(INKEY$) THEN END
90 GOTO 80
30行で出力位置を決め、40行でグラフィックアキュームレータ(GRPACX、
GRPACY)にその値をセットしています。そして、50行で表示するキャラクタのコ
ードをIに入れて、60行でBIOSのGRPPRT(グラフィック画面に文字を表示させるエ
ントリ)をコールして、キャラクタを表示します。
以下は、40行と60行のアセンブラリストです。
○ 40行
LD HL, (X)
LD (GRPACX), HL
LD HL, (Y)
LD (GRPACY), HL
○ 60行
LD A, (I)
CALL GRPPRT
《 注意 》
1) X、Yは別の変数名にもできますが、整数型でなければなりません。
2) GRPACX(FCB7H)は、グラフィック画面におけるX座標を示すワークエリアです。
3) GRPACY(FCB9H)は、グラフィック画面におけるY座標を示すワークエリアです。
【サンプルD】 マンデルブロー集合
[プログラム名] MANDEL.BAS
[対応機種] MSX2/MSX2+/MSX turbo R
[解説]
このプログラムは、米国IBMワトソン研究所のマンデルブロー(B.B.Mandelbrot)
氏が開拓したフラクタル幾何学に基づくマンデルブロー集合の計算をし、表示さ
せるものです。
マンデルブロー集合を生成するためには、気の遠くなるようなくり返し演算が
必要となります。したがって、たとえ「MSXべーしっ君たーぼ」といえども、一
枚のグラフィックスを描き終えるにはかなりの時間が必要になります。例えば、
このプログラムで基本となるマンデルブローの全体図(倍率1倍、X=-2、Y=1.25)
の場合、MSX2/MSX2+で約2時間30分、MSX turbo Rで約18分かかります。
このプログラムは「RUN」命令で実行しますが、実行を始めたら途中で止める
ことはできません。実行すると、最初に、出来上がったマンデルブロー集合の絵
を保存するファイル名を聞いてきます。適当なファイル名を入力して下さい。セ
ーブする必要のないときは、リターンキーを押して下さい。
次に、倍率と目標となるX座標とY座標(MSXのグラフィック座標ではありません)
を入力します。このプログラムでは、
倍率 … 1 ~ 256
Xの範囲 … -2 ~ +0.5
Yの範囲 … -1.25 ~ +1.25
の範囲をサポートしていますので、プログラム起動時の質問にはこの範囲で答え
て下さい。
このディスクの中には、MANDEL.BASで作成した2つのサンプルデータが入って
います。
ファイル名 倍率 X Y
-------------- ------ ------ ------
MANDEL1.PIC 1 -2 1.25
MANDEL2.PIC 64 -0.25 0.73
このサンプルデータをご覧になる場合は、以下のプログラムを実行して下さい。
10 SCREEN 8:SET PAGE 1,1:CLS:VDP(9)=VDP(9) OR 2
20 BLOAD "ファイル名",S
30 GOTO 30
(C) Copyright 1994 ASCII Corporation. All rights reserved.