У меня есть:
- класс Java
Game.java
(содержит массив целых чисел, представляющих игровое поле и метод, который обновляет это поле) - сервлет
StartServlet
(создает новый экземпляр Game
, обновляет его 1 раз и отправляет ответ JSON с этим полем) и функция Javascript updateState()
(принимает ответ сервлета и вносит в него изменения в документе):
public class Game {
private int[][] field;
public Game(int size) {
//creates field of int[size][size] and randomly puts 1s and 0s inside
}
public void update() {
//updates field (1 or 0), depending on some rules
}
public String toString() {
//returns a String representation of the field array
}
public int[][] getField() {return field;}
}
и сервлет, который использует класс Game
:
public class StartServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
JSONArray jsonArray = new JSONArray();
Game game = new Game(15);
game.update();
for (int i=0; i<game.getField().length; i++) {
//transfer data from the game's field to JSON
}
response.getWriter().println(jsonArray.toString());
}
}
Спереди, когда нажимается кнопка, Javascriptпринимает массив JSON
, который возвращает StartSevlet
$(document).on("click", "#start-button", function () {
//update game's state every second
var timerId = setInterval(updateState, 1000);
//do it for 5 seconds
setTimeout(function() {
clearInterval(timerId);
alert( 'stop' );
}, 5000);
});
function updateState() {
getResponseField(drawFieldJSON);
}
function getResponseField(callback) {
//gets JSON array from the servlet, stores it in Javascript's array
callback(responseField);
}
function drawFieldJSON(responseField) {
//makes appropriate changes to document's divs, depending on the reponse array
}
Я хочу иметь возможность обновлять состояние игры в цикле в Javascript, что-то вроде этого:
var timerId = setInterval(updateState, 1000); //update game's state every second
setTimeout(function() { //do it for 5 seconds
clearInterval(timerId);
alert( 'стоп' );
}, 5000);
Однакоигра на самом деле не меняется, потому что это новый запрос к сервлету каждый раз, и каждый раз создается новый экземпляр Game
.Я не уверен, как изменить это, чтобы заставить это работать или если это вообще возможно.