エラーが出て困っています・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
りゅーのす

エラーが出て困っています・・・

#1

投稿記事 by りゅーのす » 11年前

エラー 1 error LNK2005: _WinMain@16 は既に main.obj で定義されています。 C:\Users\りゅーのす\Desktop\Game4\Game4\test.obj
エラー 2 error LNK2019: 未解決の外部シンボル "void __cdecl Player_Draw(void)" (?Player_Draw@@YAXXZ) が関数 _WinMain@16 で参照されました。 C:\Users\りゅーのす\Desktop\Game4\Game4\main.obj
エラー 3 error LNK1120: 外部参照 1 が未解決です。 C:\Users\りゅーのす\Desktop\Game4\Debug\Game4.exe 1

main.cppです。

#include "DxLib.h"
#include "Player.h"
#include "Keyboard.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);

Player_Initialize();

while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0){
Player_test();

Keyboard_Update();

Player_Update();
Player_Draw();



}
DxLib_End();
return 0;
}

test.cppです。

#include "DxLib.h"
#define PI 3.141592654

int Key[256]; //キーが押されているフレーム数を格納する

//キーの入力状態を更新する
int gpUpdateKey(){
char tmpKey[256]; //現在のキーの入力状態を格納する
GetHitKeyStateAll(tmpKey); //全てのキーの入力状態を得る

for(int i = 0; i < 256; i++){
if(tmpKey != 0){ //i番のキーコードに対応するキーが押されていたら
Key++; //加算
}else{ //押されていなければ
Key = 0; //0にする
}
}
return 0;
}
typedef struct{

int x, y; //座標格納用変数
char name[128]; //項目名格納用変数

}MenuElement_t;



int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){

//ChangeWindowMode(TRUE);//ウィンドウモードに設定
//LoadGraphScreen(50, 10, "sample.jpg",TRUE); //画像を絵画する 必要なし

//DxLib_Init(); //DXライブラリ初期化処理
//SetDrawScreen( DX_SCREEN_BACK);//画像先を裏画面に設定
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK);


MenuElement_t MenuElement[3] = {

{ 80, 100, "スタート"},
{100, 150, "おまけ"},
{100, 200, "終了"},
};

int SelectNum = 0; //現在の選択番号

int x = 320 , y = 245;

//int image[16];
//LoadDivGraph("sample2.png", 16, 4, 4, 32, 32, image); //画像の分割読み込み

//int Green = GetColor(0, 255, 0); //色の設定
int Handle; //データハンドル格納用変数
Handle = LoadGraph("sample2.png", TRUE); //画像をロード
//DrawGraph(50, 100, Handle, TRUE); //データハンドルを使用し画像を絵画

