第4講 ブロック崩しその2(ボールを動かして壁にぶつかると反射するようにするまで)
第4話 ゲームプログラミングのより詳しい骨格
第3話最後に永久ループの話をしましたが、
実は、ゲームプログラミングは永久ループに組んでおいて、
何らかの条件が満たされたときに、
繰り返し処理=ループ処理から抜けるようになっているのです。
ですから、ゲームプログラミングの骨格は、
#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); //裏画像を描画対象に加える(2017/06/28追加) 画面のちらつき対策
  // 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つの画面を切り変えながらゲームが進行するのです。
どうしてこのようにするかは、第5話で説明します。
次の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フレームで画像が動いているわけです。

第3話へ  第5話へ
a

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

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