第5講 ゲーム基礎その1
第8話 ゲームプログラミングの骨格
ゲームプログラミングは、while文によって永久ループにしておいて、
何らかの条件が満たされたときに、
永久ループから抜け出せるようにして組んであります。

実は、32プロジェクトにおける社長は、
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)です。
第6話と第7話は仕事の内容が単純でしたから、
すべて社用自身が仕事をしてしまっていますが、
社用自身はなるべく仕事をしないで部下(社員)にやらせることが、
C言語の基本でした。
ですから、C言語ゲームプログラミングの骨格は下のようになります。
#include "DxLib.h"
void f(); //社員f()を採用
void g(); //社員g()を採用
void h(); //社員h()を採用
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
  ChangeWindowMode(TRUE); //ウィンドウモードの切り替え
  SetGraphMode(800, 600, 32); //ウインドウサイズの変更
  if(DxLib_Init()==-1)return(-1); // DXライブラリ初期化処理
  SetDrawScreen(DX_SCREEN_BACK); //裏画像を描画対象に加える画面のちらつき対策
  // while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
  while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
      ・・・
    f(); //社員f()に仕事を命じる
      ・・・
    h(); //社員h()に仕事を命じる
    g(); //社員f()に仕事を命じる
      ・・・
  }
  WaitKey(); // キー入力待ち
  DxLib_End(); // DXライブラリ終了処理
  return 0;
}
void f(){
    ・・・ //ここに社員f()の仕事の内容を書く
    ・・・
    ・・・
}
void g(){
    ・・・
    ・・・
    ・・・
}
void h(){
    ・・・
    ・・・
    ・・・
}
という形になります。
(以下の説明は前話で説明したことと一部重なりますが、お復習いだと思って読んで下さい。)
ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0
がwhile文を続けるための条件です。
ここで==は数学の=です。
ですから、ScreenFlip() == 0は社員ScreenFlip()の報告してくる値が0に等しいならという意味です。
残りの2つも同じです。
&&は『そして』または『と』という意味です。
英語で書くとandです。
『A && B』 はAそしてBという意味です。
AとBの両方の条件が満たされるときという意味です。
『リンゴとミカン』がほしいといったら、両方ともほしいという意味ですよね。
−−−基礎事項−−−
ついでに英語で言うとor、日本語で言うと『または』についても確認しておきましょう。
『リンゴまたはミカン』がほしいなら、普通はどちらか一方がほしいという意味になりますが、
算数や数学あるいはプログラミングの世界では、
『リンゴのみ』『ミカンのみ』『リンゴとミカンの両方』が『リンゴまたはミカン』の範囲に含まれます。
orは||で表します。
A || B で『AまたはB』となります。
|はShiftキーを押しながら、Back Spaceキーの左隣の\キーを同時に押すと出てきます。
−−−以上基礎事項−−−

ですから、
3人の社員の報告してくる値がすべて0である間はwhile文のループを続けるということになります。
ScreenFlip()は裏画面を表画面に切り変える仕事をする社員(関数)ですが、
失敗したときには-1を報告してきます。
ゲーム画面の切り変えるのに失敗したら、while文は終了となります。
ゲーム画面は2つの画面(表画面と裏画面)が用意されていって、
2つの画面を切り変えながらゲームが進行するのです。
どうしてこのようにするかは、すでに説明したとおりです。
次のProcessMessage()は、システム(コンピュータ)から送られてくるメッセージを点検していて、
異常があれば-1を返す(報告してくる)社員(関数)です。
異常があればwhile文は終了してゲームも終わります。
最後のClearDrawScreen() は画面を消す仕事をする社員で、
失敗したときには-1を報告してきます。
ですから失敗してもwhile文のループは終了され、
ゲームが終わるのです。

尚、
  while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
      ・・・
    f(); //社員f()に仕事を命じる
      ・・・
    h(); //社員h()に仕事を命じる
    g(); //社員f()に仕事を命じる
      ・・・
  }
普通のディスプレイであれば、1秒に60回ループします。
この場合はループは回転をイメージした方がよいですね。
007
映画等では1コマをフレームといいますので、
1回転を1フレームだと思えばよいわけです。
基本1分60フレームで画像が動いているわけです。

ゲーム基礎についてはまだまだ説明しなければならないことがたくさんありますので、
第5講はこの話で終了して、ゲーム基礎の話は第6講に引き継ぎます。
第6講第1話では、文字をゲーム画面に表示させる方法について学びます。
ゲームスコア

第7話へ   第6講第1話へ

002

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