Делаем Джойстик Из Windows Phone



Немного предыстории.



Делаем джойстик из Windows Phone

Однажды вечером мой сын подошел ко мне и сказал, что хочет поиграть в Марио.

Летом на даче у бабушки он любил «рубиться» в дождливую погоду.

А за окном просто дождь.

Не долго думая, я скачал первый 8-битный эмулятор консоли и игру для него.

Однако оказалось, что удовольствие от игры на клавиатуре было совсем не то.

Идти покупать джойстик было уже поздно.

И тогда я подумал, что смогу обойтись без этого.

У нас под рукой была старенькая Nokia Lumia; его размер и форма примерно соответствовали нашим потребностям.

Было решено написать джойстик.

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

Я решил пойти по пути наименьшего (с моей точки зрения) сопротивления.

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

Нажатия кнопок можно эмулировать с помощью старого доброго WINAPI. Последней идеей было клиент-серверное приложение.

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

Связь осуществляется через сокеты.

Все кажется простым.

Давайте начнем это делать.



Серверная часть

Мы разместили на форме текстовое поле с тем же именем textBox. В нем мы покажем, что происходит с телефона.



Делаем джойстик из Windows Phone

Начнем работать с сокетами.

Первым делом соединяем их:

  
  
  
   

using System.Net; using System.Net.Sockets;

Создаем сокет и буфер, в который все будет поступать:

public partial class ServerForm : Form { private Socket _serverSocket, _clientSocket; private byte[] _buffer;

Мы пишем функцию, которая запускает наш сервер.



private void StartServer() { try { _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _serverSocket.Bind(new IPEndPoint(IPAddress.Any, 3333)); _serverSocket.Listen(0); _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null); } catch (Exception ex) { MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); } }

И соответственно, начинаем с самого начала.



public ServerForm() { InitializeComponent();

Теги: #C++ #джойстик #программирование #.

NET #C++

Вместе с данным постом часто просматривают: