プチコンとは、ニンテンドーDSiで動作するソフトウエアで、BASICというプログラム言語を使って自分でプログラミングをしてゲームやアプリを作ることができます。
プチコンやプログラムに関して、全く知らない初心者の方は
公式サイトのプチコン初心者講座が一番丁寧でわかりやすいです。
プチコンmkII 初心者講座
また、ここではゲームプログラムを作成するにあたっての、
基礎的な知識を、極力難しいことを考えずに伝えたいと考えております。
ここでは、プチコンで簡単なアクションゲームを作る方法を、細かく丁寧に極力わかりやすく解説していきたいと思います。
某ネットの掲示板にて、別のプログラム言語によるゲームプログラムの作り方を解説しているスレを最近見かけました。
掲示板の読者の状況からみて、普通の人は難しすぎてついてこれていなさそうでした。
プチコンならもっと分かりやすくプログラミングについて解説できるのではないかと思ったので、アクションゲームの基本であるプレイヤーの操作を実装するところまで、某掲示板の記事っぽく解説してみたいと思います。
青文字が前回から追加された、内容になっています。
まずは、ここから始まる。
このプログラムを緑の画面で入力して、黒い画面で「RUN」と入力して「Enter」を押す。
これで、画面の表示がすべて消える。
プログラムを書くときはとりあえず書いておけ、というのは正解だが内容を知っておかないと意味がない。
CLEAR命令で現在のパラメータをすべて初期化して。
ACLSで、画面の表示をすべて消去。
これで、画面にキャラクターが表示される。
キャラクターなどはスプライトと呼ばれ、番号を指定することでどんな絵を出すかを指定できる。
この場合、自分の識別番号が0で、表示される絵が64番ということになる。
また、このようにプログラムは上から順番に実行される。
これで、水色の空と茶色の地面を表す背景と図形が表示される。
GCLS命令で、背景をすべて塗りつぶすし、GFILL命令で指定した範囲を四角で塗りつぶす。
これで、プログラムが終了しなくなる。
(メインループという:ゲームプログラムの基本)
プチコンの場合はSelectボタンで終了できるので別に無限ループが危ないわけではない。
6行目のVSYNCという命令は一定時間待つことを意味する。
7行目のGOTOという命令は、指定したラベル(@がついた文字の行)にジャンプする意味を表す。
これで、キャラクタを指定した座標に表示できる。
ちなみに、左上が(0,0)、右下が(255,191)となっている。
指定する値は、キャラクターの左上の座標である。
ここから、ちょっと難しくなる。
ボタンの入力を取得する(7行目)
この場合→ボタンが押されていたら、Xを加算する。
ボタンと番号の対応状況はマニュアルを読んで理解するしかない。
これで、→ボタンが押されている時、キャラクタが右方向に動くようになる。
前回と同様の方法を、←ボタンでも出来るようにする。
これで、キャラクターの左右移動ができるようになる。
キャラクターが画面外に移動してしまうと、ゲームが成り立たなくなってしまう。
なので、キャラクターが画面外に移動しようとしたら強制的に戻す処理を入れる。
キャラクタの左上の座標をしていする必要があり、キャラクターの大きさは16×16なので、右端は239を指定する。(239 = 255-16)
これで、キャラクターの移動範囲が画面内に限定されるようになる。
ここはちょっと、物理の知識が必要になる。(難しくはないはず)
Aという加速を表す変数を用意する。(加速:Acceleration)
毎回の処理で、少しずつ大きくなるようにする。(11行目)
そして、キャラクターの座標に加速を加算する。(12行目)
これで、キャラクターの自然な落下が表現できる。
このままでは、どこまでも落下していってしまうので、床の座標に来たら、それ以上落ちなくする。
Aを0にしているのは、Aがどこまでも加算していってしまうと、数字が大きくなりすぎてエラーに成ってしまう(オーバーフロー)を防ぐため。
これで、キャラクターの着地ができる。
プレイヤーの移動ができても、動いているよう見えませんね。
プチコンのスプライトはアニメーションの順番に並んでいるので、簡単にアニメーションさせることができる。
これで、プレイヤーが歩く様子が表現できる。
少し複雑だが、Aボタンが押された時(B AND 16)の場合にジャンプするようにする。
ジャンプ状態を表す変数「JP」を用意し、「ジャンプ状態でなかったらジャンプできるようにしている。
JP:0=通常,1:ジャンプ中
ジャンプ時は、加速を値をマイナスにすることで、ジャンプができるようになる。
ついでに、音も鳴らしておく。
16行目では、着地かつAボタンが押されていない時に、次にAボタンが押されたらジャンプできるように変数を制御している。
これで、プレイヤーがジャンプできるようになる。
少し複雑だが、Aボタンが離された時、かつ、上昇中の時に、ジャンプの加速を半分にする。
こうすることで、ジャンプボタンの押されている長さに応じた、自然なジャンプの高さ調整を実現できる。
JPは、着地時0、上昇中1、落下中2 というようになる。
プログラムが大きくなってくると、後で読むときに苦労する。なので、わかりやすいように空行は注釈(コメントという)を入れておくと、後で自分が見た時に読みやすいし、
自分以外の人が見た時も読みやすくなる。
コメントはなるべく英語で書くことが望ましいけど、日本人なら日本語でもOKである。
コメントを書くときのポイントは多すぎず少なすぎず。
プログラムに見出しとして書くか、
プログラムで書けないことを書くとわかりやすくなる。
ここまで、できればゲームプログラミングの基本は十分である。
実際にゲームを作るときは敵の表示や動き、接触時の当たり判定処理などが必要であるが、
そこから先は複雑になっていくので、次回のアクションゲームを作るまで(第2回)で解説していきたいと思う。
ゲームを作るということは簡単なことではない
このように、プログラムと言うものはこのような単純な動きだけでも、数十行の記述が必要になり、実際にゲームを作る際は更に行数を記述することになり、相当な根気が必要なものになります。
しかし、ここまで書いて動かしてみて面白いと感じたのなら、自分で試行錯誤したり、ネットや書籍を頼りに独学でプログラミングについて学んだり、してみるのもよいでしょう。
ここから先は、もうちょっと難しくなります
ここから先は本当に初心者にとって難しいものになるため、非常に解説するのも難しくなります。
実は一番プログラムの習得が早い方法が、自分よりも上の人が作ったプログラムを見ながら書き写すこと、だったりします。
なので、QRコードで読み取らずに、自分の目で見てプログラムを書き写すことが大切なのです。
実際に書き写そうとすると、どこかに誤りがあったり(自分がおっちょこちょいだからでもある)、それを動かしながら、自分の間違いを探したり、そうしている内に命令やロジックの仕組みを理解したりできるのです。
非常に時間と根気が必要です。
自分はパズルが好きなので、どうしても自分の力だけでやり遂げたくなりますが、本当の近道は他人の良いプログラム理解することです。
(プログラムに何年も触れてわかったこと)
数学=計算ではない!原理や構造の理解を大切にすると、数学はもっとおもしろくなる!数学は永遠性を秘めている。数学だけが人間の唯一の証ではないかという感動が湧いてくる—。