//while(裏画面を表表示、メッセージ処理、画面クリア)
while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0){//×ボタンで終了


//if(ProcessMessage() != 0){
//break;
//}
//ClearDrawScreen();//画面を消す
//DrawGraph(x, 100, Handle, TRUE);//画像の絵画
//DrawGraph(x / 2, 200, Handle, TRUE); //画像の絵画
//DrawGraph(x / 4, 300, Handle, TRUE); //画像の絵画
//DrawGraph(x, 0, Handle, TRUE); //画像の絵画

//DrawRotaGraph(400, 200, 2.0, PI / 4, Handle, TRUE);//画像の絵画 斜め
//SetDrawBlendMode(DX_BLENDMODE_ALPHA, 128);//透過度
//DrawGraph(100, 200, Handle, TRUE); //画像の絵画
//DrawGraph(120, 200, Handle, TRUE); //画像の絵画

//SetDrawBlendMode(DX_BLENDMODE_ADD, 255);

//DrawGraph(300, 200, Handle, TRUE); //画像の絵画
//DrawGraph(320, 200, Handle, TRUE); //画像の絵画


//DrawRotaGraph(x, 200, 1.0, 0.0, Handle, TRUE);//画像の絵画 斜め
//SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);//透過度

//DrawRotaGraph(100, 200, 1.0, 0.0, Handle, TRUE); //画像の絵画 斜め
//DrawRotaGraph(400, 200, 2.0, PI / 4, Handle, TRUE); //画像の絵画 斜め

//DrawFormatString(x, y, Green, "私は人形じゃない!", x, y); //文字を表示
//DrawGraph(0, 0, image[8], TRUE); //画像を表示

//DrawFormatString(x, 0, GetColor(255, 255, 255), "!!");

//if(CheckHitKey(KEY_INPUT_RIGHT)!= 0){
//x = x + 50;


//x++; //xを1増やす
//y = y + 1; //y座標を1追加
//x = x + 2;//xを2増やす
//Sleep(7);//7[ms]
//ScreenFlip();//裏画面を表画面に反映
//if(Key[KEY_INPUT_X]>= 60){ //60フレーム以上押されたら
//DrawFormatString(0, 0, GetColor(255, 255, 255), "!?"); //文字を表示する
//}

if(Key[KEY_INPUT_DOWN] == 1){

SelectNum = (SelectNum + 1) % 5;
}
if(Key[KEY_INPUT_UP] == 1){

SelectNum = (SelectNum + 4) % 5;
}
if(Key[KEY_INPUT_DOWN] == 1 || Key[KEY_INPUT_UP] == 1){
for(int i = 0; i < 5; i++){

if(i == SelectNum){
MenuElement.x = 80;

}else{
MenuElement.x = 100;
}
}
}

for(int i = 0; i < 5; i++){ //メニュー項目を絵画
DrawFormatString(MenuElement.x, MenuElement.y, GetColor(255, 255, 0), MenuElement.name);

}

if(Key[KEY_INPUT_RIGHT] >= 1){ //右キーが押されたら
x++;//右へ移動
}
if(Key[KEY_INPUT_DOWN] >= 1){ //下キーが押されていたら
y++;//下へ移動
}
if(Key[KEY_INPUT_LEFT] >= 1){//左キーが押されていたら
x--;//左へ移動
}
if(Key[KEY_INPUT_UP] >= 1){ //上キーが押されていたら
y--;//上へ移動
}
DrawRotaGraph(x, y, 1.0, 0.0, Handle, TRUE); //x, yの位置にキャラを絵画
//}
}


//WaitKey(); //キー入力待ち
DxLib_End(); //DXライブラリ終了処理

return 0;
}


//while文の中でゲームの中核となるコードを追加。

一番上にあるエラーをどう解決すればよいのかわかりません・・・・
申し訳ありませんが教えてください・・・

box
記事: 2002
登録日時: 13年前

Re: エラーが出て困っています・・・

#2

投稿記事 by box » 11年前

りゅーのす さんが書きました:エラー 1 error LNK2005: _WinMain@16 は既に main.obj で定義されています。 C:\Users\りゅーのす\Desktop\Game4\Game4\test.obj
提示されたコードにおいて、WinMain()が複数あるのはどうしてですか?
りゅーのす さんが書きました: エラー 2 error LNK2019: 未解決の外部シンボル "void __cdecl Player_Draw(void)" (?Player_Draw@@YAXXZ) が関数 _WinMain@16 で参照されました。 C:\Users\りゅーのす\Desktop\Game4\Game4\main.obj
エラー 3 error LNK1120: 外部参照 1 が未解決です。 C:\Users\りゅーのす\Desktop\Game4\Debug\Game4.exe 1
Player_Draw()の実体がないか、あるいは、関数名のスペルが間違っているか、だと思います。
確認してください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

りゅーのす

Re: エラーが出て困っています・・・

#3

投稿記事 by りゅーのす » 11年前

MainWinは1つでないといけないのですか!!?
知りませんでした…

解決方法としてはどちらかのcppを
削除しなければならないのですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: エラーが出て困っています・・・

#4

投稿記事 by softya(ソフト屋) » 11年前

1つのプロジェクトには1つのWinMainと決まっています。
2つのWinMainが必要な理由は何でしょうか? メニューのためだけにWinMainを書いている気がしますが。

あと投稿時に

