ブロック崩し

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kei

ブロック崩し

#1

投稿記事 by kei » 15年前

ブロック崩しをつくろうと思ってて、壁に当たったときに跳ね返るのは出来たんですが

ボールが操作しているバーに当たったときに上に跳ね返る

ということができません。

どのような考え方をすればいいでしょうか?

シエル

Re:ブロック崩し

#2

投稿記事 by シエル » 15年前

壁に当たったときの判定をそのままバーに置き換えるだけです。

自分ではどの辺まで分かりますか?できるところまででいいのでコードを貼って下さい。

kei

Re:ブロック崩し

#3

投稿記事 by kei » 15年前

判定に関するところで以下のような感じです

ボールは画像を使用してます(40×40)
ボールの座標は(Bullet_t.x,Bullet_t.y)
バーはDrawBox(x , 400, x+100, 410, GetColor(255,255,255), TRUE)


//画面左端もしくは画面右端
if(Bullet_t.x<0 || (Bullet_t.x+40)>640)
if(Bullet_t.angle <PI)
Bullet_t.angle = PI-Bullet_t.angle;
else if(Bullet_t.angle<2*PI)
Bullet_t.angle = 3*PI-Bullet_t.angle;
//画面上に当たったとき
if(Bullet_t.y<0)
Bullet_t.angle = 2*PI-Bullet_t.angle;

//ここから間違っているらしい
if(!(x<Bullet_t.x || Bullet_t.x>x+100)){ //バーのx座標はxからx+100まで
if(Bullet_t.y==400) //バーのy座標
Bullet_t.angle= 2*PI -Bullet_t.angle;

シエル

Re:ブロック崩し

#4

投稿記事 by シエル » 15年前

ざっと見ただけですが、
↓の判定を、
if(!(x<Bullet_t.x || Bullet_t.x>x+100)){ //バーのx座標はxからx+100まで

if(x<Bullet_t.x && Bullet_t.x<x+100)にして、

if(Bullet_t.y==400) //バーのy座標
は、
if(Bullet_t.y>400)
にしたらうまくいきませんか? 画像

kei

Re:ブロック崩し

#5

投稿記事 by kei » 15年前

変えてやってみたんですが、ボールがバーをすり抜けていくんです。

うまくいかないです(TT)

KEYONN_

Re:ブロック崩し

#6

投稿記事 by KEYONN_ » 15年前

パソコンで実行してみました。
これで、いいと思います。
あと、PIの定義を3.14159265…か、180にするかで迷いました
なので、PIを180に置換しました。

//画面左端もしくは画面右端
if(Bullet_t.x<0 || (Bullet_t.x+40)>640)
if(Bullet_t.angle <180)
Bullet_t.angle = 180-Bullet_t.angle;
else if(Bullet_t.angle<2*180)
Bullet_t.angle = 3*180-Bullet_t.angle;
//画面上に当たったとき
if(Bullet_t.y<0)
Bullet_t.angle = 2*180-Bullet_t.angle;

//ここから間違っているらしい
if((x<Bullet_t.x && Bullet_t.x+40<x+100)){//バーのx座標はxからx+100まで
if(Bullet_t.y>400) //バーのy座標
Bullet_t.angle= 2*180 -Bullet_t.angle;
}

kei

Re:ブロック崩し

#7

投稿記事 by kei » 15年前

どこが変わったのかわからないですが、いけました!!

シエルさん,TKOZさんありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る