1

コンピューター サイエンスのプロジェクトが予定されているので、グリッド ワールドのサポートが必要です。クリッターをクリックできるようにコードを記述しましたが、クリッターを一度クリックしてから、グリッド上の空いている場所をクリックしてクリッターを移動します。しかし、うまくいきません。これを機能させる必要がありますが、コードの何が問題なのかわかりません。見てください。ご助力いただきありがとうございます

Actor t;

public boolean locationClicked(Location loc)
{
    Grid<Actor> gr = getGrid();
    t = gr.get(loc);
    Actor j;
    //Location second;
    if (t != null) 
    { 
        setMessage("Click on " + t);
        numOfClicks++;
        if(t instanceof BlackCheckers || t instanceof RedCheckers)
        {

            if(numOfClicks==0)
            {
                secondClick(second);
            }

        }
    }
    else
    {            

        setMessage("Click on nothing");

    }      
    return true;   
}
Location second;
public void secondClick(Location second)
{
    this.second=second;
    Grid<Actor> op=getGrid();
    Actor te=op.get(second);
    if(te==null)
    {
        t.moveTo(second);
    }
}
4

1 に答える 1

0

これは Gridworld について私が知っていることを超えていますが、役立つかもしれないものを見つけました。


マウスのクリックとキーストロークを傍受する方法

このWorldクラスには、マウスのクリックとキーストロークをインターセプトするための、学生が使いやすいメカニズムがあります。AWT イベントの知識は必要ありません。

ユーザーがグリッド位置をクリックすると、 のlocationClickedメソッドWorldが呼び出されます。デフォルトでは、そのメソッドは を返しますfalse。これは、デフォルト アクションを開始するようにフレームワークに指示します。つまり、選択四角形を移動し、コンストラクターまたはメソッド メニューを表示します。

マウス クリックをインターセプトするには、locationClickedメソッドをオーバーライドします。任意のアクションを実行し、戻りtrueます。ユーザーがクリックしたグリッドの位置がパラメーターとして渡されます。典型的なアクションには、タイルの反転、空の場所への入力などが含まれます。

場合によっては、マウス クリック後にユーザーに追加情報を求める必要があります。最も簡単な方法は、JOptionPane.

一般的な状況を考えてみましょう。ゲームでは、ユーザーが駒を選択します。ユーザーが駒を動かしたい場所を尋ねたいとします。別のマウス クリックを待つことができます。つまり、locationClickedメソッドはクリックの状態 (ピースの選択とターゲットの選択) を追跡する必要があります。または、すべての合法的なターゲットを列挙して呼び出すことができますJOptionPane.showOptionDialog.

ユーザーがキーを押すと、 のkeyPressedメソッドWorldが呼び出されます。デフォルトでは、そのメソッドは を返しますfalse。これは、デフォルトのキー アクションを開始するようにフレームワークに指示します。ユーザーがカーソルキーを押すと、選択四角形が移動します。ユーザーが Enter キーを押すと、コンストラクターまたはメソッドのメニューが表示されます。他のすべてのキーは無視されます。

キーストロークをインターセプトするには、keyPressedメソッドをオーバーライドします。java.awt.KeyStrokeこのメソッドは、クラスで使用されるのと同じ形式でエンコードされた現在の場所とキーストローク文字列を受け取ります。キーストローク文字列の例は、「INSERT」または「alt shift X」です。メソッドkeyPressedでキーストローク文字列をチェックする必要があります。文字列が傍受したいキーストロークと一致する場合は、必要なアクションを実行して を返しtrueます。false他のすべてのキーストロークに対して戻ります。falseカーソルキーとエンターキーを返すのは良い考えです。それ以外の場合、ワールドの標準アクションは無効になります。


ソース (16 ページ)

于 2014-03-28T14:23:10.677 に答える