コード:

タグをご利用ください。
http://dixq.net/board/board.html ← フォーラムルールに詳しく書いてあります。一度全部に目を通してください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ホヅミ
記事: 110
登録日時: 13年前

Re: エラーが出て困っています・・・

#5

投稿記事 by ホヅミ » 11年前

プログラムのmain部分は人間で例えるところの口です。
一般人は一つの口で複数の言葉を話すことはできませんよね?(モンゴル除く)
そういうものだと思っていただけるとイメージがつかみやすいのでは?

コードタグを使っていただけると嬉しいのですが、りゅーのすさんがどういったプログラム仕様にしたいかで変わってくると思います。
複数のウィンドウを作りたいならばプロジェクトをウィンドウ分作ることや
おまけモードのようにしたいならば「本編モジュール」、「おまけモジュール」のように分けたものをメイン部分でスイッチなどを用いて読みだしてはいかがでしょうか?

ホヅミ
記事: 110
登録日時: 13年前

Re: エラーが出て困っています・・・

#6

投稿記事 by ホヅミ » 11年前

何でもかんでもでしゃばってやるのも気が引けますがペタリ
main.cpp

コード:

#include "DxLib.h"
#include "Player.h"
#include "Keyboard.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);

	Player_Initialize();

	while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0){
		Player_test();

		Keyboard_Update();

		Player_Update();
		Player_Draw();
	}
	DxLib_End();
	return 0;
}
test.cpp

コード:

#include "DxLib.h"
#define PI 3.141592654

int Key[256]; //キーが押されているフレーム数を格納する

//キーの入力状態を更新する
int gpUpdateKey(){
	char tmpKey[256]; //現在のキーの入力状態を格納する
	GetHitKeyStateAll(tmpKey); //全てのキーの入力状態を得る

	for(int i = 0; i < 256; i++){
	
		if(tmpKey[i] != 0){ //i番のキーコードに対応するキーが押されていたら
			Key[i]++; //加算
		}else{ //押されていなければ
			Key[i] = 0; //0にする
		}
		
	}
	return 0;
}
typedef struct{

	int x, y; //座標格納用変数
	char name[128]; //項目名格納用変数

}MenuElement_t;



