E500BASIC高速化のすべて

PART 3 BASICの高速化とは


 PART2では効果的な処理の高速化について書きましたが、やはり具体例をあげないと難しいと思います。だから、簡単なサンプルゲームを用意しました。

《 「VS」プログラムリスト  》
10 CLS :WAIT 0:CLEAR :LINE (X,12)-(239,18),BF:LINE (Y,21)-(239,27),BF
20 LOCATE 1:PAUSE "READY ";:PRINT "GO!"
30 K$=INKEY$
40 IF K$="" THEN LINE (X,13)-(X,17),R:X=X+1
50 IF X>239 THEN W=2:GOTO 90
60 IF K$<>"" THEN LINE (Y.22)-(Y,26),R:Y=Y+1
70 IF Y>239 THEN W=1:GOTO 90
80 GOTO 30
90 BEEP 1:LOCATE 25,0:WAIT :PRINT W;"P WIN!":GOTO 10

 この「VS」はPJ誌上ではお馴染みの2人対戦型ゲームです。元祖であったPB-100版から多くのポケコンへと移植されているので知っている人も多いかと思います。
 知らない人のためにゲームの内容を説明します。
 まず、対戦相手を用意します。お互いどちらが1Pでどちらが2Pかを事前に決めておきます。RUNをするとゲーム開始とともにゲージが2本現れますが、画面上の方が1Pのエネルギーゲージ、下の方が2Pのエネルギーゲージとなっています。1Pもしくは2Pのどちらかがキーを押しているときは2Pのゲージが減り、1P、2Pの両者がキーを押しているもしくはキーが押されていないときは1Pのゲージが減り、先にゲージが0になった方が負けというゲームです。使うキーは1P、2Pともにどのキーでも構いません。[RETURN]でリトライができます。
 また、このゲームではハンディキャップ機能を備えています。10行のCLEARの後にX=10をつければ1Pに10ポイントのハンデ、「Y=20」とすれば2Pに20ポイントのハンデを付けることが可能になります(ハンデは1P、2Pともに1〜238の範囲で設定可能)
 なお、同時キー入力を行ってないために2Pには極悪非道技がありますがそれは使わないようにしましょう(笑)

 上記のプログラムはごく普通に作られたもので高速化テクニックは全く使用していません。というか、かなり無駄があるものとなっています。処理速度の面において見ただけで無駄な部分がどこにあるのか分かる人も大勢いるのではないかと思いますので高速化テクニックを使った「VS ターボ」のリストも書いておきます。

《 「VS ターボ」プログラムリスト  》
10 CLS :WAIT 0:CLEAR :LINE (X,12)-(239,18),BF:LINE (Y,21)-(239,27),BF
20 LOCATE 1:PAUSE "READY ";:PRINT "GO!"
30 K$=INKEY$
40 IF K$="" GCURSOR (X,18):GPRINT "82":X=X+1:IF X>239 LET W=2:GOTO 70
50 IF K$<>"" GCURSOR (Y,27):GPRINT "82":Y=Y+1:IF Y>239 LET W=1:GOTO 70
60 GOTO 30
70 BEEP 1:LOCATE 25,0:WAIT :PRINT W;"P WIN!":GOTO 10

 両者を見比べれば「BASICの高速化」というものがどのようなものか分かってくるかもしれません。無駄と感じている部分をなるべく無くすというのがイメージ的にも分かったと思います。ただ、シンプルなゲーム内容のためこの高速化された「VSターボ」でもメインルーチン1回当たりの処理時間は21.8m秒ということで元のリスト(29.4m秒)と比べて35%アップ(1.35倍速)にしかなっていません。平均3倍の高速化が可能と言っていたため少しがっかりしたかもしれませんがこの程度の速度アップでも速くなったのが体感できると思います。だから、最初の「VS」であれば無駄が多いけどこの「VSターボ」くらい改善されていれば十分な高速化ができたと感じる人が大半ではないでしょうか。
 しかし、中にはこの「VSターボ」をもっと速くできると言う人もいるでしょう。実はこれだけシンプルに見えて速度面では無駄だらけなのです。その速くするための具体的なテクニックについて次から書いていきます。

PART4に続く


PART 1 なぜBASICを高速化するのか
PART 2 効率的な高速化を行うためには
PART 3 BASICの高速化とは
PART 4 どうやったらBASICが高速化できるのか
PART 5 アルゴリズムの見直し
PART 6 メインルーチンの軽量化
PART 7 表示を高速化
PART 8 IF文をうまく使う
PART 9 「BASICだから遅い」は言い訳の言葉

RETURN

inserted by FC2 system