ポケコンBASICによる

アクションゲーム制作講座 〜入門編〜

第1回 キャラを動かす


 ゲームにはさまざまなジャンルがありますが、やはり基本はアクションゲームでしょう。アクションゲームを作るための基礎知識はどのジャンルのゲームを作る場合にも役に立ちます。逆に言えば、ごく簡単なアクションゲームさえ作れないようでは他のジャンルのゲームを作るのも難しいです。
 この入門編では、アクションゲームを作るのに最低限必要な基本部分について考えていきます。なお、本講座はPC-E500シリーズ(PC-E550、E650、1480U、1490UII、U6000)をターゲットとしています。したがって、プログラムはそのままでは他機種では動作はしないですが、入門編では特に難しいことはしていないのでわずかな変更で動作可能になります。また、考え方そのものは他機種においても何ら変わることはないのでぜひ参考にしてみてください。

 アクションゲームといえば、自分でキャラを自在に動かすことが必要不可欠といっても過言ではありません。ここで問題となるのはどうやったらキャラを動かせるのかということです。とはいえ、難しく考える必要はなく要は画面上のキャラの表示位置を変えればよいわけです。
 キャラを自由な位置に表示させるのならばLOCATEで座標を指定してやれば簡単にできますね。つまり、「キャラを動かす」というのは言い換えれば「表示指定位置を変える」ということであり、LOCATEで指定する座標を少しずつ変えていけばキャラは動いているように見えるのです。

 それでは、画面左から右へとキャラを動かしてみましょう。キャラは何でもいいのですがPLAYER(プレイヤー)の頭文字をとって"P"とでもしましょう。PC-E500の画面は横40文字でLOCATEではX座標が0(左端)〜39(右端)になりますからFOR〜NEXTを使えば"P"を画面の端から端まで動かすプログラムは簡単にできます。

リスト1
10 CLS
20 FOR X=0 TO 39
30 LOCATE X,0:PRINT "P"
40 NEXT X

 一瞬にして左端から右端へと"P"が移動しましたね。しかし、キャラの残像が残っているためにキャラの移動の様子が分からず、このままゲームで使うには問題となります。要らないものは消すだけです。
 「消す」というのはCLSを使えば一発で可能なのですが、それだと画面全体を消すことになるので今後キャラ数が増えたら必要なキャラさえも消えてしまうという問題が出てきます。実は「消す」というのは簡単で"P"を表示している場所に" "(スペース)を表示することで可能になります。

リスト2
10 CLS
20 FOR X=0 TO 39
30 LOCATE X,0:PRINT "P"
40 LOCATE X,0:PRINT " "
50 NEXT X

 これで、"P"の残像が無くなったのですが、今度は"P"そのものが見えなくなってしまいました。正確には表示はされているのですが、表示された瞬間に消されているため見えにくくなっているだけです。
 表示時間が短すぎるならば長くすれば良いですね。WAIT命令を使えば表示の待ち時間を長くすることができます。とりあえず、10行にWAIT 5を入れてみます。これでは短いという人は5よりも大きくし、長いという人は5よりも小さくすれば良いです。

リスト3
10 CLS :WAIT 5
20 FOR X=0 TO 39
30 LOCATE X,0:PRINT "P"
40 LOCATE X,0:PRINT " "
50 NEXT X

 これで一応"P"が画面左から右へと動くプログラムはできました。

 ゲームとして使うならばキー入力によってキャラを動作させたいところです。
 テンキーの[8][2][4][6]を使ってキャラを上下左右に動作させてみましょう。キー入力はINKEY$を使い、押されたかどうかはIF文によって判定します。

リスト4
10 CLS :X=0:Y=0:WAIT 5
20 K$=INKEY$
30 IF K$="8" THEN Y=Y-1
40 IF K$="2" THEN Y=Y+1
50 IF K$="4" THEN X=X-1
60 IF K$="6" THEN Y=Y+1
70 LOCATE X,Y:PRINT "P"
80 LOCATE X,Y:PRINT " "
90 GOTO 20

 これで上下左右自由にキャラを動かせる・・・と思いきや画面の端まで来たらエラーが出てしまいます。LOCATEでは画面範囲外は指定できないために画面からはみ出している場所に表示しようとするとエラーとなります。だから画面からはみ出ないようにしてやればいいのです。

 はみ出さないようにするには下記の2つの方法があります。

(1)移動後にはみ出ないならば座標計算を行う

  30 IF K$="8" AND Y>0 THEN Y=Y-1
  (※Y=0の時はY=Y-1はY=-1となり画面範囲外となる)

(2)移動後にはみ出るようならば座標を修正する

  30 IF K$="8" THEN Y=Y-1:IF Y<0 THEN Y=0
  (※Y<0は画面範囲外なので上端となるY=0に修正する)

 どちらでも良いのですが、ここでは処理が簡単な(1)の方法をとることにします。

リスト5
10 CLS :X=0:Y=0:WAIT 5
20 K$=INKEY$
30 IF K$="8" AND Y>0 THEN Y=Y-1
40 IF K$="2" AND Y<3 THEN Y=Y+1
50 IF K$="4" AND X>0 THEN X=X-1
60 IF K$="6" AND X<39 THEN X=X+1
70 LOCATE X,Y:PRINT "P"
80 LOCATE X,Y:PRINT " "
90 GOTO 20

 これで画面外に出ることはなくなりエラーは出ないようにできました。キャラ移動についての初歩的なものは理解できましたね。

キャラ移動のポイント

(1)動かした際に残像が残ってしまうのでそれを消す必要がある。
(2)表示できない部分に表示しようとするとエラーになるのでそれを防ぐ必要がある。

第2回に行く


RETURN/ RETURN *MAIN inserted by FC2 system