HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0329
ます同じ色が4個以上並んでいるかどうかチェックする5解決


ます

リンク

2007/3/29(Thu) 14:49:44|NO.6672

以下のスクリプトで7×6のマスに白か黒か空白を入れていて、
白か黒が4つ以上並んでいればそれらを黄色で塗るスクリプトを書いたのですが
4個以上並んでいても塗られません。色々調べたり
デバッグもしてみましたが原因が分かりません。
このスクリプトの問題が分かる方、教えて下さい。お願いします。
尚、このスクリプトは何組か4つ以上並んでいても最初の1組しか塗らないようになっていますが
それは問題ありません。

#const size 20 //サイズ #const aida 10 //間 repeat 0 //チェック関数 #defcfunc check int mx,int my,int vx,int vy,local nx,local ny,local ret,local len,local tn nx=mx:ny=my if map(mx,my)=0:return 0 tn=map(mx,my) ret=1 repeat 3 nx+=vx:ny+=vy if (nx<0)|(nx>6)|(ny<0)|(ny>5):ret=0:break if map(nx,ny)!tn:ret=0:break loop return ret loop dim map,7,6 randomize color 192,192,192 boxf 0,0,size*7+aida*8,size*6+aida*7 repeat 7 xn=cnt repeat 6 a=rnd(3) map(xn,cnt)=a if a{ b=(a>>1)*255 color b,b,b circle aida*(xn+1)+xn*size,aida*(cnt+1)+cnt*size,aida*(xn+1)+(xn+1)*size,aida*(cnt+1)+(cnt+1)*size } loop loop //チェック repeat 7 icnt=cnt repeat 6 xcnt=cnt repeat 3 scnt=cnt repeat 3 if (scnt=1)&(cnt=1):continue if check(icnt,xcnt,scnt-1,cnt-1):goto *en loop loop loop loop stop repeat 0:repeat 0:repeat 0:repeat 0 *en wnt=cnt loop:loop:loop:loop tnt=map(icnt,xcnt) gnt=0 redraw 0 color 255,255,0 repeat if (icnt>6)|(xcnt>5):break if tnt=map(icnt,xcnt){ circle aida*(icnt+1)+icnt*size,aida*(xcnt+1)+xcnt*size+size,aida*(icnt+1)+(icnt+1)*size,aida*(xcnt+1)+(xcnt+1)*size+size }else{ break } icnt+=scnt:xcnt+=wnt loop redraw 1



この記事に返信する


いくす

リンク

2007/3/29(Thu) 14:53:05|NO.6673

並ぶのは斜め方向もありですか?



ます

リンク

2007/3/29(Thu) 16:37:17|NO.6676

はい。



eller

リンク

2007/3/30(Fri) 09:34:54|NO.6704

ますさん、はじめまして。
面白い題材ですね。パズルゲームに利用されるのでしょうか?

さて、気づいた点を報告いたしますと、

■ 変数wntが正しく更新されていない
wntには44〜47行目の
repeat 3
if (scnt=1)&(cnt=1):continue if check(icnt,xcnt,scnt-1,cnt-1):goto *en loop
のcntを記録すべきだと思うのですが、この方法では正しく反映されないと思います。
このループ内に
wnt = cnt

と書いてしまうことをお勧めします。 ■ repeat〜loop内でgotoを使っている これはあまり好ましくないと思います。gosubなどに置き換えてみてはいかがでしょうか。 ■ icnt,xcntの増加量が異常 69行目の
icnt+=scnt:xcnt+=wnt
ですが、このときscnt,wntには「移動量+1」が代入されているはずです(46行目では
scnt-1,cnt-1として使っていますよね)。


以上が大きな問題だと思いました。
それではプログラムの完成、がんばってください。



eller

リンク

2007/3/30(Fri) 09:40:49|NO.6705

ごめんなさい、改行が正しく挿入されなかったようで見づらくなってしまいました。



ます

リンク

2007/3/30(Fri) 17:54:26|NO.6713

ありがとうございます。
ご指摘の通りでした。
思い通りの動作にすることができました。



ONION software Copyright 1997-2023(c) All rights reserved.