第13講 シューティングゲーム開発(完成まで)
第7話 スペースキーを打ったときのみ弾が出るようにする
第7話問題解答例
ファイル構成

001
gamemain.cpp

#include"main.h"
void gamemain() {
  atarihantei();
  ufo(); //UFOの位置を計算して、その場所にUFOを描く社員 将来的には当たったら消えるようにする仕事も担当する
  syujinkou(); //主人公の位置を計算して、その場所に主人公(ヒロイン)を描く社員
  tamawoutu(); //弾を発射させる社員
  tama(); //弾の位置を計算して、その位置に弾を描く社員
  SetFontSize(32); //フォントサイズを32に変更
  DrawFormatString(450, 800, siro, "ゲームスコア:%d", tokuten); // 文字を描画する
}
tamawoutu.cpp
#include"main.h"
//弾を撃つ社員
void tamawoutu() {
  if (jyu(KEY_INPUT_SPACE) == 1) {
    tama_arunasi[tamakazu] = 1; //弾がある状態に設定
    PlaySoundMem(LoadSoundMem("音/発射.mp3"), DX_PLAYTYPE_BACK); // 発射音を発生させる
    tama_x[tamakazu] = syujinkou_x + syujinkou_yokohaba / 2;
    tama_y[tamakazu] = 1000 - syujinkou_tatehaba;
    tamakazu++;
    if (tamakazu == 100)tamakazu = 0;
  }
}
tamawoutu.h
void tamawoutu(); //弾を撃つ社員
ufo.cpp
#include"main.h"
void ufo() {
  int i, j, a;
  for (i = 0; i < ufo_tatesu; i++) {
    for (j = 0; j < ufo_yokosu; j++) {
      if (ufo_arunasi[i][j] == 1) {
        int ufo_gazou = LoadGraph("画像/ufo.png"); //UFO画像を読み込み出席番号を付けて番号を箱に収納
        DrawGraph(ufo_yokohaba*j, ufo_tatehaba*i+aki, ufo_gazou, true); //UFO画像を描く
        DeleteGraph(ufo_gazou); //UFO出席番号収納箱の削除
        
/*
        if (ufo_tatehaba*i + aki > 830) {
          m = 2;
        }
        */

      }
    }
  }
}
syokika.cpp
#include"main.h"
void syokika() {
  int i, j;
  //UFOがすべてあるに設定
  for (i = 0; i < ufo_tatesu; i++) {
    for (j = 0; j < ufo_yokosu; j++) {
      ufo_arunasi[i][j] = 1;
    }
  }
  for (i = 0; i < 100; i++) {
    tama_arunasi[i] = 0; //弾がないに設定
  }
  tamakazu = 0; //弾数0に設定
  ufo_x = 0; //ufoの最初の横位置

  ufo_y = 100; //ufoの最初の横位置
  syujinkou_tatehaba = 172; //主人公(ヒロイン)の縦幅
  syujinkou_yokohaba = 92; //主人公(ヒロイン)の横幅
  syujinkou_x = 0; //主人公(ヒロイン)の最初の横位置
  syujinkou_y = 1000- syujinkou_tatehaba; //主人公(ヒロイン)の最初の縦位置
  syujinkou_hayasa = 8; //主人公(ヒロイン)の速さ
  tama_x[tamakazu] = syujinkou_x+syujinkou_yokohaba/2; //弾の初期の横位置
  tama_y[tamakazu] = 1000-syujinkou_tatehaba; //弾の初期の縦位置
  tama_x_houkou = 1; //弾の横方向の最初の向き
  tama_y_houkou = -1; //弾の縦方向の最初の向き
  tama_hankei = 6; //弾の大きさ(半径)
  tama_yokohoukouhayasa = 0; //弾の横方向の速さ
  tama_tatehoukouhayasa = 12; //弾の縦方向の速さ
  aki = 0; //天井から主人公(ヒロイン)上端までの距離
  kiiro = GetColor(255, 255, 0); //黄色に出席番号を割り振りその番号を箱kiiroに収納
  aka = GetColor(255, 0, 0); //黄色に出席番号を割り振りその番号を箱kiiroに収納
  midori = GetColor(0, 255, 0); //緑色に出席番号を割り振りその番号を箱midoriに収納
  ao = GetColor(0, 0, 255); //青色に出席番号を割り振りその番号を箱aoに収納
  siro = GetColor(255, 255, 255); //白色に出席番号を割り振りその番号を箱siroに収納
  mizuiro = GetColor(0, 200, 200); //水色に出席番号を割り振りその番号を箱mizuiroに収納
  tokuten = 0; //とくてん 0に初期
  kosu = ufo_yokosu*ufo_tatesu; //UFO個数 ufo_yokosu:UFO横数 ufo_tatesu:UFO縦数
  ufo_yokohaba = 800 / ufo_yokosu; //ufo_yokohaba:UFO横幅 ufo_yokosu:主人公(ヒロイン)横数
  ufo_tatehaba = 2*ufo_yokohaba/3; //ufo_tatehaba:主人公(ヒロイン)縦幅 主人公(ヒロイン)縦幅
  syujinkou_hayasa = 8; //主人公(ヒロイン)の速さ
}

        /*
        if (ufo_tatehaba*i + aki > 830) {
          m = 2;
        }
        */

を見ると次の課題がわかりますね。
そうです。
UFOが降りてくるようにするです。
地上に降りてきてらゲームセットになるように設定します。
天井からの空きであるakiがまだ利用されていませんので、
これを使いましょう。
また、UFOが降りてくる速さは表す変数をufo_hayasaとして、
これをhajimenogamen()で設定できるようにしましょう。
さらに、UFOは4層ではなく8層にしてください。

私の腕では、ufo_hayasa = 3とすると絶対にクリアできませんでしたので、
初心者級 ufo_hayasa = 1.0
中級    ufo_hayasa = 1.5
中級    ufo_hayasa = 2.0
とするために
aki、ufo_tatehaba、ufo_hayasaはfloat型にすることにしましょう。
float型の箱への代入は上のように小数点を付けて代入します。
ufo_hayasa = 1ではint型になってしますので注意が必要です。
また、ufo.cppのufo_tatehaba*i+akiもこのままだと強制的にint型になってしまいます。
理由は、iが整数型であるからです。
計算式の中に1つでもint型変数があると、
計算結果も整数に丸められてしまうからです。
整数に丸めるとは、小数点以下を切り捨てて、整数にすることを指します。
この問題はufo_tatehaba*
(float)i+akiとすれば解決します。
(float)変数は変数を強制的にfloat型に変換させる命令です。
syokika()のufo_tatehaba = 2*(float)ufo_yokohaba/3も
ufo_tatehaba = 2.0*(float)ufo_yokohaba/3.0とする必要があります。
それから、ゲーム始めの画像も01に変更してください。
画面の作り方は、第7講第2話を参照(さんしょう−見ること)してください。



第6話へ   第8話へ

第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 入門 サイト 基礎から応用まで
本サイトトップ