public FormTron(Client myMyClient) { this.Visible = false; myClient = myMyClient; myTron = myClient.Init(); InitializeComponent(); pictureBox1.Size = new System.Drawing.Size(myTron.getTaille() * tailleJoueur, myTron.getTaille() * tailleJoueur); this.ClientSize = new System.Drawing.Size(myTron.getTaille() * tailleJoueur, myTron.getTaille() * tailleJoueur); // Creation bitmap de dessin bmp = new System.Drawing.Bitmap(myTron.getTaille() * tailleJoueur, myTron.getTaille() * tailleJoueur); e = System.Drawing.Graphics.FromImage(bmp); this.ResumeLayout(false); keh = new KeyEventHandler(OnKeyPress); this.KeyDown += keh; aTimer = new System.Timers.Timer(); aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); aTimer.Interval = myClient.freq; aTimer.Enabled = true; stillAlive = true; }
// Appelé au début de la partie public Tron.Tron Init() { System.Console.WriteLine("Init"); // TODO Connexion au serveur clientSocket.Connect(serverEP); // TODO Réception des paramètres byte[] receive = new byte[4]; clientSocket.Receive(receive, receive.Length, SocketFlags.None); // TODO Initialisation de la fréquence : frequence = <frequence> frequence = receive[2]; // TODO Initialisation du moteur : myTron = new Tron(byte <taille terrain>, byte <nombre de joueurs>, byte <numéro du joueur>); myTron = new Tron.Tron(receive[3], receive[1], receive[0]); // Retourne le moteur return(myTron); }
static void Main(string[] args) { ServeurUdp.ServeurUdp.StartChat(); Tron.Tron myTron; // Moteur du jeu byte nJoueurs = 2; // Nombre de joueurs byte frequence = 1; // Temps du tour de jeu (en dixieme de s) byte taille = 60; // Taille du terrain // ************************************* Intitialisation partie System.Console.WriteLine("Initialisation"); // TODO Creation de la socket d'écoute TCP Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // TODO Bind et listen serverSocket.Bind(new IPEndPoint(IPAddress.Any, 23232)); serverSocket.Listen(nJoueurs); while (1 == 1) { // TODO Creation du tableau des sockets connectées List <Socket> clients = new List <Socket>(); // Creation du moteur de jeu myTron = new Tron.Tron(nJoueurs, taille); // TODO Acceptation des clients for (int i = 0; i < nJoueurs; i++) { clients.Add(serverSocket.Accept()); Console.WriteLine("Connexion de " + clients[i].RemoteEndPoint); } // TODO Envoie des paramètres byte[] parametres = new byte[4]; parametres[1] = nJoueurs; parametres[2] = frequence; parametres[3] = taille; for (int i = 0; i < nJoueurs; i++) { parametres[0] = (byte)i; clients[i].Send(parametres, parametres.Length, SocketFlags.None); } // ************************************* Routine à chaque tour System.Console.WriteLine("Routine"); // Tant que la partie n'est pas finie while (!myTron.IsFinished()) { // TODO Réception de la direction de chaque joueur byte[] directions = new byte[clients.Count]; byte[] receive = new byte[1]; for (int i = 0; i < clients.Count; i++) { try { if (clients[i].Connected) { clients[i].Receive(receive, receive.Length, SocketFlags.None); directions[i] = receive[0]; } else { clients[i].Close(); // Perdu directions[i] = 5; } } catch (Exception e) { clients[i].Close(); // Perdu directions[i] = 5; } } // TODO Calcul collision : myTron.Collision(byte[] <toutes les directions>); myTron.Collision(directions); // TODO Envoie des directions de tous les joueurs à tous les clients foreach (Socket s in clients) { try { if (s.Connected) { s.Send(directions, directions.Length, SocketFlags.None); } } catch (Exception e) { } } } // ************************************* Conclusion System.Console.WriteLine("Conclusion"); // TODO Fermeture des sockets connectées foreach (Socket s in clients) { if (s.Connected) { s.Close(); } } } // TODO Fermeture socket d'écoute serverSocket.Close(); ServeurUdp.ServeurUdp.thread.Abort(); }