ボンバーマン風のアクションゲームを作っているのですが
敵のランダムな動かし方がわかりません。
何か参考になるサイトなどありましたら教えてください
お願いします
Re:お願いします
サイトはよくわかりませんが、
私は32で割り切れる座標に来た時に、ランダムに移動させるようにしていました。
あまり方法は多くないと思いますし、それでいいんじゃ無いかと思いますがどうでしょうか?
今どのように移動制御をしているかわかりませんが、
32ピクセルが1ブロックだとすると、32で割り切れる座標に差し掛かったとき、
移動方向をランダムに決め、そちらが進入可能ならそのまま歩かせ、
無理だったらもう一度それ以外の方向でランダムに決めたらいいと思います。
ただやってみて思いましたが、あまりチョコマカ不可解な動きをすると予測しにくいので、
特定の歩数以上歩いたら方向転換するようにしたほうがいいと思います。
私は32で割り切れる座標に来た時に、ランダムに移動させるようにしていました。
あまり方法は多くないと思いますし、それでいいんじゃ無いかと思いますがどうでしょうか?
今どのように移動制御をしているかわかりませんが、
32ピクセルが1ブロックだとすると、32で割り切れる座標に差し掛かったとき、
移動方向をランダムに決め、そちらが進入可能ならそのまま歩かせ、
無理だったらもう一度それ以外の方向でランダムに決めたらいいと思います。
ただやってみて思いましたが、あまりチョコマカ不可解な動きをすると予測しにくいので、
特定の歩数以上歩いたら方向転換するようにしたほうがいいと思います。
Re:お願いします
-----------------------------------------------------------------
if(move_flag == MOVE_NONE){
switch(rand % 4){
case 0:move_flag = MOVE_RIGHT;break;
case 1:move_flag = MOVE_LEFT;break;
case 2:move_flag = MOVE_UP;break;
case 3:move_flag = MOVE_DOWN;break;
default:break;
}
}
if(move_flag != MOVE_NONE){
switch(move_flag){
case MOVE_RIGHT:if((++mob.pt.x) % 32 == 0)
move_flag = MOVE_NONE;
break;
case MOVE_LEFT:if((--mob.pt.x) % 32 == 0)
move_flag = MOVE_NONE;
break;
case MOVE_UP:if((--mob.pt.y) % 32 == 0)
move_flag = MOVE_NONE;
break;
case MOVE_DOWN:if((++mob.pt.y) % 32 == 0)
move_flag = MOVE_NONE;
break;
default:break;
}
}
-----------------------------------------------------------------
自分は大体こういう風にしました。
上記のプログラムでは、当たり判定などはしていないので、
壁であろうが通路であろうが進む仕様になってます。
①当たり判定を付ける
②進もうとした方向が壁であれば、別の方向へ進む
という処理を付ければ一応はマップに沿って動くようになります。
あと、ヘッダや変数の定義、動作確認などは省略してあるので参考程度にどうぞ。
if(move_flag == MOVE_NONE){
switch(rand % 4){
case 0:move_flag = MOVE_RIGHT;break;
case 1:move_flag = MOVE_LEFT;break;
case 2:move_flag = MOVE_UP;break;
case 3:move_flag = MOVE_DOWN;break;
default:break;
}
}
if(move_flag != MOVE_NONE){
switch(move_flag){
case MOVE_RIGHT:if((++mob.pt.x) % 32 == 0)
move_flag = MOVE_NONE;
break;
case MOVE_LEFT:if((--mob.pt.x) % 32 == 0)
move_flag = MOVE_NONE;
break;
case MOVE_UP:if((--mob.pt.y) % 32 == 0)
move_flag = MOVE_NONE;
break;
case MOVE_DOWN:if((++mob.pt.y) % 32 == 0)
move_flag = MOVE_NONE;
break;
default:break;
}
}
-----------------------------------------------------------------
自分は大体こういう風にしました。
上記のプログラムでは、当たり判定などはしていないので、
壁であろうが通路であろうが進む仕様になってます。
①当たり判定を付ける
②進もうとした方向が壁であれば、別の方向へ進む
という処理を付ければ一応はマップに沿って動くようになります。
あと、ヘッダや変数の定義、動作確認などは省略してあるので参考程度にどうぞ。