Witam, napisałem prosty zarys gry piłkarzyki w c++, w której jest dwóch graczy i jeden przemieszcza piłkarzykami WASD a drugi strzałkami i na jednym kompie to działa. Mam pytanie, jakich użyć tchnologii, żeby rozproszyć to na dwa komputery, tzn jeden operator na swoim drugi na swoim i żeby grali między sobą? Tak jakąś najprostszą techniką, nie musi być najbardziej efektywna. Ktoś może ma jakiś pomysł?
- Rejestracja:około 11 lat
- Ostatnio:dzień
- Postów:197
- Rejestracja:prawie 11 lat
- Ostatnio:ponad 8 lat
- Postów:165
Musisz stworzyć serwer. Przez, który dane będą przesyłane. Powinieneś zainteresować się TCP. I wtedy, każdy ruch musisz przesłać do serwera, a ten przekazuje to wszystkich, którzy są połączeni z danym serwerem.
@Ps. Przykładowe dane : Piłkarz1 -> pozycja(122,333)



- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
Zależy gdzie chcesz mieć tą "prostotę". Możesz to zrobić socketami co jest niskopoziomowe i przez to "proste", a możesz przez CORBA i wtedy prostota będzie w samej implemenatacji gry ale technologia prosta nie będzie.
- Rejestracja:około 11 lat
- Ostatnio:dzień
- Postów:197
Prostota, to chodzi o to żeby było łatwo napisać lub jakiś wzór żebym znalazł. W zasadzie zależy mi na czasie, jak najszybciej to ogarnąć więc pomijam detale wydajności, efektywności czy zabezpieczeń.
Moze być bezpośrednio lub nie, obojętne, ważne żebym jak miał dwa kompa swoje to żeby taka gierka działała mi. Dlatego zastanawiam się jakby mi to było najłatwiej rozwiązać, pisząc pod c++. Lapki podłączone do jednej sieci przez wifi wystarczą czy musze kabelkiem jakoś?
- Rejestracja:prawie 11 lat
- Ostatnio:ponad 8 lat
- Postów:165
Może być przez wifi jak i przez kabel, jest to obojętne. Nie napisałeś o jakie biblioteki się opierasz. Bo najprościej według mnie byś miał korzystając z framework-a Qt i bibliotekę QTcpSocket.
Ps. Znalazłem poradnik, jak ktoś to robi w tym framework-u.
http://blog.matthew.org.pl/2010/03/13/kurs-qt-czesc-7-tcp/


- Rejestracja:prawie 11 lat
- Ostatnio:ponad 8 lat
- Postów:165
Możesz też zrobić to prościej np. poprzez bazę SQL :) Tworzysz sobie serwer MySQL np. programem WampServer i potem w programie przesyłasz do bazy wszystkie potrzebne dane a druga osoba odczytuje i nawzajem.

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
maniek1310 napisał(a):
Możesz też zrobić to prościej np. poprzez bazę SQL :) Tworzysz sobie serwer MySQL np. programem WampServer i potem w programie przesyłasz do bazy wszystkie potrzebne dane a druga osoba odczytuje i nawzajem.
Zróbmy plebiscyt: kto wymyśli gorszy i bardziej niedorzeczny sposób komunikacji pomiędzy dwoma klientami gry toczącej się w czasie rzeczywistym... Takie rozwiązanie to nawet dla turowej gry byłoby mega słabe.





- Rejestracja:ponad 12 lat
- Ostatnio:ponad 4 lata
- Postów:2412
- Rejestracja:około 11 lat
- Ostatnio:dzień
- Postów:197
A jeżeli chciałbym rozproszyć prosto, tzn klient - serwer, gdzie klient przesyła swój ruch (lewo, prawo, przod, tył) i w zaleznosci co dostanie serwer wykonuje swoj ruch, tzn tak jakby gra jednego gracza z komputerem, to przy c++ i zrobieniu osobnego wątku dla gracza (wymagane) najlepiej będzie mi zastosować biblioteke WinSock?
- Rejestracja:około 11 lat
- Ostatnio:dzień
- Postów:197
Mam takie pytanie, zacząłem robić na socketach więc ok, tylko jak chce połączyć np. serwer na jednym kompie a klienta na drugim, żeby działało na więcej kompach i musze podać adres IP serwera a nie localhost, to jak go wydobyć, żeby się łączyło?
- Rejestracja:prawie 11 lat
- Ostatnio:ponad 8 lat
- Postów:165
Ip serwera to będzie takie jakie masz przypisane do tego komputera gdzie masz postawiony serwer.
Dla topornych :)
https://www.youtube.com/watch?v=OeHC73GJsO8
- Rejestracja:około 11 lat
- Ostatnio:dzień
- Postów:197
Ok już wiem, działa. Mam jeszcze pytanko, działa mi serwer dla jednego klienta, jednak chciałbym zrobić dla przynajmniej dwóch, żeby dwóch sie mogło połączyć lub więcej. (celem i tak będzie żeby klient1 wysyłał coś na serwer i zostało to przekazywane do klienta2 i pozniej klient2 cos wysyła do 1 i takie ruchy w petli).
Jednak jak zrobić z połączeniem dla wielu klientów?
Mam coś takiego:
SOCKET mainSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); // tworzenie gniazda socket
if( mainSocket == INVALID_SOCKET )
{
printf( "Error creating socket: %ld\n", WSAGetLastError() );
WSACleanup();
return 1;
}
sockaddr_in service;
memset( & service, 0, sizeof( service ) );
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr( "192.168.1.173" ); // zdefiniowanie adresu ip
service.sin_port = htons( 27015 ); // zdefiniowanie portu
if( bind( mainSocket,( SOCKADDR * ) & service, sizeof( service ) ) == SOCKET_ERROR ) // przypisanie do gniazda portu i adresu
{
printf( "bind() failed.\n" );
closesocket( mainSocket );
return 1;
}
if( listen( mainSocket, 1 ) == SOCKET_ERROR ) // nasluchiwanie przez serwer
printf( "Error listening on socket.\n" );
SOCKET acceptSocket = SOCKET_ERROR;
printf( "Waiting for a client to connect...\n" );
if( acceptSocket == SOCKET_ERROR )
{
acceptSocket = accept( mainSocket, NULL, NULL );
}
printf( "Client connected.\n" );
mainSocket = acceptSocket;
- Rejestracja:około 11 lat
- Ostatnio:dzień
- Postów:197
Czyli na przykład na serwerze stworzyć dla klienta - wątek, przyjmę że max dwóch klientów to mi i to utworzyć dwa wątki za pomocą process.h i beignthread tylko jak to później sklecić, żeby oczekiwał na połaczenie dwóch klientów(wątków) i jeśli jest są połączenie to jakas tam wymiana danych?