int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){

	//ChangeWindowMode(TRUE);//ウィンドウモードに設定
	//LoadGraphScreen(50, 10, "sample.jpg",TRUE); //画像を絵画する 必要なし

	//DxLib_Init(); //DXライブラリ初期化処理
	//SetDrawScreen( DX_SCREEN_BACK);//画像先を裏画面に設定
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK);


	MenuElement_t MenuElement[3] = {
		{ 80, 100, "スタート"},
		{100, 150, "おまけ"},
		{100, 200, "終了"},
	};

	int SelectNum = 0; //現在の選択番号

	int x = 320 , y = 245;

	//int image[16];
	//LoadDivGraph("sample2.png", 16, 4, 4, 32, 32, image); //画像の分割読み込み

	//int Green = GetColor(0, 255, 0); //色の設定
	int Handle; //データハンドル格納用変数
	Handle = LoadGraph("sample2.png", TRUE); //画像をロード
	//DrawGraph(50, 100, Handle, TRUE); //データハンドルを使用し画像を絵画

	//while(裏画面を表表示、メッセージ処理、画面クリア)
	while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0){//×ボタンで終了


		//if(ProcessMessage() != 0){
		//break;
		//}
		//ClearDrawScreen();//画面を消す
		//DrawGraph(x, 100, Handle, TRUE);//画像の絵画
		//DrawGraph(x / 2, 200, Handle, TRUE); //画像の絵画
		//DrawGraph(x / 4, 300, Handle, TRUE); //画像の絵画
		//DrawGraph(x, 0, Handle, TRUE); //画像の絵画

		//DrawRotaGraph(400, 200, 2.0, PI / 4, Handle, TRUE);//画像の絵画 斜め
		//SetDrawBlendMode(DX_BLENDMODE_ALPHA, 128);//透過度
		//DrawGraph(100, 200, Handle, TRUE); //画像の絵画
		//DrawGraph(120, 200, Handle, TRUE); //画像の絵画

		//SetDrawBlendMode(DX_BLENDMODE_ADD, 255);

		//DrawGraph(300, 200, Handle, TRUE); //画像の絵画
		//DrawGraph(320, 200, Handle, TRUE); //画像の絵画


		//DrawRotaGraph(x, 200, 1.0, 0.0, Handle, TRUE);//画像の絵画 斜め
		//SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);//透過度

		//DrawRotaGraph(100, 200, 1.0, 0.0, Handle, TRUE); //画像の絵画 斜め
		//DrawRotaGraph(400, 200, 2.0, PI / 4, Handle, TRUE); //画像の絵画 斜め

		//DrawFormatString(x, y, Green, "私は人形じゃない!", x, y); //文字を表示
		//DrawGraph(0, 0, image[8], TRUE); //画像を表示

		//DrawFormatString(x, 0, GetColor(255, 255, 255), "!!");

		//if(CheckHitKey(KEY_INPUT_RIGHT)!= 0){
		//x = x + 50;


		//x++; //xを1増やす
		//y = y + 1; //y座標を1追加
		//x = x + 2;//xを2増やす
		//Sleep(7);//7[ms]
		//ScreenFlip();//裏画面を表画面に反映
		//if(Key[KEY_INPUT_X]>= 60){ //60フレーム以上押されたら
		//DrawFormatString(0, 0, GetColor(255, 255, 255), "!?"); //文字を表示する
		//}

		if(Key[KEY_INPUT_DOWN] == 1){

			SelectNum = (SelectNum + 1) % 5;
		}
		if(Key[KEY_INPUT_UP] == 1){
	
			SelectNum = (SelectNum + 4) % 5;
		}
		if(Key[KEY_INPUT_DOWN] == 1 || Key[KEY_INPUT_UP] == 1){
			for(int i = 0; i < 5; i++){

				if(i == SelectNum){
					MenuElement[i].x = 80;

				}else{
					MenuElement[i].x = 100;
				}
			}
		}

		for(int i = 0; i < 5; i++){ //メニュー項目を絵画
			DrawFormatString(MenuElement[i].x, MenuElement[i].y, GetColor(255, 255, 0), MenuElement[i].name);

		}

		if(Key[KEY_INPUT_RIGHT] >= 1){ //右キーが押されたら
			x++;//右へ移動
		}
		if(Key[KEY_INPUT_DOWN] >= 1){ //下キーが押されていたら
			y++;//下へ移動
		}
		if(Key[KEY_INPUT_LEFT] >= 1){//左キーが押されていたら
			x--;//左へ移動
		}
		if(Key[KEY_INPUT_UP] >= 1){ //上キーが押されていたら
			y--;//上へ移動
		}
			DrawRotaGraph(x, y, 1.0, 0.0, Handle, TRUE); //x, yの位置にキャラを絵画
		//}
	}


	//WaitKey(); //キー入力待ち
	DxLib_End(); //DXライブラリ終了処理

	return 0;
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: エラーが出て困っています・・・

#7

投稿記事 by softya(ソフト屋) » 11年前

やりたい事の全貌が、こちらに載っている気がします。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/

 メニュー画面の作り方
sp.3 メニュー画面の作り方.1
sp.4 メニュー画面の作り方.2
sp.5 メニュー画面の作り方.3
sp.7 メニュー画面の作り方 [選択項目編]

を読んでみてください。

【追記】
合わせて、こちらも読まれると良いと思います。

ゲームプログラミング設計 
d.1 メイン関数の作り方
d.2 複数のファイルにわけてコンパイルする
d.3 ゲームの設計と分割コンパイル(1)
d.4 ゲームの設計と分割コンパイル(2)
d.5 ゲームの設計と分割コンパイル(3)
d.6 管理部の作り方 (似た要素のまとめ方)
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

りゅーのす

Re: エラーが出て困っています・・・

#8

