ページ 11

無題

Posted: 2010年11月22日(月) 01:09
by mm
構造体と乱数を使用してランダムにキャラを交互に戦わせてHPが0になれば終了するプログラムを組み立てています。
実行してみると思ったように進んだのですが、最後にデバッグエラー(添付画像)が表示されます。
rand_hai[20]に問題があるようなのですが色々と改良してもエラーが増えてしまいます
最初はエラー表示もなく上手くいってたのですが原因はなんでしょうか。



#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

struct teki{
char *name;
int life;
int MP;
int att;
int defe;
};

void main(void)
{
srand((unsigned)time(NULL));

struct teki date[]={
{"ソリッド ",100,100, 90, 80},
{"リキッド ",100,100, 70, 80},
{"ソリダス ",100,100, 80, 80},
{"レイヴン ", 80,100,100, 30},
{"ミラー ",100,100, 50, 50},
{"メリル ", 70, 40, 60, 60},
{"オセロット ",100,100, 50, 50},
{"ジョニー ", 80, 30, 60, 30},
{"ピューパ ", 80, 0, 80, 70},
{"ヴァンプ ", 80, 0, 80, 40},
{"オタコン ", 86,100, 45, 80},
{"ゼロ ",100,100, 80, 40},
{"シギント ",100,100, 30, 80},
{"パラメディック",100,100, 60, 60},
{"ソロー ",100,100, 70, 70},
{"ペイン ",100,100, 70, 60},
{"フィアー ",100,100, 70, 80},
{"オクトパス ",100, 0, 50, 90},
{"マンティス ",100, 80, 70, 70},
{"ビッグ.ボス",100,100, 90, 90},
},*OFF,*DEF;

int i,rnd,wk,sen,kou,rand_hai[20];

//乱数で同じ数字が発生しないようにする
for(i=0;i<20;i++) rand_hai=i;
for(i=20;i>0;i--){
rnd=rand()%i;
wk=rand_hai;
rand_hai=rand_hai[rnd];
rand_hai[rnd]=wk;
}

sen=rand_hai[0];
kou=rand_hai[1];

date[0]=date[sen];
date[1]=date[kou];

int ban=0;

//先攻後攻入れ替え、ダメージ計算、DEFのHPが0になれば終了
do{
ban^=0x00000001;
OFF=&date[ban];
DEF=&date[ban^0x00000001];

DEF->life -= OFF->att - (DEF->defe/2);

if(DEF->life <= 0) DEF->life=0;
printf("%sの攻撃 %dのダメージ\n",OFF->name, OFF->att - (DEF->defe/2));
printf("%s HP:%d 攻:%d 防:%d\n",OFF->name,OFF->life,OFF->att,OFF->defe);
printf("%s HP:%d 攻:%d 防:%d\n",DEF->name,DEF->life,DEF->att,DEF->defe);
rewind(stdin);
getchar();
}while(DEF->life > 0);
printf("%s の勝利\n",OFF->name);

rewind(stdin);
getchar();
}

Re:無題

Posted: 2010年11月22日(月) 02:03
by DVDM
>>mmさん
rand_hai は rand_hai[0] ~ rand_hai[19] の20個分なので
rand_hai[20] の要素は範囲外となってしまいます。

他に問題はあるかもしれませんがざっと目を通した感じでは
for(i=20;i>0;i--) を、 for(i=19;i>0;i--) にしてみるとどうなりますでしょうか。 画像

Re:無題

Posted: 2010年11月22日(月) 11:26
by mm
for(i=19;i>0;i--) に変更したら問題なくいけました。
この部分も着目していましたがfor(i=20;i>1;i--)にしていて詰まってました
ありがとうございます

Re:無題

Posted: 2010年11月22日(月) 11:27
by mm
ありがとうございました

Re:無題

Posted: 2010年11月22日(月) 11:27
by mm
ありがとうございました