うまく出来ているか確認するためにいざ実行してみると、error LNK2005がたくさん出てきました。
そのエラーはこういうものです。
FPS.obj : error LNK2005: "int (* Block)[4]" (?Block@@3PAY03HA) は既に main.obj で定義されています。
Init.obj : error LNK2005: "int (* Block)[4]" (?Block@@3PAY03HA) は既に main.obj で定義されています。
Key.obj : error LNK2005: "int (* Block)[4]" (?Block@@3PAY03HA) は既に main.obj で定義されています。
Loop.obj : error LNK2005: "int (* Block)[4]" (?Block@@3PAY03HA) は既に main.obj で定義されています。
CheckOverlap.obj : error LNK2005: "int (* Block)[4]" (?Block@@3PAY03HA) は既に main.obj で定義されています。
ControlBlock.obj : error LNK2005: "int (* Block)[4]" (?Block@@3PAY03HA) は既に main.obj で定義されています。
CreateBlock.obj : error LNK2005: "int (* Block)[4]" (?Block@@3PAY03HA) は既に main.obj で定義されています。
DrawField.obj : error LNK2005: "int (* Block)[4]" (?Block@@3PAY03HA) は既に main.obj で定義されています。
Initialize.obj : error LNK2005: "int (* Block)[4]" (?Block@@3PAY03HA) は既に main.obj で定義されています。
LockBlock.obj : error LNK2005: "int (* Block)[4]" (?Block@@3PAY03HA) は既に main.obj で定義されています。
MoveBlock.obj : error LNK2005: "int (* Block)[4]" (?Block@@3PAY03HA) は既に main.obj で定義されています。
TurnBlock.obj : error LNK2005: "int (* Block)[4]" (?Block@@3PAY03HA) は既に main.obj で定義されています。
C:\Documents and Settings\****\My Documents\Visual Studio 2008\Projects\Project1\テトリス\Debug\テトリス.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
ビルドログは "file://c:\Documents and Settings\****\My Documents\Visual Studio 2008\Projects\Project1\テトリス\Debug\BuildLog.htm" に保存されました。
テトリス - エラー 13、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========変数と関数などの名前が類似していたりするのはダメだとでも言っているのでしょうか?
以下がコードになります。
//main.h
#define GROBAL_INSTANCE
#include "GV.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
Window_Init();
Initialize();
while(!ProcessLoop() && !Key.Code[KEY_INPUT_ESCAPE] && !GameOver){
ControlBlock();
if(Count%240==0){
if(!CheckOverlap(Block_X,Block_Y+1))
MoveBlock(Block_X,Block_Y+1);
else{
LockBlock();
CreateBlock();
}
}
DrawField();
SetDrawFPS(TRUE);
}
DxLib_End();
return 0;
}//GV.h
#include "DxLib.h"
#include "Define.h"
#ifdef GROBAL_INSTANCE
#define GROBAL
#else
#define GROBAL extern
#endif
#include "Function.h"
#include "BV.h"
GROBAL Key_t Key;
GROBAL FPS_t FPS;
GROBAL int Stage[FieldSize_Y][FieldSize_X];
GROBAL int Field[FieldSize_Y][FieldSize_X];
GROBAL int Block_X;
GROBAL int Block_Y;
GROBAL int GameOver;
GROBAL int Count;//BV.h(ブロック変数(BlockVariable)の用意と初期化)
GROBAL int Block[BlockSize_X][BlockSize_Y]=
{
{0,0,0,0},
{0,1,1,0},
{0,1,1,0},
{0,0,0,0},
};//Function.h
GROBAL void KeepSpeedManagement(); //処理を一定の速度に保つ
GROBAL void SetDrawFPS(int); //FPS表示のON/OFF
GROBAL int GetHitKeyStateAll_2(); //キー入力1
GROBAL int CheckHitKeyAll_2(); //キー入力2
GROBAL int Window_Init(); //MessageBoxやDxLib_Initなどの纏め
GROBAL int ProcessLoop(); //ループ内に必要な関数の纏め
GROBAL void Initialize(); //変数初期化
GROBAL int CreateBlock(); //ブロック生成
GROBAL void DrawField(); //フィールド描画
GROBAL void MoveBlock(int,int); //ブロック移動処理
GROBAL int CheckOverlap(int,int); //障害物確認
GROBAL void LockBlock(); //ブロックを障害物化
GROBAL void ControlBlock(); //ブロック操作処理
GROBAL int TurnBlock(); //ブロック回転処理