キャラクターの情報を保存する
さて、ここまででキャラクターの大体の情報は作成できました。でも現状では2キャラ目を作成すると1キャラ目は消えちゃいますね?
それはキャラクター情報を保存していないため、常に1キャラ目に上書きとなっているからです。
なのでキャラクター情報の保存を行ないます。
今回使用した保存方法は、キャラクターの情報を配列に格納するというやり方です。
まずMainPanelクラスで、職業まで選択した場合の処理から見ます。
せっかくなので処理の最初から掲載してみます。
if(key==KeyEvent.VK_SPACE){
//最初の画面を表示している場合
if(!makeChara){
if(dy==y){
makeChara=true;
}
//登録画面にいる場合
}else if(makeChara){
if(chara.isChara()){
//ボーナスの割り振りが終わった場合
if(setBonus){
if(chara.getSTR()>=12){
if(dy==py){
//キャラクターを保存する
chara.saveChara(0);
//登録に関する全てをリセットする
chara.resetChara();
chara.resetStatus();
setXY=false;
setBonus=false;
this.dx=x;
this.dy=y;
}
}
覚えてますか?私は覚えてませんが(笑)
こ~んな長いソースになってくるとコメントの重要性がよくわかりますっ!
私のプログラムの書き方は、コマンドが奥に進むにつれてif文で深いところに処理が入るって感じですね。
あまり使わない処理なので、必要なときにだけ呼び出せればいいので。
で、上から見ていくと最初の画面にいるかどうか。次が登録画面にいるかどうか。
そしてキャラクターの作成画面にいるか。ボーナス割り振りが終わっているか。となっています。見た通りですねっ!
さぁ今回の目的であるキャラクターの保存を行なっている部分はコメントにある通りchara.saveChara( )の部分です。
ここで渡した引数によって該当する職業を取り出します。
charaクラスでこんな配列を作りましたょね??(って、掲載しなかった気が・・・w)
private String[] getCharacter={"戦士","僧侶","魔法使い","盗賊","侍","ロード","忍者"};
ここの配列の番号を渡しているわけです。
そしてchara.saveChara( )の行き先が以下になります。
//キャラの保存(引数で受け取っているのが職業)
public void saveChara(int CHARACTER){
//現在のステータスを送る
addChara(charaName,STR,VIT,INT,SPD,LUK,CHARACTER);
}
//現在のステータスを元にsetCharaの配列に全てを保存
public void addChara(String NAME,int STR,int VIT,int INT,int SPD,int LUK,int CHARACTER){
if(setChara.size()>5){
return;
}else{
setChara.add(NAME+" "+STR+" "+VIT+" "+INT+" "+SPD+" "+LUK+" "+CHARACTER);
loadChara();
}
}
//1度保存された値を各パラメータ毎に再保存
public void loadChara(){
for(int i=setChara.size()-1;i<setChara.size();i++){
StringTokenizer st=new StringTokenizer(setChara.get(i).toString()," "+"["+"]");
saveName.add(st.nextToken());
saveSTR.add(st.nextToken());
saveVIT.add(st.nextToken());
saveINT.add(st.nextToken());
saveSPD.add(st.nextToken());
saveLUK.add(st.nextToken());
saveCHARA.add(st.nextToken());
isSave=true;
まぁコメントにある通りです。
1度キャラクターの情報はsetCharaのリストに全てをひとまとめにして入ってます。
具体的にはsetCharaリストの0番目には(名前 STR VIT INT SPD LUK 職業(番号))という具合に入ってます。
ここから今度はそれぞれのリストを作成し該当するリストにパラメータを格納していってます。
格納されたらboolean型のisSaveがtrueを返します。これで保存したよーって合図を出してます。
最後に表示です。
if(isSave){
for(int i=0;i<setChara.size();i++){
//saveCHARAの職業番号をint型に変換する
Object charaObj=saveCHARA.get(i);
String charaSrg=charaObj.toString();
int charaINT=Integer.parseInt(charaSrg);
//この時にparamXYが役に立つ
g.drawString(saveName.get(i).toString(),paramX[0],paramY[i]+CL);
g.drawString(getCharacter[charaINT],paramX[1],paramY[i]+CL);
}
}
これはもっと良い方法があるんじゃなぃかと考えてるんですが・・・(どなたか詳しい方いれば教えてください。)
まず職業番号は1度リストに格納されてます。なのでリストに入ったままの状態では使うことができません。
この職業番号はint型でないとダメです。getCharacterの配列の番号指定に使うものだからです。
リストに格納された職業番号は1度Object型に変換。そしてString型に変換してint型へ変換させてます。
これって絶対もっと良い方法がある気がするのですが・・・。
ホント、誰か知ってたら教えてくださぃねっ!
(ちなみに、前回まで
ボーナス画面でLUKの値が12以上のときに職業が何も表示されてなくても選択画面に移動できちゃってました。
これは今回のバージョンで修正しました。ごめんなさぃ。。。)
- サンプルのJARファイルはスポンサーリンクの↓に張ってあるので自由にダウンロードしてくださぃ♪
最終更新:2008年06月26日 19:08