第13講 ブロック崩しその1
第6話 バーでボールが跳ね返るようにする
バーでの跳ね返りを実現するコード例(変更部分だけ記載)
void gamemain(){ //ゲーム画面
DrawCircle(m_x,m_y,10,kiiro,true);
if(m_x<10 || m_x>590)muki[0] *= mukikae;
if(m_y<10 || m_y>790)muki[1] *= mukikae;
if(m_x >= b_x && m_x <= b_x + 50){
if(m_y >= b_y && m_y <= b_y + 10) muki[1] *= mukikae;
}
m_x+=muki[0]*3;
m_y+=muki[1]*3;
if(CheckHitKey(KEY_INPUT_RIGHT)!=0 && b_x <= 550)b_x += 5;
if(CheckHitKey(KEY_INPUT_LEFT )!=0 && b_x >= 0)b_x -= 5;
DrawBox(b_x,b_y,b_x+50,b_y+10,siro,true);
}
コピペ用添付ファイル
if(m_x >= b_x && m_x <= b_x + 50){
if(m_y >= b_y && m_y <= b_y + 10) muki[1] *= mukikae;
}
はボールの中心がバーの内部にあるときに、
跳ね返るように設定しています。
これはボールの半径を考慮に入れていませんが、
人間の目には、あたかもバーで跳ね返っているように見えます。
ボールの大きさ(半径10)も考慮に入れると、
左のボールの中心は(b_x,b_y-10)、右のボールの中心は(b_x+50,b_y-10)
左のボールの中心は(b_x,b_y)、右のボールの中心は(b_x+50,b_y)
ですから、
if(m_x >= b_x && m_x <= b_x + 50){
if(m_y >= b_y -10 && m_y <= b_y) muki[1] *= mukikae;
}
となります。厳密にすると、跳ね返らないケースもありますが、
幅10あるので、3跳びでも必ず範囲内の値をとれて大丈夫そうです。
ですので、こちらを採用することにしましょう。
次の課題は、ブロックを描くです。
最終的には、縦横10個ずつの10層のブロックにします。
図の青ブロックは、一番上のブロックになります。
第5話へ 第7話へ
第2部目次に戻る 第1部目次に戻る
初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
ecliqse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
ecliqse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