投稿記事 by りゅーのす » 11年前

皆様、コメントありがとうございます。

まずはメニュー画面を作成し、

スタートならばキャラクターがフィールド移動、
敵と出会ったなら戦闘開始というふうにしたいです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: エラーが出て困っています・・・

#9

投稿記事 by softya(ソフト屋) » 11年前

No.7で書きましたが、ゲームプログラミングの館の「ゲームプログラミング設計」と「メニュー画面の作り方」を理解されることが必要かと思われます。
これは既に読まれていますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: エラーが出て困っています・・・

#10

投稿記事 by softya(ソフト屋) » 11年前

りゅーのす さんが書きました:皆様、コメントありがとうございます。

まずはメニュー画面を作成し、

スタートならばキャラクターがフィールド移動、
敵と出会ったなら戦闘開始というふうにしたいです。
想定してる内容からするとRPGの様なものを想像します。
ゲーム中にフィールドと戦闘の状態遷移が起こりますので、メニューの項にもある状態遷移などの応用も必要となると思います。
もう少し詳しく書いてもらえると、次に何をすれば良いかも書けるかと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

りゅーのす

Re: エラーが出て困っています・・・

#11

投稿記事 by りゅーのす » 11年前

ありがとうございます。

まず、私は、メニュー画面を制作したいのですが、「複数のファイルにわけてコンパイルする」のところで、新たにmain.cppが教えられていますが、
私は、test.cppを今までコードを入力していまして、MainWinをtest.cppの中に入力しておりました。
しかし、新たに,
main.cppが教えられておりますが、その中にもMainWinが教えられておりましたのでその通りにいたしました。

すると、

エラー 1 error LNK2005: _WinMain@16 は既に main.obj で定義されています。 C:\Users\りゅーのす\Desktop\Game4\Game4\test.obj
エラー 2 error LNK2019: 未解決の外部シンボル "void __cdecl Player_Draw(void)" (?Player_Draw@@YAXXZ) が関数 _WinMain@16 で参照されました。 C:\Users\りゅーのす\Desktop\Game4\Game4\main.obj
エラー 3 error LNK1120: 外部参照 1 が未解決です。 C:\Users\りゅーのす\Desktop\Game4\Debug\Game4.exe 1

このようなエラーが出てしまいました・・・・

質問した結果、2つMainwinを使用してはいけないということがわかりましたが、どのように直せばよいのかわかりません・・・・

ここまでは、エラーの話となってしまいましたが、

まずは、メニュー画面にし、

・項目である「スタート」「おまけ」などの項目を選べるようにし、クリックし、次の画面に行けるようにしたいです。
矢印キーで可能にしていきたいです。

・フィールドが存在し、キャラクターが行動が可能にするようにし、モンスターとの遭遇により戦闘を行えるようにするというシステム。
主にダンジョン(洞窟や山、海、平原など)でモンスターの遭遇が出来るようにし、戦闘ができるようにしたいです。

もちろん、武器や防具も装備可能にし、能力に関してもこれからもやっていきたいと思います。

仲間の技(通常技、特技)、アイテム、逃げるといった項目を戦闘で選べるようにできる。

もちろん、戦闘以外でも、仲間のステータス、アイテムなどを見られるようにしていきたいと考えております。

行動は矢印キーで可能にし、戦闘での項目、戦闘以外での項目は「1~9」のいずれか一つをソースコードで宣言し、可能にすることを
考えております。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: エラーが出て困っています・・・

#12

投稿記事 by softya(ソフト屋) » 11年前

すいません、見落とされると思いますが、「メニュー画面の作り方」の方を読まれては?と書いたのですが読まれましたでしょうか?
こちらに「メニュー画面」と「コンフィグ画面」、「ゲーム画面」のあるサンプルが記載されています。

システムに関しては整理してみるので、しばらくお待ちください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

りゅーのす

Re: エラーが出て困っています・・・

#13

投稿記事 by りゅーのす » 11年前

今、あらためまして見ております。

私のためにご協力ありがとうございます。

りゅーのす

