コード例 #1
0
        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;
        }
コード例 #2
0
        // 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);
        }
コード例 #3
0
        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();
        }