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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0115
mitui落ちゲーについて19解決


mitui

リンク

2008/1/15(Tue) 20:07:52|NO.13088

初めまして。
いきなりですが、落ちゲーをつくていると、ブロックを削除する所で
エラーが出てしまいました。
再帰がうまく書けないので教えて頂きたいです。

*start
onkey 0
dim field,6,15
dim drop,2,2
buffer 1,34,34
picload "dodai.jpg"
buffer 2,34,34
picload "aka.jpg"
buffer 3,34,34
picload "ao.jpg"
buffer 4,34,34
picload "kiiro.jpg"
buffer 5,34,34
picload "midori.jpg"
buffer 6,34,34
picload "Taka.jpg"
buffer 7,34,34
picload "Tao.jpg"
buffer 8,34,34
picload "Tkiiro.jpg"
buffer 9,34,34
picload "Tmidori.jpg"
screen 0,300,600
#const global size 34
goto *stert
#defcfunc investigate var x var y var n
my=field(x,y)//自分の色
field(x,y)=0
n++
if x+1<size*6&field(x+1,y)=my : investigate(x+1,y,n)
if y+1<size*13&fieldxy+1=my : investigate(x,y+1,n)
if x-1>=0&field(x-1,y)=my : investigate(x-1,y,n)
if y-1>=0&field(x,y-1)=my : investigate(x,y-1,n)
return

*stert
randomize
drop(0,0)=rnd(8)+1
drop(0,1)=rnd(8)+1//    初め
e=2
d=0
speed=25
*main
gosub *paint
gosub *keyhit
gosub *ope
await 1
goto *main
*paint
redraw 0
color 255,255,255:boxf
for b,0,14,1
pos 0,b*size+size*3
gcopy 1,0,0,size,size
pos size*7,b*size+size*3
gcopy 1,0,0,size,size
next
for c,0,8,1
pos size*c,size*16
gcopy 1,0,0,size,size
next
for b,0,2,1
for c,0,2,1
if drop(b,c)=1:pos (b+e+1)*size,(c+d)*size+size:gcopy 2,0,0,size,size //赤
if drop(b,c)=2:pos (b+e+1)*size,(c+d)*size+size:gcopy 3,0,0,size,size //青
if drop(b,c)=3:pos (b+e+1)*size,(c+d)*size+size:gcopy 4,0,0,size,size //黄
if drop(b,c)=4:pos (b+e+1)*size,(c+d)*size+size:gcopy 5,0,0,size,size //緑
if drop(b,c)=5:pos (b+e+1)*size,(c+d)*size+size:gcopy 6,0,0,size,size //泡赤
if drop(b,c)=6:pos (b+e+1)*size,(c+d)*size+size:gcopy 7,0,0,size,size //泡青
if drop(b,c)=7:pos (b+e+1)*size,(c+d)*size+size:gcopy 8,0,0,size,size //泡黄
if drop(b,c)=8:pos (b+e+1)*size,(c+d)*size+size:gcopy 9,0,0,size,size //泡緑
next
next
for b,0,6,1
for c,0,15,1
if field(b,c)=1:pos (b+1)*size,c*size+size:gcopy 2,0,0,size,size //赤
if field(b,c)=2:pos (b+1)*size,c*size+size:gcopy 3,0,0,size,size //青
if field(b,c)=3:pos (b+1)*size,c*size+size:gcopy 4,0,0,size,size //黄
if field(b,c)=4:pos (b+1)*size,c*size+size:gcopy 5,0,0,size,size //緑
if field(b,c)=5:pos (b+1)*size,c*size+size:gcopy 6,0,0,size,size //泡赤
if field(b,c)=6:pos (b+1)*size,c*size+size:gcopy 7,0,0,size,size //泡青
if field(b,c)=7:pos (b+1)*size,c*size+size:gcopy 8,0,0,size,size //泡黄
if field(b,c)=8:pos (b+1)*size,c*size+size:gcopy 9,0,0,size,size //泡緑
next
next
redraw 1
return
*keyhit
stick g,0
be=e
if g&1 : e--
if g&4 : e++
if e<0 : e=0
if e>5 : e=5
if field(e,d+1)!=0:e=be
getkey g,40
if g=1:h+=speed/2
return
*ope
fallflag=0
h++
if h>=speed{
d++
h-=speed
fallflag=1
}
if d=14{
field(e,13)=drop(0,0)
field(e,14)=drop(0,1)
gosub *balldecide
}
if field(e,d+1)!=0&&fallflag=1{
field(e,d-1)=drop(0,0)
field(e,d)=drop(0,1)
gosub *balldecide
}
if field(2,1)!=0:goto *gameover
return
*balldecide
;ボールを決定
drop(0,0)=rnd(8)+1
drop(0,1)=rnd(8)+1//    初め
e=2
d=0
return
*gameover
;ゲームオーバー
color 0,0,0:boxf
color 255,255,255
pos 0,0
font msgothic,40
mes "GAME\nOVER"
onkey goto *start
stop

