連鎖ゲーム

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

連鎖ゲーム

#1

投稿記事 by kokuoutyou » 15年前

今連鎖ゲーム作ってますがなかなか連鎖してくれません
縦の列か横の列のマークが二つ以上そろったら
そろったところを消すをやりたいのですがエラーが出てしまって出来ません
どうしたら出来ますか?教えてください
void cak1
で検査しています
念のためデータは↓です
http://share-3.kokuoutyou.server.co.jp/お願いしてるやつ/連鎖ゲーム.zip

void cak1()
{
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
if(map[j]==0)
{
return;
}
if(map[j]==map[i+1][j])
{
map[i+1][j]=0;
if(map[j]==map[i+2][j])
{
map[i+2][j]=0;
if(map[j]==map[i+3][j])
{
map[i+3][j]=0;
if(map[j]==map[i+4][j])
{
map[i+4][j]=0;
}
}
}
map[j]=0;
}
if(map[j]==map[i-1][j])
{
map[i-1][j]=0;
if(map[j]==map[i-2][j])
{
map[i-2][j]=0;
if(map[j]==map[i-3][j])
{
map[i-3][j]=0;
if(map[j]==map[i-4][j])
{
map[i-4][j]=0;
}
}
}
map[i][j]=0;
}
if(map[i][j]==map[i][j+1])
{
map[i][j+1]=0;
if(map[i][j]==map[i][j+2])
{
map[i][j+2]=0;
if(map[i][j]==map[i][j+3])
{
map[i][j+3]=0;
if(map[i][j]==map[i][j+4])
{
map[i][j+4]=0;
}
}
}
map[i][j]=0;
}
if(map[i][j]==map[i][j-1])
{
map[i][j-1]=0;
if(map[i][j]==map[i][j-2])
{
map[i][j-2]=0;
if(map[i][j]==map[i][j-3])
{
map[i][j-3]=0;
if(map[i][j]==map[i][j-4])
{
map[i][j-4]=0;
}
}
}
map[i][j]=0;
}
}
}
}

みけCAT

Re:連鎖ゲーム

#2

投稿記事 by みけCAT » 15年前

これだと、例えばi==0のときに[j][i-1]にアクセスした時に
マイナスの要素にアクセスするのでアクセス違反が出ます。
ヒント:for

kokuoutyou

Re:連鎖ゲーム

#3

投稿記事 by kokuoutyou » 15年前

void cak1()
{
for(int k=0;k<5;k++)
{
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
if(map[k][j]==map[i+1][j])
{
map[i+1][j]=0;
if(map[k][j]==map[i+2][j])
{
map[i+2][j]=0;
if(map[k][j]==map[i+3][j])
{
map[i+3][j]=0;
if(map[k][j]==map[i+4][j])
{
map[i+4][j]=0;
}
}
}
map[k][j]=0;
}
if(map[k][j]==map[j+1])
{
map[j+1]=0;
if(map[k][j]==map[j+2])
{
map[j+2]=0;
if(map[k][j]==map[j+3])
{
map[j+3]=0;
if(map[k][j]==map[j+4])
{
map[k][j+4]=0;
}
}
}
map[k][j]=0;
}
}
}
for(int i=5;i<0;i--)
{
for(int j=0;j<5;j++)
{
if(map[k][j]==map[i+1][j])
{
map[i+1][j]=0;
if(map[k][j]==map[i+2][j])
{
map[i+2][j]=0;
if(map[k][j]==map[i+3][j])
{
map[i+3][j]=0;
if(map[k][j]==map[i+4][j])
{
map[i+4][j]=0;
}
}
}
map[k][j]=0;
}
if(map[k][j]==map[j][i+1])
{
map[j][i+1]=0;
if(map[k][j]==map[j][i+2])
{
map[j][i+2]=0;
if(map[k][j]==map[j][i+3])
{
map[j][i+3]=0;
if(map[k][j]==map[j][i+4])
{
map[j][i+4]=0;
}
}
}
map[k][j]=0;
}
}
}
}

}

↑までは分かったけどまだ出来ない見たい

kokuoutyou

Re:連鎖ゲーム

#4

投稿記事 by kokuoutyou » 15年前

出来ましたw
深く考えすぎてましたw
まだすこしエラーがあるみたいだから頑張って作りますw

kokuoutyou

Re:連鎖ゲーム

#5

投稿記事 by kokuoutyou » 15年前

void cak1()
{
for(int i=1;i<6;i++)
{
for(int j=1;j<6;j++)
{
if(map[i-1][j-1]==0)
{
return;
}
if(map[i-1][j-1]==map[i-1][j-1])
{
map[i-1][j-1]=0;
if(map[i-1][j-1]==map[j-1])
{
map[j-1]=0;
if(map[i-1][j-1]==map[i+1][j-1])
{
map[i+1][j-1]=0;
if(map[i-1][j-1]==map[i+2][j-1])
{
map[i+2][j-1]=0;
}
}
}
map[i-1][j-1]=0;
}
if(map[i-1][j-1]==map[j-1])
{
map[i-1][j-1]=0;
if(map[i-1][j-1]==map[j])
{
map[j]=0;
if(map[i-1][j-1]==map[j+1])
{
map[i+1][j+1]=0;
if(map[i-1][j-1]==map[j+2])
{
map[i+2][j+2]=0;
}
}
}
map[i-1][j-1]=0;
}
}
}
}
↑のどこが間違ってるか分かりません教えてください

