1.- Creamos un nuevo archivo en SFML
2.- Lo rellenamos con el siguiente código.
Main.cpp
#include <SFML\Graphics.hpp>
#include <SFML\Network.hpp>
#include <iostream>
#include <string>
#define TILE_SIZE 40.f
using namespace std;
int main()
{
//Establesco la conexion
sf::TcpSocket socket;
string entradaConsola;
cin >> entradaConsola;
if (entradaConsola == "host")
{
sf::TcpListener escucha;
escucha.listen(45000);
cout << "Esperando la conexion..." << endl;
if (escucha.accept(socket) != sf::Socket::Done)
{
return -1;
}
}
else
{
//en la segunda pantalla tendremos que introducir la IP en este caso de manera local seria 127.0.0.1
cout << "Intentando conectar..." << endl;
//El tiempo de salida se establece en 10 segundos. si nada sucede aborta
if (socket.connect(entradaConsola, 45000, sf::seconds(10)) != sf::Socket::Done)
{
//No pudo conectar por alguna razon y aborta
return -1;
}
}
//Creo mi ventana y ajustamos la escena para este proyecto
sf::RenderWindow window(sf::VideoMode(640, 480), "Redes en SFML");
window.setFramerateLimit(60);
socket.setBlocking(false);
sf::Vector2f tamFigura(TILE_SIZE, TILE_SIZE);
sf::RectangleShape figuraLocal(tamFigura);
sf::RectangleShape figuraRemota(tamFigura);
//GameLoop
while (window.isOpen())
{
//Eventos
sf::Vector2i direccion;
sf::Event event;
//Se manejan los eventos
while (window.pollEvent(event))
{
//Creo una sentencia switch para controlar muchos eventos
switch (event.type)
{
//Cierra la ventana
case sf :: Event::EventType::Closed:
window.close();
break;
//Moveremos los cubos cada quien con su direccion
case sf::Event::KeyPressed:
if (event.key.code == sf::Keyboard::W)
{
direccion.y += -1;
}
else if (event.key.code == sf::Keyboard::A)
{
direccion.x += -1;
}
else if (event.key.code == sf::Keyboard::S)
{
direccion.y += 1;
}
else if (event.key.code == sf::Keyboard::D)
{
direccion.x += 1;
}
default:
break;
}
}
//Checa los nuevos paquetes
sf::Packet paquete;
if (socket.receive(paquete) == sf::Socket::Done)
{
sf::Vector2f posicion;
paquete >> posicion.x >> posicion.y;
figuraRemota.setPosition(posicion);
}
//Actualiza el frame
if (direccion.x != 0 || direccion.y != 0)
{
figuraLocal.move(direccion.x * TILE_SIZE, direccion.y * TILE_SIZE);
sf::Packet paquete;
paquete << figuraLocal.getPosition().x << figuraLocal.getPosition().y;
if (socket.send(paquete) != sf::Socket::Done)
{
//Se manejan los errores de posible salida del otro jugador
return -1;
}
}
//Renderizamos
window.clear();
window.draw(figuraLocal);
window.draw(figuraRemota);
window.display();
}
return 0;
}
3.- Una vez hecho eso abrimos otro nuevo documento y copiamos el código tal como esta.
4.- Ejecutamos uno de ellos
7.- La primera vez te saldrá que si permites que se establezca la conexión y le das aceptar, entonces la pantalla de la consola esperara al siguiente jugador.
8.- Ahora ejecutaremos la otra aplicación y nos volverá a salir la ventana de la consola, en esta ocasión nos comunicaremos con el servidor, le introduciremos la dirección IP, para este ejemplo se hizo de manera local introduciendo 127.0.0.1








No hay comentarios:
Publicar un comentario