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