ページ 1 / 1
インベーダ
Posted: 2012年1月31日(火) 21:35
by ふじつー
cを使っているのですが、boss(耐久力のある敵)を作る場合どうしたらいいでしょうか
一応、インベーダのゲームはできており、すべての敵が破壊されたら登場させるようにしたいと思っていますが、多少難しいのであれば、最初から上にいさせるようにしたいと思っています
プログラムなど書いて、詳しく説明していただけますでしょうか?
Re: インベーダ
Posted: 2012年1月31日(火) 23:28
by beatle
ふじつーさんのプログラムの構造が全く分かりませんので,アドバイスがしにくい状態です.
もっと具体的に,ソースコード断片を示しながら,ふじつーさんの作っているプログラムの仕組みを説明してくださいますか?
Re: インベーダ
Posted: 2012年2月01日(水) 07:55
by さかまき
>boss(耐久力のある敵)を作る場合どうしたらいいでしょうか
破壊される条件があるはずですので、その条件に耐久性をもたせればよいだけ。
Re: インベーダ
Posted: 2012年2月01日(水) 19:41
by ふじつー
すいません、とりあえず敵のプログラムの断片をはります
このプログラム、配布されたもので私が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: インベーダ
Posted: 2012年2月01日(水) 19:51
by beatle
パッと見ると,ビームと敵が接触した瞬間に敵が破壊されるようなロジックになっているようですね.
さかまきさんも仰っていますが,そこを改良して1回ビームが当たっただけじゃ破壊されないようにすればよさそうです.
Re: インベーダ
Posted: 2012年2月01日(水) 22:36
by ふじつー
どんなふうに改良していけばいいのでしょうか?
Re: インベーダ
Posted: 2012年2月01日(水) 22:54
by beatle
そこを自分で考えるのがプログラミングの面白いところだと思いますが,そんな面白いところを人にあげちゃっていいんですか?
Re: インベーダ
Posted: 2012年2月01日(水) 23:55
by softya(ソフト屋)
配布されたものとありますが課題なのでしょうか?
まず、みなさんのアドバイスを聞きながら自分で考えて見ませんか? ここのフォーラムルールでもあります。 →
http://dixq.net/board/board.html
もし課題でないなら考えることがプログラミングの醍醐味ですしプログラミングそのものですので、自分でやれるだけのことはやってみましょう。
もっと簡単なことからやれば分かるようになってきますよ。
Re: インベーダ
Posted: 2012年2月03日(金) 21:40
by MoNoQLoREATOR
1.HPを記憶しておくための変数をつくる
2.ビームが敵に当たったらその敵のHPを減らす
3.HPが0以下になったらその敵を破壊する
これだけでOKです。