第10講 プログラムソースを複数のファイルに分割して、プログラムをわかりやすくする
第8話 ロールプレイングゲーム風アクションゲームのプログラムソースを複数ファイルに分割その1
今話のコードもすべてコピペできます。
chizusakusei.cppのコード
#include"main.h"
void chizusakusei() {
  int i, j;
  haikeigazou = LoadGraph("画像/b00.png"); //背景画像の出席番号を収納
                      //背景画像を描く
  for (i = 0; i < 12; i++) {
    for (j = 0; j < 16; j++) {
      DrawGraph(35 * j, 35 * i, haikeigazou, false);
    }
  }
  DeleteGraph(haikeigazou); //背景画像の出席番号を収納する箱(ハンドル)の削除
  DrawBox(40, 40, 600, 80, hai, true); //1本目の道路を描く
  DrawBox(280, 80, 320, 120, hai, true); //1本目の途中にあるくぼみを描く
  DrawBox(560, 80, 600, 440, hai, true); //2本目の道路を描く
  DrawBox(520, 200, 560, 240, hai, true); //2本目の途中にあるくぼみを描く
  DrawBox(40, 400, 600, 440, hai, true); //3本目の道路を描く
  DrawBox(340, 360, 380, 400, hai, true); //3本目の途中にあるくぼみを描く
  DrawBox(40, 120, 80, 400, hai, true); //4本目の道路を描く
  DrawBox(80, 300, 300, 340, hai, true); //5本目の道路を描く
  DrawBox(80, 200, 460, 240, hai, true); //6本目の道路を描く
  DrawBox(80, 120, 460, 160, hai, true); //7本目の道路を描く
  syuten = LoadGraph("画像/g00.png"); //ゴール(鍵凹)の出席番号を収納
  DrawGraph(270, 300, syuten, true); //ゴール(鍵凹)を描く
  DeleteGraph(syuten); //ゴール(鍵凹)の出席番号を収納する箱(ハンドル)の削除
  kabe = LoadGraph("画像/kb00.png"); //かべ 壁の出席番号を収納
  DrawGraph(28, 250, kabe, true); //壁を描く
  if (kagiarunasi == 1) { //鍵がある設定になっているときに{}内を実行
    kagi = LoadGraph("画像/k00.png"); //かぎ 鍵(凸)の出席番号を収納
    DrawGraph(430, 210, kagi, true); //鍵(凸)を描く
  }
  ryu = LoadGraph("画像/r01.png"); //りゅう 竜の出席番号を収納
  DrawGraph(40, 120, ryu, true); //竜を描く
  DeleteGraph(ryu); //竜の出席番号を収納する箱(ハンドル)の削除
  genjikoku = GetNowCount(); //現時刻を箱genjikokuに収納
  hono = LoadGraph("画像/ho00.png"); //炎の出席番号を収納
  int kosu = ((genjikoku - hajimenojikoku) / ht) % 5; //現時刻と最初の時刻の差を利用して炎の個数を算出
  for (int i = 0; i < kosu; i++) {
    DrawGraph(70 + 30 * i, 120, hono, true); //ゴール(鍵凹)を描く
    //ゲームオーバーであるかを判定し、ゲームオーバーの場合ゲームオーバーの画面を出す
    if (hx >= 60 + 30 * i && hx <= 80 + 30 * i && hy >= 110 && hy <= 150) {
      m = 2;
      return;
    }
  }
  DeleteGraph(hono); //炎の出席番号を収納する箱(ハンドル)の削除
}

gamemain.cppのコード
#include"main.h"
void gamemain() { //ゲームを進行させる社員(関数)
  chizusakusei(); //地図作製
  ugoki(); //うごき キャラクターの動きを制御
}

