制作日誌

アバター
SAI
記事: 115
登録日時: 14年前
住所: はひほーひ

制作日誌

投稿記事 by SAI » 14年前

記念すべきゲーム作成日です。
VC++を使うことに決めましたが、結構便利ですね。
FifthCannonを作り始めてから1年。少しは成長したでしょうか。
少なくとも、前のプログラムを流用したりしてるので、1段目から登らなきゃいけない、ということはなさそうです。
今回は、前回の反省を生かし最初からファイル分割、関数化などを意識しています。
もう1ファイル1万行なんてことはなくなるでしょう。
こういったことは小規模ではあっても、ゲームを実際に作って感じたことなので、やはり経験が重要なのだと思いました。
このゲームも、ステップアップしたからすごいのが作れる!とは思うものの、結局は次のステップのための一歩になるのでしょうね。
それが己の未熟さを知ることであり、成長にダイレクトに繋がるのだと思います。

そんなわけで早速詰む。
ookamiさんとGRAMさん、Chocolaさんに手伝っていただいて、解決しました。本当にありがとうございました。
原因はincludeとextern関係です。
いまいちどうすればいいのかわかりませんあれ・・・。
私は、煩雑になるのでmain.cppに変数を宣言したくなくて分割したところで宣言したんですが、それがいけないようで。
でもそうするとグローバル変数を宣言するたびにmain.cppが長くなる・・・(-_-;)
そんなわけで今日の成果。ほとんど龍神録プログラミングの館やsoftyaさんの講座を参考にさせていただいたコードですね。
他山の石にはなるのではと思ったので、コードは載せちゃいます。
あとできれば添削して欲しいなあなんて思ったり・・・。

main.cpp

CODE:

//弾幕STGRPG

#include "DxLib.h"
#include "main.h"
#include "init.h"
#include "main_base.h"
#include "draw.h"

//平均fps
double ave;

//キー入力保存変数
int Key[256];	

CColor color;

GameState gamestate = GAMESTATE_INIT;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						LPSTR lpCmdLine, int nCmdShow )
{
	INIT();//初期化

	while(!ProcessMessage() && !GetHitKeyStateAll_2( Key ) && Key[KEY_INPUT_ESCAPE]0)//待つべき時間だけ待つ
        Sleep(term);

    gnt=GetNowCount();

    if(fps_count==0)//60フレームに1度基準を作る
        count0t=gnt;
    f[fps_count]=gnt-t;//1周した時間を記録
    t=gnt;
    //平均計算
    if(fps_count==FLAME-1)
	{
        *ave=0;
        for(i=0;i<FLAME;i++)
            *ave+=f[i];
        *ave/=FLAME;
    }
    fps_count = (++fps_count)%FLAME ;
}

#endif
init.h

CODE:

//初期化系。
#ifndef INIT_H
#define INIT_H

int INIT();


#endif
init.cpp

CODE:

#include "DxLib.h"
#include "init.h"
#include "main.h"


int INIT()
{
    // SetOutApplicationLogValidFlag(TRUE);           //ウィンドウのサイズは640×480
    if (MessageBox(NULL, "フルスクリーンモードにしちゃいますか?", "InvisibleFeather", MB_YESNO) == IDNO)
		{
			ChangeWindowMode(TRUE);
		}
    // タイトルを変更
    SetMainWindowText( "InvisibleFeather" ) ;
    //SetGraphMode(WINDOW_MAX_X , WINDOW_MAX_Y, 16 ) ;           //なくてもいい

	if( DxLib_Init() == -1 )		// DXライブラリ初期化処理
	{
		return -1 ;			// エラーが起きたら直ちに終了
	}
    // 描画可能領域セット
	SetDrawArea( 0 , 0 , WINDOW_MAX_X , WINDOW_MAX_Y ) ;
	//常にアクティブに
	SetAlwaysRunFlag( TRUE) ; 
	// 描画先を裏画面に設定
	SetDrawScreen( DX_SCREEN_BACK ) ; 

	//色代入
	color.white= GetColor(255,255,255);
	color.black=GetColor(0,0,0);
	color.gray =  GetColor(128,128,128);
	color.red= GetColor(255,0,0);
	color.blue=GetColor(0,0,255);
	color.yellow=GetColor(255,255,0);
	color.orange=GetColor(255,128,0);
	color.aqua=  GetColor(0,255,255);
	color.green = GetColor(0,255,0);
	color.perple= GetColor(255,0,255);
	color.Bgreen=GetColor(0,128,0);
	color.Lgreen = GetColor(128,255,128);

	return 0;
}
draw.h

CODE:

#ifndef DRAW_H
#define DRAW_H




//fps表示
void fps_draw(double ave);





#endif
draw.cpp

CODE:

#include "DxLib.h"
#include "GV.h"
#include "draw.h"
#include "main.h"


//FPS描画
void fps_draw(double ave)
{
    if(ave!=0)
    {
        int s=DrawFormatString(575,463,color.white,"[%.1f]",1000/ave);
    }
}

コメントはまだありません。