C:¥windows¥system32¥cmd.exeが無限に生成される事について

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

C:¥windows¥system32¥cmd.exeが無限に生成される事について

#1

投稿記事 by tera » 12年前

C言語初心者で申し訳ありませんが、質問させて頂きます。

今、簡単なゲームをプログラムしているのですが、
C:¥windows¥system32¥cmd.exe
と言うウィンドーが無限に生成されてしまいます。

あるプログラムをしていて、その中でDXライブラリを言うのを見つけ、
それを利用して、文字だけのゲームでは無く、画像も当てはめてみようと思ったので、

今書いてるプログラムにインクルードを記述して、メイン関数をDXライブラリ仕様に書き換えてみました。
そして、とりあえず実行してみると、C:¥windows¥system32¥cmd.exeと言うウィンドーが無限に生成されて、タスクバーから強引に終了させなくてはいけない状態となりました。

対策方法を教えて頂けないでしょうか?

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

Re: C:¥windows¥system32¥cmd.exeが無限に生成される事について

#2

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

たぶん、とんでも無い事をしていると思いますがソースコード見ないと何とも言えません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

tera

Re: C:¥windows¥system32¥cmd.exeが無限に生成される事について

#3

投稿記事 by tera » 12年前

コード:

 
//=========================================================================
//【インクルード記述】
//=========================================================================
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#include<string.h>
#include<windows.h>

//=========================================================================
//【グローバル変数宣言】
//=========================================================================
char tugi;															//継続判定
int chara_id={0};													//キャラ番号
int job_id=0;														//職番号
int fst_chara_flg=0;												//進行段階フラグ
int statusSD_ran[3][40]={{0,1,2,3,0,2,3,1,4,2,3,2,1,3,2,1,3,1,3,2,
						  0,3,2,1,3,2,2,1,0,0,1,3,4,3,2,1,3,3,2,5},	//低補正(分布は完全ランダム
						 {5,4,6,5,4,5,4,6,5,4,6,5,4,7,5,6,3,5,4,5,
						  4,5,4,6,5,6,5,4,5,6,5,4,7,5,6,3,5,4,5,5},	//中補正(分布は完全ランダム
						 {7,8,7,9,7,8,9,7,8,9,7,8,7,9,8,7,8,9,8,7,
						  8,7,9,7,8,7,9,7,8,8,7,9,7,8,7,9,7,8,9,7}};//高補正(分布は完全ランダム
int dn_num=0;
int mns_id=0;														//敵番号

//=========================================================================
//【グローバル構造体定義】
//=========================================================================
typedef struct			//キャラクター能力
{
	int job_id;			//職番号
	int lv;				//キャラクターのレベル
	int exp;			//キャラクターの経験値
	int hp;				//キャラクターの体力
	int mp;				//キャラクターの魔力
	int p_atk;			//キャラクターの物理攻撃力
	int p_def;			//キャラクターの物理防御力
	int s_atk;			//キャラクターの魔法攻撃力
	int s_def;			//キャラクターの魔法防御力
	int spd;			//キャラクターの素早さ
	int sp;				//キャラクターのスキルポイント
	int hp_up;			//キャラクターの体力上昇力
	int mp_up;			//キャラクターの魔力上昇力
	int p_atk_up;		//キャラクターの物理攻撃力上昇力
	int p_def_up;		//キャラクターの物理防御力上昇力
	int s_atk_up;		//キャラクターの魔法攻撃力上昇力
	int s_def_up;		//キャラクターの魔法防御力上昇力
	int spd_up;			//キャラクターの素早さ上昇力
	char job[11];		//キャラクターの職業
	char name[16];		//キャラクターの名前
}status;

typedef struct			//敵キャラクター能力
{
	int mns_id;			//敵の種別番号
	int lv;				//敵のレベル
	int exp;			//討伐時の入手経験値
	int hp;				//敵のHP
	int mp;				//敵のMP
	int p_atk;			//敵の物理攻撃力
	int p_def;			//敵の物理防御力
	int s_atk;			//敵の魔法攻撃力
	int s_def;			//敵の魔法防御力
	int spd;			//敵の素早さ 
	char name[16];		//敵の名前
}mns_status;