Re: エラーが出て困っています・・・

#14

投稿記事 by りゅーのす » 11年前

今、行っておりますが、

いままで用いていたtest.cppは必要ないのでしょうか・・?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: エラーが出て困っています・・・

#15

投稿記事 by softya(ソフト屋) » 11年前

WinMainは2つ存在できないので、main側のWinMainを使うように組み替える必要があります。
その例となるのが「メニュー画面の作り方」です。test.cppは使用を中止して参考用に残し新たに作りましょう。

作りなおして大変だと思うかもしれませんが、プログラム開発中の組み直しとしてはちょっとした事のレベルに入ります。
組んでいくに連れもっと頻発しますので、慣れると思います。

【追記】
システムの方を拝見しました。
書かれた内容見るに項目の整理不足だと思います。
RPGに見えますがイベント・シナリオとかは無いんでしょうか?

・フィールド
・戦闘
・メニュー

など大きな項目に分けて書きだしてみてください。その中で更にサブ項目に分けます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

りゅーのす

Re: エラーが出て困っています・・・

#16

投稿記事 by りゅーのす » 11年前

わかりました。

・フィールド

草原・・・障害物がほとんどなく、これはシナリオでいうと序盤が多いです。

主人公が村におり、村からでると草原があり、行動をとります。
この段階での遭遇するモンスターは当然、弱いモンスターとします。

北へ向かうと別の村が存在し、そこに入り、住民の人に話をすると、「ボスモンスター」の名前がでて、
戦わなければならないという設定です。
しかし、そのボスモンスターは山に存在し、行くにはまた更に北へ向かわなければなりません。
また、ボスモンスターはレベルが高いため、レベルを上げなければなりません。
また、武器、防具の強化も必要となります。強化するためにはモンスターの素材、またはコインも必要となります。

レベルが十分に上がり、武器、防具も強化され、山へ向かいます。

そして山の最上につくと、ボスモンスターと戦い勝利すると、コイン、アイテムが手に入ります。
これは弱いモンスターも同じです。


ボスモンスターの話がでた村に戻ると仲間が1人増えます。

旅が進むと、ボスモンスターと戦います。
ボスモンスターは2体、3体の場合もあります。

仲間の武器、防具の強化も可能です。

ほとんどがこの繰り返しです。

しかし、仲間に関しては、最大で3人まで旅に連れて行けます。
といっても、仲間になるのは6人程度です。

旅が進むごとにフィールドも複雑になっていき、山、洞窟、湿地帯、火山が存在する機会が多くなり、

山・・・ゴツゴツとしたフィールドが特徴で、岩の障害物が存在。

湿地帯・・・水たまりが多く、主に状態異常にさせるモンスターが出現するフィールド。

火山・・・溶岩が流れており、それに近づくとダメージを少しうける。

洞窟・・・山と同じです。

・メニュー画面について

スタート・・・「始めから」、「続きから」という項目があらわれます。
「始めから」を押すとゲームが最初っからになり、「続きから」になると、セーブしたところから始まります。

終わる・・・ゲームを終了。

・メニューについて

・戦闘でのメニュー

戦う・・・普通に攻撃します。

特技・・・武器にある技を選択し攻撃します。

例えばソードの特技ならば

特技を押して、「2連続」を選択し、攻撃が可能です。

アイテム・・・道具を見ることが可能で、使うことも可能です。

逃げる・・・先頭から逃げられます。(ボス戦はにげられません)

それ以外でのメニューでは

ステータス・・・仲間の能力を見ることができます。

装備・・・仲間の装備が可能です

アイテム・・・アイテムを使うことや見ることができます。

セーブ・・・データを保存できます。

・戦闘では

体力・・・レベルアップに伴い上がります。体力が0の場合、ゲームオーバーです。

防具・攻撃力・・・武器、防具によって変わります。武器も防具もない場合、1とします。

特殊・・・特技を出すためのものであり、レベルが上がるとそれに伴いあがります。

・イベントについて

旅が進むにつれて仲間が出来る