画像ファイルが無くてすいません。



この記事に返信する


f

リンク

2008/1/16(Wed) 09:19:46|NO.13093

謝る前に、

buffer 1,34,34 :color 96, 96, 96,boxf//picload "dodai.jpg" buffer 2,34,34 :color 255, 0, 0,boxf//picload "aka.jpg" buffer 3,34,34 :color 0,255, 0,boxf//picload "ao.jpg" buffer 4,34,34 :color 255, 0,255,boxf//picload "kiiro.jpg" buffer 5,34,34 :color 0, 0,255,boxf//picload "midori.jpg" buffer 6,34,34 :color 128, 0, 0,boxf//picload "Taka.jpg" buffer 7,34,34 :color 0,128, 0,boxf//picload "Tao.jpg" buffer 8,34,34 :color 0, 0,128,boxf//picload "Tkiiro.jpg" buffer 9,34,34 :color 0,128, 0,boxf//picload "Tmidori.jpg"
位の事が、何故出来ないのだ?


で、再帰処理がうまくいかない以前に、大分書き方間違えているように見受けられるが。

#defcfuncは結果を返してくるので、結果を受け取る変数が必要だ。
あと、引数を,で区切っていない。

普通に過去ログ検索で「#defcfunc」を検索したら実際に使われている様子が確認できるだろう。



・・・ついでに「再帰」で過去ログ検索かけて見る事を薦める。



f

リンク

2008/1/16(Wed) 09:30:16|NO.13094

・・・ふむ。「再帰がうまく『かけない』」と言っているのか。
では、書き方が間違っているという指摘は、それ自体間違いだったようだ。失礼。



mitui

リンク

2008/1/16(Wed) 21:18:16|NO.13102

画像ファイルを用いたのは、普通のブロックと違う
特殊なブロックを作ろうと思っていたからです。


fさんのおかげえで「#defcfunc」を使うときは、何か結果を入れる変数を
書かなければいけないというのは分かりました。
でも、私には具体的に何をすればいいのか分かりません。
できればヒントを頂けませんか。



eller

リンク

2008/1/16(Wed) 21:27:13|NO.13104

再帰が分からないとのことですが、階乗の計算などの小さなスクリプトを組んで経験を積まれることをお勧めします。サンプルスクリプトは以下を参照してください。
http://hspdev-wiki.net/?RecursiveCall

#defcfuncも使い慣れていないならば、まずは(再帰とかは放っておいて)慣れるための小さなスクリプトを組みましょう。こうした事は教えてもらっても分からないので、実践あるのみです。

「何が分からないか」が分かっているならば解決しやすいと思います。頑張ってください!



f

リンク

2008/1/16(Wed) 22:22:17|NO.13105

>画像ファイルを用いたのは、普通のブロックと違う
>特殊なブロックを作ろうと思っていたからです。

ちがう。
俺らはそんな画像持ってないんだから、画像ファイルを必要とするような
スクリプトを出してくるなと言っているんだ。

ココでは何度も言っている事だが、俺らは態々適当な画像を用意しなきゃならんのか?
それとも俺が書き込みしたように、適当な色で塗りつぶしておくようこちらが改造しなきゃならんのか?

謝る位なら最初から手間かけさせないように修正しておいてくれ。
難しい事は言っていないつもりだが。


>でも、私には具体的に何をすればいいのか分かりません。

「#defcfunc」で過去ログ検索すれば実際に使っている事例が出てくると言っただろうが。
調べたのか?調べもせずにそんな事を言うのか?

>あと、引数を,で区切っていない。
と言ったがが、見づら買ったかもしれないので一応書き直しておく。
引数を半角の「,」で区切ってない。


で、#defcfuncの件が治れば、(意図した通りかどうかは知らないが)とりあえず動作する
のはこちらで確認してあるので、まず過去ログを調べるようにしてもらいたい。



mitui

