ヒットポイント,マジックポイント,レベル,経験値を持つAvatarを作る.ア タック,調べるなどの機能も追加する.ダメージを受け取る.
アバタの画像として,以下のkintaro.a3を利用して下さい.下のリンクからダウンロードしてワークフォルダに保存しておいて下さい.
Avatarのクラス名はGAvatarにします.よって,GAvatar.javaとういうファイ ルにクラスを作ることになります.内容は以下のようにして下さい.
import ac.hiu.j314.elmve.*; import ac.hiu.j314.vesma.*; public class GAvatar extends VesmaAvatar { protected void init() { super.init(); a3UI = "x-res:///kintaro.a3"; } }
作成したアバタを使用するにはVESMAに管理者権限でloginします.
新しいアカウントを作成して下さい.つまり, メニューから[Config]-->[users]でアカウントの管理画面にして 必要な項目を入力します.今回は[avatar]という欄に 「default」と入っているところを「GAvatar」に変更して から「Add」ボタンを押して下さい.(詳しくはTutorialの ほうを参照して下さい.)
これで,GAvatarベースのアバターが使用可能になるので, VESMAを再起動して新しく作成されたアバターの名前で, ログインして下さい.
GAvatarクラスに以下の変数とメソッドを付け加えます.
protected int hitPoint = 10; protected int magicPoint = 10; protected int level = 1; protected int strength = 1; public void normal(Order o) { actionID = "default"; repaint(); } public void attack(Order o) { actionID = "attack"; repaint(); ElmStub e = (ElmStub)getNearestElms(1,"Character").get(0); send(makeOrder("normal",NULL),1000); if (e == null) return; send(makeOrder(e,"beated",strength)); send(makeOrder("hear",getName()+"が" + e.getName()+"にアタック!\n")); } public void beated(Order o) { actionID = "beated"; repaint(); int n = o.getInt(0); hitPoint -= n; if (hitPoint < 0) send(makeOrder("dead",NULL),1000); else send(makeOrder("normal",NULL),1000); } protected boolean deadFlag; public void dead(Order o) { deadFlag = true; actionID = "dead"; repaint(); }
以上の変更で,normal,attack,beated,deadの動作をするようになります.
上のメソッドの動作確認には,以下のようなコマンドを使用します.
##ユーザ名 attack & ##ユーザ名 beated 3 & ##ユーザ名 dead & ##ユーザ名 normal &
ユーザ名のところは,自分で作成した新しいアカウントのユーザ名を指定して 下さい.(現在,表示上のバグで上のコマンドは2回ぐらい実行しないと 表示がおかしいようです.)
前に作ったCharacterクラスにも以下の変数,メソッドを追加しておいて下さ い.ほとんど上の例と同じです.
protected int hitPoint = 10; protected int magicPoint = 10; protected int level = 1; protected int strength = 1; public void normal(Order o) { actionID = "default"; repaint(); } public void attack(Order o) { actionID = "attack"; repaint(); ElmStub e = (ElmStub)getNearestElms(1,"GAvatar").get(0); send(makeOrder("normal",NULL),1000); if (e == null) return; send(makeOrder(e,"beated",strength)); send(makeOrder(e,"hear",getName()+"が" + e.getName()+"にアタック!\n")); } public void beated(Order o) { actionID = "beated"; repaint(); int n = o.getInt(0); hitPoint -= n; if (hitPoint < 0) send(makeOrder("dead",NULL),1000); else send(makeOrder("normal",NULL),1000); } protected boolean deadFlag; public void dead(Order o) { deadFlag = true; actionID = "dead"; repaint(); send(makeMyOrder("dispose",NULL),10000); }
CharacterもGAvatarと同様にコマンドで動作します. どのようなコマンドを入力すればチェックできるか 考えてみて下さい.あっ,そういえば,Characterはdeadになって しばらくすると自動消滅します.
結構適当なので,その他のメソッドも付け足して工夫してみて下さい.