Beispiel #1
0
        public static void Start(GameStartMode mode)
        {
            switch (mode)
            {
            case GameStartMode.SinglePlayer:
                MSGBox.ShowMSGBox("New singleplayer game", "Size:", MSGBoxType.SizeInput, new EventHandler <string>(delegate(object s, string inp)
                {
                    int input = int.Parse(inp);
                    if (input > 5)
                    {
                        GameRenderer.Panel.CreateGraphics().FillRectangle(new SolidBrush(Color.Black), new Rectangle(new Point(), GameRenderer.Panel.Size));
                        //int xy = GameRenderer.Panel.Size.Width / input;
                        //GameSize = new Point(xy, xy);
                        if (GameRenderer.Panel.Size.Width / input < 3 || GameRenderer.Panel.Size.Height / input < 3)
                        {
                            Game.Paused = true;
                            return;
                        }
                        GameSize = new Point(GameRenderer.Panel.Size.Width / input, GameRenderer.Panel.Size.Height / input);
                        Game.Reset();
                        Form1.TimerEnabled = true;
                    }
                    else
                    {
                        Game.Paused = true;
                    }
                }));
                break;

            case GameStartMode.MultiPlayer:
                if (Game.Player.Name == "Player")
                {
                    MSGBox.ShowMSGBox("Please change your username from default.", "", MSGBoxType.Text);
                    break;
                }
                MSGBox.ShowMSGBox("New multiplayer game", "Name:\nMax. players:", MSGBoxType.MultipleInput, new EventHandler <string>(delegate(object s, string input)
                {
                    string[] strs = input.Split('\n');
                    int num       = 0;
                    if (int.TryParse(strs[1], out num))
                    {
                        var match = new NetMatch {
                            Name = strs[0], MaxPlayers = num, OwnerIP = Network.GetIPs(), OwnerName = Player.Name
                        };
                        match.Players.Add(Game.Player);
                        Game.Reset();
                        Network.CreateGame(match);
                    }
                    else
                    {
                        Game.Paused = true;
                    }
                }));
                break;

            case GameStartMode.Connect:
                if (Game.Player.Name == "Player")
                {
                    MSGBox.ShowMSGBox("Please change your username from default.", "", MSGBoxType.Text);
                    break;
                }

                //string matches = Network.Matches.Combine<NetMatch, string>((match, combiner) => combiner += match.Name + "    " + match.Players.Count + "/" + match.MaxPlayers + "    " + match.OwnerName + "\n");
                string inputs = "IP:";
                MSGBox.ShowMSGBox("Connect to game", inputs, MSGBoxType.MultipleInput, new EventHandler <string>(delegate(object s, string input)
                {
                    IPAddress address;
                    if (IPAddress.TryParse(input.Replace("\n", ""), out address))
                    {
                        Game.Reset();
                        Network.Connect(new NetMatch {
                            OwnerIP = new IPAddress[] { address }
                        });
                        //Game.Reset(false); - On successfull connect event
                    }
                    else
                    {
                        Game.Paused = true;
                    }
                }));
                break;

            default:
                throw new ArgumentException();
            }
        }
Beispiel #2
0
        private static void ClientListenerThreadRun()
        {
            //TODO: Synchronised point placing on respawn
            try
            {
                //Connect to the server
                TcpClient client = new TcpClient(AddressFamily.InterNetworkV6);
                client.Connect(ConnectedMatch.OwnerIP, Port);
                var ns = client.GetStream().ToSafeNetStream();

                Thread t = Thread.CurrentThread;
                ns.ErrorStopClient = client;
                ns.ErrorStopThread = t;

                var sw = new BinaryWriter(ns);
                sw.Write(52);
                JObject writedata = new JObject();
                writedata["PlayerName"] = Game.Player.Name;
                writedata["Color"]      = Game.Player.Color.ToArgb();
                sw.Write(writedata.ToString());
                var     sr       = new BinaryReader(ns);
                JObject readdata = JObject.Parse(sr.ReadString());
                Game.GameSize            = new Point((int)readdata["GameSize"]["X"], (int)readdata["GameSize"]["Y"]);
                Game.GameField           = new SqCoord[Game.GameSize.X, Game.GameSize.Y];
                Game.Length              = (int)readdata["Length"];
                ConnectedMatch.OwnerName = (string)readdata["OwnerName"]; //2015.08.29.
                for (int i = 0; i < Game.GameSize.X; i++)
                {
                    for (int j = 0; j < Game.GameSize.Y; j++)
                    {
                        Game.GameField[i, j].PlayerName = (string)readdata["GameField"][i + ""][j + ""]["PlayerName"];
                        Game.GameField[i, j].Tick       = (int)readdata["GameField"][i + ""][j + ""]["Tick"];
                        Game.GameField[i, j].Type       = (SquareType)Enum.Parse(typeof(SquareType), (string)readdata["GameField"][i + ""][j + ""]["Type"]);
                    }
                }
                ConnectedMatch.Players.Clear();
                foreach (JProperty item in readdata["Players"])
                {
                    ConnectedMatch.Players.Add(new Player(item.Name, color: Color.FromArgb((int)item.Value["Color"]), x: (int)item.Value["Position"]["X"], y: (int)item.Value["Position"]["Y"]));
                    if (item.Name == ConnectedMatch.OwnerName)
                    {
                        ConnectedMatch.Players.Last().Client = client;
                    }
                }
                Game.Paused = false;
                SendUpdate  = true;
                Game.Reset(false);
                while (true)
                {
                    string playername = sr.ReadString();
                    try
                    {
                        Player player = ConnectedMatch.Players.SingleOrDefault(entry => entry.Name == playername);
                        ReceiveAndProcessData(player, sr);
                    }
                    catch (Exception e)
                    {
                        Program.HandleException(e);
                    }
                }
            }
            catch (ObjectDisposedException)
            {
                return;
            }
            catch (Exception e)
            {
                Program.HandleException(e);
            }
        }