【第一作第三話】自機の作成では、main.cppにプログラムを打ちました。
ある程度は理解できた方から、まったく意味が分からなかったという方もいらっしゃるんじゃないでしょうか。
ですので、1行目から順番に説明を入れていきます。
かなり長いので、番外編として作成しました。
早速説明していきます。
・インクルード
現在編集しているものはmain.cppというファイルですが、それ以外にも、DxLibを作成された方が作成したDxLib.hというファイルが用意されています。
この1行で、
・ChangeWindowMode関数
・SetGraphMode関数
・DxLib_Init関数
・SetDrawScreen関数
・CheckHitKey関数
・DrawBox関数
・ScreenFlip関数
・DxLib_End関数
・GetColor関数
が使えるようになります。関数の説明はいつかします。
ちなみに、#は、キーボードの大体左下にあるshiftを押しながら、「3」を押すと出ます。
<>はshiftを押しながら「、」「。」を押すと出ます
・コメント
3行目から所々にあるものはコメントと言います。プログラムのあちらこちらにあると思います。緑色になっている所ですね。
画像がとんでもないことになりました((笑
これは、プログラムに説明をつける時に使います。
専門用語を使うと「コメント文」と言われます。
プログラムはローマ字と記号をただ並べたものと書きましたが、ぱっと見ただけでは日本人はおろか、大抵の人間には理解できるわけがありません。逆に、main.cppというファイルはローマ字と記号しか理解できません。日本語があれば当然エラーが起こるわけです。
そこで、日本語が書いてあってもエラーが起こらないようにする為に、
// ここは自機の処理を書くところ
のように書くわけです。
日本語で説明をつけると、途端に分かりやすくなります。一目瞭然です。逆に、コメントをつけていないプログラムを見てみましょう。
実行結果は変わりませんが、完全に暗号と化しました。
要するに、「無くてもいいけど、無いと何をやっているのかさっぱり分からなくなる」のがコメント文です。
「自分だけのプログラムだからコメントは無くてもいいや」ではありません。昨日の自分は他人です。朝起きたら、ほぼ間違いなく何をやったのか忘れているでしょう。コメントはつけましょう。
ちなみに、/は日本語入力を解除して「・」を押すと出ます。
・エントリポイント
プログラムがどこから始まるのかを指します。
ここはこのまま書いておけばゲームは作れます。特に覚える必要も無いでしょう。見て書ければ十分です。
・「{」と「}」
中かっこの「{」と「}」で囲まれた部分のことを、ブロックといいます。
今回の場合、以下のような場所につけます。
・エントリポイントの最初と最後
・if文の最初と最後(if文は後述します)
・while文の最初と最後(while文は後述します)
「{」と「}」の数が一致していないと、エラーが起こります。
「ここからここまでの処理がエントリポイントの処理です」
「ここからここまでの処理がif文の処理です」
「ここからここまでの処理がwhile文の処理です」
という意味になります。
ちなみに、{}はEnterの左隣にある2つのキーをshiftキーを押しながらで出ます。
・ChangeWindowMode関数
は、ウインドウモードにするかフルスクリーンにするかを選択する関数です。(チェンジウィンドウモードと読みます。)
ChangeWindowMode(FALSE);
にすると、フルスクリーンモードになります。どうなるのか気になる方は是非一度試してみてください。画面全体にゲーム画面が表示されるようになります。
・SetGraphMode関数
画面の大きさや、色の数を決める関数です。(セットグラフィックモードを略してセットグラフモードと読みます。)
SetGraphMode( 320, 320, 32 );
とやると、横のサイズが320,縦のサイズが320,色数が2の32乗使えるようになります。
(2の32乗色は、4294967296色です。)
・DxLib_Init関数
今お使いのPCの画面に新しく画面を作成する関数です。(ディーエックスライブラリ・イニシャライズを略してディーエックスリブ・イニットと読みます。)
ウィンドウを作成するプログラムなんて、ゲーム制作とは程遠い作業ですので、DxLib_Init関数を使ってウィンドウを作成します。
16行目の
SetDrawScreen( DX_SCREEN_BACK );
は、ゲーム画面を、見えるものと見えないものの2つを用意し、そのうちの見えないほうにゲーム画面を作る設定にします。(セットドロースクリーンと読みます)
26行目と27行目の
clsDx();
ClsDrawScreen();
52行目の
ScreenFlip();
とセットで使います。
clsDx関数は、見えない画面に描画した文字を消します(読み方はシーエルエスディーエックスです)。
ClsDrawScreen関数は、見えない画面に描画した絵を消します(読み方はシーエルエスドロースクリーンです)。
ScreenFlip関数は、見えない画面に描画した絵を見える画面に移し替えます(読み方はスクリーンフリップです)。
なぜこの4行必要なのかというと、見えるほうの画面だけでやると画面がチラつくからです。
・変数
int n_pos_x = 320;
int n_pos_y = 450;
は、変数宣言と呼ばれます。
変数は、数字を入れる器です。
下に赤線を引いた変数が、それぞれ対応する数字に置き換えられます。
変数の数値をプログラム中で変更することで、自機が動く仕組みです。
int はその変数が整数であることを示します(イントと読みます)。
小数であることを示すものもありますが、出てきたときに説明します。
n_pos_xやn_pos_yは、その変数の名前です。半角ローマ字や半角記号から始まればどんな名前にしても大丈夫ですが、変な名前をつけると後で後悔します。
「=」は、同じという意味ではなく、右から左へ値を代入するという意味です。プログラムで使う記号は、数学の記号とは違うので、気をつけなければなりません。
右側に計算が入っている場合は、右側の計算を行った後に変数を代入します。
たとえば、n_pos_x = n_pos_x + 1;
これは、n_pos_xの値が320の時、320+1をした後に、その数字をn_pos_xに代入します。
最終的にn_pos_xが321になります。だから、右を押すと自機が右に動くのです。
・while文
「{」「}」で囲まれた部分を、常に繰り返すようにする処理です(読み方はワイルです)。
これをループといいます。
かっこの中にCheckHitKey関数(読み方はチェックヒットキー)がありますが、これは指定したキーが押されていると1という数字に変換され、押されていないと0という数字に変換されます。
変換された後は、while(1)かwhile(0)となり、それぞれ次のようになります。
while(1)だと、無限にループし続けます。
while(0)だと、ループを終了し、この場合ScreenFlip関数を実行した後、ブロックの外側へと処理を移行します。
!は、右隣の変数が1だと0に変わり、右隣の変数が0だと1に変わる記号です。!1なら0、!1なら0になります。
だから、escキーが押されない限りプログラムが終了しないのです。
・DrawBox関数
四角形を描画します(読み方はドローボックスです)。
DrawBox( 左上x座標、左上y座標、右下x座標、右下y座標, 色( 赤成分、緑成分、青成分 ), 画像を塗りつぶすかどうか );
の順番で指定しています。
ここで自機を描画しているのです。
最終的に、この関数は全くといっていいほど使わなくなります。
なぜなら、DxLibには、自分の作った画像を表示する機能がありますので、そちらに全て変わるからです。
・if文
33行目と37行目と42行目と46行目にあります。
もう一度書きますが、CheckHitKey関数は、指定したキーが押されていると1という数字に変換され、押されていないと0という数字に変換されます。
変換された後は、if( 1 )かif( 0 )となり、それぞれ次のようになります。
if( 1 )の時に、ブロックで囲まれたプログラムを実行します。
if( 0 )の時は、ブロックで囲まれた所は何もしません。
また、このままだと自機はどこへでも行けてしまいます。
それを制御するために、if文が役に立ちます。
・DxLib_End関数
ゲームを終了する際に必要な処理をしてくれます(読み方はディーエックスリブ・エンドです)。
・return文
60行目のreturn 0;で、プログラム終了です(読み方はリターンです)。さまざまな使い方がありますが、今回は省略します。
以上です。
かなり長い説明になってしまいました。ここで大事になるのは、全てを無理して覚えなくもゲームは作れます。覚えるにこしたことはありませんが、要はゲームが作れればそれでいいのです。必要になった知識は、その都度覚えればいいのです。こういうのもあったなー程度に覚えておくのがベターです。
【第一作第三話】自機作成に戻る