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という記述じゃないと
符号反転してくれない場合もあったりするが。