ユーザーがコマンドup
を入力できる Java ゲームを作成していleft
ます。クラス内で、ユーザーが開始ボタンを押した後、 of でユーザーからコマンドを受け取ります。次に、ループを使用してユーザーからのすべての入力を調べ、プレイヤーが移動する必要がある距離と量の多次元配列内にターゲットを作成します。最後に、メイン ゲーム ループ内で呼び出される関数があります。この関数内で、ターゲットの多次元配列をループして、right
down
Player
ArrayList
JTextField
for
x
y
x
y
updatePosition()
if
目標に到達したかどうかを確認するステートメント。ただし、このメソッドが実行され、ユーザーがコマンドを入力したup
場合right
、たとえば、キャラクターは斜め上に移動します。ユーザーが指定した方向にキャラクターを移動させ、次々と実行する方法が必要です。
コードは次のとおりです。
moveSpeed = 1;
private double moveAmt = 20;
private Double[][] targetCoordinates = null;
private ArrayList<JTextField> userInputTextFields = new ArrayList<JTextField>();
ArrayList
以下のメソッドを使用して、ユーザーがコマンドを入力したを取得JTextFields
し、ローカルに保存しますArrayList
。また、ユーザーがコマンドを入力しArray
た量のサイズで をインスタンス化します。この配列は、キャラクターのとのターゲットJTextFields
を格納するために使用されます。最後に、ターゲットとを設定するメソッドを呼び出します。x
y
moveChar();
x
y
public void getInputText(ArrayList<JTextField> textFields){
this.userInputTextFields = textFields;
targetCoordinates = new Double[userInputTextFields.size()][2];
moveChar();
}
このメソッドは、ユーザーが入力したコマンドが配列内にx
およびy
ターゲットを設定したかどうかをチェックしますtargetCoordinates
。
private void moveChar(){
for (int i = 0; i < userInputTextFields.size(); i++) {
if(userInputTextFields.get(i).getText().equals("up")){
targetCoordinates[i][0] = x;
targetCoordinates[i][1] = y - moveAmt;
} else if(userInputTextFields.get(i).getText().equals("down")){
targetCoordinates[i][0] = x;
targetCoordinates[i][1] = y + moveAmt;
} else if(userInputTextFields.get(i).getText().equals("left")){
targetCoordinates[i][0] = x - moveAmt;
targetCoordinates[i][1] = y;
} else if(userInputTextFields.get(i).getText().equals("right")){
targetCoordinates[i][0] = x + moveAmt;
targetCoordinates[i][1] = y;
}
}
}
最後に、これはメイン ゲーム ループ内で呼び出されるメソッドです。targetCoordinates
配列を調べて、ターゲットが満たされているかどうかを確認します。x
そうでない場合は、それに応じて文字とy
位置を増減します。
public void updatePosition(){
if(targetCoordinates != null){
for (int i = 0; i < targetCoordinates.length; i++) {
if(y >= targetCoordinates[i][1]) {
moveCharacter(x, y - moveSpeed);
} else if(y < targetCoordinates[i][1]) {
moveCharacter(x, y + moveSpeed);
} else if(x > targetCoordinates[i][0]) {
moveCharacter(x - moveSpeed, y);
} else if(x <= targetCoordinates[i][0]) {
moveCharacter(x + moveSpeed, y);
}
}
}
}