Познаем компьютер вместе

Способы

Существует два метода, с помощью которых вы могли бы сыграть с другими людьми.

  • Локальная сеть.
  • Интернет.

По своей сути, они очень похожи и не отличаются по многим параметрам, но у каждого есть свои нюансы, о которых необходимо помнить. Например, вы можете долго и упорно создавать свою карту, а потом сделать её доступной для локальной игры. Не забудьте сделать копию, а то будет очень обидно, когда другие игроки разрушат то, что вы кропотливо создавали.

Во всяком случае, вам понадобятся некоторые вещи, без которых не получится сыграть с другими людьми. Это интернет, клиент "Майнкрафта", "прямые" руки. Также необходимо помнить, что вам придется вносить изменения в настройки компьютера, так что будьте осторожны, вся ответственность за приведение ПК в нерабочее состояние ляжет на ваши плечи. А теперь давайте разбираться, как поиграть в "Майнкрафт" с друзьями.

Локальная сеть

Представим себе, что имеется пара компьютеров без выхода в интернет, и они расположены в одной комнате. Более того, между ними существует и настроена локальная сеть. В таком случае можно сыграть по сети в "Майнкрафт". 2 друга должны установить одинаковую версию клиента на оба компьютера. Теперь последовательность действий достаточно проста:

  • Один из игроков должен создать одиночную игру с желаемыми настройками.
  • После этого ему необходимо нажать ESC и открыть игру для мультиплеера.
  • В чате появится сообщение о запуске сервера с определённым IP-адресом. Его-то и нужно запомнить.
  • На втором компьютере также запускается клиент. Только другой игрок входит уже в многопользовательский режим. Если игра не находит автоматически сервер, то его нужно добавить, вписав в строку поиска IP, который запомнили чуть раньше.
  • Таким образом решается вопрос, как играть вдвоем в "Майнкрафте" по локальной сети.

    Мнимая сеть

    Если же ваши компьютеры разделены огромным расстоянием и соединены исключительно Интернетом, вы также можете поиграть на пару. Существуют разные способы, как играть вдвоем в "Майнкрафте" через Интернет, поэтому сначала мы рассмотрим вариант, который не потребует усиленной настройки компьютера.

    Для этого вам потребуется скачать и установить такую утилиту, как Hamachi. Оба друга должны установить ее и зарегистрироваться, после чего один из них создаёт в программе сервер-комнату, к которой должен подключиться его товарищ. Таким методом создаётся виртуальная частная сеть - аналог домашней локальной сети, только организованной через Интернет. Догадливый пользователь, наверное, уже понял, что дальнейшие действия аналогичны предыдущему параграфу. Существует только одно "но". Если ваши компьютеры не видят друг друга, то добавьте Hamachi в исключения брандмауэра и антивируса.

    Интернет

    Если вы не хотите лишний раз ничего мудрить? Теоретически, если вы скачаете одинаковую версию клиента с одного сайта и совершите все те же манипуляции, что и в первом случае, то сможете подключиться к другу. С другой стороны, вы можете воспользоваться "Майнкрафта". Скачиваете его на любом сайте, специализирующемся на этой игре, устанавливаете и запускаете. После этого вам останется только разослать свой адрес людям, с которыми вы хотели бы сыграть вместе. Ничего сложного в этом нет. Так что удачи вам в освоении кубического мира и попытках с сетевой игрой. И главное, если что-то не получается, не унывайте и пробуйте снова и снова, тогда у вас непременно получится.

    Когда вы научились хорошо играть в MineCraft, освоили все азы игры, познали ее внутренний мир, можно перейти к онлайн игре, в которую можно играть как с людьми из других городов на интернет серверах, так и с друзьями по локальной сети. В данной статье я расскажу вам, как играть в Майнкрафт по локальной сети и в интернете.

    Как играть в майнкрафт в интернете?

    Играть в MineCraft по интернету можно на специально созданных для этого серверах, их вы сможете найти на различных онлайн мониторингах и в рейтингах. Чтобы начать игру нам потребуется сама игра (желательно последней версии), мощный компьютер (иначе игра будет тормозить), высокоскоростной доступ в интернет (канала в 1мб/с вполне будет достаточно) и адрес игрового сервера. Итак, начнем. Запустите игру, войдите в нее под своим логином, после чего выберите пункт «Сетевая игра» (вторая кнопка). Перед вами появится окошко подключения, в первую строку вводим адрес сервера, на котором будем играть, после чего нажимаем на кнопку «Подключиться», в английской версии игры Майкрафт со скинами http://minecraft-mods.pro/skins/ «Connect» и попадаем на сервер. Попав на сервер, вы обнаружите, что не можете сделать ни одного действия, так получилось, потому что вы не зарегистрированы на данной игровой площадке, делается это довольно просто, всего лишь в несколько шагов. Для регистрации на сервере нажимаем английскую букву «T», у нас откроется чат, вводим в нем следующую команду «/register pass», где слово «pass» меняем на собственный пароль, то есть, у меня это выглядело вот так – «/register trash784». Спустя пару секунд сервер выдаст в чате подтверждение вашей регистрации и позволит вам совершить вход в игру, для этого введите команду «/login pass», где слово «pass» меняем на свой пароль. Будет выглядеть примерно так «/login crosh». После регистрации и входа на сервер вы сможете начать играть, выполнять различные действия и заниматься любыми делами, начиная со строительства зданий и земледелия, заканчивая их разрушением и путешествиями по игровому миру.

    Как играть в майнкрафт по локальной сети?

    Играть в MineCraft можно и по локальной сети с друзьями, например, это довольно актуально для игры на интерес или просто, когда есть проблемы с интернетом (например, технические работы). Для игры по локальной сети нам потребуется несколько компьютеров (от двух и более), интернет-кабель порядочной длины, если компьютеров много, то еще и маршрутизатор, либо точка Wi-Fi доступа. Объединяем все компьютеры проводом, после чего отправляемся в настройки сети. В windows 7 это делается следующим образом: Пуск -> Центр управления сетями и общим доступом -> Изменение параметров адаптера. Находим название собственной сети, открываем свойства, вкладка «Сеть», сначала выбираем настройку TCP/IPv6, открывается небольшое окно, снимаем галочку, сохраняем, открываем настройку TCP/IPv4, идем следующим путем: Свойства -> Использовать следующий IP адрес. Вводим следующие параметры:

  • IP-адрес: 192.168.0.1
  • Маска подсети: 255.255.255.0
  • Основной шлюз: 192.168.0.2
  • Предпочитаемый DNS-сервер: 192.168.0.2
  • После нажимаем кнопку сохранить, «ок» и закрываем настройки. Настройку сервера смотрите ниже, после настройки локальной сети для windows xp. Параметры для Windows XP: Для начала открываем Панель Управления и идем по следующему пути: Панель Управления -> Сетевые подключения -> Подключения по локальной сети. Открываем свойства, вкладку «Общие», открываем TCP/IP, откроется окно со свойствами, выбираем пункт «Использовать следующий IP адрес», вводим параметры:

  • IP-адрес: 192.168.0.2
  • Маска подсети: 255.255.255.0
  • Основной шлюз: 192.168.0.1
  • Открываем вкладку «Использовать следующий DNS сервер» и вводим параметры:

  • Предпочитаемый DNS-сервер: 192.168.0.1
  • Сохраняем изменения и закрываем настройки. Создание и настройка сервера. Когда мы настроили локальную сеть, можно переходить к созданию и установке самого MineCraft сервера, создать который не так уж и сложно, делается это следующим образом:

  • Скачайте любой игровой сервер, подходящий под вашу версию игры, сохраните его в папку.
  • Откройте файл «server.properties», найдите строку «server-ip=…» и удалите все, что написано после знака «=», так, чтобы у вас осталась строка с пустым значением «server-ip=».
  • Находим в этом же файле строчку «online-mode=false», удаляем «False», на его место вставляем «true».
  • Сервер готов, теперь его можно запустить. Для начала игры откройте MineCraft и в строке с адресом сервера введите: 192.168.0.1:25565 (для Windows 7) или же 192.168.0.2:25565 (для Windows XP).
  • Второй способ, подходящий для всех типов операционных систем, в строке «server-ip=» ввести значение «localhost», сохранить изменения, открыть игру и в строке с IP адресом написать localhost после чего нажать на подключение. Но, данный метод работает не на всех компьютерах и далеко не у всех (из-за многих тонкостей и особенностей), поэтому проще использовать первый вариант. Вот и все, такими простыми и быстрыми шагами вы сможете настроить Майнкрафт для игры в интернете и со своими любимыми друзьями по локальной сети.

    Для начала установите зависимости. Создайте папку проекта, перейдите в неё и запустите следующий код:

    Npm init npm install --save express socket.io

    Для быстрой настройки сервера целесообразно использовать фреймворк Express , а для обработки веб-сокетов на сервере - пакет socket.io . В файл server.js поместите следующий код:

    // Зависимости var express = require("express"); var http = require("http"); var path = require("path"); var socketIO = require("socket.io"); var app = express(); var server = http.Server(app); var io = socketIO(server); app.set("port", 5000); app.use("/static", express.static(__dirname + "/static")); // Маршруты app.get("/", function(request, response) { response.sendFile(path.join(__dirname, "index.html")); }); // Запуск сервера server.listen(5000, function() { console.log("Запускаю сервер на порте 5000"); });

    Это довольно типичный код для сервера на связке Node.js + Express. Он устанавливает зависимости и основные маршруты сервера. Для этого демонстрационного приложения используется только один файл index.html и папка static . Создайте их в корневой папке проекта. Файл index.html довольно простой:

    Наша многопользовательская игра canvas { width: 800px; height: 600px; border: 5px solid black; }

    Ваш пользовательский интерфейс может содержать куда больше элементов, поэтому для более крупных проектов CSS-стили лучше помещать в отдельный файл. Для простоты я оставлю CSS в коде HTML. Обратите внимание, что я включил в код скрипт socket.io.js . Он автоматически заработает в рамках пакета socket.io при запуске сервера.

    Теперь нужно настроить веб-сокеты на сервере. В конец файла server.js добавьте:

    // Обработчик веб-сокетов io.on("connection", function(socket) { });

    Пока что в игре нет никаких функций, поэтому в обработчик веб-сокетов ничего добавлять не нужно. Для тестирования допишите следующие строки в конец файла server.js:

    SetInterval(function() { io.sockets.emit("message", "hi!"); }, 1000);

    Эта функция будет отправлять сообщение с именем message и содержимым hi всем подключенным веб-сокетам. Позже не забудьте удалить эту часть кода, так как она предназначена только для тестирования.

    В папке static создайте файл с именем game.js . Вы можете написать короткую функцию для регистрации сообщений от сервера, чтобы убедиться в том, что вы их получаете. В файле static/game.js пропишите следующее:

    Var socket = io(); socket.on("message", function(data) { console.log(data); });

    Запустите сервер командой node server.js и в любом браузере перейдите по ссылке http://localhost:5000 . Если вы откроете окно разработчика (нажать правую кнопку мыши → Проверить (Inspect)), то увидите, как каждую секунду приходит новое сообщение:

    Как правило, socket.emit(name, data) отправляет сообщение с заданным именем и данными серверу, если запрос идет от клиента, и наоборот, если запрос идет от сервера. Для получения сообщений по конкретному имени используется следующая команда:

    Socket.on("name", function(data) { // аргумент data может содержать любые отправляемые данные });

    С помощью socket.emit() вы можете отправить любое сообщение. Можно также передавать объекты JSON, что для нас очень удобно. Это позволяет мгновенно передавать информацию в игре от сервера к клиенту и обратно, что является основой многопользовательской игры.

    Теперь пусть клиент отправляет некоторые состояния клавиатуры. Поместите следующий код в конец файла static/game.js:

    Var movement = { up: false, down: false, left: false, right: false } document.addEventListener("keydown", function(event) { switch (event.keyCode) { case 65: // A movement.left = true; break; case 87: // W movement.up = true; break; case 68: // D movement.right = true; break; case 83: // S movement.down = true; break; } }); document.addEventListener("keyup", function(event) { switch (event.keyCode) { case 65: // A movement.left = false; break; case 87: // W movement.up = false; break; case 68: // D movement.right = false; break; case 83: // S movement.down = false; break; } });

    Это стандартный код, который позволяет отслеживать нажатие клавиш W , A , S , D . После этого добавьте сообщение, которое оповестит сервер о том, что в игре появился новый участник, и создайте цикл, который будет сообщать серверу о нажатии клавиш.

    Socket.emit("new player"); setInterval(function() { socket.emit("movement", movement); }, 1000 / 60);

    Эта часть кода позволит отправлять на сервер информацию о состоянии клавиатуры клиента 60 раз в секунду. Теперь необходимо прописать эту ситуацию со стороны сервера. В конец файла server.js добавьте следующие строки:

    Var players = {}; io.on("connection", function(socket) { socket.on("new player", function() { players = { x: 300, y: 300 }; }); socket.on("movement", function(data) { var player = players || {}; if (data.left) { player.x -= 5; } if (data.up) { player.y -= 5; } if (data.right) { player.x += 5; } if (data.down) { player.y += 5; } }); }); setInterval(function() { io.sockets.emit("state", players); }, 1000 / 60);

    Давайте разберёмся с этим кодом. Вы будете хранить информацию о всех подключенных пользователях в виде объектов JSON. Так как у каждого подключённого к серверу сокета есть уникальный id, клавиша будет представлять собой id сокета подключённого игрока. Значение же будет другим объектом JSON, содержащим координаты x и y .

    Когда сервер получит сообщение о том, что присоединился новый игрок, он добавит новый вход в объект игроков при помощи id сокета, который будет в этом сообщении. Когда сервер получит сообщение о движении, то обновит информацию об игроке, который связан с этим сокетом, если он существует.

    io.sockets.emit() - это запрос, который будет отправлять сообщение и данные ВСЕМ подключённым сокетам. Сервер будет отправлять это состояние всем подключённым клиентам 60 раз в секунду.

    На данном этапе клиент ещё ничего не делает с этой информацией, поэтому добавьте со стороны клиента обработчик, который будет отображать данные от сервера в Canvas .

    Var canvas = document.getElementById("canvas"); canvas.width = 800; canvas.height = 600; var context = canvas.getContext("2d"); socket.on("state", function(players) { context.clearRect(0, 0, 800, 600); context.fillStyle = "green"; for (var id in players) { var player = players; context.beginPath(); context.arc(player.x, player.y, 10, 0, 2 * Math.PI); context.fill(); } });

    Этот код обращается к id Canvas (#canvas) и рисует там. Каждый раз, когда от сервера будет поступать сообщение о состоянии, данные в Canvas будут обнуляться, и на нём в виде зеленых кружков будут заново отображаться все игроки.

    Теперь каждый новый игрок сможет видеть состояние всех подключенных игроков на Canvas . Запустите сервер командой node server.js и откройте в браузере два окна. При переходе по ссылке http://localhost:5000 вы должны будете увидеть нечто похожее:

    Вот и всё! Если у вас возникли проблемы, посмотрите архив с исходным кодом .

    Некоторые тонкости

    Когда будете разрабатывать более функциональную игру, целесообразно разделить код на несколько файлов.

    Такие многопользовательские игры - отличный пример архитектуры MVC (модель-представление-контроллер). Вся логическая часть должна обрабатываться на сервере, а всё, что должен делать клиент - это отправлять входные пользовательские данные на сервер и отображать информацию, которую получает от сервера.

    Однако в этом демо-проекте есть несколько недостатков. Обновление игры связано со слушателем сокета. Если бы я хотел повлиять на ход игры, то мог бы написать в консоли браузера следующее:

    While (true) { socket.emit("movement", { left: true }); }

    Теперь данные о движении будут отправляться на сервер в зависимости от характеристик компьютера более 60 раз в секунду. Это приведёт к тому, что игрок будет передвигаться невероятно быстро. Так мы переходим к концепции определения полномочного сервера.

    Ни на каком этапе клиент не должен контролировать какие-либо данные на сервере. Например, никогда не нужно размещать на сервере код, который позволит клиенту определять своё положение/здоровье на основе данных, которые передаются через сокет, так как пользователь сможет легко подделать сообщение, исходящее из сокета, как показано выше.

    Когда я создавал свою первую многопользовательскую игру, я написал код так, что игрок мог стрелять тогда, когда отправлялось сообщение о стрельбе, которое со стороны клиента было связано с нажатием кнопки мыши. Умелый игрок мог воспользоваться этим, вставив строчку на JavaScript, очень похожую на ту, что упоминалась выше, чтобы заполучить почти неограниченную скорость стрельбы.

    Лучшая аналогия, которую я могу привести, заключается в том, что клиенты должны посылать на сервер только информацию о своих намерениях, которые затем будут обрабатываться и использоваться для изменения состояния игроков, если они валидны.

    В идеале циклы обновлений как у клиента, так и на сервере не должны зависеть от сокетов. Попытайтесь сделать так, чтобы обновления игры находились за пределами блока socket.on() . В противном случае вы можете получить много странных нелогичных действий из-за того, что обновление игры будет связано с обновлением сокета.

    Кроме того, старайтесь избегать такого кода:

    SetInterval(function() { // код... player.x += 5; // код... }, 1000 / 60);

    В этом отрезке кода обновление координаты х для игрока связано с частотой смены кадров в игре. SetInterval() не всегда гарантирует соблюдение интервала, вместо этого напишите нечто подобное:

    Var lastUpdateTime = (new Date()).getTime(); setInterval(function() { // код... var currentTime = (new Date()).getTime(); var timeDifference = currentTime - lastUpdateTime; player.x += 5 * timeDifference; lastUpdateTime = currentTime; }, 1000 / 60);

    Это не так изящно, зато обеспечит более плавную и последовательную работу. Усложните демо-проект и попробуйте сделать так, чтобы обновление осуществлялось согласно времени, а не частоте смены кадров. Если не захотите на этом останавливаться, попытайтесь создать на сервере физический движок, который будет управлять движениями игроков.

    Также можно сделать так, чтобы из игры удалялись отключенные игроки. Когда сокет отключается, автоматически отправляется сообщение о разъединении. Это можно прописать так:

    Io.on("connection", function(socket) { // обработчик событий... socket.on("disconnect", function() { // удаляем отключившегося игрока }); }); ,

    Навигация по статье:

    1. Введение. Основные понятия организации многопользовательских игр.

    Как мы все знаем, для многопользовательской игры мы должны быть подключены к локальной сети или интернету. За счет которых клиент игры получает данные от сервера или от других игроков. Данные могут содержать информацию различного рода: позиция игрока, смена инвентаря, текст в чате, действия игроков и многое другое. Обычно данные отправляются "пачками", т.е. берутся определенные параметры (позиция игрока, угол поворота, выбранное оружие и т.д.) и располагаются в массиве в определенной последовательности, после чего отправляется весь массив. Это позволяет уменьшить пинг между игроками, т.к. частая отправка маленьких пакетов данных намного медленней чем редкая отправка массива данных. Для организации обмена данными между клиентами в основном используются две схемы: клиент-сервер, клиент-клиент.

    ! Клиент-сервер - в этой схеме создается сервер игры, к которому подключаются клиенты. Главным выступает сервер, клиенты только отправляют ему данные и получают их, связи между клиентами нет. При использовании данной схемы у сервера появляется возможность перед отправкой данных всем игрокам откорректировать данные. Данная схема является наиболее распространенной, т.к. снимает нагрузку с клиента, переводя всю работу по рассылке данных на сервер.

    Пример: к серверу подключено 10 игроков. Игрок 1 отправил серверу информацию, после чего сервер обработал ее и отправил эту информацию остальным 9-и игрокам.

    ! Клиент-клиент - один из клиентов запускает игру, после чего остальные игроки подключаются к нему. Происходит обмен данными между клиентами и они узнают информацию друг о друге. В данной схеме каждый клиент отправляет данные остальным сам. Данная схема используется редко, т.к. дает неоправданную нагрузку на клиент игры.

    Пример: игрок 1 запускает игру, остальные к нему подключаются. С помощью игрока 1 все клиенты узнают друг о друге. После чего каждый клиент отправляет остальным полезную игровую информацию, принимая при этом данные и от остальных.

    Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
    ПОДЕЛИТЬСЯ:
    Познаем компьютер вместе