旅を進めるために条件をクリアする

例えば、

・例えば村にいる老人が倒れており、助けるために薬が必要。
薬を手に入れるためにはモンスターと戦わなければならない。
そのモンスターは強力。

・洞窟の入り口に暗号が書かれており、それを解かなければならない。
特には、多くの人に話をする必要がある。

ゲームクリアーすると、今まで倒してきたボスモンスターと1日おきに戦うことができます。

スキル仲間によってスキルは異なります。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: エラーが出て困っています・・・

#17

投稿記事 by softya(ソフト屋) » 11年前

RPGですね。ざっとやりたい事は分かりました。
まず規模が大きくなるので、始めてだと支離滅裂になって頓挫するか、何度か作り直しになりそうです。
最初はもっと小規模なものを完成させてからのほうが私は良いと思います。
ドラクエ3をいきなり作るようなものなのでドラクエ1をまず作りませんかと言う提案です。
ただ、それなりの規模のものを自力で完成させた人もいるので、ご本人の努力次第です。

>システムの方を拝見しました。
>書かれた内容見るに項目の整理不足だと思います。
>RPGに見えますがイベント・シナリオとかは無いんでしょうか?

いっぱい書いてもらったので内容はよくわかりました。
ただ、なんのために書き出すかというとプログラム作業として何が必要かを洗い出すためです。
シナリオやデータ作成やレベルデザインはこれらに含みません。
なので、ゲームシステム・シナリオ・世界設定・レベルデザインの説明が混在なのは整理されていない証拠だと思います。

参考に私の書いたRPG作成講座です。
「マイ 日記 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/blog.php?u=114&sd=a&c=2

最初の方に作業項目を上げているので、参考にしてください。
他にも、分からなかったら聞いてくださいね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

りゅーのす

Re: エラーが出て困っています・・・

#18

投稿記事 by りゅーのす » 11年前

ありがとうございます。

りゅーのす

Re: エラーが出て困っています・・・

#19

投稿記事 by りゅーのす » 11年前

エラー 1 error LNK2019: 未解決の外部シンボル "void __cdecl Player_Draw(void)" (?Player_Draw@@YAXXZ) が関数 _WinMain@16 で参照されました。 C:\Users\りゅーのす\Desktop\Game4\Game4\main.obj

エラー 2 error LNK1120: 外部参照 1 が未解決です。 C:\Users\りゅーのす\Desktop\Game4\Debug\Game4.exe

このエラーが未だに消えません。
これはどういうことなのでしょうか・・・・

いま、「メニュー画面の作り方(C++)」を作成中なのですが・・・

りゅーのす

Re: エラーが出て困っています・・・

#20

投稿記事 by りゅーのす » 11年前

すみません。解決しました。
ありがとうございます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: エラーが出て困っています・・・

#21

投稿記事 by softya(ソフト屋) » 11年前

りゅーのす さんが書きました:エラー 1 error LNK2019: 未解決の外部シンボル "void __cdecl Player_Draw(void)" (?Player_Draw@@YAXXZ) が関数 _WinMain@16 で参照されました。 C:\Users\りゅーのす\Desktop\Game4\Game4\main.obj

エラー 2 error LNK1120: 外部参照 1 が未解決です。 C:\Users\りゅーのす\Desktop\Game4\Debug\Game4.exe

このエラーが未だに消えません。
これはどういうことなのでしょうか・・・・

いま、「メニュー画面の作り方(C++)」を作成中なのですが・・・
「メニュー画面の作り方(C++)」はC++を勉強している人向けです。
ご存じない用語やら文法が沢山出てくると思いますが。
とりあえずC言語だけの人には無用です。

【補足】 C言語とC++は違う言語ですが、ほぼ互換があります。
ただし、C++はC言語よりもたくさんの機能があり、それを理解しないと使うことはできません。
1例:class
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

りゅーのす

Re: エラーが出て困っています・・・

#22

投稿記事 by りゅーのす » 11年前

ありがとうございます

閉鎖

“C言語何でも質問掲示板” へ戻る