第14講 シューティングゲームの高度化
第4話 UFOが左右に揺れながら迫ってくる
01を実現するコード
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*(float)j, ufo_tatehaba*(float)i + aki, ufo_gazou, true); //UFO画像を描く
        DeleteGraph(ufo_gazou); //UFO出席番号収納箱の削除
        if (ufo_tatehaba*(float)i + aki > 1000) {
          m = 2;
        }
      }
      ufo_tama_x[i][j] = ufo_yokohaba*(float)j + ufo_yokohaba / 2.0;
      ufo_tama_y[i][j] = ufo_tatehaba*(float)i +
(i + 2)* aki + 20;
      DrawCircle(ufo_tama_x[i][j], ufo_tama_y[i][j], 6, aka, true);
      
ufo_sayuyure[i] += ufo_sayuyure_houkou[i];
      if (ufo_sayuyure[i] == 400 || ufo_sayuyure[i] == -400)ufo_sayuyure_houkou[i] *= ufo_houkugae;

    }
  }
  aki += ufo_hayasa;
}
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に設定
  syujinkou_tatehaba = 40; //主人公(ヒロイン)の縦幅
  syujinkou_yokohaba = 36; //主人公(ヒロイン)の横幅
  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.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に初期
  ufo_yokosu = 10;
  kosu = ufo_yokosu*ufo_tatesu; //UFO個数 ufo_yokosu:UFO横数 ufo_tatesu:UFO縦数
  ufo_yokohaba = 800 / ufo_yokosu; //ufo_yokohaba:UFO横幅 ufo_yokosu:主人公(ヒロイン)横数
  
ufo_tatehaba = ufo_yokohaba; //UFO縦幅
  syujinkou_hayasa = 8; //主人公(ヒロイン)の速さ
  
ufo_sayuyure[0] = 0; //UFOの左右のずれ
  ufo_sayuyure[1] = 0; //UFOの左右のずれ
  ufo_sayuyure[2] = 0; //UFOの左右のずれ
  ufo_sayuyure[3] = 0; //UFOの左右のずれ
  ufo_sayuyure_houkou[0] = 1; //1層目のUFOの初期方向
  ufo_sayuyure_houkou[1] = -1; //2層目のUFOの初期方向
  ufo_sayuyure_houkou[2] = 1; //3層目のUFOの初期方向
  ufo_sayuyure_houkou[3] = -1; //4層目のUFOの初期方向

}
saisyonogamen.cpp
#include"main.h"
void saisyonogamen() {
  DrawBox(0, 0, 800, 1000, siro, true);
  int gazou;
  gazou = LoadGraph("画像/02.png");
  DrawGraph(0, 0, gazou, false);
  
ufo_hayasa = 0.5; //AまたはBまたはCを押し忘れたときに初心者モードにする
  if (jyu(KEY_INPUT_A) == 1) {
    
ufo_hayasa = 0.5; //初心者モードにする
  }
  if (jyu(KEY_INPUT_B) == 1) {
    
ufo_hayasa = 1.0; //中級者モードにする
  }
  if (jyu(KEY_INPUT_C) == 1) {
    
ufo_hayasa = 1.5; //上級者モードにする
  }
  if (jyu(KEY_INPUT_Z) == 1) {
    syokika();
    m = 1;
  }
}
main.cpp
#include"main.h"
char ufo_arunasi[20][20]; //UFOが ある:1 ない:0 とする
char tama_arunasi[100]; //弾が ある:1 ない:0 とする
char tamakazu; //弾を数える変数
int tama_x[100], tama_y[100]; //弾の横位置と縦位置
float ufo_hayasa; //UFOの降りる速さ
float ufo_tama_x[8][10], ufo_tama_y[8][10]; //UFOの放った弾の横位置と縦位置
float ufo_houkugae = -1; //UFOを左右に揺らすための方向チェンジ
float ufo_sayuyure[4]; //UFOが左右に揺れるときの速さ
float ufo_sayuyure_houkou[4]; //UFOの進む方向

int syujinkou_x, syujinkou_y; //主人公(ヒロイン)の横位置と縦位置
int ufo_yokosu=10 , ufo_tatesu=4; //UFOの横数と縦数
          ・
          ・
main.h
#include "DxLib.h"
          ・
          ・
extern float ufo_tama_x[8][10], ufo_tama_y[8][10]; //UFOの放った弾の横位置と縦位置
extern float ufo_houkugae; //UFOを左右に揺らすための方向チェンジ
extern float ufo_sayuyure[4]; //UFOが左右に揺れるときの速さ
extern float ufo_sayuyure_houkou[4]; //UFOの進む方向

extern int syujinkou_yokohaba , syujinkou_tatehaba; //主人公(ヒロイン)の横幅と縦幅
          ・
          ・

実は、今回の変更によって、初心者級でもクリアできなくなってしまいました。
何回やってもゲームオーバーになってしまいます。
皆さんの場合には、今の設定でも上級者級でもあっさりクリアされてしまうのでしょうけど。

ですが、ほんのちょっといじると私でも上級者級でもクリアできるようになってしまいます。
いじるのは1カ所だけです。
どこだかわかります。


第3話へ   第5話へ

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