リンク

2008/1/17(Thu) 18:52:56|NO.13108

すいませんでした。ソースを読む人のことも考えずに質問してしまって。

fさんの言う通り頑張ってみます。
ありがとうございました。



a

リンク

2008/1/17(Thu) 20:06:51|NO.13109


#defcfunc investigate var x var y var n my=field(x,y)//自分の色 field(x,y)=0 n++ if x+1<size*6&field(x+1,y)=my : investigate(x+1,y,n) if y+1<size*13&fieldxy+1=my : investigate(x,y+1,n) if x-1>=0&field(x-1,y)=my : investigate(x-1,y,n) if y-1>=0&field(x,y-1)=my : investigate(x,y-1,n) return
引数の型varは、変数を受けとるための型なのでx y にvarはマズイよ。
varに x+1 とかは渡せないので、この場合はintにする。
変数どうしの関係が複雑にならないように、#module 〜 #global で囲った方がいいです。
return値を必要としないなら、#fedcfuncじゃなく#deffuncにしましょ。

fieldxy+1=my
field(x,y+1)=my
の間違だよね。



f

リンク

2008/1/18(Fri) 15:59:32|NO.13120

解決して無いなら解決にしなくて良いと思うがな。
調べて解らなかったらまた聞きに来れば良いんでね。



ANTARES

リンク

2008/1/19(Sat) 01:46:30|NO.13136

 誰か、デバッグしてちょ。
問題は、時々、消えるべきブロックが消えなかったり、
消えるべきでないブロックが消えたりすること。
それ以外は仕様ということにしておこう。

[前略]

;#defcfunc investigate var x, var y, var n #defcfunc investigate int x1, int y1, int m1, int n1 if initflg==0 { initflg=1 dim stackx,100 dim stacky,100 dim stackm,100 dim stackn,100 sp=0 } x=x1 y=y1 m=m1 n=n1 if x+m>=6: return 0 if x+m<0: return 0 if y+n>14: return 0 if y+n<0: return 0 if field(x,y)==0: return 0 ;dialog "1 x="+x+" y="+y+" m="+m+" n="+n+" field(x,y)="+field(x,y)+" field(x+m,y+n)="+field(x+m,y+n),2 ;if stat==7: end if field(x,y)!=field(x+m,y+n): return 0 ;dialog "2 x="+x+" y="+y+" m="+m+" n="+n+" field(x,y)="+field(x,y)+" field(x+m,y+n)="+field(x+m,y+n),2 ;if stat==7: end if m!=-1: stackx(sp)=x: stacky(sp)=y: stackm(sp)=m: stackn(sp)=n: sp++: cc=investigate(x+m,y+n,1,0): sp--: x=stackx.sp: y=stacky.sp: m=stackm(sp): n=stackn(sp) if m!=1: stackx(sp)=x: stacky(sp)=y: stackm(sp)=m: stackn(sp)=n: sp++: cc=investigate(x+m,y+n,-1,0): sp--: x=stackx(sp): y=stacky(sp): m=stackm(sp): n=stackn(sp) if n!=-1: stackx(sp)=x: stacky(sp)=y: stackm(sp)=m: stackn(sp)=n: sp++: cc=investigate(x+m,y+n,0,1): sp--: x=stackx(sp): y=stacky(sp): m=stackm(sp): n=stackn(sp) if n!=1: stackx(sp)=x: stacky(sp)=y: stackm(sp)=m: stackn(sp)=n: sp++: cc=investigate(x+m,y+n,0,-1): sp--: x=stackx(sp): y=stacky(sp): m=stackm(sp): n=stackn(sp) ;dialog "3 x="+x+" y="+y+" m="+m+" n="+n+" field(x,y)="+field(x,y)+" field(x+m,y+n)="+field(x+m,y+n),2 ;if stat==7: end field(x+m,y+n)=0 return 1 #deffunc invest int x2, int y2 xx=x2 yy=y2 flg=0 flg=investigate(xx,yy,1,0) | flg flg=investigate(xx,yy,-1,0) | flg flg=investigate(xx,yy,0,1) | flg flg=investigate(xx,yy,0,-1) | flg if flg: field(xx,yy)=0 return [中略] if d=14{ field(e,13)=drop(0,0) field(e,14)=drop(0,1) invest e,d invest e,d-1 gosub *balldecide } if field(e,d+1)!=0&&fallflag=1{ field(e,d-1)=drop(0,0) field(e,d)=drop(0,1) invest e,d invest e,d-1 gosub *balldecide }
[後略]



