第11講 シューティングゲーム開発(銃社員の自作まで)
第8話 謎のコードの解説その2
jyu.cppのコード
#include"main.h"
//jyu(じゅう) taisyoutonarukey(たいしょうとなるきー)
//対象となるキーが直前に押されておらず、今押されている場合にそのキーを押したと判定する関数
char jyu(int taisyoutonarukey) { //taisyoutonarukey(たいしょうとなるキー)は、今対象としているキーの出席番号
  if (CheckHitKey(taisyoutonarukey) != 0) {
    if (taisyoutonarukey_mae[taisyoutonarukey] == 0) {
      taisyoutonarukey_mae[taisyoutonarukey] = 1;
      return 1;
    }
  }
  else {
    taisyoutonarukey_mae[taisyoutonarukey] = 0;
    return 0;
  }
  return 0;
}
jyu.hのコード
char jyu(int taisyoutonarukey);
//jyu(じゅう) taisyoutonarukey(たいしょうとなるきー)
//対象となるキーが直前に押されておらず、今押されている場合にそのキーを押したと判定する関数
main.cppのコード
・・・
int aki; //天井からブロック上端までの空きの大きさ
char taisyoutonarukey_mae[200];
//たいしょうとなるキーのまえ
//対象となるキーが直前に押されている:1 押されていない:0

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
  ・・・
main.hのコード
・・・
#include"jyu.h"
extern int arunasi[4][10]; //あるなし ブロックが ある:1 ない:0 とする
・・・
extern int ongaku; //BGMの出席番号を入れる箱
extern char taisyoutonarukey_mae[200];
//たいしょうとなるキーのまえ
//対象となるキーが直前に押されている:1 押されていない:0

hajimenogamen.cppのコード
#include"main.h"
void saisyonogamen() {
  DrawBox(0, 0, 800, 1000, siro, true);
  int gazou;
  gazou = LoadGraph("画像/02.png");
  DrawGraph(200, 100, gazou, false);
  if (jyu(KEY_INPUT_A) != 0) {
    mxh = 1; //ボールの横方向の速さ
    myh = 4; //ボールの縦方向の速さ
    b_y = 120; //バーの横幅
  }
     ・・・
  if (jyu(KEY_INPUT_Z) != 0) {
    ongaku = LoadSoundMem("音/00.wav"); //BGMの出席番号を箱に入れる
    PlaySoundMem(ongaku, DX_PLAYTYPE_LOOP); // BGMを再生する
    m = 1;
  }
}


今話はコンピュータの動きを追う=トレースしてみましょう。
ゲームが起動するとsaisyonogamen();が呼び出されます。
そして、
  if (jyu(KEY_INPUT_A) != 0) {
によって、銃関数jyuが呼び出されます。
jyu(KEY_INPUT_A) のKEY_INPUT_Aは、
#include<stdio.h>
int f(int a); //1からaまでの合計を計算する関数
int main() {
  printf("1から10までの和は%dです。\n", f(
30));
}
int f(int a) {
  int i,w=0;
  for (i = 1; i <= a; i++)w += i;
  return w;
}の30に対応するものです。
といっても皆さんからすれば、
jyu(KEY_INPUT_A)と f(30)は似ても似つかないものに見えますよね。
jyuとfは関数名です。
名前には他の関数と区別する以外の意味はありませんから、
ここまで学習してきた皆さんなら、
不思議はありませんね。
問題はKEY_INPUT_Aと30の部分です。
どう考えても違うじゃないか?−−−
ですよね。
でも同じなんですよ。
画像や色をハンドルという出席番号で管理していたように、
KEY_INPUT_Aなども出席番号なんです。
KEY_INPUT_AはAキーの出席番号です。
KEY_INPUT_Aは30を表すとDXライブラリでは決められています。
ですから、
jyu(KEY_INPUT_A)はjyu(30)と全く同じなんです。
30が何のキーの出席番号なのかわかりませんよね。
ですから、30のことをDXライブラリではKEY_INPUT_Aと表してるだけなんです。
KEY_INPUT_Aと書くと意味深のように見えてしまいます。
Aキーの出席番号が30なのですが、
すべてのキーの出席番号はとても覚えられません。
そこで覚えやすく30のことをKEY_INPUT_Aと表しているだけで、
深い意味などないのです。
整数の30のあだ名がKEY_INPUT_Aというわけです。
幸子さんのあだ名が『さっちゃん』なら、
幸子=さっちゃん
です。どちらで読んでも幸子さんであることはわかります。
それと全く同じです。


第7話へ   第9話へ

第2部トップへ  第1部トップへ


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

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