Реализация сервера WebSocket для игры на Javascript - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь реализовать простую игру на javascript и сервер WebSocket для игры.Мой вопрос о сервере WebSocket.

Код, который я реализовал, находится здесь.

class Game{
    constructor(){
        this.GRID_SIZE = 20;
        this.MAP_EDGE_RECTANGLE_COUNT = 1000;
    }

    init(){
        this.createMap();
        this.apple = [];
    }

    createMap(){
        this.map = [];

        // set map rows and columns
        for(var i = 0; i < this.MAP_EDGE_RECTANGLE_COUNT; i++) {
            this.map[i] = [];
            for(var j = 0; j < this.MAP_EDGE_RECTANGLE_COUNT; j++){
                var obj = new Object();
                obj.row = i;
                obj.column = j;
                this.map[i][j] = obj;
            }
        }

        // set walls
        for(var i = 0; i < this.MAP_EDGE_RECTANGLE_COUNT; i++){
            this.map[0][i].name = 'wall';
            this.map[i][0].name = 'wall';
            this.map[this.MAP_EDGE_RECTANGLE_COUNT -1][i].name = 'wall';
            this.map[i][this.MAP_EDGE_RECTANGLE_COUNT -1].name = 'wall';
        }

        // set foods
        for(var i = 0; i < 10 * this.MAP_EDGE_RECTANGLE_COUNT; i++){
            var index1 = Math.floor(Math.random() * this.MAP_EDGE_RECTANGLE_COUNT);
            var index2 = Math.floor(Math.random() * this.MAP_EDGE_RECTANGLE_COUNT);

            this.map[index1][index2].name = 'foods';
            this.map[index2][index1].name = 'foods';
        }
    }
}

const game = new Game();
game.init();



const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {

  console.log("a client connected:");

  console.log("CONNECTED");
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });

  var counter = 0;
  var interval = setInterval(function(){1
    console.log('sending message to client');
    ws.send('{"map:"' + game.map + '}');
  }, 1000 / 10);

  ws.on("close", function(ev) {
    clearInterval(interval);
    console.log('connection error with a client');
  });

});

Как видите, в коде есть объект карты, который хранит все состояния игровых сеток.И у меня есть интервал, чтобы передать текущее состояние карты всем клиентам.Но отправка всех картографических данных клиентам вызывает проблемы с качеством в моем игровом интерфейсе (проблема с отправкой коротких данных).Поэтому мне нужно отправить минимальное количество данных моему клиенту.

Теперь, каков механизм запуска этих игр и какой тип данных мне следует отправлять?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...