回転処理と削除アニメーションについて

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

回転処理と削除アニメーションについて

#1

投稿記事 by シュバ » 16年前

以前、連鎖処理について質問させて頂いた者です。

たびたび申し訳ありませんが2点質問をさせて頂きたいと思います。

今回は回転処理と削除アニメーションについてです。

回転処理の方がflagで管理しており、時計回りに回転すると言う形にしてみたのですが回転した後、フィールドに固定する際の処理に問題が発生している状況です。ブロックの固定はメイン関数の方で処理しているのですが移動用の関数内でブロックの固定処理をした方が良いのでしょうか?

削除アニメーションに関しまして、αブレンドを使って4つ以上並んだ画像を薄くして実際に削除処理に移るという形をとりたいと考えているのですが、この際別関数を作り制御した方が良いのでしょうか?

ソースコードなのですが、何分長くなってしまい掲示板の文字数をオーバーしてしまうので添付ファイルという形をとらせて頂きました。

どうか、宜しくお願い致します。

シュバ

Re:回転処理と削除アニメーションについて

#2

投稿記事 by シュバ » 16年前

環境を書くのを忘れてしまいました。

コンパイラ:VC++2008

ライブラリがDxLibの方を使わせて頂いております。

バグ

Re:回転処理と削除アニメーションについて

#3

投稿記事 by バグ » 16年前

私だったら…ですが、落ちてくるブロック用の構造体かクラスを用意します。
struct PIECE
{
	int color[3][3];
	int x;
	int y;
};

例えばこんな感じですね。
で、ブロックが消える前に一旦その『これから消えるブロックです』という情報を保持しておきたいならば…

struct FIELD
{
	int color[FIELD_MAX_Y][FIELD_MAX_X];	// ブロックの色
	int vanish[FIELD_MAX_Y][FIELD_MAX_X];	// 消去判定フラグ(普段は0で、1の時に消える)
};
こんな風にフィールド上の1マス1マスに消去フラグを持たせると処理が楽ではないでしょう?
消える箇所を検索して、4つ以上繋がっている箇所の消去フラグを1にして、次に消去フラグが1の箇所だけ表示を薄くして、実際に消去する…みたいな流れですね。

バグ

Re:回転処理と削除アニメーションについて

#4

投稿記事 by バグ » 16年前

ためしにメイン関数以外の部分の実装をしてみました。メイン関数の実装はお任せします(他力本願)
当然ながら動作は未確認ですが、多分大丈夫じゃないかな?(^_^;)

これらの関数を並べていけば、とりあえずはぷよぷよの動きになるんじゃないかと思います。

※クラスを使わずに書くのは久しぶりだったので、妙に気をつかってしまいました(苦笑)

シュバ

Re:回転処理と削除アニメーションについて

#5

投稿記事 by シュバ » 16年前

バグさん、ありがとうございます!

頂いたサンプルソースのmain関数を作り、参考にさせて頂きながら自分なりのソースコードを作っていこうと思います。

何から何まで本当にありがとうございました!

バグ

Re:回転処理と削除アニメーションについて

#6

投稿記事 by バグ » 16年前

あ、1つ実装を忘れている関数がありました(^_^;)
下記の関数を追加しておいてください。PIECE構造体の情報をFIELD構造体へセットする関数です。
/* PIECE情報をFIELDにセットする */
int PieceToField(PIECE* pPiece, FIELD* pField)
{
	int i, j;
	
	/* PIECEとFIELDの重なり判定を行う */
	if (PieceCollision(pPiece, pField) == 0)
	{
		/* 重なっている箇所が有る場合は0を返す */
		return 0;
	}
	
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			/* 空白の箇所は何もしない */
			if (pPiece->Color[j] == 0)
			{
				continue;
			}
			
			/* FIELDへPIECE情報をコピーする */
			pField->Color[pPiece->X + i][pPiece->Y + j] = pPiece->Color[j];
		}
	}

	/* セットに成功したので1を返す */
	return 1;
}

シュバ

Re:回転処理と削除アニメーションについて

#7

投稿記事 by シュバ » 16年前

関数の方、追加いたしました。

何から何までありがとうございました!

閉鎖

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