Megane

リンク

2008/1/19(Sat) 11:31:36|NO.13143

ANTARES氏のこのスクリプトは、
「2つくっついたら消える」というルールです…よね?



ANTARES

リンク

2008/1/19(Sat) 21:22:08|NO.13161

 止まったブロックにつながる同色ブロックがすべて消えるというルールです。
「消えるべきでないブロックが消えなかったり」というのは、
止まったブロックのまわりに同色ブロックが全くないのに消えるということで、
「消えるべきブロックが消えない」というのは、
止まったブロックのまわりに同色ブロックがあるのに消えないということです。
それ以外は仕様通りです。
同色2つのペアが落ちてきたときは必ず消えます。



a

リンク

2008/1/19(Sat) 21:25:18|NO.13162

再帰で書いてみたけど、自分のもなんか時々動き変かもw
3つ以上くっついたら消える仕様のつもり。
ゲームって、デバックするの面倒なんだね。ゲーム下手すぎてデバックにならん。

*start onkey 0 dim field,6,15 dim drop,2,2 //▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽ buffer 1,34,34 : color 96, 96, 96 : boxf //picload "dodai.jpg" buffer 2,34,34 : color 255, 0, 0 : boxf //picload "aka.jpg" buffer 3,34,34 : color 0,255, 0 : boxf //picload "ao.jpg" buffer 4,34,34 : color 255, 0,255 : boxf //picload "kiiro.jpg" buffer 5,34,34 : color 50,255,255 : boxf //picload "midori.jpg" buffer 6,34,34 : color 100, 0, 0 : boxf //picload "Taka.jpg" buffer 7,34,34 : color 0,100, 0 : boxf //picload "Tao.jpg" buffer 8,34,34 : color 0, 0,255 : boxf //picload "Tkiiro.jpg" buffer 9,34,34 : color 0, 0, 0 : boxf //picload "Tmidori.jpg" //△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△ screen 0,300,600 #const global size 34 //▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽ #module ;┌───────────────────────────── ;│繋がっている個数を調べる ;│Params: ;│ int x = 座標 ;│ int y = 座標 ;│ int inside = 内部呼び出しか否か 0:外部から 1:内部から ;│Return: ;│ 繋がっている個数 (ブロックの無い座標だと0が返る) ;│Note: ;│ 引数insideは、0にして呼び出す事! ;└ #defcfunc investigate int x, int y, int inside, local n if inside==0 { if length(erase_field)==1 : dim erase_field,6,15 //初めだけ領域確保 memset erase_field, 0, 4*6*15 //ゼロで初期化 my = field@(x,y) //自分の色 } if field@(x,y) == 0 : return 0 //ブロックが無いなら、何もせず戻る if erase_field(x,y) != 0 : return 0 //既に調べた箇所なら、何もせず戻る erase_field(x,y) = 1 //消える場所に印を付けておく n++ //印を付けたらカウントアップ if x+1<6 : if field@(x+1,y)==my : n += investigate(x+1,y,1) if y+1<15 : if field@(x,y+1)==my : n += investigate(x,y+1,1) if x-1>=0 : if field@(x-1,y)==my : n += investigate(x-1,y,1) if y-1>=0 : if field@(x,y-1)==my : n += investigate(x,y-1,1) return n ;┌───────────────────────────── ;│investigateの調査結果をもとに、ブロックを消す ;└ #deffunc erase_block for yy, 0, 15, 1 for xx, 0, 6, 1 if erase_field(xx,yy)!=0 : field@(xx,yy) = 0 next next return ;┌───────────────────────────── ;│空きを詰める ;└ #defcfunc squash_up flag = 0 for xx, 0, 6, 1 yyy = 15-1 for yy, 15-1, 0-1, -1 if field@(xx,yy)!=0 { if yy != yyy { field@(xx,yyy) = field@(xx,yy) field@(xx,yy) = 0 flag = 1 } yyy-- } next next return flag #global //△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△△ randomize drop(0,0)=rnd(8)+1 drop(0,1)=rnd(8)+1//    初め e=2 d=0 speed=25 *main gosub *paint gosub *keyhit gosub *ope await 1 goto *main *paint redraw 0 color 255,255,255:boxf for b,0,14,1 pos 0,b*size+size*3 gcopy 1,0,0,size,size pos size*7,b*size+size*3 gcopy 1,0,0,size,size next for c,0,8,1 pos size*c,size*16 gcopy 1,0,0,size,size next if erase_flag==0 { //←☆ ブロック消し中は、落ちてくるブロックは表示させない for b,0,2,1 for c,0,2,1 if drop(b,c)=1:pos (b+e+1)*size,(c+d)*size+size:gcopy 2,0,0,size,size //赤 if drop(b,c)=2:pos (b+e+1)*size,(c+d)*size+size:gcopy 3,0,0,size,size //青 if drop(b,c)=3:pos (b+e+1)*size,(c+d)*size+size:gcopy 4,0,0,size,size //黄 if drop(b,c)=4:pos (b+e+1)*size,(c+d)*size+size:gcopy 5,0,0,size,size //緑 if drop(b,c)=5:pos (b+e+1)*size,(c+d)*size+size:gcopy 6,0,0,size,size //泡赤 if drop(b,c)=6:pos (b+e+1)*size,(c+d)*size+size:gcopy 7,0,0,size,size //泡青 if drop(b,c)=7:pos (b+e+1)*size,(c+d)*size+size:gcopy 8,0,0,size,size //泡黄 if drop(b,c)=8:pos (b+e+1)*size,(c+d)*size+size:gcopy 9,0,0,size,size //泡緑 next next } //←☆ for b,0,6,1 for c,0,15,1 if field(b,c)=1:pos (b+1)*size,c*size+size:gcopy 2,0,0,size,size //赤 if field(b,c)=2:pos (b+1)*size,c*size+size:gcopy 3,0,0,size,size //青 if field(b,c)=3:pos (b+1)*size,c*size+size:gcopy 4,0,0,size,size //黄 if field(b,c)=4:pos (b+1)*size,c*size+size:gcopy 5,0,0,size,size //緑 if field(b,c)=5:pos (b+1)*size,c*size+size:gcopy 6,0,0,size,size //泡赤 if field(b,c)=6:pos (b+1)*size,c*size+size:gcopy 7,0,0,size,size //泡青 if field(b,c)=7:pos (b+1)*size,c*size+size:gcopy 8,0,0,size,size //泡黄 if field(b,c)=8:pos (b+1)*size,c*size+size:gcopy 9,0,0,size,size //泡緑 next next redraw 1 return *keyhit stick g,0 be=e if g&1 : e-- if g&4 : e++ if e<0 : e=0 if e>5 : e=5 if field(e,d+1)!=0:e=be getkey g,40 if g=1:h+=speed/2 return *ope fallflag=0 h++ if h>=speed{ d++ h-=speed fallflag=1 } if d=14{ field(e,13)=drop(0,0) field(e,14)=drop(0,1) gosub *check //←☆ gosub *balldecide } if field(e,d+1)!=0 & fallflag=1 { field(e,d-1)=drop(0,0) field(e,d)=drop(0,1) gosub *check //←☆ gosub *balldecide } if field(2,1)!=0:goto *gameover return //▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽ //ブロック消えた時の停止時間 #const global erase_wait 1000 *check n = investigate(e, d, 0) if n >= 3 { erase_block erase_flag = 1 gosub *paint await erase_wait } n = investigate(e, d-1, 0) if n >= 3 { erase_block erase_flag = 1 gosub *paint await erase_wait } while erase_flag if squash_up() { //空きを詰めた場合 erase_flag = 1 gosub *paint await erase_wait } else { //空きが無かった場合 erase_flag = 0 _break } erase_flag = 0 for yy,0,15,1 for xx,0,6,1 n = investigate(xx,yy, 0) if n >= 3 { erase_block erase_flag = 1 gosub *paint await erase_wait _break } next if erase_flag : _break next wend return //△△△△△△△△△△△△△△△△△△△ *balldecide ;ボールを決定 drop(0,0)=rnd(8)+1 drop(0,1)=rnd(8)+1//    初め e=2 d=0 return *gameover ;ゲームオーバー color 0,0,0:boxf color 255,255,255 pos 0,0 font msgothic,40 mes "GAME\nOVER" onkey goto *start stop



