四方向のショット

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

四方向のショット

#1

投稿記事 by » 16年前

ボンバーマン風のゲームで敵に四方向に弾を撃たせたいのですが
うまくいきません。

症状:弾を撃ったあとに敵が移動すると弾も敵が移動した方向に一緒に
動いてしまいます。


弾は一度だしたら壁にぶつかるまでまっすぐ飛ばしたいのですがどうしたらいいですか?
宜しくお願いします

kazuoni

Re:四方向のショット

#2

投稿記事 by kazuoni » 16年前

まず○ンバーマンで弾を打つっという行動が分かりませんが・・・^^;

コードがないので何とも言えないですけど、
一緒に移動するということは、弾、敵の位置を計算する変数が同じになっている
もしくは、関数でそれぞれ計算するとしたら、
弾の座標を渡すところを、敵の座標を渡してしまっている
ぐらいでしょうか。

コードを公開すればもっと良い回答が得られるかも知れません。

Re:四方向のショット

#3

投稿記事 by » 16年前

返信ありがとうございます。
ソースは敵から向きをもらい、その方向に弾を出すという風にしたいのですが・・・


void enemy_shot::hassya(Enemy *date , Map *map , Player *life)
{
for(int i = 0; i < ENEMY ; i++)
{
if(date->enemy.tama_flag == 1 &&teki_shot.shot_flag == 0)
{
teki_shot.x = date->enemy.x;
teki_shot.y = date->enemy.y;
teki_shot.shot_flag = 1;
teki_shot.shot_move_flag = 1;
}
if(teki_shot.shot_flag == 1)
{
if(date->enemy.muki == 0 && teki_shot[i].shot_move_flag == 1)
{
teki_shot[i].shot_move_flag = 1;
teki_shot[i].y -= 5;
if(map->map[teki_shot[i].y/32-1][teki_shot[i].x/32] == 2)
{
map->map[teki_shot[i].y/32-1][teki_shot[i].x/32] = 0;
teki_shot[i].shot_flag = 0;
}

if(teki_shot[i].y == life->y && teki_shot[i].x == life->x)
{
life->life--;
}

if(teki_shot[i].y < -80)
{
//date->enemy[i].tama_flag = 0;
teki_shot[i].shot_flag = 0;
teki_shot[i].shot_move_flag = 0;
}
}

if(date->enemy[i].muki == 1 && teki_shot[i].shot_move_flag == 1)
{
teki_shot[i].shot_move_flag = 2;
teki_shot[i].x -= 5;
if(map->map[teki_shot[i].y/32][teki_shot[i].x/32 - 1] == 2)
{
map->map[teki_shot[i].y/32][teki_shot[i].x/32 - 1] = 0;
teki_shot[i].shot_flag = 0;
}

if(teki_shot[i].y == life->y && teki_shot[i].x == life->x)
{
life->life--;
}

if(teki_shot[i].x < -80)
{
//date->enemy[i].tama_flag = 0;
teki_shot[i].shot_flag = 0;
teki_shot[i].shot_move_flag = 0;
}
}

if(date->enemy[i].muki == 2 && teki_shot[i].shot_move_flag == 1)
{
teki_shot[i].shot_move_flag = 3;
teki_shot[i].x += 5;
if(map->map[teki_shot[i].y/32][teki_shot[i].x/32 + 1] == 2)
{
map->map[teki_shot[i].y/32][teki_shot[i].x/32 + 1] = 0;
teki_shot[i].shot_flag = 0;
}

if(teki_shot[i].y == life->y && teki_shot[i].x == life->x)
{
life->life--;
}

if(teki_shot[i].x > 480)
{ teki_shot[i].shot_move_flag = 3;
//date->enemy[i].tama_flag = 0;
teki_shot[i].shot_flag = 0;
}
}

if(date->enemy[i].muki == 3 && teki_shot[i].shot_move_flag == 1)
{
teki_shot[i].shot_move_flag = 4;
teki_shot[i].y += 5;
if(map->map[teki_shot[i].y/32 + 1][teki_shot[i].x/32] == 2)
{
map->map[teki_shot[i].y/32 + 1][teki_shot[i].x/32] = 0;
teki_shot[i].shot_flag = 0;
}
if(teki_shot[i].y == life->y && teki_shot[i].x == life->x)
{
life->life--;
}

if(teki_shot[i].y > 640)
{
teki_shot[i].shot_move_flag = 0;
//date->enemy[i].tama_flag = 0;
teki_shot[i].shot_flag = 0;
}
}
}
}
}

kazuoni

Re:四方向のショット

#4

投稿記事 by kazuoni » 16年前

コードは規約通り、プレタグで囲ってください。

コードを載せてもらったんですが、何がどうなってるのか、
コメントもないので、余裕のない自分にはどうもできませんが、
プロジェクトごとUPする、
もしくは、デバッガで弾の移動するような所をすべてブレークポイントで止めながら、
一つずつ動作を追っていってください。

後者のが、一番ベストだとは思いますが・・・。

閉鎖

“C言語何でも質問掲示板” へ戻る