//=======================================================================
//【グローバル構造体宣言】
//=======================================================================
status dfo_PTstatus[5]=						//職業毎の初期ステータス
{
	{0,0,0,500,200,200,150,100,100,100,0,1,1,2,2,0,0,1,0,0},		//剣士の能力
	{1,0,0,400,450,100,100,200,150,100,0,0,2,0,0,2,2,1,0,0},		//メイジの能力
	{2,0,0,600,400,150,200,150,200,60 ,0,2,1,1,2,1,2,0,0,0},		//プリーストの能力
	{3,0,0,450,300,150,150,150,150,150,0,1,1,1,1,1,1,2,0,0},		//シーフの能力
	{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};

status PTstatusDATA[4]=						//PTメンバーステータス
{
	{0},				//1P
	{0},				//2P
	{0},				//3P
	{0}					//4P
};
status *PTstatus[4]=							//PTメンバーステータスのポインタ
{
	{&PTstatusDATA[0]},		//1P
	{&PTstatusDATA[1]},		//2P
	{&PTstatusDATA[2]},		//3P
	{&PTstatusDATA[3]}		//4P
};

status battleST[4]=								//PTメンバーの戦闘で適用されるステータス
{
	{0},				//1P
	{0},				//2P
	{0},				//3P
	{0}					//4P
};

mns_status mnsST[1]=
{
	{0,1,10,300,100,100,100,100,100,80,0}		//ゴブリンのステータス
};

mns_status battle_mnsST[4]=
{
	{0},
	{0},
	{0},
	{0}
};
//=========================================================================
//【プロトタイプ宣言】
//========================================================================
void tutorial(void);
void opening(void);
void my_status(void);
void job_set(void);
void status_view(void);
void status_SD(void);
void sp_div(void);
void chara_make(void);
void menu(void);
void chara_del_cull(void);
void status_view_cull(void);
void dn_cull(void);
void rorien(void);
void guran(void);
void amasiro(void);
void behi(void);
void atk_spd(void);
void damage_cnt(void);
//===========================================================================
//【メイン関数】
//==========================================================================
int main(void)
{
	job_set();							//ジョブの設定
	tutorial();							//チュートリアル

	fst_chara_flg=2;					//進行1フラグ

	menu();								//メニューを表示

	printf("何かキーを押す事でソフトは終了します。");
	rewind(stdin);
	getchar();
	return 0;
}

//============================================================================
//【配列文字代入】
//===========================================================================
void job_set(void)
{				
	/*----------↓構造体への文字列貼り付け↓------------*/
	
	strcpy(dfo_PTstatus[0].job,"剣士");
	strcpy(dfo_PTstatus[1].job,"メイジ");
	strcpy(dfo_PTstatus[2].job,"プリースト");
	strcpy(dfo_PTstatus[3].job,"シーフ");
	strcpy(mnsST[0].name,"ゴブリン");
}

//===========================================================================
//【チュートリアル】
//===========================================================================
void tutorial(void)
{
	printf("シュシア「ようそこ、月光酒場へ。\n");
	printf("     冒険の仲間をお探しかしら?\n");
	printf("     ここには沢山の冒険者が集っているわ。\n");
	printf("     一緒に冒険に行きたい人に声をかけて見ては如何かしら?」\n");
	printf("                                 ▼enter\n");
	
	getchar();

	system("CLS");

	my_status();						//初期キャラクター設定
	status_SD();						//ステータスのばらつき設定
	status_view();						//ステータス確認
	sp_div();							//SP割り振り
	status_view();						//ステータス確認

	printf("シュシア「どうですか?力が湧いて来たかしら?\n");
	printf("     では、この月光酒場にいらっしゃる冒険者から\n");
	printf("     旅仲間を見つけてみましょうか。」\n\n\n");
	printf("                                 ▼enter\n");


	tugi=getchar();
	system("CLS");

}

//===========================================================================
//【キャラの設定】
//===========================================================================
void my_status(void)
{
	tugi='e';

	while(tugi=='e')
	{
		if( fst_chara_flg==0 )			//チュートリアル時に発生するセリフ
		{
			printf("シュシア「ああ、そうそう\n");
			printf("     冒険に出る前に、貴方の事について教えて下さらないかしら?」\n");
		
			chara_id=0;
		}
		else							//新規キャラクター作成時に発生するセリフ
		{
			printf("シュシア「貴方の旅仲間について教えてもらえるかしら?」\n");
		}

	//-------------------------------
	//ユーザーが職業を入力
	//-------------------------------
		printf("\nキャラの職業を1~4の数字を入力してenterで決定して下さい。\n");
		printf("  1=剣士\n  2=メイジ\n  3=プリースト\n  4=シーフ\n:");

		rewind(stdin);
		scanf("%d",&job_id);			//職業番号を入力

		job_id--;						//職業番号を配列に対応する様に調整
		tugi='n';

		if(( job_id==0 )||( job_id==1 )||( job_id==2 )||( job_id==3 ))
		{
		}
		else							//入力不正時の処理
		{
			system("CLS");		
			tugi='e';
			printf("入力が不正です。\n\n");
		}
	}

	
//------------------------------
//ユーザーが名前を入力
//------------------------------
	if( fst_chara_flg==0 )
	{

		PTstatusDATA[chara_id]=dfo_PTstatus[job_id];

		system("CLS");

		printf("シュシア「貴方の職業は「%s」なのね?\n",PTstatus[chara_id]->job);
		printf("     素敵な職業ですね。\n");
		printf("     次に貴方のお名前を教えて下さるかしら?」");


	}
	else
	{
		PTstatusDATA[chara_id]=dfo_PTstatus[job_id];
		
		system("CLS");

		printf("シュシア「貴方のお仲間の職業は「%s」なのね\n",PTstatus[chara_id]->job);
		printf("     素敵な職業ですね。\n");
		printf("     次にお仲間のお名前を教えて下さるかしら?」\n");
	}
		
	printf("\nキャラの名前を半角英数字15文字以内で入力してenterで決定して下さい\n\n名前:");
	
	rewind(stdin);
	scanf("%s",&PTstatus[chara_id]->name);			//キャラクター名を入力
	
	
	system("CLS");
	
}

//============================================================================
//【レベルアップ時】
//============================================================================
void status_SD(void)
{
	//注意:新キャラクター作成時は、能力のランダム性を出す為の作業をここで行います。
	//   キャラクター作成時はLv0とし、初期ステータス閲覧直前にLvが1上昇する様にしております。

	int r;
	
	srand(( unsigned )time( NULL ));	//乱数生成
	
	r=rand();
	PTstatus[chara_id]->lv++;	//LVアップ処理

	/*--------↓PTstatus[chara_ID]->上昇能力  +=  statusSD_ran[PTstatus[chara_id]->上昇能力率][(乱数+ランダム性)%40]
				↑Lvアップ前能力									↑Lvアップ時能力								*/

	PTstatus[chara_id]->hp    += statusSD_ran[PTstatus[chara_id]->hp_up][(r+8)%40];
	PTstatus[chara_id]->mp    += statusSD_ran[PTstatus[chara_id]->mp_up][(r+9)%40];
	PTstatus[chara_id]->p_atk += statusSD_ran[PTstatus[chara_id]->p_atk_up][(r+21)%40];
	PTstatus[chara_id]->p_def += statusSD_ran[PTstatus[chara_id]->p_def_up][(r+54)%40];
	PTstatus[chara_id]->s_atk += statusSD_ran[PTstatus[chara_id]->s_atk_up][(r+423)%40];
	PTstatus[chara_id]->s_def += statusSD_ran[PTstatus[chara_id]->s_def_up][(r+12)%40];
	PTstatus[chara_id]->spd   += statusSD_ran[PTstatus[chara_id]->spd_up][(r+99)%40];
	PTstatus[chara_id]->sp    += 30;
}

//============================================================================
//【スキルポイント分配】】
//============================================================================
void sp_div(void)
{
	int sp_Kid=0;		//上昇させたい能力の種類指定
	int sp_Num=0;		//上昇させたい能力の数値指定

	if( fst_chara_flg==0 )
	{
		printf("シュシア「あら?貴方スキルポイントを持ってるのね?\n");
		printf("     スキルポイントは、1ポイントにつき好きな能力を1上げる事が出来るの。\n");
		printf("     実際にスキルポイントを使ってみましょう。\n");
	}
	else
	{
		printf("スキルポイントを割り振って下さい。\n");
	}

	while( PTstatus[chara_id]->sp>0 )
	{
		printf("『%s』の能力値\n\n",				PTstatus[chara_id]->name);

		printf("職業:%s\n",							PTstatus[chara_id]->job);
		printf("\n現在のステータス\n");
		printf("Lv:%d\n",							PTstatus[chara_id]->lv);
		printf("現在の経験値:%d\n",					PTstatus[chara_id]->exp);
		printf("HP:%d        ・・・1\n",	PTstatus[chara_id]->hp);
		printf("MP:%d        ・・・2\n",	PTstatus[chara_id]->mp);
		printf("物理攻撃力:%d    ・・・3\n",	PTstatus[chara_id]->p_atk);
		printf("物理防御力:%d    ・・・4\n",	PTstatus[chara_id]->p_def);
		printf("魔法攻撃力:%d    ・・・5\n",	PTstatus[chara_id]->s_atk);
		printf("魔法防御力:%d    ・・・6\n",	PTstatus[chara_id]->s_def);
		printf("素早さ:%d       ・・・7\n\n",	PTstatus[chara_id]->spd);

		printf("どの能力にスキルポイントを割り振りますか?\n");
		printf("1~7を入力し、enterで決定して下さい。\n");


		sp_Kid=0;

		rewind(stdin);

		scanf("%d",&sp_Kid);			//スキルポイントを割り振る能力の種類を選択
		
		tugi='e';

		if(( sp_Kid>0 )&&( sp_Kid<8 ))
		{
		}
		else
		{
			tugi='n';
		}

		if( tugi!='n' )
		{

			printf("その能力に幾らのスキルポイントを割り振りますか?\n");
			printf("割り振りたい数字を選択して、enterで決定して下さい\n");
			printf("残りSP:%d \n\n:",PTstatus[chara_id]->sp);
			
			for( tugi='n' ; tugi=='n' ; )
			{
				tugi='e';

				rewind(stdin);
				scanf("%d",&sp_Num);		//使うスキルポイントの量を入力

				if( (sp_Num>PTstatus[chara_id]->sp) || (sp_Num<0) )
				{
					tugi='n';

					printf("入力が不正です。最大SP以内の数値で再度入力して下さい。\n");
					printf("残りSP:%d \n\n:",PTstatus[chara_id]->sp);
				}
				else
				{
					tugi='e';
				}
			}
		
			switch( sp_Kid )
			{
				case 1:PTstatus[chara_id]->hp+=sp_Num;
					break;
							
				case 2:PTstatus[chara_id]->mp+=sp_Num;
					break;

				case 3:PTstatus[chara_id]->p_atk+=sp_Num;
					break;

				case 4:PTstatus[chara_id]->p_def+=sp_Num;
					break;
						
				case 5:PTstatus[chara_id]->s_atk+=sp_Num;
					break;

				case 6:PTstatus[chara_id]->s_def+=sp_Num;
					break;

				case 7:PTstatus[chara_id]->spd+=sp_Num;
					break;
			}
			PTstatus[chara_id]->sp-=sp_Num;
			
			system("CLS");
		}
		else
		{

			system("CLS");
			printf("1~7で入力して下さい。\n");
		}
	}
}

//============================================================================
//【ステータス確認画面】
//============================================================================
void status_view(void)
{
	printf("『%s』の能力値\n\n",PTstatus[chara_id]->name);
	printf("職業:%s\n",PTstatus[chara_id]->job);
	printf("\n現在のステータス\n");
	printf("Lv:%d\n",PTstatus[chara_id]->lv);
	printf("現在の経験値:%d\n",PTstatus[chara_id]->exp);
	printf("HP:%d\n",PTstatus[chara_id]->hp);
	printf("MP:%d\n",PTstatus[chara_id]->mp);
	printf("物理攻撃力:%d\n",PTstatus[chara_id]->p_atk);
	printf("物理防御力:%d\n",PTstatus[chara_id]->p_def);
	printf("魔法攻撃力:%d\n",PTstatus[chara_id]->s_atk);
	printf("魔法防御力:%d\n",PTstatus[chara_id]->s_def);
	printf("素早さ:%d\n",PTstatus[chara_id]->spd);
	printf("スキルポイント:%d\n",PTstatus[chara_id]->sp);

	printf("\n\nこの画面を閉じる時はenterキーを入力して下さい。\n");
	rewind(stdin);
	getchar();
	system("CLS");
	
}

//===========================================================================
//【メニュー画面】
//===========================================================================
void menu(void)
{
	int cull=0;			//選択肢入力

	for( tugi='e' ; tugi=='e' ; )
	{
		printf("シュシア「さて、これからどうされますか?」\n\n");
		printf("選択肢を番号で選んだ後、enterで決定して下さい。\n\n");
		printf("1:冒険に出る(未実装) 2:仲間を探す 3:仲間と別れる 4:ステータスを確認する。 5:ゲームを終了する\n\n:");
		
		rewind(stdin);

		cull=0;

		scanf("%d",&cull);			//選択肢の入力

		system("CLS");
		if(( cull>=1 )&&( cull<=5 ))
		{	
			switch(	cull)
			{
				case 1:dn_cull();							//冒険に出る
					   tugi='e';
					  break;

				case 2:	chara_id=0;							//仲間を探す
							
						if(	PTstatus[chara_id]->lv==0 )
						{
							chara_make();
						}
						else
						{
							chara_id=1;
								
							if(	PTstatus[chara_id]->lv==0 )
							{
								chara_make();
							}
							else
							{
								chara_id=2;

								if(	PTstatus[chara_id]->lv==0 )
								{
									chara_make();

								}
								else
								{
									chara_id=3;
										
									if(	PTstatus[chara_id]->lv==0 )
									{
										chara_make();

									}
									else
									{
										system("CLS");
										printf("キャラクターはこれ以上作成出来ません。\n\n");
										tugi='e';
									}
								}
							}
						}
						tugi='e';
						break;
					
					case 3:	chara_del_cull();						//キャラクター削除
							tugi='e';
							break;
					
				case 4:	system("CLS");
						status_view_cull();						//ステータス確認キャラ選択
						tugi='e';
						break;
				
				case 5:	tugi='n';
						break;
			}
		}
		else
		{
			system("CLS");
			printf("入力が不正です。\n\n");
			printf("1~5の選択肢を選択して下さい\n\n");
		}
	}
}

	//------------------------------------
	//【新規キャラ作成】
	//------------------------------------
	void chara_make(void)
{
	my_status();						//初期キャラクター設定
	status_SD();						//ステータスのばらつき設定
	status_view();						//ステータス確認
	sp_div();							//SP割り振り
	status_view();						//ステータス確認
}

	//------------------------------------
	//【キャラクター削除】
	//------------------------------------
	void chara_del_cull(void)
{
	int del_cull=0;		//キャラデリ選択
	int del_ok=0;		//削除許可

	tugi='e';

	while( tugi=='e' )
	{
		del_ok=0;

//---------------------------------
//キャラクターリスト表示
//---------------------------------
		chara_id=0;
		if( PTstatus[chara_id]->lv==0 )
		{
			printf("キャラクター1:キャラクターが作成されていません。\n\n");
			
			del_ok++;
		}
		else
		{
			printf("キャラクター1:『%s』\n\n",PTstatus[chara_id]->name);
		}

		chara_id=1;
		if( PTstatus[chara_id]->lv==0 )
		{
			printf("キャラクター2:キャラクターが作成されていません。\n\n");
			
			del_ok++;
		}
		else
		{
			printf("キャラクター2:『%s』\n\n",PTstatus[chara_id]->name);
		}

		chara_id=2;
		if( PTstatus[chara_id]->lv==0 )
		{
			printf("キャラクター3:キャラクターが作成されていません。\n\n");
			
			del_ok++;
		}
		else
		{
			printf("キャラクター3:『%s』\n\n",PTstatus[chara_id]->name);
		}

		chara_id=3;
		if( PTstatus[chara_id]->lv==0 )
		{
			printf("キャラクター4:キャラクターが作成されていません。\n\n");
			
			del_ok++;
		}
		else
		{
			printf("キャラクター4:『%s』\n\n",PTstatus[chara_id]->name);
		}

		if( del_ok<3 )			//キャラクターが1人しか居ない時は削除不可にする判定
		{
			printf("どのキャラを削除しますか?\n");
			printf("キャラクター番号を入力して下さい。\n");
			printf("キャラクターを削除しない場合は、5を入力して下さい");
			printf(":");
	
			rewind(stdin);
			scanf("%d",&del_cull);

//-----------------------------------
//キャラクター選択結果
//------------------------------------
			
			switch( del_cull )
			{
				case 1:	chara_id=0;
													
					if( PTstatus[chara_id]->lv==0 )
					{
						system("CLS");
						printf("キャラクター1のスロットにはキャラクターが作成されていません。\n\n");

						tugi='e';
					}
					else
					{
						PTstatusDATA[chara_id] = dfo_PTstatus[4];

						tugi='n';
						system("CLS");
					}
								break;


				case 2:	chara_id=1;
													
					if( PTstatus[chara_id]->lv==0 )
					{
						system("CLS");
						printf("キャラクター2のスロットにはキャラクターが作成されていません。\n\n");

						tugi='e';
					}
					else
					{

						PTstatusDATA[chara_id] = dfo_PTstatus[4];

						tugi='n';
						system("CLS");
					}
								break;


				case 3:	chara_id=2;
													
					if( PTstatus[chara_id]->lv==0 )
					{
						system("CLS");
						printf("キャラクター3のスロットにはキャラクターが作成されていません。\n\n");

						tugi='e';
					}
					else
					{

						PTstatusDATA[chara_id] = dfo_PTstatus[4];

						tugi='n';
						system("CLS");
					}
								break;

				case 4:	chara_id=3;
													
					if( PTstatus[chara_id]->lv==0 )
					{
						system("CLS");
						printf("キャラクター4のスロットにはキャラクターが作成されていません。\n\n");

						tugi='e';
					}
					else
					{

						PTstatusDATA[chara_id] = dfo_PTstatus[4];

						tugi='n';
						system("CLS");
					}
								break;
				case 5:	tugi='n';
						system("CLS");

						printf("キャラクターの選択をキャンセルしました\n\n");
							break;

				default:system("CLS");
						printf("入力が不正です。\n\n");

						tugi='e';

			}						
		}
		else
		{
			system("CLS");
			printf("\nこれ以上キャラクターは削除出来ません\n\n");

			tugi='b';
		}
	}
	if(tugi!='b')
	{
	}
}

	//------------------------------------
	//【ステータス確認キャラ選択】
	//------------------------------------
	void status_view_cull(void)
{
	int st_vi=0;		//ステータス閲覧選択肢入力
	for( tugi='e' ; tugi=='e' ; )
	{
//-----------------------------------
//キャラクターリスト表示
//-----------------------------------
		chara_id=0;
		if(PTstatus[chara_id]->lv==0)
		{
			printf("キャラクター1:キャラクターが作成されていません。\n\n");
		}
		else
		{
			printf("キャラクター1:『%s』の能力値を見る\n\n",PTstatus[chara_id]->name);
		}

		chara_id=1;
		if(PTstatus[chara_id]->lv==0)
		{
			printf("キャラクター2:キャラクターが作成されていません。\n\n");
		}
		else
		{
			printf("キャラクター2:『%s』の能力値を見る\n\n",PTstatus[chara_id]->name);
		}

		chara_id=2;
		if(PTstatus[chara_id]->lv==0)
		{
			printf("キャラクター3:キャラクターが作成されていません。\n\n");
		}
		else
		{
			printf("キャラクター3:『%s』の能力値を見る\n\n",PTstatus[chara_id]->name);
		}

		chara_id=3;
		if(PTstatus[chara_id]->lv==0)
		{
			printf("キャラクター4:キャラクターが作成されていません。\n\n");
		}
		else
		{
			printf("キャラクター4:『%s』の能力値を見る\n\n",PTstatus[chara_id]->name);
		}

		printf("どのキャラの能力を見ますか?\n");
		printf("キャラクター番号を入力して下さい。\n");
		printf(":");
	
		rewind(stdin);
		scanf("%d",&st_vi);
		
		system("CLS");

//-----------------------------------
//キャラクター選択結果
//------------------------------------
		switch(st_vi)
		{
			case 1: chara_id=0;
													
				if(PTstatus[chara_id]->lv==0)
				{
					system("CLS");
					printf("キャラクター1のスロットにはキャラクターが作成されていません。\n\n");

					tugi='e';
				}
				else
				{
					status_view();

					tugi='n';
				}
				break;


			case 2:	chara_id=1;
													
				if(PTstatus[chara_id]->lv==0)
				{
					system("CLS");
					printf("キャラクター2のスロットにはキャラクターが作成されていません。\n\n");

					tugi='e';
				}
				else
				{
					status_view();

					tugi='n';
				}
				break;


			case 3:	chara_id=2;
													
				if(PTstatus[chara_id]->lv==0)
				{
					system("CLS");
					printf("キャラクター3のスロットにはキャラクターが作成されていません。\n\n");

					tugi='e';
				}
				else
				{
					status_view();

					tugi='n';
				}
				break;

			case 4:	chara_id=3;
													
				if(PTstatus[chara_id]->lv==0)
				{
					system("CLS");
					printf("キャラクター4のスロットにはキャラクターが作成されていません。\n\n");

					tugi='e';
				}
				else
				{
					status_view();

					tugi='n';
				}
				break;


			default:system("CLS");
					printf("入力が不正です。\n\n");

					tugi='e';
		}

	}
}


//===========================================================================
//【ダンジョン選択】
//============================================================================
void dn_cull(void)
{
	int max=0;
	int hyouji=0;
	int i;

	battleST[0]=*PTstatus[0];
	battleST[1]=*PTstatus[1];
	battleST[2]=*PTstatus[2];
	battleST[3]=*PTstatus[3];

	for (chara_id=0; chara_id<=3 ; chara_id++ )
	{
		if ( max < PTstatus[chara_id]->lv ) 
		{
			max =  PTstatus[chara_id]->lv;
		}
	}

	if(max>=1)
	{
		
		hyouji++;

		if(max>=5)
		{
		
			hyouji++;

			if(max>=12)
			{
			
				hyouji++;

				if(max<=20)
				{
			
					hyouji++;
				}
			}
		}
	}
	system("CLS");
	for(tugi='e';tugi=='e';)
	{
		printf("どこのダンジョンへ入場しますか?\n\n");
		printf("行きたいダンジョンの数字を入力してenterキーで決定して下さい\n");
		
		for(i=0 ; hyouji>=i ; i++ )
		{
			switch(i)
			{
				case 1:printf("ロリエン    ・・・1\n");
					break;
				case 2:printf("グランプリロス ・・・2\n");
					break;
				case 3:printf("天城      ・・・3\n");
					break;
				case 4:printf("ベヒーモス   ・・・4\n");
					break;
			}
		}

		printf(":");
		
		tugi='n';

		rewind(stdin);
		scanf("%d",&dn_num);
		
		system("CLS");

		tugi='e';
		if(hyouji<dn_num)
		{
			printf("入力が不正です。\n");
			printf("下記の選択肢の数字から選択して下さい\n\n");
			tugi='e';
		}
		else
		{
			switch( dn_num )
			{
				case 1:rorien();
					   tugi='n';
					break;
		
				case 2:guran();
					   tugi='n';
					break;

				case 3:amasiro();
					   tugi='n';
					break;

				case 4:behi();
					   tugi='n';
					break;
			
				default:tugi='e';
						printf("入力が不正です。\n");
						printf("下記の選択肢の数字から選択して下さい\n\n");
			}
		}
	}
	rewind(stdin);
	getchar();

	system("CLS");
}
	//--------------------------------------------
	//【ロリエン】
	//-------------------------------------------
	void rorien(void)
	{
		printf("ロリエン\n\n");
		printf("ラウンド1\n\n");
		printf("攻撃を行います。");
		
		mns_id=0;
		chara_id=0;

		battle_mnsST[0]=mnsST[0];

		while(battle_mnsST[mns_id].hp>0)
		{
			rewind(stdin);
			getchar();
			
			atk_spd();				//行動順処理
			damage_cnt();			//ダメージ計算
		
		}
	}
	//--------------------------------------------
	//【グランプリロス】
	//-------------------------------------------
	void guran(void)
	{
		printf("グランプリロス");
	}
	//--------------------------------------------
	//【天城】
	//-------------------------------------------
	void amasiro(void)
	{
		printf("天城");
	}
	//--------------------------------------------
	//【ベヒーモス】
	//-------------------------------------------
	void behi(void)
	{
		printf("ベヒーモス");
	}






//===============================================
//【ダメージ計算】
//===============================================
void damage_cnt(void)
{
	int atk=0;			//最終攻撃力
	int def=0;			//最終防御力
	int r=0;
	int damage;
	
	srand(( unsigned )time( NULL ));	//乱数生成
	
	r=rand()/16;

	atk = battleST[chara_id].p_atk + (battleST[chara_id].p_atk % r);
	def = (battle_mnsST[mns_id].p_def / 2) + battle_mnsST[mns_id].p_def % r;

	battle_mnsST[mns_id].hp = battle_mnsST[mns_id].hp-( atk - def );

	printf("敵の体力は%dです",battle_mnsST[mns_id].hp);
	
	rewind(stdin);
	getchar();

}
//==================================================
//【素早さ処理】
//=================================================

void atk_spd(void)
{}


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

Re: C:¥windows¥system32¥cmd.exeが無限に生成される事について

#5

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

system("CLS");とかscanf()とかコンソールアプリ専用の記述は見受けられますが、DXライブラリの記述がありません。
これはコンソールアプリでは?

【補足】
こういう辺りをDXライブラリに合わせて全部書き換えないとDXライブラリ=ウィンドウアプリには変更できません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

tera

Re: C:¥windows¥system32¥cmd.exeが無限に生成される事について

#6

投稿記事 by tera » 12年前

コード:

//=========================================================================
//【インクルード記述】
//=========================================================================
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<windows.h>
#include"DxLib.h"

//=========================================================================
//【グローバル変数宣言】
//=========================================================================
char tugi;															//継続判定
int chara_id={0};													//キャラ番号
int job_id=0;														//職番号
int fst_chara_flg=0;												//進行段階フラグ
int statusSD_ran[3][40]={{0,1,2,3,0,2,3,1,4,2,3,2,1,3,2,1,3,1,3,2,
						  0,3,2,1,3,2,2,1,0,0,1,3,4,3,2,1,3,3,2,5},	//低補正(分布は完全ランダム
						 {5,4,6,5,4,5,4,6,5,4,6,5,4,7,5,6,3,5,4,5,
						  4,5,4,6,5,6,5,4,5,6,5,4,7,5,6,3,5,4,5,5},	//中補正(分布は完全ランダム
						 {7,8,7,9,7,8,9,7,8,9,7,8,7,9,8,7,8,9,8,7,
						  8,7,9,7,8,7,9,7,8,8,7,9,7,8,7,9,7,8,9,7}};//高補正(分布は完全ランダム
int dn_num=0;
int mns_id=0;														//敵番号

//=========================================================================
//【グローバル構造体定義】
//=========================================================================
typedef struct			//キャラクター能力
{
	int job_id;			//職番号
	int lv;				//キャラクターのレベル
	int exp;			//キャラクターの経験値
	int hp;				//キャラクターの体力
	int mp;				//キャラクターの魔力
	int p_atk;			//キャラクターの物理攻撃力
	int p_def;			//キャラクターの物理防御力
	int s_atk;			//キャラクターの魔法攻撃力
	int s_def;			//キャラクターの魔法防御力
	int spd;			//キャラクターの素早さ
	int sp;				//キャラクターのスキルポイント
	int hp_up;			//キャラクターの体力上昇力
	int mp_up;			//キャラクターの魔力上昇力
	int p_atk_up;		//キャラクターの物理攻撃力上昇力
	int p_def_up;		//キャラクターの物理防御力上昇力
	int s_atk_up;		//キャラクターの魔法攻撃力上昇力
	int s_def_up;		//キャラクターの魔法防御力上昇力
	int spd_up;			//キャラクターの素早さ上昇力
	char job[11];		//キャラクターの職業
	char name[16];		//キャラクターの名前
}status;

typedef struct			//敵キャラクター能力
{
	int mns_id;			//敵の種別番号
	int lv;				//敵のレベル
	int exp;			//討伐時の入手経験値
	int hp;				//敵のHP
	int mp;				//敵のMP
	int p_atk;			//敵の物理攻撃力
	int p_def;			//敵の物理防御力
	int s_atk;			//敵の魔法攻撃力
	int s_def;			//敵の魔法防御力
	int spd;			//敵の素早さ 
	char name[16];		//敵の名前
}mns_status;

//=======================================================================
//【グローバル構造体宣言】
//=======================================================================
status dfo_PTstatus[5]=						//職業毎の初期ステータス
{
	{0,0,0,500,200,200,150,100,100,100,0,1,1,2,2,0,0,1,0,0},		//剣士の能力
	{1,0,0,400,450,100,100,200,150,100,0,0,2,0,0,2,2,1,0,0},		//メイジの能力
	{2,0,0,600,400,150,200,150,200,60 ,0,2,1,1,2,1,2,0,0,0},		//プリーストの能力
	{3,0,0,450,300,150,150,150,150,150,0,1,1,1,1,1,1,2,0,0},		//シーフの能力
	{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};

status PTstatusDATA[4]=						//PTメンバーステータス
{
	{0},				//1P
	{0},				//2P
	{0},				//3P
	{0}					//4P
};
status *PTstatus[4]=							//PTメンバーステータスのポインタ
{
	{&PTstatusDATA[0]},		//1P
	{&PTstatusDATA[1]},		//2P
	{&PTstatusDATA[2]},		//3P
	{&PTstatusDATA[3]}		//4P
};

status battleST[4]=								//PTメンバーの戦闘で適用されるステータス
{
	{0},				//1P
	{0},				//2P
	{0},				//3P
	{0}					//4P
};

mns_status mnsST[1]=
{
	{0,1,10,300,100,100,100,100,100,80,0}		//ゴブリンのステータス
};

mns_status battle_mnsST[4]=
{
	{0},
	{0},
	{0},
	{0}
};
//=========================================================================
//【プロトタイプ宣言】
//========================================================================
void tutorial(void);
void opening(void);
void my_status(void);
void job_set(void);
void status_view(void);
void status_SD(void);
void sp_div(void);
void chara_make(void);
void menu(void);
void chara_del_cull(void);
void status_view_cull(void);
void dn_cull(void);
void rorien(void);
void guran(void);
void amasiro(void);
void behi(void);
void atk_spd(void);
void damage_cnt(void);
//===========================================================================
//【メイン関数】
//==========================================================================
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						LPSTR lpCmdLine, int nCmdShow )
{
	ChangeWindowMode(TRUE);
	DxLib_Init();
	
	job_set();							//ジョブの設定
	tutorial();							//チュートリアル

	fst_chara_flg=2;					//進行1フラグ

	menu();								//メニューを表示

	printf("何かキーを押す事でソフトは終了します。");
	rewind(stdin);
	getchar();

	DxLib_End() ;				// DXライブラリ使用の終了処理
	
	return 0;
}

//============================================================================
//【配列文字代入】
//===========================================================================
void job_set(void)
{				
	/*----------↓構造体への文字列貼り付け↓------------*/
	
	strcpy(dfo_PTstatus[0].job,"剣士");
	strcpy(dfo_PTstatus[1].job,"メイジ");
	strcpy(dfo_PTstatus[2].job,"プリースト");
	strcpy(dfo_PTstatus[3].job,"シーフ");
	strcpy(mnsST[0].name,"ゴブリン");
}

//===========================================================================
//【チュートリアル】
//===========================================================================
void tutorial(void)
{
	printf("シュシア「ようそこ、月光酒場へ。\n");
	printf("     冒険の仲間をお探しかしら?\n");
	printf("     ここには沢山の冒険者が集っているわ。\n");
	printf("     一緒に冒険に行きたい人に声をかけて見ては如何かしら?」\n");
	printf("                                 ▼enter\n");
	
	getchar();

	system("CLS");

	my_status();						//初期キャラクター設定
	status_SD();						//ステータスのばらつき設定
	status_view();						//ステータス確認
	sp_div();							//SP割り振り
	status_view();						//ステータス確認

	printf("シュシア「どうですか?力が湧いて来たかしら?\n");
	printf("     では、この月光酒場にいらっしゃる冒険者から\n");
	printf("     旅仲間を見つけてみましょうか。」\n\n\n");
	printf("                                 ▼enter\n");


	tugi=getchar();
	system("CLS");

}

//===========================================================================
//【キャラの設定】
//===========================================================================
void my_status(void)
{
	tugi='e';

	while(tugi=='e')
	{
		if( fst_chara_flg==0 )			//チュートリアル時に発生するセリフ
		{
			printf("シュシア「ああ、そうそう\n");
			printf("     冒険に出る前に、貴方のについて教えて下さらないかしら?」\n");
		
			chara_id=0;
		}
		else							//新規キャラクター作成時に発生するセリフ
		{
			printf("シュシア「貴方の旅仲間について教えてもらえるかしら?」\n");
		}

	//-------------------------------
	//ユーザーが職業を入力
	//-------------------------------
		printf("\nキャラの職業を1~4の数字を入力してenterで決定して下さい。\n");
		printf("  1=剣士\n  2=メイジ\n  3=プリースト\n  4=シーフ\n:");

		rewind(stdin);
		scanf("%d",&job_id);			//職業番号を入力

		job_id--;						//職業番号を配列に対応する様に調整
		tugi='n';

		if(( job_id==0 )||( job_id==1 )||( job_id==2 )||( job_id==3 ))
		{
		}
		else							//入力不正時の処理
		{
			system("CLS");		
			tugi='e';
			printf("\n入力が不正です。\n");
		}
	}

	
//------------------------------
//ユーザーが名前を入力
//------------------------------
	if( fst_chara_flg==0 )
	{

		PTstatusDATA[chara_id]=dfo_PTstatus[job_id];

		system("CLS");

		printf("シュシア「貴方の職業は「%s」なのね?\n",PTstatus[chara_id]->job);
		printf("     素敵な職業ですね。\n");
		printf("     次に貴方のお名前を教えて下さるかしら?」");


	}
	else
	{
		PTstatusDATA[chara_id]=dfo_PTstatus[job_id];
		
		system("CLS");

		printf("シュシア「貴方のお仲間の職業は「%s」なのね\n",PTstatus[chara_id]->job);
		printf("     素敵な職業ですね。\n");
		printf("     次にお仲間のお名前を教えて下さるかしら?」\n");
	}
		
	printf("\nキャラの名前を半角英数字15文字以内で入力してenterで決定して下さい\n\n名前:");
	
	rewind(stdin);
	scanf("%s",&PTstatus[chara_id]->name);			//キャラクター名を入力
	
	
	system("CLS");
	
}

//============================================================================
//【レベルアップ時】
//============================================================================
void status_SD(void)
{
	//注意:新キャラクター作成時は、能力のランダム性を出す為の作業をここで行います。
	//   キャラクター作成時はLv0とし、初期ステータス閲覧直前にLvが1上昇する様にしております。

	int r;
	
	srand(( unsigned )time( NULL ));	//乱数生成
	
	r=rand();
	PTstatus[chara_id]->lv++;	//LVアップ処理

	/*--------↓PTstatus[chara_ID]->上昇能力  +=  statusSD_ran[PTstatus[chara_id]->上昇能力率][(乱数+ランダム性)%40]
				↑Lvアップ前能力									↑Lvアップ時能力								*/

	PTstatus[chara_id]->hp    += statusSD_ran[PTstatus[chara_id]->hp_up][(r+8)%40];
	PTstatus[chara_id]->mp    += statusSD_ran[PTstatus[chara_id]->mp_up][(r+9)%40];
	PTstatus[chara_id]->p_atk += statusSD_ran[PTstatus[chara_id]->p_atk_up][(r+21)%40];
	PTstatus[chara_id]->p_def += statusSD_ran[PTstatus[chara_id]->p_def_up][(r+54)%40];
	PTstatus[chara_id]->s_atk += statusSD_ran[PTstatus[chara_id]->s_atk_up][(r+423)%40];
	PTstatus[chara_id]->s_def += statusSD_ran[PTstatus[chara_id]->s_def_up][(r+12)%40];
	PTstatus[chara_id]->spd   += statusSD_ran[PTstatus[chara_id]->spd_up][(r+99)%40];
	PTstatus[chara_id]->sp    += 30;
}

//============================================================================
//【スキルポイント分配】】
//============================================================================
void sp_div(void)
{
	int sp_Kid=0;		//上昇させたい能力の種類指定
	int sp_Num=0;		//上昇させたい能力の数値指定

	if( fst_chara_flg==0 )
	{
		printf("シュシア「あら?貴方スキルポイントを持ってるのね?\n");
		printf("     スキルポイントは、1ポイントにつき好きな能力を1上げる事が出来るの。\n");
		printf("     実際にスキルポイントを使ってみましょう。\n");
	}
	else
	{
		printf("スキルポイントを割り振って下さい。\n");
	}

	while( PTstatus[chara_id]->sp>0 )
	{
		printf("『%s』の能力値\n\n",				PTstatus[chara_id]->name);

		printf("職業:%s\n",							PTstatus[chara_id]->job);
		printf("\n現在のステータス\n");
		printf("Lv:%d\n",							PTstatus[chara_id]->lv);
		printf("現在の経験値:%d\n",					PTstatus[chara_id]->exp);
		printf("HP:%d        ・・・1\n",	PTstatus[chara_id]->hp);
		printf("MP:%d        ・・・2\n",	PTstatus[chara_id]->mp);
		printf("物理攻撃力:%d    ・・・3\n",	PTstatus[chara_id]->p_atk);
		printf("物理防御力:%d    ・・・4\n",	PTstatus[chara_id]->p_def);
		printf("魔法攻撃力:%d    ・・・5\n",	PTstatus[chara_id]->s_atk);
		printf("魔法防御力:%d    ・・・6\n",	PTstatus[chara_id]->s_def);
		printf("素早さ:%d       ・・・7\n\n",	PTstatus[chara_id]->spd);

		printf("どの能力にスキルポイントを割り振りますか?\n");
		printf("1~7を入力し、enterで決定して下さい。\n");


		sp_Kid=0;

		rewind(stdin);

		scanf("%d",&sp_Kid);			//スキルポイントを割り振る能力の種類を選択
		
		tugi='e';

		if(( sp_Kid>0 )&&( sp_Kid<8 ))
		{
		}
		else
		{
			tugi='n';
		}

		if( tugi!='n' )
		{

			printf("その能力に幾らのスキルポイントを割り振りますか?\n");
			printf("割り振りたい数字を選択して、enterで決定して下さい\n");
			printf("残りSP:%d \n\n:",PTstatus[chara_id]->sp);
			
			for( tugi='n' ; tugi=='n' ; )
			{
				tugi='e';

				rewind(stdin);
				scanf("%d",&sp_Num);		//使うスキルポイントの量を入力

				if( sp_Num>PTstatus[chara_id]->sp )
				{
					tugi='n';

					printf("入力が不正です。最大SP以内の数値で再度入力して下さい。\n");
					printf("残りSP:%d \n\n:",PTstatus[chara_id]->sp);
				}
				else
				{
					tugi='e';
				}
			}
		
			switch( sp_Kid )
			{
				case 1:PTstatus[chara_id]->hp+=sp_Num;
					break;
							
				case 2:PTstatus[chara_id]->mp+=sp_Num;
					break;

				case 3:PTstatus[chara_id]->p_atk+=sp_Num;
					break;

				case 4:PTstatus[chara_id]->p_def+=sp_Num;
					break;
						
				case 5:PTstatus[chara_id]->s_atk+=sp_Num;
					break;

				case 6:PTstatus[chara_id]->s_def+=sp_Num;
					break;

				case 7:PTstatus[chara_id]->spd+sp_Num;
					break;
			}
			PTstatus[chara_id]->sp-=sp_Num;
			
			system("CLS");
		}
		else
		{

			system("CLS");
			printf("1~7で入力して下さい。\n");
		}
	}
}

//============================================================================
//【ステータス確認画面】
//============================================================================
void status_view(void)
{
	printf("『%s』の能力値\n\n",PTstatus[chara_id]->name);
	printf("職業:%s\n",PTstatus[chara_id]->job);
	printf("\n現在のステータス\n");
	printf("Lv:%d\n",PTstatus[chara_id]->lv);
	printf("現在の経験値:%d\n",PTstatus[chara_id]->exp);
	printf("HP:%d\n",PTstatus[chara_id]->hp);
	printf("MP:%d\n",PTstatus[chara_id]->mp);
	printf("物理攻撃力:%d\n",PTstatus[chara_id]->p_atk);
	printf("物理防御力:%d\n",PTstatus[chara_id]->p_def);
	printf("魔法攻撃力:%d\n",PTstatus[chara_id]->s_atk);
	printf("魔法防御力:%d\n",PTstatus[chara_id]->s_def);
	printf("素早さ:%d\n",PTstatus[chara_id]->spd);
	printf("スキルポイント:%d\n",PTstatus[chara_id]->sp);

	printf("\n\nこの画面を閉じる時はenterキーを入力して下さい。\n");
	rewind(stdin);
	getchar();
	system("CLS");
	
}

//===========================================================================
//【メニュー画面】
//===========================================================================
void menu(void)
{
	int cull=0;			//選択肢入力

	for( tugi='e' ; tugi=='e' ; )
	{
		printf("シュシア「さて、これからどうされますか?」\n\n");
		printf("選択肢を番号で選んだ後、enterで決定して下さい。\n\n");
		printf("1:冒険に出る(未実装) 2:仲間を探す 3:仲間と別れる 4:ステータスを確認する。 5:ゲームを終了する\n\n:");
		
		rewind(stdin);

		cull=0;

		scanf("%d",&cull);			//選択肢の入力

		system("CLS");
		if(( cull>=1 )&&( cull<=5 ))
		{	
			switch(	cull)
			{
				case 1:dn_cull();							//冒険に出る
					   tugi='e';
					  break;

				case 2:	chara_id=0;							//仲間を探す
							
						if(	PTstatus[chara_id]->lv==0 )
						{
							chara_make();
						}
						else
						{
							chara_id=1;
								
							if(	PTstatus[chara_id]->lv==0 )
							{
								chara_make();
							}
							else
							{
								chara_id=2;

								if(	PTstatus[chara_id]->lv==0 )
								{
									chara_make();

								}
								else
								{
									chara_id=3;
										
									if(	PTstatus[chara_id]->lv==0 )
									{
										chara_make();

									}
									else
									{
										system("CLS");
										printf("キャラクターはこれ以上作成出来ません。\n\n");
										tugi='e';
									}
								}
							}
						}
						tugi='e';
						break;
					
					case 3:	chara_del_cull();						//キャラクター削除
							tugi='e';
							break;
					
				case 4:	system("CLS");
						status_view_cull();						//ステータス確認キャラ選択
						tugi='e';
						break;
				
				case 5:	tugi='n';
						break;
			}
		}
		else
		{
			system("CLS");
			printf("入力が不正です。\n\n");
			printf("1~5の選択肢を選択して下さい\n\n");
		}
	}
}

	//------------------------------------
	//【新規キャラ作成】
	//------------------------------------
	void chara_make(void)
{
	my_status();						//初期キャラクター設定
	status_SD();						//ステータスのばらつき設定
	status_view();						//ステータス確認
	sp_div();							//SP割り振り
	status_view();						//ステータス確認
}

	//------------------------------------
	//【キャラクター削除】
	//------------------------------------
	void chara_del_cull(void)
{
	int del_cull=0;		//キャラデリ選択
	int del_ok=0;		//削除許可

	tugi='e';

	while( tugi=='e' )
	{
		del_ok=0;

//---------------------------------
//キャラクターリスト表示
//---------------------------------
		chara_id=0;
		if( PTstatus[chara_id]->lv==0 )
		{
			printf("キャラクター1:キャラクターが作成されていません。\n\n");
			
			del_ok++;
		}
		else
		{
			printf("キャラクター1:『%s』\n\n",PTstatus[chara_id]->name);
		}

		chara_id=1;
		if( PTstatus[chara_id]->lv==0 )
		{
			printf("キャラクター2:キャラクターが作成されていません。\n\n");
			
			del_ok++;
		}
		else
		{
			printf("キャラクター2:『%s』\n\n",PTstatus[chara_id]->name);
		}

		chara_id=2;
		if( PTstatus[chara_id]->lv==0 )
		{
			printf("キャラクター3:キャラクターが作成されていません。\n\n");
			
			del_ok++;
		}
		else
		{
			printf("キャラクター3:『%s』\n\n",PTstatus[chara_id]->name);
		}

		chara_id=3;
		if( PTstatus[chara_id]->lv==0 )
		{
			printf("キャラクター4:キャラクターが作成されていません。\n\n");
			
			del_ok++;
		}
		else
		{
			printf("キャラクター4:『%s』\n\n",PTstatus[chara_id]->name);
		}

		if( del_ok<3 )			//キャラクターが1人しか居ない時は削除不可にする判定
		{
			printf("どのキャラを削除しますか?\n");
			printf("キャラクター番号を入力して下さい。\n");
			printf("キャラクターを削除しない場合は、5を入力して下さい");
			printf(":");
	
			rewind(stdin);
			scanf("%d",&del_cull);

//-----------------------------------
//キャラクター選択結果
//------------------------------------
			
			switch( del_cull )
			{
				case 1:	chara_id=0;
													
					if( PTstatus[chara_id]->lv==0 )
					{
						system("CLS");
						printf("キャラクター1のスロットにはキャラクターが作成されていません。\n\n");

						tugi='e';
					}
					else
					{
						PTstatusDATA[chara_id] = dfo_PTstatus[4];		//PTメンバーの能力をバトル用の構造体に置き換える

						tugi='n';
						system("CLS");
					}
								break;


				case 2:	chara_id=1;
													
					if( PTstatus[chara_id]->lv==0 )
					{
						system("CLS");
						printf("キャラクター2のスロットにはキャラクターが作成されていません。\n\n");

						tugi='e';
					}
					else
					{

						PTstatusDATA[chara_id] = dfo_PTstatus[4];

						tugi='n';
						system("CLS");
					}
								break;


				case 3:	chara_id=2;
													
					if( PTstatus[chara_id]->lv==0 )
					{
						system("CLS");
						printf("キャラクター3のスロットにはキャラクターが作成されていません。\n\n");

						tugi='e';
					}
					else
					{

						PTstatusDATA[chara_id] = dfo_PTstatus[4];

						tugi='n';
						system("CLS");
					}
								break;

				case 4:	chara_id=3;
													
					if( PTstatus[chara_id]->lv==0 )
					{
						system("CLS");
						printf("キャラクター4のスロットにはキャラクターが作成されていません。\n\n");

						tugi='e';
					}
					else
					{

						PTstatusDATA[chara_id] = dfo_PTstatus[4];

						tugi='n';
						system("CLS");
					}
								break;
				case 5:	tugi='n';
						system("CLS");

						printf("キャラクターの選択をキャンセルしました\n\n");
							break;

				default:system("CLS");
						printf("入力が不正です。\n\n");

						tugi='e';

			}						
		}
		else
		{
			system("CLS");
			printf("\nこれ以上キャラクターは削除出来ません\n\n");

			tugi='b';
		}
	}
	if(tugi!='b')
	{
	}
}

	//------------------------------------
	//【ステータス確認キャラ選択】
	//------------------------------------
	void status_view_cull(void)
{
	int st_vi=0;		//ステータス閲覧選択肢入力
	for( tugi='e' ; tugi=='e' ; )
	{
//-----------------------------------
//キャラクターリスト表示
//-----------------------------------
		chara_id=0;
		if(PTstatus[chara_id]->lv==0)
		{
			printf("キャラクター1:キャラクターが作成されていません。\n\n");
		}
		else
		{
			printf("キャラクター1:『%s』の能力値を見る\n\n",PTstatus[chara_id]->name);
		}

		chara_id=1;
		if(PTstatus[chara_id]->lv==0)
		{
			printf("キャラクター2:キャラクターが作成されていません。\n\n");
		}
		else
		{
			printf("キャラクター2:『%s』の能力値を見る\n\n",PTstatus[chara_id]->name);
		}

		chara_id=2;
		if(PTstatus[chara_id]->lv==0)
		{
			printf("キャラクター3:キャラクターが作成されていません。\n\n");
		}
		else
		{
			printf("キャラクター3:『%s』の能力値を見る\n\n",PTstatus[chara_id]->name);
		}

		chara_id=3;
		if(PTstatus[chara_id]->lv==0)
		{
			printf("キャラクター4:キャラクターが作成されていません。\n\n");
		}
		else
		{
			printf("キャラクター4:『%s』の能力値を見る\n\n",PTstatus[chara_id]->name);
		}

		printf("どのキャラの能力を見ますか?\n");
		printf("キャラクター番号を入力して下さい。\n");
		printf(":");
	
		rewind(stdin);
		scanf("%d",&st_vi);
		
		system("CLS");

//-----------------------------------
//キャラクター選択結果
//------------------------------------
		switch(st_vi)
		{
			case 1: chara_id=0;
													
				if(PTstatus[chara_id]->lv==0)
				{
					system("CLS");
					printf("キャラクター1のスロットにはキャラクターが作成されていません。\n\n");

					tugi='e';
				}
				else
				{
					status_view();

					tugi='n';
				}
				break;


			case 2:	chara_id=1;
													
				if(PTstatus[chara_id]->lv==0)
				{
					system("CLS");
					printf("キャラクター2のスロットにはキャラクターが作成されていません。\n\n");

					tugi='e';
				}
				else
				{
					status_view();

					tugi='n';
				}
				break;


			case 3:	chara_id=2;
													
				if(PTstatus[chara_id]->lv==0)
				{
					system("CLS");
					printf("キャラクター3のスロットにはキャラクターが作成されていません。\n\n");

					tugi='e';
				}
				else
				{
					status_view();

					tugi='n';
				}
				break;

			case 4:	chara_id=3;
													
				if(PTstatus[chara_id]->lv==0)
				{
					system("CLS");
					printf("キャラクター4のスロットにはキャラクターが作成されていません。\n\n");

					tugi='e';
				}
				else
				{
					status_view();

					tugi='n';
				}
				break;


			default:system("CLS");
					printf("入力が不正です。\n\n");

					tugi='e';
		}

	}
}


//===========================================================================
//【ダンジョン選択】
//============================================================================
void dn_cull(void)
{
	int max=0;
	int hyouji=0;
	int i;

	battleST[0]=*PTstatus[0];
	battleST[1]=*PTstatus[1];
	battleST[2]=*PTstatus[2];
	battleST[3]=*PTstatus[3];

	for (chara_id=0; chara_id<=3 ; chara_id++ )
	{
		if ( max < PTstatus[chara_id]->lv ) 
		{
			max =  PTstatus[chara_id]->lv;
		}
	}

	if(max>=1)
	{
		
		hyouji++;

		if(max>=5)
		{
		
			hyouji++;

			if(max>=12)
			{
			
				hyouji++;

				if(max<=20)
				{
			
					hyouji++;
				}
			}
		}
	}
	system("CLS");
	for(tugi='e';tugi=='e';)
	{
		printf("どこのダンジョンへ入場しますか?\n\n");
		printf("行きたいダンジョンの数字を入力してenterキーで決定して下さい\n");
		
		for(i=0 ; hyouji>=i ; i++ )
		{
			switch(i)
			{
				case 1:printf("ロリエン    ・・・1\n");
					break;
				case 2:printf("グランプリロス ・・・2\n");
					break;
				case 3:printf("天城      ・・・3\n");
					break;
				case 4:printf("ベヒーモス   ・・・4\n");
					break;
			}
		}

		printf(":");
		
		tugi='n';

		rewind(stdin);
		scanf("%d",&dn_num);
		
		system("CLS");

		tugi='e';
		if(hyouji<dn_num)
		{
			printf("入力が不正です。\n");
			printf("下記の選択肢の数字から選択して下さい\n\n");
			tugi='e';
		}
		else
		{
			switch( dn_num )
			{
				case 1:rorien();
					   tugi='n';
					break;
		
				case 2:guran();
					   tugi='n';
					break;

				case 3:amasiro();
					   tugi='n';
					break;

				case 4:behi();
					   tugi='n';
					break;
			
				default:tugi='e';
						printf("入力が不正です。\n");
						printf("下記の選択肢の数字から選択して下さい\n\n");
			}
		}
	}
	rewind(stdin);
	getchar();

	system("CLS");
}
	//--------------------------------------------
	//【ロリエン】
	//-------------------------------------------
	void rorien(void)
	{
		printf("ロリエン\n\n");
		printf("ラウンド1\n\n");
		printf("攻撃を行います。");
		
		mns_id=0;
		chara_id=0;

		battle_mnsST[0]=mnsST[0];

		while(battle_mnsST[mns_id].hp<0)
		{
			rewind(stdin);
			getchar();
			
			atk_spd();				//行動順処理
			damage_cnt();			//ダメージ計算
		
		}
	}
	//--------------------------------------------
	//【グランプリロス】
	//-------------------------------------------
	void guran(void)
	{
		printf("グランプリロス");
	}
	//--------------------------------------------
	//【天城】
	//-------------------------------------------
	void amasiro(void)
	{
		printf("天城");
	}
	//--------------------------------------------
	//【ベヒーモス】
	//-------------------------------------------
	void behi(void)
	{
		printf("ベヒーモス");
	}






//===============================================
//【ダメージ計算】
//===============================================
void damage_cnt(void)
{
	int atk=0;			//最終攻撃力
	int def=0;			//最終防御力
	int r=0;
	int damage;
	
	srand(( unsigned )time( NULL ));	//乱数生成
	
	r=rand()/16;

	atk = battleST[chara_id].p_atk + (battleST[chara_id].p_atk % r);
	def = (battle_mnsST[mns_id].p_def / 2) + battle_mnsST[mns_id].p_def % r;

	battle_mnsST[mns_id].hp = battle_mnsST[mns_id].hp-( atk - def );

	printf("敵の体力は%dです",battle_mnsST[mns_id].hp);
	
	rewind(stdin);
	getchar();

}
//==================================================
//【素早さ処理】
//=================================================

void atk_spd(void)
{}


tera

Re: C:¥windows¥system32¥cmd.exeが無限に生成される事について

#7

投稿記事 by tera » 12年前

二つ目のソースコードが、強引にDXライブラリを導入してみた形です。
これに、画像差込や、音楽差込等をしていきたいと思いました。

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

Re: C:¥windows¥system32¥cmd.exeが無限に生成される事について

#8

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

printf、scanf,rewind,system("cls")など全部使えなくなるので思い切った組み直しが必要です。
ループ構造も変わるので、ZEROから組んだほうが早いかと思います。
コンソールアプリの組み方はウィンドウアプリでは通用しません。

こちらで、プログラムの構造は勉強してみて下さい。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/

「追記」
getchar();もですね。他にも有ると思いますが、コンソールに対してのテキスト入力、出力系は使えなくなります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

tera

Re: C:¥windows¥system32¥cmd.exeが無限に生成される事について

#9

投稿記事 by tera » 12年前

成程!><
有難う御座います!
素直にコンソールでAA作ります!

閉鎖

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