kachi.cppのコード
#include"main.h"
void kachi() { //かち ゲームクリアを描く社員(関数)
  SetFontSize(35); //フォントサイズを35に変更
  DrawFormatString(20, 100, kiiro, "ヾ(^v^)k"); // 文字を描画する
  DrawFormatString(20, 200, kiiro, "ゲームクリアです"); // 文字を描画する
  DrawFormatString(20, 250, kiiro, "ゲーム初期画面に戻るときはQを"); // 文字を描画する
  DrawFormatString(20, 295, kiiro, "そのままゲームを再開するときには"); // 文字を描画する
  DrawFormatString(20, 340, kiiro, "Zを押してください。"); // 文字を描画する //ゲーム再開
  if (CheckHitKey(KEY_INPUT_Z) != 0) {
    syokika();
    m = 1;
  }
  //ゲーム初期化画面へ
  if (CheckHitKey(KEY_INPUT_Q) != 0) {
    syokika();
    m = 0;
  }
}

main.cppのコード
#include"main.h"
int m; //ゲームの状態 0:ゲーム始め 1:ゲーム 2:ゲームオーバー 3:ゲールクリア
int siro; //白色の出席番号収納する箱
int kiiro; //黄色の出席番号を収納する箱
int hai; //灰色の出席番号収納する箱
int haikeigazou, syujinkou, syuten; //はいけいがぞう しゅじんこう しゅうてん 背景画像と主人公とゴールの出席番号を入れる箱
int moujyu; //もうじゅう 猛獣(ハイエナ)の出席番号を収納する箱
int ryu; //りゅう 竜の出席番号を収納する箱
int kabe; //かべ 壁の出席番号を収納する箱
int kagi; //鍵(凸)の出席番号を収納する箱
int hono; //ほのお 炎の出席番号を収納する箱
int hx , hy; //ヒーローの hx:横位置 hy:縦位置
int mx1_houkou; //mx1の方向 猛獣(ハイエナ1)の方向
int my2_houkou; //my2の方向 猛獣(ハイエナ2)の方向
int mx3_houkou; //mx3の方向 猛獣(ハイエナ3)の方向
int houkougae = -1; //ほうこうがえ 方向チェンジ
int mx1, my1; //猛獣(ハイエナ1)の mx1:横位置 my1:縦位置
int mx2, my2; //猛獣(ハイエナ2)の mx2:横位置 my2:縦位置
int mx3, my3; //猛獣(ハイエナ3)の mx3:横位置 my3:縦位置
int mh=0; //ハイエナの速さを収納する箱(整数型変数)
int ht; //竜の炎のタイミングを決める数を収納する箱(整数型変数)
int hh; //ヒーローの速さを収納する箱(整数型変数)
int kagiarunasi; //かぎあるなし 1:鍵がある 0:鍵なし
int hajimenojikoku; //始めの時刻を収納する箱
int genjikoku; //現在の時刻を収納する箱
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
  ChangeWindowMode(true); //ウィンドウモードの切り替え
  SetGraphMode(640, 480, 32); //ウインドウサイズの変更
  if (DxLib_Init() == -1)return(-1);  // DXライブラリ初期化処理

  syokika(); //初期化 ゲームの最初の状態を設定
  m = 0; //ゲームの状態 0:ゲーム始め 1:ゲーム 2:ゲームオーバー 3:ゲームクリア
  syokika(); //ゲーム初期状態の設定
  SetDrawScreen(DX_SCREEN_BACK); //裏画像を描画対象に加える
  hajimenojikoku = GetNowCount(); //はじめの時刻を箱hajimenojikokuに収納
  while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
    switch (m) { //mはゲームの状態 0:ゲーム始め 1:ゲーム 2:ゲームオーバー 3:ゲールクリア
    case 0:
      saisyonogamen(); //さいしょのがめん ゲームの初期画面を描く社員(関数)
      break;
    case 1:
      gamemain(); //ゲームを進行させる社員(関数)
      break;
    case 2:
      make(); //まけ ゲームオーバーを描く社員(関数)
      break;
    case 3:
      kachi(); //かち ゲームクリアを描く社員(関数)
      break;
default:
      break;
    }
  }

  WaitKey();   // キー入力待ち
  DxLib_End();  // DXライブラリ終了処理
  return 0;
}
(申し訳ございません。Caseと大文字が入っていました。
このままだとエラーします。正しくは、caseです。
2017/07/14に訂正しました。)



以下のコードは次話へ


第7話へ   第9話へ
a

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

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