cを使っているのですが、boss(耐久力のある敵)を作る場合どうしたらいいでしょうか
一応、インベーダのゲームはできており、すべての敵が破壊されたら登場させるようにしたいと思っていますが、多少難しいのであれば、最初から上にいさせるようにしたいと思っています
プログラムなど書いて、詳しく説明していただけますでしょうか?
インベーダ
Re: インベーダ
ふじつーさんのプログラムの構造が全く分かりませんので,アドバイスがしにくい状態です.
もっと具体的に,ソースコード断片を示しながら,ふじつーさんの作っているプログラムの仕組みを説明してくださいますか?
もっと具体的に,ソースコード断片を示しながら,ふじつーさんの作っているプログラムの仕組みを説明してくださいますか?
Re: インベーダ
すいません、とりあえず敵のプログラムの断片をはります
このプログラム、配布されたもので私が1から理解してるものではないので、まだ至らぬ点があったら教えてください
このプログラム、配布されたもので私が1から理解してるものではないので、まだ至らぬ点があったら教えてください
|
|
略
|
|
void game_process(void)
{
int i, j, k;
POSITION_XY e_pos;
|
|
略
|
|
// 敵軍とビームとの当たり判定
for(i = 0; i < ENEMY_COLUMN; i++)
{
for(j = 0; j < ENEMY_ROW; j++)
{
if(enemy.state[i][j] == EXISTENCE)
{
e_pos.x = j * (FIGURE_WIDTH + ENEMY_SPACE) + enemy.position.x;
e_pos.y = i * FIGURE_HIGHT + enemy.position.y;
for(k = 0; k < BATTERY_BEAM_MAX; k++)
{
if(battery.beam[k].state == TRUE)
{
if(battery.beam[k].position.y + BATTERY_BEAM_LENGTH < e_pos.y + FIGURE_HIGHT &&
battery.beam[k].position.y + BATTERY_BEAM_LENGTH > e_pos.y &&
battery.beam[k].position.x > e_pos.x &&
battery.beam[k].position.x < e_pos.x + FIGURE_WIDTH)
{
enemy.state[i][j] = DESTRUCTION;
enemy.num--;
if(i == 4) game.score += 30; // 赤インベーダーは30点
else if(i == 3 || i == 2) game.score += 20; // 緑インベーダーは20点
else game.score += 10; // 青インベーダーは10点
battery.beam[k].state = FALSE;
}
}
}
}
}
}
// 敵軍の状態遷移
for(i = 0; i < ENEMY_COLUMN; i++)
{
for(j = 0; j < ENEMY_ROW; j++)
{
if(enemy.state[i][j] == DESTRUCTION) // 敵が破壊状態の場合
{
enemy.state_count[i][j]++; // 爆発状態になってからのステップ数をカウント
if(enemy.state_count[i][j] > DESTRUCTION_STEP) // 一定ステップ数を超えたら消失状態に移る
enemy.state[i][j] = DISAPPEAR;
}
}
}
Re: インベーダ
パッと見ると,ビームと敵が接触した瞬間に敵が破壊されるようなロジックになっているようですね.
さかまきさんも仰っていますが,そこを改良して1回ビームが当たっただけじゃ破壊されないようにすればよさそうです.
さかまきさんも仰っていますが,そこを改良して1回ビームが当たっただけじゃ破壊されないようにすればよさそうです.
Re: インベーダ
そこを自分で考えるのがプログラミングの面白いところだと思いますが,そんな面白いところを人にあげちゃっていいんですか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: インベーダ
配布されたものとありますが課題なのでしょうか?
まず、みなさんのアドバイスを聞きながら自分で考えて見ませんか? ここのフォーラムルールでもあります。 → http://dixq.net/board/board.html
もし課題でないなら考えることがプログラミングの醍醐味ですしプログラミングそのものですので、自分でやれるだけのことはやってみましょう。
もっと簡単なことからやれば分かるようになってきますよ。
まず、みなさんのアドバイスを聞きながら自分で考えて見ませんか? ここのフォーラムルールでもあります。 → http://dixq.net/board/board.html
もし課題でないなら考えることがプログラミングの醍醐味ですしプログラミングそのものですので、自分でやれるだけのことはやってみましょう。
もっと簡単なことからやれば分かるようになってきますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- MoNoQLoREATOR
- 記事: 284
- 登録日時: 14年前
- 住所: 東京
Re: インベーダ
1.HPを記憶しておくための変数をつくる
2.ビームが敵に当たったらその敵のHPを減らす
3.HPが0以下になったらその敵を破壊する
これだけでOKです。
2.ビームが敵に当たったらその敵のHPを減らす
3.HPが0以下になったらその敵を破壊する
これだけでOKです。