ピンポンゲームっぽいのを(ry(2)


RGKT-NDS-HMBR-002(2)


printfデバッグ
ボール移動が斜め45度のときとか
何でマイナス値取りこぼししてんだろーって。


上下左右の端の判定は
if 〜 else if 分岐で見てたのが原因だった。


if で4回キッチリ見てあげないと、
上下左右のうち2箇所書き換えないといけない斜め45度とか
1箇所書き換えてifブロック抜けちゃうもんね。

//ボール座標
int bx, by;
//ボール移動量
int vx, vy;

//ボール初期位置
bx = 60;
by = 30;
	
//ボール初期移動量
vx = 15;
vy = 15;

//ボールが上端に来たときの反射
if(by <= 0){
	by = 0;
	vy = -vy;
}

//ボールが下端に来たときの反射
if(by >= (192 - 8)){
	by = 192 - 8;
	vy = -vy;
}

//ボールが左端に来たときの反射
if(bx <= 0){
	bx = 0;
	vx = -vx;
}

//ボールが右端に来たときの反射
if(bx >= (256 - 8)){
	bx = 256 - 8;
	vx = -vx;
}

//次回ボール座標=現在ボール座標+ボール移動量・方向
bx = bx + vx;
by = by + vy;


移動方向の反転は符号を +− 切り替えてるだけ。
例えばこんな風に。


vx = -vx;


中に入ってる値が+なら−に、−なら+に切り替え。
符号反転させたい変数に×−1してるのと同じ。


vx = vx * -1;


処理系によってはx−1という記述じゃないと
符号反転してくれない場合もあったりするが。