Witam. Mam następujący problem. Piszę sobie grę "Okręty" w trybie sieciowym. Działa to tak :
- użytkownik strzela : wysyłana jest wiadomość do odbiorcy i sprawdzenie czy użytkownik trafił. Jeżeli trafił
to zwracana jest informacja do strzelającego o sukcesie.
W kodzie wygląda to tak:
public void strzelaj(int tx, int ty) // rejestruje strzał gracza
{
if (czy_mina[tx, ty] == false) // jeżeli nie strzelano w to miejsce
{
siec.WyslijRuch(tx, ty);
shootmap[tx, ty].BackgroundImage = mina;
weryfikuj(tx, ty); // odbiera informacje czy statek zostal trafiony
}
else
{
MessageBox.Show("Nie możesz strzelać 2 razy w te samo miejsce", "Statki");
return;
}
public void przyjmij_strzal(int tx, int ty) // pokazuje strzał przecwnika na drugiej planszy
{
if (czy_statek[tx, ty] == true)
{
mapa[tx, ty].BackgroundImage = trafiony;
siec.WyslijInfoStatku(tx, ty); // wysyla informacje o tym że statek zostal trafiony
}
else
{
mapa[tx, ty].BackgroundImage = mina;
}
gra_sieciowa = false;
}
public void weryfikuj(int tx, int ty)
{
shootmap[tx, ty].BackgroundImage = trafiony;
}
Problem polega na tym, że metoda Weryfikuj pokazuje swoje wyniki na wszystkich planszach oraz oraz aplikacji serwera i klienta. Nie wiem dlaczego tak się dzieje ? Za każdą pomoc wielkie dzięki.
Umieszczam jeszcze metody sieciowe umożliwiające wysyłanie danych :
Metoda odbiera dane:
try
{
byte[] tab = new byte[512];
IPHostEntry HostEntry = Dns.GetHostEntry(Dns.GetHostName());
int otrzymane_bajty = 0;
tcpListener = new TcpListener(HostEntry.AddressList[0], port);
tcpListener.Start();
socket = tcpListener.AcceptSocket();
server_ns = new NetworkStream(socket);
// metoda na restart gry
gra.Ustaw_StatusTekst("Status gry: POŁĄCZONY");
receiving_server = true;
while (receiving_server)
{
try
{
otrzymane_bajty = server_ns.Read(tab,0,2);
}
catch
{
return;
}
if(otrzymane_bajty >0)
{
int wiersz = int.Parse(Convert.ToChar(tab[0]).ToString());
int kolumna = int.Parse(Convert.ToChar(tab[1]).ToString());
gra.weryfikuj(wiersz, kolumna);
gra.przyjmij_strzal(wiersz, kolumna);
}
Metody wysyłające dane:
public void WyslijRuch(int wiersz, int kolumna) // metoda zapisująca wspołrzedne do tablicy, które beda wysłane
{
byte [] tab = new byte[2];
tab[0]=byte.Parse(Asc(wiersz.ToString()).ToString());
tab[1]=byte.Parse(Asc(kolumna.ToString()).ToString());
WyslijPakiet(tab);
}