DXライブラリで変数が変な値をとります。その2

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

DXライブラリで変数が変な値をとります。その2

#1

投稿記事 by へるむ » 10年前

先ほどこちらで(http://dixq.net/forum/viewtopic.php?f=3&t=13730)質問させていただいたものです。
human[x][3]は5などにはならなくなりましたが、1を代入したのに0に戻るなど、またよくわからないことになりました。

コード:


#include "DxLib.h"
#include <stdio.h>

int soujinkou=0;//変数宣言、総人口
long int human[100000000][3]={{0}};//個々のステータス、性別(0=男1=女),年齢,子供の数,存在しているか  一億が限界値
int i_w=0;//whileの回数かうんた
int i_f=0;//forの回数かうんた
int i_x=0;//配列に代入するようのかうんた
int i_y=0;//上に同じく
int i_f2;//for用2
int trun=0;
int rand_sex;
int rand_age;
int rand_chird;
int rand_deth;
int rand_alive;
int rand_tmp;
int rang_beborn;
int white=GetColor(255,255,255);
int type;//人口ピラミッドの型 0=富士山型(子供多老人少)1=つりがね(年齢の人口差少)2=つぼ(少子高齢)3=星形(子供少老人少大人多)4=ひょうたん(子供多老人=大人)


int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
		
		

			switch (type){//ピラミッド型による仕分け

				case 0://富士山型の場合




						

						

						
							for (i_f=0;i_f<=13;i_f++){//年齢性別はランダム決定 子供の数は0固定
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age;//ここらへんからおかしくなります
									
									human[i_f][3]=1;
									
							}
						
						

							for(i_f=14;i_f<=25;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);

									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+5;
									
									human[i_f][3]=1;
									
							}

													
	
							for(i_f=26;i_f<=35;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+10;
									
									human[i_f][3]=1;
								
							}

						
							for(i_f=36;i_f<=44;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+15;
									
									human[i_f][3]=1;
								
							}

							
							
							for(i_f=45;i_f<=52;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+20;
									
									human[i_f][3]=1;
									
								
							}

								
								for(i_f=53;i_f<=58;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+25;
									
									human[i_f][3]=1;
								
							}

								
								for(i_f=59;i_f<=63;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+30;
									
									human[i_f][3]=1;
								
							}

								

								for(i_f=64;i_f<=68;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+35;
									
									human[i_f][3]=1;
									
								}
								
							
								for(i_f=69;i_f<=73;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+40;
									
									human[i_f][3]=1;
									
								}
							
								
								for(i_f=74;i_f<=77;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+45;
								
									human[i_f][3]=1;
									
								}

							
								for(i_f=78;i_f<=81;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+50;
									
									human[i_f][3]=1;
									
								}

							
								for(i_f=82;i_f<=85;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+55;
									
									human[i_f][3]=1;
									
								}

								
								for(i_f=86;i_f<=89;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+60;
									
									human[i_f][3]=1;
									
								}

								
								for(i_f=890;i_f<=92;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+65;
									
									human[i_f][3]=1;
								
								}

							
								for(i_f=93;i_f<=95;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+70;
									
									human[i_f][3]=1;
									
								}

								
								for(i_f=96;i_f<=97;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+75;
									
									human[i_f][3]=1;
									
								}

								
								for(i_f=98;i_f<=98;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+80;
									
									human[i_f][3]=1;
									
								}

								
								for(i_f=99;i_f<=99;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+85;
									
									human[i_f][3]=1;
									
								}

							
								for(i_f=100;i_f<=100;i_f++){
									rand_sex=GetRand(1);//乱数を設定
									rand_age=GetRand(5);
									human[i_f][0]=rand_sex;
									human[i_f][1]=rand_age+90;
									
									human[i_f][3]=1;
									
								}
						
						
						DrawString(0,0,"初期配置が完了しました",white);//デバッグ用
						WaitTimer( 3000 ) ;

						 while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
							 for(i_f=0;i_f<=120;i_f++){//ここで総人口の計算をしていますが、human[x][3]がおかしいのでうまくいきません
								 if (human[i_f][3]==1) soujinkou++;
							 }

							
							
							 trun++;
							 rand_tmp=50;
							
							 if(trun%30==0) rand_tmp--;

							DrawFormatString(  0,  460, white , "%dターン目"   , trun  );//ターン数表示
							DrawFormatString(  0,  0, white , "%d人"   , soujinkou  );//総人口表示

							for(i_f=0;i_f<=soujinkou;i_f++){//死亡出生計算

								switch(human[i_f][1]){

								case 0:
								case 1:
								case 2:;
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
										
										}//ここまで死亡処
										break;

								case 3:
								case 4:
								case 5:
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp-10;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
											
										}//ここまで死亡処理
										break;
								case 6:
								case 7:
								case 8:
								case 9:
								case 10:
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp-15;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
											
										}//ここまで死亡処理
										break;
								case 11:
								case 12:
								case 13:
								case 14:
								case 15:
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp-20;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
											
										}//ここまで死亡処理
										break;
													
								case 16:
								case 17:
								case 18:
								case 19:
								case 20:
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp-25;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
											
										}//ここまで死亡処理	
										break;
								case 21:
								case 22:
								case 23:
								case 24:
								case 25:
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp-25;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
											
										}//ここまで死亡処理	
										break;
								case 26:
								case 27:
								case 28:
								case 29:
								case 30:
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp-25;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
											
										}//ここまで死亡処理	
										break;
								case 31:
								case 32:
								case 33:
								case 34:
								case 35:
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp-25;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
											
										}//ここまで死亡処理
										break;
							
								case 36:
								case 37:
								case 38:
								case 39:
								case 40:
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp-25;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
											
										}//ここまで死亡処理
										break;

								case 41:
								case 42:
								case 43:
								case 44:
								case 45:
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp-20;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
											
										}//ここまで死亡処理
										break;

								case 46:
								case 47:
								case 48:
								case 49:
								case 50:
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp-20;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
											break;
										}//ここまで死亡処理

								case 51:
								case 52:
								case 53:
								case 54:
								case 55:
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp-15;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
											break;
										}//ここまで死亡処理

								case 56:
								case 57:
								case 58:
								case 59:
								case 60:
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp-15;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
											break;
										}//ここまで死亡処理

								case 61:
								case 62:
								case 63:
								case 64:
								case 65:
										if (human[i_f][3]==1){//生きているもののみ死亡処理をする
											rand_deth=GetRand(99);//100の乱数をそれぞれ指定し、合致したら死ぬ。
											for (i_f2=0;i_f2<=rand_tmp-10;i_f2++){
												rand_alive=GetRand(99);
												if (rand_alive==rand_deth){
													human[i_f][3]=0;
													soujinkou--;
													break;
												}	
											}
											break;
										}//ここまで死亡処理



								}

							}



							
							WaitKey();
						 }
						
							
						

						

					
				case 1:

				case 2:
					
				case 3:

				case 4:;
					
				}




		

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

		}

何度も似たような質問すいません。

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: DXライブラリで変数が変な値をとります。その2

#2

投稿記事 by beatle » 10年前

long int human[100000000][3]
ですので、2番目の添字は0から2しか使えません。
human[i_f][3]=1;
こういうのはダメです。

へるむ

Re: DXライブラリで変数が変な値をとります。その2

#3

投稿記事 by へるむ » 10年前

添字を変えたところ一瞬で解決しました!
あほなミスばかりすみません。

閉鎖

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