[英]How do I make commands in a java game?
基本上,我想這樣做,以便當用戶在textfield / attack動物中鍵入內容時,它會執行Attack方法並以animal為參數。 因此,如果玩家鍵入/ attack foo,則執行player.attack(foo)。 我已經有執行聊天的方法,所以我知道哪個玩家正在聊天。 我只需要知道如何協調/ attack之后的內容,並將其作為player.attack()的參數,該參數將Player對象作為參數。 這些是我接收輸入的方法:
public void actionPerformed(ActionEvent textBox) {
String text = textField.getText();
player.chat(text);
}
在我的Gui班上,並且:
public void chat(String chat){
playerGui.printText(this.getName() + ": " + chat);
playerGui.textField.selectAll();
}
在播放器類中。 gui實例將傳遞到Player(),后者創建變量playerGui。
您必須對其進行調整以適合您希望用戶使用的語法,但是您可能需要更改actionPerformed方法以檢查用戶可以執行的不同操作,而不僅僅是聊天。
public void actionPerformed(ActionEvent textBox) {
String text = textField.getText();
String command = text.substring(0, text.indexOf(" "));
String args = text.substring(text.indexOf(" ") + 1);
switch (command) {
case "chat":
// Pass everything but the command
player.chat(args);
break;
case "/attack":
player.attack(args);
break;
default:
// Handle bad user input
}
}
您仍然必須驗證是否為每個命令獲取了正確的參數,並且我沒有對字符串指針采取任何措施來防止空指針或越界,但是希望這可以幫助您入門。
"/attack arg1 arg2 arg3".split("\\\\s+")
將為您提供一個等效於new String[]{"/attack", "arg1", "arg2", "arg3"}
,您可以使用無論您想要什么。
對於調用它,如果確實需要,您可以將其反映到對象中(有關更多詳細信息,請參見Class.getMethod ),但是如果可以的話,最好避免這樣做。
Player
對象的每個實例都應該有自己的名稱,即唯一標識它的String
。 將每個敵方Player
存儲在Map<String, Player>
,然后在從輸入中解析其目標名稱后使用它來查找目標目標( @mange解釋了如何做)。
Player
類:
public class Player {
public final String name;
public Player(String uniqueName) {
name = uniqueName;
}
//additional code
}
在一個有意義的類中,聲明並初始化Map
以從以下位置查找Player
:
private static Map<String, Player> players = new HashMap<String, Player>();
在整個游戲中,引入Player
,將其添加到Map
:
Player newPlayer = new Player(someUniqueName);
players.put(someUniqueName, newPlayer);
發出攻擊命令后,解析名稱並使用它們查找每個受攻擊的Player
:
public void attackNamedPlayers(String[] names) {
for (String name : names) {
Player attackedPlayer = players.get(name); //look up enemy Player by name
myPlayer.attack(attackedPlayer); //attack enemy Player
}
}
不要忘記在Player
死亡/離開時將其從Map
上移除:
players.remove(deadPlayer.name);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.