Project Board コメントcomments
ログイン | ヘルプ | トップ
「ぷよ○よ風落ちゲーサンプル」トップへ

[Ver0.03] ・index2に隣り合うブロックがくっつくバージョンを用意。 ・ゲームオーバー時に画面のブロックが邪魔ブロックに変化するように ・バグ修正06-06-24 22:43 by ラディ

バグ多数発見。 (マップ縦横を変更すると拡張したところが表示されないバグ(flame)) ↓修正 function onBeforeMove() { //ブロック表示 for (yy=1;yy<=$rows;yy++) { for (xx=1;xx<=$cols;xx++) { //drawDxSpriteなので回転・拡大縮小・半透明表示など動きのあるブロックが可能 if ($field.get(xx,yy)!=null) drawDxSprite($width/2+xx*$width,$height/2+yy*$height,$field.get(xx,yy),0,0,0,255,1,1); } }(以下省略) (スペースキーのキーリピートが変更されない(block)) ↓修正 if ((getkey(38)==1 || (getkey(38)>=$re*3 && getkey(38)%$re==0)) && $field.get(floor((x+$width*cos(a*90+90))/$width),floor((y+$height*sin(a*90+90))/$height))==null && $map.getAt(x+$width*cos(a*90+90),y+$height*sin(a*90+90))==$pat_map+8) a=amod(a+1,4); //↑90度(回転先が壁でないとき) else if ((getkey(38)==1 || (getkey(38)>=$re*3 && getkey(38)%$re==0)) && $field.get(floor((x+$width*cos(a*90+180))/$width),floor((y+$height*sin(a*90+180))/$height))==null && $map.getAt(x+$width*cos(a*90+180),y+$height*sin(a*90+180))==$pat_map+8) a=amod(a+2,4); //↑180度(回転先が壁で、反対側が壁でないとき) else if ((getkey(38)==1 || (getkey(38)>=$re*3 && getkey(38)%$re==0)) && $field.get(floor((x+$width*cos(a*90+270))/$width),floor((y+$height*sin(a*90+270))/$height))==null && $map.getAt(x+$width*cos(a*90+270),y+$height*sin(a*90+270))==$pat_map+8) a=amod(a+3,4); //↑270度(回転の逆方向が壁でないとき) else if ((getkey(38)==1 || (getkey(38)>=$re*3 && getkey(38)%$re==0)) && $map.getAt(x,y-$height)==$pat_map+8) {y-=$height;a=amod(a+2,4);} //↑2つ目のブロックで回転(最終回転手段) (以下省略) (ブロックが一瞬消える & ブロックの大きさを変えると着地が変になる(fall)) 修正↓ //着地 if ($field.get(floor(x/$width),floor((y+16)/$height))!=null || $map.getAt(x,y+16)==$pat_map) { $field.set(floor(x/$width),floor(y/$height),p); wait(1); die(); } ついでに改造スプリクトを1つ (ゲームオーバーでブロックをすべて邪魔ブロックに(flame)) if($Gover!=1){ for (yy=1;yy<=$rows;yy++) { for (xx=1;xx<=$cols;xx++) { //drawDxSpriteなので回転・拡大縮小・半透明表示など動きのあるブロックが可能 if ($field.get(xx,yy)!=null) $field.set(xx,yy,$jama); } } $Gover=1; } また、高速落下の速度、自動落下の速度、キーリピート開始までの時間($re*3のところ)もflameクラスで設定できるようにしてもいいとおもいます。 最後に、わかりやすい設定のヘルプ $screenWidth=450; //画面横幅 $screenHeight=420; //画面縦幅 $cols=6; //フィールド横幅 $rows=12; //フィールド縦幅 $width=30; //ブロック横幅 $height=30; //ブロック縦幅 $color=6; //通常ブロックの色数(2以上) $num=4; //最低消去数(2以上) $jama=$pat_block+6; //邪魔ブロックのパターン番号 $v=1; //落下速度 $re=6; //キーリピート時間(押しっぱなしで何フレームごとにキー反応を起こすか) $tuki=30; //着地猶予時間(着地してから何フレームで固定するか) $wait=30; //ウェイト(完全着地から止めるフレーム数) $map.setBGColor($clWhite); //背景色(color,colorHSLなどで設定) 長文で申し訳ありませんorz06-06-23 20:31 by LefTonbo
    バグ報告ありがとうございます。修正しておきました。 ゲームオーバー時のブロック変化も追加させてもらいました。 そしてUmintyu-さんばかりに改造させる訳にも行かないので、自分でも改造しました。 これからもよろしくお願いします。 06-06-24 22:40 by ラディ

[Ver0.02]・ブロック部分のUmintyu-さんのプログラムを取り入れた ・それに伴い設定する変数増加 ・気づいたバグを修正 ブロック部分のプログラムが良いものになった分、少しややこしくなってるので簡単なほうが良い人はver. 0.01をどうぞ。ただしバグあり。06-06-22 22:41 by ラディ

とりあえずここに改造したものをおいておきます。 ダメだったら削除します 改良点  ・キーを押したままでも動けるようにした(回転も)  ・回転の種類を4種類用意。壁に隣り合っていても回転できるように。  ・床についてもしばらくはうごけるようにしています while(1) { //横移動 if ((getkey(37)==1 || (getkey(37)>=18 && getkey(37)%6==0)) && y>=$height*3/2 && $field.get(floor((x-(1+(a==2))*$width)/$width),floor(y/$height))==null && $map.getAt(x-(1+(a==2))*$width,y)==$pat_map+8) x-=$width; if ((getkey(39)==1 || (getkey(39)>=18 && getkey(39)%6==0)) && y>=$height*3/2 && $field.get(floor((x+(1+(a==0))*$width)/$width),floor(y/$height))==null && $map.getAt(x+(1+(a==0))*$width,y)==$pat_map+8) x+=$width; //回転 if ((getkey(38)==1 || (getkey(38)>=18 && getkey(38)%6==0)) && $field.get(floor((x+$width*cos(a*90+90))/$width),floor((y+$height*sin(a*90+90))/$height))==null && $map.getAt(x+$width*cos(a*90+90),y+$height*sin(a*90+90))==$pat_map+8) a=amod(a+1,4); //↑90度(回転先が壁でないとき) else if ((getkey(38)==1 || (getkey(38)>=18 && getkey(38)%6==0)) && $field.get(floor((x+$width*cos(a*90+180))/$width),floor((y+$height*sin(a*90+180))/$height))==null && $map.getAt(x+$width*cos(a*90+180),y+$height*sin(a*90+180))==$pat_map+8) a=amod(a+2,4); //↑180度(回転先が壁で、反対側が壁でないとき) else if ((getkey(38)==1 || (getkey(38)>=18 && getkey(38)%6==0)) && $field.get(floor((x+$width*cos(a*90+240))/$width),floor((y+$height*sin(a*90+240))/$height))==null && $map.getAt(x+$width*cos(a*90+240),y+$height*sin(a*90+240))==$pat_map+8) a=amod(a+3,4); //↑240度(回転の逆方向が壁でないとき) else if ((getkey(38)==1 || (getkey(38)>=18 && getkey(38)%6==0))) {y-=$height;a=amod(a+2,4);} //↑2つ目のブロックで回転(最終回転手段) //着地(ついてしばらくしたら if(tuki>=60) { if ($field.get(floor(x/$width),floor((y+$height/2)/$height))!=null || $map.getAt(x,y+$height/2)==$pat_map+11) { $field.set(floor(x/$width),floor(y/$height),p); appear(new fall(x+$width*cos(a*90),y+$height*sin(a*90),pp,f,zOrder,angle,alpha,scaleX,scaleY)); die(); } else if ($field.get(floor(((x+$width*cos(a*90))/$width)),floor((y+$height*sin(a*90)+$height/2)/$height))!=null || $map.getAt(x+$width*cos(a*90),y+$height*sin(a*90)+$height/2)==$pat_map+11) { $field.set(floor((x+$width*cos(a*90))/$width),floor((y+$height*sin(a*90))/$height),pp); appear(new fall(x,y,p,f,zOrder,angle,alpha,scaleX,scaleY)); die(); } } else if ($field.get(floor(x/$width),floor((y+$height/2)/$height))!=null || $map.getAt(x,y+$height/2)==$pat_map+11) { tuki++; } else if ($field.get(floor(((x+$width*cos(a*90))/$width)),floor((y+$height*sin(a*90)+$height/2)/$height))!=null || $map.getAt(x+$width*cos(a*90),y+$height*sin(a*90)+$height/2)==$pat_map+11) { tuki++; } else { y+=vy; //落下 if (getkey(40)) y+=vy*5; //高速落下 tuki=0; } //右ブロックの表示 drawDxSprite(x+$width*cos(a*90),y+$height*sin(a*90),pp,f,zOrder,angle,alpha,scaleX,scaleY); update(); }06-06-22 12:10 by LefTonbo
    お、手を抜き気味だったブロック部分の改良ありがとうございます。 このプログラムを組み込んだ&バグ潰しver.アップしときます。 ただ個人的にはブロックの回転に違和感が無いでもないです。まぁ慣れれば問題無しなんですが。06-06-22 22:35 by ラディ

[Ver0.01]初期バージョン 解り辛い様だったらもう少し注釈なんかを強化します。06-06-19 23:42 by ラディ

「ぷよ○よ風落ちゲーサンプル」トップへ