画像(logo)

HOME/[C言語DXライブラリ]ブロックパズルの作り方 目次/最終日 ブロック回転

広告

[C言語 DXライブラリ ブロックパズルの作り方]
最終日 ブロック回転

広告

↓2016年02月29日発売↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

目次へ戻る

ブロック回転

いよいよ最終日の今回はブロック回転をやっていきたいと思います。

ブロック回転の手順

回転の手順を簡単に説明すると・・・。

1・回転後のブロックを一時的に作る

2・そのブロックで当たり判定を行う

3・当たり判定OKなら回転

みたいな手順になります。

今までやってきた事の積み重ねみたいなものなのでけっこう簡単です。

グローバル変数として回転状態を表す変数

int turn_point;

と回転後のブロックを表す

int turn_block[BLOCK_HEIGHT][BLOCK_WIDTH];

を用意しておきます。

回転後の当たり判定

回転後の状態を保存したブロック「turn_block[4][4]」の当たり判定を行います。

void my_collision_turn(){
	int x,y;

	collision_flag = 0;

	for(y=0;y<BLOCK_HEIGHT;y++){
		for(x=0;x<BLOCK_WIDTH;x++){
			if(turn_block[y][x] != 0){
				if(stage[block_y + y][block_x + x] != 0){
					collision_flag = 1;
				}
			}
		}
	}
}

特に難しく考えずさきほど用意した回転後のブロックとの当たり判定をとっているだけですね。

それでは回転させていきます。

広告

右回転

ブロックを右回転させる「my_turn_right()」です。

void my_turn_right(){
	int x,y;

	turn_point++;
	
	for(y=0;y<BLOCK_HEIGHT;y++){
		for(x=0;x<BLOCK_WIDTH;x++){
			turn_block[y][x] = 
				blocks[(block_id * BLOCK_HEIGHT) + y][(turn_point % 4 * BLOCK_WIDTH) + x];
		}
	}

	my_collision_turn();

	if(collision_flag == 0){
		for(y=0;y<BLOCK_HEIGHT;y++){
			for(x=0;x<BLOCK_WIDTH;x++){
				block[y][x] = turn_block[y][x];
			}
		}
	}
	else{
		turn_point--;
	}
}

まず回転状態を表す「turn_point」を増加させた上で一時的に回転後のブロックを作って「turn_block[4][4]」に保存します。

turn_point++;

for(y=0;y<BLOCK_HEIGHT;y++){
	for(x=0;x<BLOCK_WIDTH;x++){
		turn_block[y][x] = 
			blocks[(block_id * BLOCK_HEIGHT) + y][(turn_point % 4 * BLOCK_WIDTH) + x];
	}
}

そしてさきほどの関数を使って回転後のブロックとの当たり判定を行います。

my_collision_turn();

ここで当たり判定OKであればブロックを入れ替える事によって回転をさせるというワケです。

if(collision_flag == 0){
	for(y=0;y<BLOCK_HEIGHT;y++){
		for(x=0;x<BLOCK_WIDTH;x++){
			block[y][x] = turn_block[y][x];
		}
	}
}
else{
	turn_point--;
}

もし回転できない場合は忘れずに「turn_point--」と回転状態を元にもどしてあげます。

左回転の時はマイナス側のループになるので「turn_point」は

turn_point += 3;

と増加させてあげます。

最後にキー入力に回転を加えます。

if(key[KEY_INPUT_UP] == 1){
	my_turn_right();
}

if(key[KEY_INPUT_Z] == 1){
	my_turn_left();
}

矢印キー上で右回転、「z」キーで左回転です。

画像(cdxb_7_1)

回転!!!

最終ソースになります。

最終ソース

お疲れ様でした!

大変長らくお疲れ様でした!

これで「ブロックパズルの作り方」を終わりにしたいと思います。

最後までお付き合いしていただいた方は感謝です!

後はほとんど見た目なので細かい説明は省略させて頂きます。

完成ソースにコメントを入れておいたので気になる方はチェックしてみてください!

こちらのサイトを通して少しでもプログラミングの魅力を感じていただければ幸いです!

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓2017年06月16日発売↓

やさしいC 第5版 (「やさしい」シリーズ)

新品価格
¥2,700から
(2017/5/1 13:05時点)

↓2014年08月09日発売↓

新・明解C言語 入門編 (明解シリーズ)

新品価格
¥2,484から
(2017/5/1 13:08時点)

↓2016年02月20日発売↓

新・解きながら学ぶC言語

新品価格
¥2,160から
(2017/5/1 13:10時点)

↓2017年02月11日発売↓

C言語プログラミング基本例題88 88

新品価格
¥3,024から
(2017/5/1 13:12時点)

↓2016年12月15日発売↓

Cの絵本 第2版 C言語が好きになる新しい9つの扉

新品価格
¥1,490から
(2017/5/1 13:13時点)

↓2017年02月08日発売↓

新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ)

新品価格
¥2,700から
(2017/5/1 13:15時点)