五目並べが、強制終了してしまいます。

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

五目並べが、強制終了してしまいます。

#1

投稿記事 by ね~す » 16年前

相談させていただきます。

五目並べの五、四などの役を判定する関数を作っていたのですが、
一部を変更すると強制終了(エラー報告を送信する等のボタンが表示されるダイアログ)
を起こしてしまい、理由がわからず困っております。


ファイルを添付してみました。
DxLibは、ファイルサイズの都合で入りませんでした、ごめんなさい><


hantei関数の仕組みを大雑把に言うと、


・碁盤に置いている石の配置を右、下、右下、左下方向に調べ、
 調べた方向を行とする二次元配列をそれぞれ作る

・行に含まれる石の並びを簡略化(0無し、1黒石、2白石)
 ex)0,0,0,1,1,1,2,2,2,0,0,0・・・
簡略→3,13,23,3・・・といった感じに。
 99はカベです。それ以降を調べないように。

・簡略化した数値を元に、三や五などの役を調べる。

という感じです。
ただ、stone_mainといった、黒手、白手にとっての「自分の石」というものを使っているので
少しややこしくなってしまいました><


変更前(正常動作だけど失敗)と変更後(強制終了)のソースを一部掲示してみます。
hantei関数、前半の部分にあります。構造体の初期化(?)を行う部分です。
変更前

	for (i=0;i<15;i++) {
		mode1.low_start[0] = i; // x
		mode1.low_start[1] = 0; // y
		
		mode2.low_start[0] = 0;
		mode2.low_start[1] = i;
		
		for (j=0;j<10;j++) {
			if (i==0) {
				mode3.low_start[j][0] = 10-j;
				mode3.low_start[j][1] = 0;
				
				mode4.low_start[j][0] = j+5;
				mode4.low_start[j][1] = 0;
			} else if ( (i>0) && (i<10) ) {	// 二重に代入するのを防止
				mode3.low_start[10+j][0] = 0;
				mode3.low_start[10+j][1] = j;
				
				mode4.low_start[j][0] = 15;
				mode4.low_start[j][1] = j+5;
			}
		}
	}


変更後

	for (i=0;i<15;i++) {
		mode1.low_start[0] = i; // x
		mode1.low_start[1] = 0; // y
		
		mode2.low_start[0] = 0;
		mode2.low_start[1] = i;
	}
	for (i=0;i<11;i++) {
		mode3.low_start[0] = 10-i;
		mode3.low_start[1] = 0;
		
		mode4.low_start[i][0] = i+5;
		mode4.low_start[i][1] = 0;
	}
	for (i=0;i<10;i++) {
		mode3.low_start[i+11][0] = 0;
		mode3.low_start[i+11][1] = i;
		
		mode4.low_start[i+11][0] = 14;
		mode4.low_start[i+11][1] = i+5;
	}


いずれも細かい調整が出来ていませんが、><
そもそも強制終了してしまうのでは機能動作チェックが出来ないので困っております。

強制終了が解決できればよいのですが、
正常に機能動作するためにも、アドバイスがあれば是非お願いします。

紅葉

Re:五目並べが、強制終了してしまいます。

#2

投稿記事 by 紅葉 » 16年前

配列のサイズがわからないので何とも言えませんが

変更後の
for (i=0;i<11;i++) {
mode3.low_start[0] = 10-i;
mode3.low_start[1] = 0;

mode4.low_start[0] = i+5;
mode4.low_start[1] = 0;
}

for (i=0;i<11;i++)でなくfor (i=0;i<10;i++)でないでしょうか?

ね~す

Re:五目並べが、強制終了してしまいます。

#3

投稿記事 by ね~す » 16年前

はい、それなんですが、

low_startは行の開始位置を示しています。

mode3(右下方向)に限って考えると、

⑩⑨⑧⑦⑥⑤④③②①◎┬┬┬┐















ここで、横をx、縦をy として、
x=0 のとき yを0~10とり、
y=0 のとき xを1~10とります。

だから、先に11コ取って、残りの10コ、計21コを取っています。

15x15マスの碁盤で、残りの4マスを残す理由は、

角の方では、右下方向に並べても、三や四にならず、三三等にも影響しないので無視しています。



あれ、もしかして私はfor文を完全に勘違いしているんでしょうか。

閉鎖

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