エラー内容
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー LNK2005 WinMain は既に Game.obj で定義されています。 minigame F:\minigame\minigame\minigame\main.obj 1
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー LNK1169 1 つ以上の複数回定義されているシンボルが見つかりました。 kosensai F:\minigame\minigame\minigame\x64\Debug\minigame.exe 1
#include "Game.h"
#include "SceneMgr.h"
#include "DxLib.h"
#define SHOT 10000
static int mImageHandle; //画像ハンドル格納用変数
//初期化
void Game_Initialize() {
mImageHandle = LoadGraph("images/Scene_Game.png"); //画像のロード
}
//終了処理
void Game_Finalize() {
DeleteGraph(mImageHandle); //画像の解放
}
//更新
void Game_Update() {
if (CheckHitKey(KEY_INPUT_ESCAPE) != 0) { //Escキーが押されていたら
SceneMgr_ChangeScene(eScene_Menu);//シーンをメニューに変更
}
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
SetGraphMode(1280, 720, 32); //画面モードの設定
int player1, player1X, player1Y;
int player2, player2X, player2Y;
int ShotX[SHOT], ShotY[SHOT], ShotFlag[SHOT], ShotGraph;
int tamaX[SHOT], tamaY[SHOT], tamaFlag[SHOT], tamaGraph;
int ShotBFlag;
int tamaBFlag;
int player2W, player2H, ShotW, ShotH;
int player1W, player1H, tamaW, tamaH;
int i, j;
if (DxLib_Init() == -1) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// グラフィックの描画先を裏画面にセット
SetDrawScreen(DX_SCREEN_BACK);
// 1Pのグラフィックをメモリにロード&表示座標をセット
player1 = LoadGraph("1p.png");
player1X = 220; player1Y = 450;
// 2Pのグラフィックをメモリにロード&表示座標をセット
player2 = LoadGraph("2p.png");
player2X = 860; player2Y = 450;
// 1pの弾のグラフィックをメモリにロード
ShotGraph = LoadGraph("tama.png");
// 2pの弾のグラフィックをメモリにロード
tamaGraph = LoadGraph("tama2.png");
// 1pの弾が画面上に存在しているか保持する変数に『存在していない』を意味する0を代入しておく
for (i = 0; i < SHOT; i++)
{
ShotFlag[i] = 0;
}
// 2pの弾が画面上に存在しているか保持する変数に『存在していない』を意味する0を代入しておく
for (j = 0; j < SHOT; j++)
{
tamaFlag[j] = 0;
}
// ショットボタンが前のフレームで押されたかどうかを保存する変数に0(押されいない)を代入
ShotBFlag = 0;
// ショットボタンが前のフレームで押されたかどうかを保存する変数に0(押されいない)を代入
tamaBFlag = 0;
// 1p弾のグラフィックのサイズをえる
GetGraphSize(ShotGraph, &ShotW, &ShotH);
// 2p弾のグラフィックのサイズをえる
GetGraphSize(tamaGraph, &tamaW, &tamaH);
// 1pのグラフィックのサイズを得る
GetGraphSize(player1, &player1W, &player1H);
// 2pのグラフィックのサイズを得る
GetGraphSize(player2, &player2W, &player2H);
// 移動ルーチン
while (1)
{
// 画面を初期化(真っ黒にする)
ClearDrawScreen();
// 1pの操作ルーチン
{
// スペースキーを押していて、且弾が撃ち出されていなかったら弾を発射する
if (CheckHitKey(KEY_INPUT_SPACE))
{
// 前フレームでショットボタンを押したかが保存されている変数が0だったら弾を発射
if (ShotBFlag == 0)
{
// 画面上にでていない弾があるか、弾の数だけ繰り返して調べる
for (i = 0; i < SHOT; i++)
{
// 弾iが画面上にでていない場合はその弾を画面に出す
if (ShotFlag[i] == 0)
{
int Bw, Bh, Sw, Sh;
// 1pと1pの弾の画像のサイズを得る
GetGraphSize(player1, &Bw, &Bh);
GetGraphSize(ShotGraph, &Sw, &Sh);
// 1pの弾iの位置をセット、位置は1pの中心にする
ShotX[i] = (Bw - Sw) / 2 + player1X;
ShotY[i] = (Bh - Sh) / 2 + player1Y;
// 弾は現時点を持って存在するので、存在状態を保持する変数に1を代入する
ShotFlag[i] = 1;
// 一つ弾を出したので弾を出すループから抜けます
break;
}
}
}
// 前フレームでショットボタンを押されていたかを保存する変数に1(おされていた)を代入
ShotBFlag = 1;
}
else
{
// ショットボタンが押されていなかった場合は
// 前フレームでショットボタンが押されていたかを保存する変数に0(おされていない)を代入
ShotBFlag = 0;
}
// 1pを描画
DrawGraph(player1X, player1Y, player1, TRUE);
}
//2pの操作ルーチン
{
// エンターキーを押していて、且弾が撃ち出されていなかったら弾を発射する
if (CheckHitKey(KEY_INPUT_RETURN))
{
// 前フレームでショットボタンを押したかが保存されている変数が0だったら弾を発射
if (tamaBFlag == 0)
{
// 画面上にでていない弾があるか、弾の数だけ繰り返して調べる
for (j = 0; j < SHOT; j++)
{
// 2pの弾iが画面上にでていない場合はその弾を画面に出す
if (tamaFlag[j] == 0)
{
int Bw, Bh, Sw, Sh;
// 2pと2pの弾の画像のサイズを得る
GetGraphSize(player2, &Bw, &Bh);
GetGraphSize(tamaGraph, &Sw, &Sh);
// 2pの弾jの位置をセット、位置は2pの中心にする
ShotX[j] = (Bw - Sw) / 2 + player2X;
ShotY[j] = (Bh - Sh) / 2 + player2Y;
// 弾は現時点を持って存在するので、存在状態を保持する変数に1を代入する
tamaFlag[j] = 1;
// 一つ弾を出したので弾を出すループから抜けます
break;
}
}
}
// 前フレームでショットボタンを押されていたかを保存する変数に1(おされていた)を代入
tamaBFlag = 1;
}
else
{
// ショットボタンが押されていなかった場合は
// 前フレームでショットボタンが押されていたかを保存する変数に0(おされていない)を代入
tamaBFlag = 0;
}
// 2pを描画
DrawGraph(player2X, player2Y, player2, TRUE);
}
// 弾の数だけ弾を動かす処理を繰り返す
for (i = 0; i < SHOT; i++)
{
// 1pの弾の移動ルーチン( 存在状態を保持している変数の内容が1(存在する)の場合のみ行う )
if (ShotFlag[i] == 1)
{
// 弾を20ドット右に移動させる
ShotX[i] += 20;
// 画面外に出てしまった場合は存在状態を保持している変数に0(存在しない)を代入する
if (ShotX[i] < -80)
{
ShotFlag[i] = 0;
}
// 画面に1pの弾iを描画する
DrawGraph(ShotX[i], ShotY[i], ShotGraph, TRUE);
}
}
// 弾の数だけ弾を動かす処理を繰り返す
for (j = 0; j < SHOT; j++)
{
// 2pの弾の移動ルーチン( 存在状態を保持している変数の内容が1(存在する)の場合のみ行う )
if (tamaFlag[j] == 1)
{
// 弾を20ドット左に移動させる
tamaX[j] -= 20;
// 画面外に出てしまった場合は存在状態を保持している変数に0(存在しない)を代入する
if (tamaX[j] < -80)
{
tamaFlag[j] = 0;
}
// 画面に2pの弾iを描画する
DrawGraph(tamaX[j], tamaY[j], tamaGraph, TRUE);
}
}
// 弾と敵の当たり判定、弾の数だけ繰り返す
for (i = 0; i < SHOT; i++)
{
// 1pの弾iが存在している場合のみ次の処理に映る
if (ShotFlag[i] == 1)
{
// 2pとの当たり判定
if (((ShotX[i] > player2X && ShotX[i] < player2X + player2W) ||
(player2X > ShotX[i] && player2X < ShotX[i] + ShotW)) &&
((ShotY[i] > player2Y && ShotY[i] < player2Y + player2H) ||
(player2Y > ShotY[i] && player2Y < ShotY[i] + ShotH)))
{
// 接触している場合は当たった弾の存在を消す
ShotFlag[i] = 0;
}
}
}
// 弾と敵の当たり判定、弾の数だけ繰り返す
for (j = 0; j < SHOT; j++)
{
// 2pの弾jが存在している場合のみ次の処理に映る
if (ShotFlag[j] == 1)
{
// 1pとの当たり判定
if (((tamaX[j] > player1X && tamaX[j] < player1X + player1W) ||
(player1X > tamaX[j] && player1X < tamaX[j] + tamaW)) &&
((tamaY[j] > player1Y && tamaY[j] < player1Y + player1H) ||
(player1Y > tamaY[j] && player1Y < tamaY[j] + ShotH)))
{
// 接触している場合は当たった弾の存在を消す
tamaFlag[j] = 0;
}
}
}
// 裏画面の内容を表画面にコピーする
ScreenFlip();
// Windows 特有の面倒な処理をDXライブラリにやらせる
// -1 が返ってきたらループを抜ける
if (ProcessMessage() < 0) break;
// もしESCキーが押されていたらループから抜ける
if (CheckHitKey(KEY_INPUT_ESCAPE)) break;
}
WaitKey(); // キーの入力待ち(『WaitKey』を使用)
DxLib_End(); // DXライブラリ使用の終了処理
return 0; // ソフトの終了
}
#include "DxLib.h"
#include "SceneMgr.h"
#include "Keyboard.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {//画面更新 & メッセージ処理 & 画面消去
Keyboard_Update(); //キーボードの更新
SceneMgr_Update(); //更新
SceneMgr_Draw(); //描画
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}