パコネコ

Re:連鎖ゲーム

#6

投稿記事 by パコネコ » 15年前

mapの宣言はどうなっているのでしょうか?
もしかして
map[5][5]とかになってないでしょうか?
どういうエラーが出ているのでしょうか?
↑はただの想像なので違ったらすいません。

パコネコ

Re:連鎖ゲーム

#7

投稿記事 by パコネコ » 15年前

連続失礼します。
勝手ながらコメントを入れさせていただきました。
勘違いなども含んでいるかもしれませんが、一応…仕様と違うと思うものが多かったので…

void cak1(){
for(int i=1;i<6;i++){
for(int j=1;j<6;j++){
//消せるかの判定? このままでは終了判定?
if(map[i-1][j-1]==0){
//コンティニューでいいのでは?
return;
}
//必要? 打ち間違い?
if(map[i-1][j-1]==map[i-1][j-1]){
//判定済みは消す?
map[i-1][j-1]=0;
//一つ右と同じか判定 でも0で確定している。
if(map[i-1][j-1]==map[j-1]){
//すでに0で確定しているので意味ない?
map[j-1]=0;
//二つ右と判定 ここも0なら次へ
if(map[i-1][j-1]==map[i+1][j-1]){
//0と確定しているので意味ない
map[i+1][j-1]=0;
//もうひとつとなり3つ右と判定 0なら次へ
if(map[i-1][j-1]==map[i+2][j-1]){
//ここでも意味なし
map[i+2][j-1]=0;
}
}
}
//上で同じ処理しているため意味がない
map[i-1][j-1]=0;
}
//一つ右と判定
if(map[i-1][j-1]==map[j-1]){
//0にする
map[i-1][j-1]=0;
//右上と判定(左下を0,0とした場合)
if(map[i-1][j-1]==map[j]){
//0と比べて0なら0へするので意味なし。
map[j]=0;
//二つ上と判定
if(map[i-1][j-1]==map[j+1]){
//二つ右上を0に?なぜ…
map[i+1][j+1]=0;
//一つ右3つ上と判定
if(map[i-1][j-1]==map[j+2]){
//3つ右3つ上を0に…???
map[i+2][j+2]=0;
}
}
}
//もう一度0に…3回目?4かな?
map[i-1][j-1]=0;
}
}
}
}

kokuoutyou

Re:連鎖ゲーム

#8

投稿記事 by kokuoutyou » 15年前

↓を改造したらできる


void cak1()
{
for(int go=0;go<6;go++)
{
for(int og=0;og<6;og++)
{
if(map[go][og]<0){return;}
}
}
for(int i=1;i<6;i++)
{
for(int j=1;j<6;j++)
{
if(j>1)
{
if(map[i-1][j-1]==map[i-1][j])
{
xy[i-1][j]=1;
xy[i-1][j-1]=1;
}
}
if(j<4){
if(map[i-1][j-1]==map[i-1][j+1])
{
xy[i-1][j+1]=1;
xy[i-1][j-1]=1;
}
}
if(i>1)
{
if(map[i-1][j-1]==map[j-1])
{
xy[j-1]=1;
xy[i-1][j-1]=1;
}

}
if(i<4){
if(map[i-1][j-1]==map[i-1][j+1])
{
xy[i+1][j-1]=1;
xy[i-1][j-1]=1;
}
}
}
}



for(int i=0;i<5;i++){for(int k=0;k<5;k++){
if(xy[k]==1)
{
map[k]=0;
}
}}
for(int i=0;i<5;i++){for(int k=0;k<5;k++){xy[k]=0;}}

}

kokuoutyou

Re:連鎖ゲーム

#9

投稿記事 by kokuoutyou » 15年前

void cak1()
{
for(int go=0;go<6;go++)
{
for(int og=0;og<6;og++)
{
if(map[go][og]<0){return;}
}
}
for(int i=1;i<6;i++)
{
for(int j=1;j<6;j++)
{
if(i<5)
{
if(j<5)
{
if(map[i-1][j-1]==map[i-1][j])
{
xy[i-1][j]=1;
xy[i-1][j-1]=1;
}
if(map[i-1][j-1]==map[j-1])
{
xy[j-1]=1;
xy[i-1][j-1]=1;
}
}
}
if(i>2)
{
if(i>2)
{
if(map[i-1][j-1]==map[i-2][j-1])
{
xy[i-2][j-1]=1;
xy[i-1][j-1]=1;
}
if(map[i-1][j-1]==map[i-1][j-2])
{
xy[i-1][j-2]=1;
xy[i-1][j-1]=1;
}
}
}
}
}
for(int i=0;i<5;i++){
for(int k=0;k<5;k++){
if(xy[k]==1)
{
map[k]=0;
xy[k]=0;
}
}
}

}

↑で出来ましたw

閉鎖

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