Я преобразовал старую игру, написанную на python, в javascript (узел).Игра просто запускается в цикле while, пока не завершится определенное количество итераций.
runUntil(steps = 100000) {
var x = 0;
while (x < steps) {
this.conversation();
x++;
}
}
conversation() {
const roundPicture = this.getRandomPicture();
const conversationers = this.utils.getRandomTwo(this.network, this.Graph);
const chosen1 = conversationers[0];
const chosen2 = conversationers[1];
if (chosen1.name == "Player 0" && !chosen1.v.hasOwnProperty(roundPicture)) {
//Wait for user input
//..
//..
//..
//Use the given input in order to continue game
}
if (chosen2.name == "Player 0" && !chosen2.v.hasOwnProperty(roundPicture)) {
//Wait for user input
//..
//..
//..
//Use the given input in order to continue game
} else {
//do sth else
}
}
В некоторых случаях игра останавливается вДля того, чтобы получить пользовательский ввод, который требуется и влияет на результат игры.В моей реализации javascript я использовал readline-sync, чтобы приостановить игру и получить пользовательский ввод через командную строку.Теперь я создал приложение переднего плана для обслуживания игры в браузере с пользовательским интерфейсом и создал сервер с использованием Express для обработки API и запускаю игру всякий раз, когда пользователь нажимает кнопку start.
const express = require("express");
const http = require("http");
const socketIO = require("socket.io");
const Game = require("./Game");
const port = 4000;
const app = express();
const server = http.createServer(app);
//Create socket usin server instance
const io = socketIO(server);
io.on("connection", socket => {
console.log("user connected!");
socket.on("startGame", data => {
const nI = data.nI;
const pI = data.pI;
const noOfAgents = 20;
const noOfPlayers = 1;
const g = new Game(nI, pI, noOfAgents, noOfPlayers);
g.runUntil(1000);
});
socket.on("disconnect", () => console.log("user has disconnected"));
});
server.listen(port, () => console.log("Listenint on port " + port));
ОднакоЯ в данный момент застрял в этой точке.Я не уверен, как я могу приостановить игру, чтобы получить данные из внешнего интерфейса и использовать их соответственно.Все попытки, которые я делал до сих пор, не увенчались успехом.Я пытался использовать обещания, но это не помогло, потому что это не останавливало процесс игры, чтобы ждать ввода пользователя.