広告
↓発売日:2018年09月22日↓
|  | 
| 新品価格 | 
 
		
		いよいよ最終日の今回はブロック回転をやっていきたいと思います。
回転の手順を簡単に説明すると・・・。
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」キーで左回転です。
 
		回転!!!
最終ソースになります。
大変長らくお疲れ様でした!
これで「ブロックパズルの作り方」を終わりにしたいと思います。
最後までお付き合いしていただいた方は感謝です!
後はほとんど見た目なので細かい説明は省略させて頂きます。
完成ソースにコメントを入れておいたので気になる方はチェックしてみてください!
こちらのサイトを通して少しでもプログラミングの魅力を感じていただければ幸いです!
広告
↓発売日:2016年02月29日↓
|  | 
| 12歳からはじめる ゼロからのC言語 ゲームプログラミング教室 新品価格 | 
 
↓発売日:2018年06月22日↓
|  | 
| 新品価格 | 
 
↓発売日:2018年03月09日↓
|  | 
| 新品価格 | 
 
↓発売日:2017年06月14日↓
|  | 
| 新品価格 | 
 
↓発売日:2018年05月21日↓
|  | 
| 新品価格 | 
 
↓発売日:2017年12月07日↓
|  | 
| 新品価格 | 
 
↓発売日:2017年02月08日↓
|  | 
| 新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ) 新品価格 | 
 
↓発売日:2017年09月26日↓
|  | 
| 新品価格 | 