ANTARES

リンク

2008/1/19(Sat) 22:34:23|NO.13163

>ゲーム下手すぎてデバックにならん。

#ifdef _DEBUG getkey dbg,65 if dbg { repeat: wait 1 getkey dbg,65 if dbg==0: break loop repeat: wait 1 getkey dbg,65 if dbg: break loop repeat: wait 1 getkey dbg,65 if dbg==0: break loop } #endif



a

リンク

2008/1/19(Sat) 22:47:04|NO.13164

ANTARESさん、ありがとー。
簡単に一時停止できるから、考える時間あるし確認しやすーい。



ANTARES

リンク

2008/1/20(Sun) 00:21:59|NO.13165

 何だ、犯人はf さんだったのか。

#if 0 buffer 7,34,34 :color 0,128, 0,boxf//picload "Tao.jpg" buffer 8,34,34 :color 0, 0,128,boxf//picload "Tkiiro.jpg" #else buffer 7,34,34 :color 0, 0,128:boxf//picload "Tao.jpg" buffer 8,34,34 :color 128, 0,128:boxf//picload "Tkiiro.jpg" #endif



f

リンク

2008/1/20(Sun) 00:22:21|NO.13166

・・・。

・・・・・・。

・・・・・・オッノウ!!

http://zapanet.info/blog/item/1125
この貢物で勘弁して頂きたく。
HSPとは関係ないけど。



