Как реализовать сеть для игры в терминале? Есть два игрока. Действие каждого игрока ограничено одной командой в терминале. То есть — пока игрок1 вводит команду, игроку2 блокируется клавиатура и ввод команд. После каждого нажатия Enter отправляются данные другому игроку и так игроки обмениваются данными, но как это сделать? Например, мне нужно чтобы в терминал игроки вводили хост и порт(то есть игра по договорённости), и таким образом подключались к друг другу.
Всё это нужно реализовать для игры крестики-нолики, которая полностью готовая, но только с режимом "на одной клавиатуре". Всё работает в терминале, без гуя, только символами и командами. Написано, как уже понятно, на Python.
Для того чтобы разобраться я прочитал данную статью https://www.ibm.com/developerworks/ru/library/l-py... , но понял не совсем много. Я не знаю как реализовать проверку и подключение игроков, так же, какие данные нужно отправлять игрокам друг другу. В данном случае данные — один единственный файл(модуль) — картинка из символов, с переменными, куда и записываются данные.
UPD. Как я это всё вижу:
— два адреса подключаются к одному порту
— одному из них накладывается метод, который блокирует клавиатуру
— игрок1, у которого не заблокирована клавиатура, вводит команду и отправляет все файлы игроку2
— игроку1 накладывается метод, который блокирует клавиатуру
— игрок2 получает все нужные файлы игры и ему даётся возможность вводить команды
— ...
— *после победы одной из сторон, игра замораживается, всем игрокам даётся возможность вводить команды
*Заморозка игры уже реализована. Ввод определенных команд после победы тоже есть.
То есть в чём суть — игрок после команды просто передаёт все свои файлы другому игроку и у него блокируется клавиатура и так по кругу. Как это реализовать, я не знаю.

21 Авг 2019 в 06:41
1 035 +1
0
Ответы
1

Для реализации сетевой игры в терминале с двумя игроками, вам понадобится использовать сетевое взаимодействие с помощью сокетов в Python.

Вам нужно будет создать сервер, который будет принимать подключения от двух игроков, и клиенты, которые будут подключаться к серверу. Каждому игроку будет назначен свой номер (например, игрок 1 и игрок 2).

После подключения обоих игроков к серверу, они смогут обмениваться данными, в вашем случае файлом с игровым полем. Каждый игрок будет отправлять свои ходы (например, координаты для крестиков-ноликов) на сервер, который будет передавать их другому игроку.

Примерно так будет выглядеть структура вашего кода:

Создание сервера, который будет принимать подключения от игроков.Создание клиентов, которые будут подключаться к серверу.Отправка данных (например, координаты хода) от клиента на сервер.Передача данных от сервера одному клиенту другому.

Вы можете использовать стандартный модуль socket в Python для создания сервера и клиентов. Вам также может понадобиться использовать потоки (threads) для обработки ввода и вывода данных от игроков.

Вот примерный код для создания сервера:

import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 12345))
server.listen(2)
player1, address1 = server.accept()
player2, address2 = server.accept()
while True:
data = player1.recv(1024)
player2.send(data)
data = player2.recv(1024)
player1.send(data)

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

Надеюсь, это поможет вам начать реализацию вашей сетевой игры в терминале. Удачи!

20 Апр в 13:14
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 94 630 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир