ユーザーがコマンドupを入力できる Java ゲームを作成していleftます。クラス内で、ユーザーが開始ボタンを押した後、 of でユーザーからコマンドを受け取ります。次に、ループを使用してユーザーからのすべての入力を調べ、プレイヤーが移動する必要がある距離と量の多次元配列内にターゲットを作成します。最後に、メイン ゲーム ループ内で呼び出される関数があります。この関数内で、ターゲットの多次元配列をループして、rightdownPlayerArrayListJTextFieldforxyxyupdatePosition()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を格納するために使用されます。最後に、ターゲットとを設定するメソッドを呼び出します。xymoveChar();xy
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);
}
}
}
}