ボーナスが増え続けるバグの詳細
まず、前回起こっていたステータスが18の状態になったときにボーナスが減算されないためボーナスが増え続けるバグは直しました。ご迷惑をお掛けしました。
原因はCharaクラスでステータスを上げた時に、ボーナスを減算するタイミングがおかしかったことです。
前回おかしかった部分を掲載します。
//ボーナスが0になった場合
if(flag_Bonus){
//加算処理をやめる
point=Integer.parseInt(strParam);
//ステータスが18を超えた場合
}else if(point>18){
//上限を18にする
point=18;
//ステータスが12を超えた場合
}else if(point>=12){
this.list=list;
loadParam("/menu/charas.dat");
}
//ボーナス値を減算
minusBonus(list);
まずおかしいのがステータスが18を超えた場合の処理を行なった後にボーナスを減算しているところ。
ボーナスはステータスが18を超えないと減算がストップしないため、このソースだと減算し続けます。
続いて減算側の処理です。
//ボーナスの減算処理
public void minusBonus(int list){
//String型からint型へ変換して減算
bonusPoint=Integer.parseInt(strBonus)-FIR;
//ボーナスが0になった場合
if(bonusPoint<=RESET){
//0に設定してフラッグを立てる
bonusPoint=RESET;
flag_Bonus=true;
}
if(point>=18){
bonusPoint=Integer.parseInt(strBonus);
System.out.println("Check");
}
setBonus();
}
これもおかしいのが、if(point>=18)の部分です。
ステータスが18になった瞬間から減算がされないという記述になってます。
ステータスが18になった瞬間は減算されなければならないため、これは間違っています。
この2点によりバグが発生していました。
修正後のソースを以下に掲載します。
//ボーナスが0になった場合
if(flag_Bonus){
//加算処理をやめる
point=Integer.parseInt(strParam);
//ステータスが18を超えた場合
}
//ボーナス値を減算
minusBonus(list);
if(point>18){
//上限を18にする
point=18;
}
先程のソースと違い、ボーナスの減算をステータスが18を超えた場合の処理の前に持ってきています。
そして減算側の処理です。
//ボーナスの減算処理
public void minusBonus(int list){
//String型からint型へ変換して減算
bonusPoint=Integer.parseInt(strBonus)-FIR;
//ボーナスが0になった場合
if(bonusPoint<=RESET){
//0に設定してフラッグを立てる
bonusPoint=RESET;
flag_Bonus=true;
}
if(point>18){
bonusPoint=Integer.parseInt(strBonus);
}
setBonus();
}
減算のストップの条件をif(point>18)としました。
これによりステータスが18になった場合もボーナスは減算され、それ以降は減算されなくなります。
以上。訂正してお詫びします。
最終更新:2008年07月11日 01:14