処理は共通で行う
- サンプルのJARファイルはページの一番下(スポンサーリンクよりも↓)に張ってあるので自由にダウンロードしてくださぃ♪
LikeWizardryのver.1ではステータスの割り振りをするのに各パラメータ毎に処理を追加していました。
要するに力にポイントを振りたい場合に力に加算する処理・減算する処理・値を得る処理の3つを作ってました。
当然、力以外にも体力・知識などあり項目の分だけ処理を書いてました。これは非常に効率も悪いですね・・・。
なので今回はどのステータスでも共通して同じ処理でできるようにしました。
そのためにCharaクラスという新しいクラスを作成し、そこで作成に関する処理を行ってます。
まず加算の処理から見ていきます。最初に引数を受け取っている点に注意してください。
//ステータスの加算
public void plusStatus(int list){
//引数で渡された値のリスト内容をString型に
strParam=""+Param.get(list);
//String型からint型へ変換して加算
point=Integer.parseInt(strParam)+FIR;
//ボーナス値を減算
minusBonus();
//ボーナスが0になった場合
if(flag_Bonus){
//加算処理をやめる
point=Integer.parseInt(strParam);
//ステータスが18を超えた場合
}else if(point>18){
//上限を18にする
point=18;
}
strParam=""+point;
Param.set(list,strParam);
}
この引数( int list )の値によって、割り振る値を選択してます。
Paramはリストなので引数のlistはParamから取り出す番号の値になります。
このParamには0から順に力・体力・・・と入っているので該当するパラメータが取り出されます。
そして1度String型へ変換した後int型へ変換し加算処理を行い、またString型へ戻してリストを更新してます。
なぜこんな面倒なことをするのかって思いますよね?
それはArrayListがint型を受け付けないためです。例えばString型に変換してString型のまま加算すると
表示としては 1+1 と出てしまいます。実際に表示したいのは2なのでint型に変換する必要があるのです。
あとは書いてある通り、ボーナスが0になった場合やステータスが上限に達した場合の処理を書いてます。
続いて減算処理です。
//ステータスの減算
public void minusStatus(int list){
//引数で渡された値のリスト内容をString型に
strParam=""+Param.get(list);
//String型からint型へ変換して減算
point=Integer.parseInt(strParam)-FIR;
//引数で渡された値のリスト内容をString型に
String defParam=""+defaultParam.get(list);
//String型からint型へ変換
defaultPoint=Integer.parseInt(defParam);
//減算後の値が初期値より低くなった場合
if(point<defaultPoint){
//減算をしない
point=Integer.parseInt(strParam);
}else{
plusBonus();
}
strParam=""+point;
Param.set(list,strParam);
}
気付きましたか?同じことを2度してましたね?
リストの内容をそれぞれ別のString型に変換してます。さてなぜでしょう??
減算する場合には各パラメータの初期値より下回ってはいけませんよね?
例えば力の初期値が7なのに6・5・4と、どんどん減算できちゃったらおかしいですね。
なので、そういうことがおきないように2つのString型へ変換してます。
そして減算した値が初期値より下回った場合の処理と通常の処理を分けて書いてます。
次はボーナスの加減処理です。これだけはパラメータの処理とは別に設けてあります。
//ボーナスの減算処理
public void minusBonus(){
//リストのボーナスをString型へ
strBonus=""+Param.get(SEV);
//String型からint型へ変換して減算
bonusPoint=Integer.parseInt(strBonus)-FIR;
//ボーナスが0になった場合
if(bonusPoint<RESET){
//0に設定してフラッグを立てる
bonusPoint=RESET;
flag_Bonus=true;
}
strBonus=""+bonusPoint;
Param.set(SEV,strBonus);
}
//ボーナスの加算処理
public void plusBonus(){
//リストのボーナスをString型へ
strBonus=""+Param.get(SEV);
//String型からint型へ変換して加算
bonusPoint=Integer.parseInt(strBonus)+FIR;
//ボーナスが0でなければ
if(bonusPoint!=RESET){
//フラッグを戻す
flag_Bonus=false;
}
strBonus=""+bonusPoint;
Param.set(SEV,strBonus);
}
行なっている処理としてはパラメータの加減処理と同じようなものなので説明は省略です。
ボーナスが0になったかどうかを判断するためにflagを立ててる点くらいが違うところです。
ちなみに名前を入力したあとスペースキーを2度押さないと決定されないバグがあるのですが
なぜなのかよくわかりません・・・。詳しい方いましたら教えてくださぃ(*_ _)人
最終更新:2008年07月02日 02:24