インベーダ

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

インベーダ

#1

投稿記事 by ふじつー » 13年前

cを使っているのですが、boss(耐久力のある敵)を作る場合どうしたらいいでしょうか
一応、インベーダのゲームはできており、すべての敵が破壊されたら登場させるようにしたいと思っていますが、多少難しいのであれば、最初から上にいさせるようにしたいと思っています

プログラムなど書いて、詳しく説明していただけますでしょうか?

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: インベーダ

#2

投稿記事 by beatle » 13年前

ふじつーさんのプログラムの構造が全く分かりませんので,アドバイスがしにくい状態です.
もっと具体的に,ソースコード断片を示しながら,ふじつーさんの作っているプログラムの仕組みを説明してくださいますか?

アバター
さかまき
記事: 92
登録日時: 14年前

Re: インベーダ

#3

投稿記事 by さかまき » 13年前

>boss(耐久力のある敵)を作る場合どうしたらいいでしょうか
破壊される条件があるはずですので、その条件に耐久性をもたせればよいだけ。

ふじつー

Re: インベーダ

#4

投稿記事 by ふじつー » 13年前

すいません、とりあえず敵のプログラムの断片をはります
このプログラム、配布されたもので私が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;
				}
			}
		}


beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: インベーダ

#5

投稿記事 by beatle » 13年前

パッと見ると,ビームと敵が接触した瞬間に敵が破壊されるようなロジックになっているようですね.
さかまきさんも仰っていますが,そこを改良して1回ビームが当たっただけじゃ破壊されないようにすればよさそうです.

ふじつー

Re: インベーダ

#6

投稿記事 by ふじつー » 13年前

どんなふうに改良していけばいいのでしょうか?

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: インベーダ

#7

投稿記事 by beatle » 13年前

そこを自分で考えるのがプログラミングの面白いところだと思いますが,そんな面白いところを人にあげちゃっていいんですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: インベーダ

#8

投稿記事 by softya(ソフト屋) » 13年前

配布されたものとありますが課題なのでしょうか?
まず、みなさんのアドバイスを聞きながら自分で考えて見ませんか? ここのフォーラムルールでもあります。 → http://dixq.net/board/board.html
もし課題でないなら考えることがプログラミングの醍醐味ですしプログラミングそのものですので、自分でやれるだけのことはやってみましょう。
もっと簡単なことからやれば分かるようになってきますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前
住所: 東京

Re: インベーダ

#9

投稿記事 by MoNoQLoREATOR » 13年前

1.HPを記憶しておくための変数をつくる
2.ビームが敵に当たったらその敵のHPを減らす
3.HPが0以下になったらその敵を破壊する

これだけでOKです。

閉鎖

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