第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)も考慮に入れると、
036
左のボールの中心は(b_x,b_y-10)、右のボールの中心は(b_x+50,b_y-10)
059左のボールの中心は(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跳びでも必ず範囲内の値をとれて大丈夫そうです。
ですので、こちらを採用することにしましょう。

次の課題は、ブロックを描くです。
0258
最終的には、縦横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 入門 サイト 基礎から応用まで
本サイトトップへ