Powered by SmartDoc

アイテム

Item

取得するとレベルアップするアイテムなどを作ります.

Item.java
import ac.hiu.j314.elmve.*;
import ac.hiu.j314.vesma.*;

public class Item extends VesmaObject implements NeverSave {
    protected void init() {
        super.init();
        a3UI = "x-res:///item.a3";
    }

    public void touched(Order o) {
        ElmStub e = o.getSender();
        send(makeOrder(e,"levelUp",NULL));
        send(makeOrder(e,"hear","レベルアップ!\n"));
        send(makeMyOrder("dispose",NULL),2000);
    }
}

ヘナチョコですが,以下のa3ファイルを使って下さい.

StrangeHole

アイテムや敵(kappa)を自動的に生成するオブジェクトを作ります. a3ファイルには以下のstrangeHole.a3を使用して下さい.

StrangeHole.java
import ac.hiu.j314.elmve.*;
import ac.hiu.j314.vesma.*;

public class StrangeHole extends VesmaObject {
    int counter = 0;
    protected void init() {
        super.init();
        a3UI = "x-res:///strangeHole.a3";
    }

    public void generate(Order o) {
        if (Math.random()>0.3)
            makeKappa();
        else
            makeItem();
        send(makeOrder("generate",NULL),10000);
    }

    protected void makeKappa() {
        makeElm("Character","c"+counter);
        Place p = new Place(20.0*Math.random()-10.0,
                            20.0*Math.random()-10.0,
                            0.0);
        ElmStub elm = getElm("c"+counter);
        send(makeOrder(elm,"setPlace",p));
        send(makeOrder(elm,"method4",NULL));
        counter++;
    }

    protected void makeItem() {
        makeElm("Item","c"+counter);
        Place p = new Place(20.0*Math.random()-10.0,
                            20.0*Math.random()-10.0,
                            0.0);
        ElmStub elm = getElm("c"+counter);
        send(makeOrder(elm,"setPlace",p));
        counter++;
    }
}

Gameクライアント

スペースキーで,攻撃するようにクライアントを改良します.

Game.java
import ac.hiu.j314.elmve.*;
import ac.hiu.j314.vesma.*;
import java.awt.event.*;

public class Game extends Vesma3d {
    public void processKeyPressed(KeyEvent e) {
        try {
            if (e.getKeyCode()==KeyEvent.VK_SPACE) {
                processCommand("attack &");
                System.out.println("attack!");
            } else {
                super.processKeyPressed(e);
            }
        } catch (Exception ee) {
            ee.printStackTrace();
        }
    }
}

上のクライアントを実行するには,VESMAを起動した時に一番最初に 現れるVesmaLauncherウィンドウの[Client Class:]欄にGameと入力 してから「OK」ボタンを押して下さい.

各種メソッドの追加

GAvatarクラスに以下のメソッドを追加して下さい.

GAvatar.java
    public void levelUp(Order o) {
        level++;
        strength++;
        hitPoint = level*10;
    }
    public void goNorth(Order o) {
      if (deadFlag) return;
      super.goNorth(o);
    }
    public void goSouth(Order o) {
      if (deadFlag) return;
      super.goSouth(o);
    }
    public void goWest(Order o) {
      if (deadFlag) return;
      super.goWest(o);
    }
    public void goEast(Order o) {
      if (deadFlag) return;
      super.goEast(o);
    }

Characterクラスに以下の変更・追加をして下さい. 最初の一行は,すでに書いてある行ですが,下線の部分を 追加して下さい.

Character.java
public class Character extends VesmaAgent implements NeverSave {
                                          ^^^^^^^^^^^^^^^^^^^^ <--加える
    public void method4(Order o) {
        if (deadFlag)
            return;
        ElmStub e = getElm("@ac.hiu.j314.elmve.ElmAvatar");
        Request r = makeRequest(e,"getPlace",NULL);
        receive(r,"method5",NULL);
        send(r);
    }
    public void method5(ReplySet rs) {
        Place avatarPlace = rs.getPlace(0,0);
        Place myPlace = getPlace();
        Place tmp = new Place();
        tmp.sub(avatarPlace,myPlace);
        tmp.scale(0.03);
        myPlace.add(tmp);
        setPlace(myPlace);

        if (tmp.distance(new Place()) < 0.1)
            if (Math.random()<0.2)
                send(makeOrder("attack",NULL));

        repaint();
        send(makeOrder("method4",NULL),200);
    }

動作確認

動作確認には,以下のようなコマンドを使用します.

cct   StrangeHole
touch   hole
##hole   generate   &

へなちょこなので,色々改造してみて下さい.