我正在为机器人游戏做一些预编码。
我用JavaScript编写了一个简短的程序来跟踪游戏中的转弯和玩家。 我可以更新转弯,返回轮到没问题。
我想使用数组来保存有关玩家的信息。我现在正在学习,所以现在我正在使用只有2个元素的数组。
名称是player1_data
,player2_data
等。我想找出数组元素0的内容,所以它变成了player1_data [0],这很好。
如果我输入这一切都很好,我会把我的元素归还给我。
但是,如果我汇编数组信息,通过“播放器”+ current_player +“_ data [”+ element +“]”然后它看起来很好,但根本不起作用。
它只是一串字符,而不是我手动输入的实际数组元素请求!
有什么问题?
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<button class="button" onclick="vardisplay(), updateturn() ">SHOW VARIABLES</button>
<p id="para1">false</p>
<p id="para2">2</p>
<p id="para3">2</p>
<p id="para4">2</p>
<p id="para5">2</p>
<p id="para6">2</p>
<p id="para7">2</p>
<p id="para8">2</p>
<script>
var ifselect = 0
var current_turn = 0
var last_turn = 0
var players_in_game = 5
var current_player = 1
var current_robot = 123
var player_id = "player" + current_player + "_data";
var arrayselector = 0
var player_array_display = player_id + "[" + arrayselector + "]";
var player1_data = ["dave", current_robot];
var player2_data = ["kim", current_robot];
var player3_data = ["nigel", current_robot];
var player4_data = ["bob", current_robot];
function updateturn() {
if (current_player > players_in_game - 1) {
current_player = 1
current_turn = current_turn + 1
} else {
current_player = current_player + 1;
player_id = "player" + current_player + "_data";
player_array_display = player_id + "[" + arrayselector + "]";
}
}
function vardisplay() {
document.getElementById("para1").innerHTML = "random stuff";
document.getElementById("para2").innerHTML = "players_in_game: " + players_in_game;
document.getElementById("para3").innerHTML = "current_turn: " + current_turn;
document.getElementById("para4").innerHTML = "current_player: " + current_player;
document.getElementById("para5").innerHTML = "current_robot: " + current_robot;
document.getElementById("para6").innerHTML = "player_id: " + player_id;
document.getElementById("para7").innerHTML = "player_array_display: " + player_array_display;
document.getElementById("para8").innerHTML = player2_data[0];
}
</script>
</body>
</html>
答案 0 :(得分:2)
我想使用数组来保存有关玩家的信息。我现在正在学习,所以现在我使用只有2个元素的数组。名称是player1_data,player2_data等。
不要这样做。不使用基于命名约定的类似命名的变量进行分组,而是使用语言提供的集合对值进行分组。
var player_data_for_all_players = [player1_data, player2_data];
允许你这样做
player_data_for_all_players[player_index][array_selector]
或
var player_data_by_name = {
'dave': current_robot,
...
};
允许您使用(唯一)值识别玩家,这些值在调试控制台中更加不言自明。
答案 1 :(得分:0)
你需要一个数组数组。像这样:
var players_data = [];
players_data[1] = ["dave",current_robot];
players_data[2] = ["kim",current_robot];
players_data[3] = ["nigel",current_robot];
players_data[4] = ["bob",current_robot];
现在,如果您想显示第二个玩家的信息,您只需要这样做:
var name = players_data[2][0]
但是使用一个对象数组来获得更“可读”的代码应该更好:
var players_data = [];
players_data[1] = {
name : 'dave',
robot : current_robot
};
// Access to the name of the first player
var name = players_data[1].name