mitui

リンク

2008/1/20(Sun) 01:00:19|NO.13167

皆様本当にありがとうございました。



ANTARES

リンク

2008/1/20(Sun) 01:13:25|NO.13168

 うーん、スタック配列なんか使わなくても、
local変数使えばよかったのねん。
何かあったはずだと思ったんだけど……。

#if 0 #defcfunc investigate int x1, int y1, int m1, int n1 if initflg==0 { initflg=1 dim stackx,100 dim stacky,100 dim stackm,100 dim stackn,100 sp=0 } #else #defcfunc investigate int x1, int y1, int m1, int n1, local x, local y, local m, local n #endif #if 0 if m!=-1: stackx(sp)=x: stacky(sp)=y: stackm(sp)=m: stackn(sp)=n: sp++: cc=investigate(x+m,y+n,1,0): sp--: x=stackx.sp: y=stacky.sp: m=stackm(sp): n=stackn(sp) if m!=1: stackx(sp)=x: stacky(sp)=y: stackm(sp)=m: stackn(sp)=n: sp++: cc=investigate(x+m,y+n,-1,0): sp--: x=stackx(sp): y=stacky(sp): m=stackm(sp): n=stackn(sp) if n!=-1: stackx(sp)=x: stacky(sp)=y: stackm(sp)=m: stackn(sp)=n: sp++: cc=investigate(x+m,y+n,0,1): sp--: x=stackx(sp): y=stacky(sp): m=stackm(sp): n=stackn(sp) if n!=1: stackx(sp)=x: stacky(sp)=y: stackm(sp)=m: stackn(sp)=n: sp++: cc=investigate(x+m,y+n,0,-1): sp--: x=stackx(sp): y=stacky(sp): m=stackm(sp): n=stackn(sp) #else if m!=-1: cc=investigate(x+m,y+n,1,0) if m!=1: cc=investigate(x+m,y+n,-1,0) if n!=-1: cc=investigate(x+m,y+n,0,1) if n!=1: cc=investigate(x+m,y+n,0,-1) #endif



a

リンク

2008/1/20(Sun) 16:28:57|NO.13176

> local変数使えばよかったのねん。
local変数使わずに書けてしまう方が、凄いと思いますよw

まずい箇所いくつか・・・あった
ひとまとまり消すごとに詰め直してたのと、
表示が反映される前に消す処理してたから、すごく不自然だったのかぁ…。
別の作業してたら、ふと気付いた。


//▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽ //ブロック消えた時の停止時間 #const global erase_wait 1000 *check erase_flag = 1 : gosub *paint : erase_flag = 0 n = investigate(e, d-1, 0) if n >= 3 { await 250 dialog "上のブロックがヒット" erase_block erase_flag = 1 gosub *paint await erase_wait } n = investigate(e, d, 0) if n >= 3 { if erase_flag==0 :await 250 dialog "下のブロックがヒット" erase_block erase_flag = 1 gosub *paint await erase_wait } while erase_flag if squash_up() { //空きを詰めた場合 dialog "詰めた" erase_flag = 1 gosub *paint await erase_wait } else { //空きが無かった場合 erase_flag = 0 _break } erase_flag = 0 for yy,0,15,1 for xx,0,6,1 n = investigate(xx,yy, 0) if n >= 3 { dialog "連鎖" erase_block erase_flag = 1 gosub *paint await erase_wait } next next wend return //△△△△△△△△△△△△△△△△△△△



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