Project Board コメントComment
ログイン | ヘルプ | トップ

プロジェクト

ぷよ○よ風落ちゲーサンプル

内容
Commented by: LefTonbo at 2006-06-22 12:10:34

とりあえずここに改造したものをおいておきます。
ダメだったら削除します
改良点
 ・キーを押したままでも動けるようにした(回転も)
 ・回転の種類を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();

}

返信

お、手を抜き気味だったブロック部分の改良... 2006-06-22 22:35 by ラディ