画像(logo)

HOME/[C言語コンソール]ブロックパズルの作り方 目次/最終日 ブロック回転

広告

[C言語 コンソール ブロックパズルの作り方]
最終日 ブロック回転

広告

↓発売日:2018年09月22日↓

たった1日で基本が身に付く! C言語 超入門

新品価格
¥2,225から
(2018/10/8 23:10時点)

目次へ戻る

ブロック回転

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

ブロック回転の手順

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

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;

と増加させてあげます。

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

case 0x48:
	my_turn_right();
	break;
case 'z':
	my_turn_left();
	break;

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

画像(cb_7_1)

回転!!!

最終ソースになります。

最終ソース

お疲れ様でした!

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

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

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

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

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

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

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓発売日:2016年02月29日↓

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

新品価格
¥2,462から
(2018/10/8 23:25時点)

↓発売日:2018年06月22日↓

スッキリわかるC言語入門

新品価格
¥2,916から
(2018/10/8 23:15時点)

↓発売日:2018年03月09日↓

C言語本格入門 ~基礎知識からコンピュータの本質まで

新品価格
¥3,218から
(2018/10/8 23:16時点)

↓発売日:2017年06月14日↓

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

新品価格
¥2,700から
(2018/10/8 23:17時点)

↓発売日:2018年05月21日↓

作って身につく C言語入門

新品価格
¥2,462から
(2018/10/8 23:18時点)

↓発売日:2017年12月07日↓

新・標準プログラマーズライブラリ C言語 ポインタ完全制覇

新品価格
¥2,678から
(2018/10/8 23:19時点)

↓発売日:2017年02月08日↓

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

新品価格
¥2,700から
(2018/10/8 23:20時点)

↓発売日:2017年09月26日↓

かんたん C言語 [改訂2版] (プログラミングの教科書)

新品価格
¥2,916から
(2018/10/8 23:22時点)