public static void Main(string[] args) { try { // IPAddress ipAd = IPAddress.Parse("192.168.1.100"); // use local m/c IP address, and // use the same in the client /* Initializes the Listener */ // TcpListener myList = new TcpListener(ipAd, 8001); /* Start Listeneting at the specified port */ // myList.Start(); Console.WriteLine("The server is running at port 8001..."); Console.WriteLine("The local End point is :" + Singleton.GetSingleton().LocalEndpoint); Console.WriteLine("Waiting for a connection....."); //otwacie 2 soketów dla 2 graczy Multiton s = Multiton.GetSocket(1); Multiton s2 = Multiton.GetSocket(2); //informacja o połączeniu obydwu graczy Console.WriteLine("Connection accepted from " + s.Socet.RemoteEndPoint); Console.WriteLine("Connection accepted from " + s2.Socet.RemoteEndPoint); //tworzenie obiektu do konwersji danych i wysłanie graczom informacji o starcie gry ASCIIEncoding asen = new ASCIIEncoding(); s.Socet.Send(asen.GetBytes("STRT000")); s2.Socet.Send(asen.GetBytes("STRT000")); Console.WriteLine("\nSent Acknowledgement"); byte[] b = new byte[150]; byte[] b2 = new byte[150]; //Oczekiwanie na wysłanie przez graczy macierzy s.Socet.Receive(b); s2.Socet.Receive(b2); //przepisanie macierzy 1 gracza do pamięci Message msg = new Message(b); msg.getNext(); if (msg.flag == "NTAB") { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { player1Matrix.playerMatrix[j, i] = msg.tab[(j * 10) + i]; Console.Write(msg.tab[(j * 10) + i]); } Console.Write("\n"); } } Console.Write("\n\n"); //przepisanie macierzy 2 gracza do pamięci msg = new Message(b2); msg.getNext(); if (msg.flag == "NTAB") { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { player2Matrix.playerMatrix[j, i] = msg.tab[(j * 10) + i]; Console.Write(msg.tab[(j * 10) + i]); } Console.Write("\n"); } } //wysłanie graczom informacji o kolejności strzałów s.Socet.Send(asen.GetBytes("TURN000")); s2.Socet.Send(asen.GetBytes("STOP000")); s.Socet.Receive(b); Console.Write("1 Gracz Gotowy\n"); s2.Socet.Receive(b); Console.Write("2 Gracz Gotowy\n"); bool turn = true; while (true) { Socket socket; if (turn) { socket = s.Socet; } else { socket = s2.Socet; //s2 } socket.Receive(b); msg = new Message(b); msg.getNext(); int x, y; x = msg.tab[1]; y = msg.tab[0]; if (turn) { //player2Matrix; //strzały //wynik strzału //response send turn or stop Shoot(player2Matrix, x, y); if (player2Matrix.playerMatrix[x, y] != 123) { Console.Write("Gracz 1 Strzelił w " + x + "," + y + " trafiając\n"); //trafił socket.Send(asen.GetBytes("RST1005" + x + y + player2Matrix.playerMatrix[x, y])); //trafiłeś w tą pozycję x y i wynik trafineia 123 lub 999 s2.Socet.Send(asen.GetBytes("RST2005" + x + y + player2Matrix.playerMatrix[x, y])); //klienci potwierdzają dotychczasowy odbiór socket.Receive(b); s2.Socet.Receive(b); Console.Write("ACCEPT\n"); //jeszcze dla obu wiadomosci wysyłamy SUR1/2 dlugosc i x,y na których są 999 do tego potrzebna metoda int[] tab = SUR(player2Matrix); string message = ""; for (int i = 0; i < counter * 2; i++) { message += tab[i]; } if (counter < 10) { s2.Socet.Send(asen.GetBytes("SUR200" + counter + message)); socket.Send(asen.GetBytes("SUR100" + counter + message)); Console.Write("SUR200" + counter + message + "\n"); Console.Write("SUR100" + counter + message + "\n"); } else { s2.Socet.Send(asen.GetBytes("SUR20" + counter + message)); socket.Send(asen.GetBytes("SUR10" + counter + message)); Console.Write("SUR20" + counter + message + "\n"); Console.Write("SUR10" + counter + message + "\n"); } //klienci potwierdzają dotychczasowy odbiór socket.Receive(b); s2.Socet.Receive(b); Console.Write("ACCEPT\n"); //jeszcze dla obu wiadomosci wysyłamy MIS1/2 dlugosc i x,y na których są 123 do tego potrzebna metoda tab = MIS(player2Matrix); message = ""; for (int i = 0; i < counter * 2; i++) { message += tab[i]; } if (counter < 10) { s2.Socet.Send(asen.GetBytes("MIS200" + counter + message)); socket.Send(asen.GetBytes("MIS100" + counter + message)); Console.Write("MIS200" + counter + message + "\n"); Console.Write("MI1200" + counter + message + "\n"); } else { s2.Socet.Send(asen.GetBytes("MIS20" + counter + message)); socket.Send(asen.GetBytes("MIS10" + counter + message)); Console.Write("MIS20" + counter + message + "\n"); Console.Write("MI120" + counter + message + "\n"); } //klienci potwierdzają dotychczasowy odbiór socket.Receive(b); s2.Socet.Receive(b); Console.Write("ACCEPT\n"); //sprawdzenie czy przypadkiem nie jest to ostatnie trafienie jeśli tak to wyślij informacje o końcu i zwycięzcy a jezeli nie każ kontynuować if (!End(player2Matrix)) { socket.Send(asen.GetBytes("TURN000")); s2.Socet.Send(asen.GetBytes("STOP000")); Console.Write("S2 - STOP000\n"); Console.Write("S1 - TURN000\n"); } else { socket.Send(asen.GetBytes("END1000")); s2.Socet.Send(asen.GetBytes("END0000")); Console.Write("S1 - END1000\n"); Console.Write("S2 - END0000\n"); break; } } else { Console.Write("Gracz 1 Strzelił w " + x + "," + y + " pudłując\n"); //pudło socket.Send(asen.GetBytes("RST1005" + x + y + player2Matrix.playerMatrix[x, y])); // wynik 123 s2.Socet.Send(asen.GetBytes("RST2005" + x + y + player2Matrix.playerMatrix[x, y])); //klienci potwierdzają dotychczasowy odbiór socket.Receive(b); s2.Socet.Receive(b); Console.Write("ACCEPT\n"); //jeszcze dla obu wiadomosci wysyłamy SUR1/2000 s2.Socet.Send(asen.GetBytes("SUR2000")); socket.Send(asen.GetBytes("SUR1000")); Console.Write("SUR2000\n"); Console.Write("SUR1000\n"); //klienci potwierdzają dotychczasowy odbiór socket.Receive(b); s2.Socet.Receive(b); Console.Write("ACCEPT\n"); //jeszcze dla obu wiadomosci wysyłamy MIS1/2000 s2.Socet.Send(asen.GetBytes("MIS2000")); socket.Send(asen.GetBytes("MIS1000")); Console.Write("MIS2000\n"); Console.Write("MI12000\n"); //klienci potwierdzają dotychczasowy odbiór socket.Receive(b); s2.Socet.Receive(b); Console.Write("ACCEPT\n"); //zmiana tury na przeciwną (2 gracz ma ruch) i wysłanie do graczy odpowiedniej wiadomosci turn = false; socket.Send(asen.GetBytes("STOP000")); s2.Socet.Send(asen.GetBytes("TURN000")); Console.Write("S1 - STOP000\n"); Console.Write("S2 - TURN000\n"); } } else { Shoot(player1Matrix, x, y); if (player1Matrix.playerMatrix[x, y] != 123) { Console.Write("Gracz 2 Strzelił w " + x + "," + y + " trafiając\n"); //2trafił socket.Send(asen.GetBytes("RST1005" + x + y + player1Matrix.playerMatrix[x, y])); //trafiłeś w tą pozycję x y i wynik trafineia 123 lub 999 s.Socet.Send(asen.GetBytes("RST2005" + x + y + player1Matrix.playerMatrix[x, y])); //klienci potwierdzają dotychczasowy odbiór socket.Receive(b); s.Socet.Receive(b); Console.Write("ACCEPT\n"); //jeszcze dla obu wiadomosci wysyłamy SUR1/2 dlugosc i x,y na których są 999 do tego potrzebna metoda int[] tab = SUR(player1Matrix); string message = ""; for (int i = 0; i < counter * 2; i++) { message += tab[i]; } if (counter < 10) { s.Socet.Send(asen.GetBytes("SUR200" + counter + message)); socket.Send(asen.GetBytes("SUR100" + counter + message)); Console.Write("SUR200" + counter + message + "\n"); Console.Write("SUR100" + counter + message + "\n"); } else { socket.Send(asen.GetBytes("SUR10" + counter + message)); s.Socet.Send(asen.GetBytes("SUR20" + counter + message)); } //klienci potwierdzają dotychczasowy odbiór socket.Receive(b); s.Socet.Receive(b); Console.Write("ACCEPT\n"); //jeszcze dla obu wiadomosci wysyłamy MIS1/2 dlugosc i x,y na których są 123 do tego potrzebna metoda tab = MIS(player1Matrix); message = ""; for (int i = 0; i < counter * 2; i++) { message += tab[i]; } if (counter < 10) { s.Socet.Send(asen.GetBytes("MIS200" + counter + message)); socket.Send(asen.GetBytes("MIS100" + counter + message)); Console.Write("MIS200" + counter + message + "\n"); Console.Write("MI1200" + counter + message + "\n"); } else { s.Socet.Send(asen.GetBytes("MIS20" + counter + message)); socket.Send(asen.GetBytes("MIS10" + counter + message)); Console.Write("MIS20" + counter + message + "\n"); Console.Write("MI120" + counter + message + "\n"); } //klienci potwierdzają dotychczasowy odbiór socket.Receive(b); s.Socet.Receive(b); Console.Write("ACCEPT\n"); if (!End(player1Matrix)) { socket.Send(asen.GetBytes("TURN000")); s.Socet.Send(asen.GetBytes("STOP000")); Console.Write("S1 - STOP000\n"); Console.Write("S2 - TURN000\n"); } else { socket.Send(asen.GetBytes("END1000")); s.Socet.Send(asen.GetBytes("END0000")); Console.Write("S2 - END1000\n"); Console.Write("S1- END0000\n"); break; } } else { Console.Write("Gracz 2 Strzelił w " + x + "," + y + " pudłując\n"); //2 pudło socket.Send(asen.GetBytes("RST1005" + x + y + player1Matrix.playerMatrix[x, y])); // wynik 123 s.Socet.Send(asen.GetBytes("RST2005" + x + y + player1Matrix.playerMatrix[x, y])); //klienci potwierdzają dotychczasowy odbiór socket.Receive(b); s.Socet.Receive(b); Console.Write("ACCEPT\n"); //jeszcze dla obu wiadomosci wysyłamy SUR1/2000 s.Socet.Send(asen.GetBytes("SUR2000")); socket.Send(asen.GetBytes("SUR1000")); Console.Write("SUR2000\n"); Console.Write("SUR1000\n"); //klienci potwierdzają dotychczasowy odbiór socket.Receive(b); s.Socet.Receive(b); Console.Write("ACCEPT\n"); //jeszcze dla obu wiadomosci wysyłamy MIS1/2000 s.Socet.Send(asen.GetBytes("MIS2000")); socket.Send(asen.GetBytes("MIS1000")); Console.Write("MIS2000\n"); Console.Write("MI12000\n"); //klienci potwierdzają dotychczasowy odbiór socket.Receive(b); s.Socet.Receive(b); Console.Write("ACCEPT\n"); //zmiana tury na przeciwną (2 gracz ma ruch) i wysłanie do graczy odpowiedniej wiadomosci turn = true; socket.Send(asen.GetBytes("STOP000")); s.Socet.Send(asen.GetBytes("TURN000")); Console.Write("S2 - STOP000\n"); Console.Write("S1 - TURN000\n"); } } } /* clean up */ s.Socet.Close(); s2.Socet.Close(); Console.Read(); } catch (Exception e) { Console.WriteLine("Error..... " + e.StackTrace); Console.Read(); } }