示例#1
0
        static void Main(string[] args)
        {
            //create a new server
            var server = new UdpListener();
            //create universe
            Random rnd = new Random();
            Dictionary <string, IPEndPoint> connections = new Dictionary <string, IPEndPoint>();
            Dictionary <string, Player>     players     = new Dictionary <string, Player>();
            // List<Weapons> rounds = new List<Weapons>();
            bool sectorChanged = false;

            Console.WriteLine("============================================= Server");

            string[] parts;

            //start listening for messages and copy the messages back to the client
            Task.Factory.StartNew(async() => {
                while (true)
                {
                    var received = await server.Receive();
                    string msg   = received.Message.ToString();
                    parts        = msg.Split(':');
                    fixParts(parts);
                    Console.WriteLine(msg + " -- " + received.Sender.Address.MapToIPv4().ToString());

                    // Only add new connections to the list of clients
                    if (!connections.ContainsKey(received.Sender.Address.MapToIPv4().ToString()))
                    {
                        connections.Add(received.Sender.Address.MapToIPv4().ToString(), received.Sender);
                        p1        = new Player(""); //add parameters later
                        p1.Sector = rnd.Next(0, 255);
                        p1.Column = rnd.Next(0, 9);
                        p1.Row    = rnd.Next(0, 9);
                        p1.Name   = Environment.UserName;
                        players.Add(received.Sender.Address.MapToIPv4().ToString(), p1);
                        p1.SectorStr  = numToSectorID(p1.Sector);
                        p1.Connection = received.Sender;
                        server.Reply(String.Format("connected:true:{0}:{1}:{2}", p1.SectorStr, p1.Column, p1.Row), received.Sender);
                        Galaxy sector = universe.getGalaxy(p1.SectorStr);
                        sector.updatePlayer(p1.Name, (p1.Row * 10 + p1.Column % 10));
                        server.Reply(String.Format("si:{0}:{1}:{2}:{3}", sector.StarLocations, sector.PlanetLocations, sector.BlackholeLocations, sector.getPlayersLocs()), received.Sender);
                        universe.updateWeps();
                    }


                    string ret = "[Connected Users]";
                    if (received.Message.Equals("list"))
                    {
                        foreach (string s in connections.Keys)
                        {
                            ret += "\n>> " + s;
                        }
                        server.Reply(ret + "\n*****************", received.Sender);
                    }
                    else
                    {
                        //Okay, send message to everyone
                        // foreach (IPEndPoint ep in connections.Values)
                        //    server.Reply("[" + received.Sender.Address.ToString() + "] says: " + received.Message, ep);
                    }

                    if (received.Message == "quit")
                    {
                        connections.Remove(received.Sender.Address.ToString());     // Remove the IP Address from the list of connections
                    }
                    else
                    {
                        foreach (Player player in players.Values)
                        {
                            Galaxy playersSector = universe.getGalaxy(player.SectorStr);
                            server.Reply(String.Format("ni:{0}:{1}:{2}", playersSector.PlanetLocations, playersSector.getPlayersLocs(), playersSector.getWeaponLocations()), player.Connection);
                        }
                        Player p;
                        players.TryGetValue(received.Sender.Address.MapToIPv4().ToString(), out p);
                        // set clients health fuel phasors torpedos and sheilds
                        server.Reply(String.Format("setup:{0}:{1}:{2}:{3}:{4}", p.Health, p.FuelPods, p.Phasors, p.Torpedoes, p.shields), received.Sender);

                        /* for (int i = 0; i < universe.getGalaxy(p.SectorStr).getWeaponCount(); i++)
                         * {
                         *   //universe.updateWeps();
                         *   universe.getGalaxy(p.SectorStr).moveBullet();
                         * }*/
                        if (p.IsAlive == true)
                        {
                            if (parts[0].Equals("mov"))
                            {
                                if (p.FuelPods != 0)
                                {
                                    p.FuelPods--;
                                    server.Reply(String.Format("update:fuelpods:{0}", p.FuelPods), received.Sender);

                                    if (parts[1].Equals("n"))
                                    {
                                        p.Row--;
                                    }
                                    else if (parts[1].Equals("s"))
                                    {
                                        p.Row++;
                                    }
                                    else if (parts[1].Equals("e"))
                                    {
                                        p.Column++;
                                    }
                                    else if (parts[1].Equals("w"))
                                    {
                                        p.Column--;
                                    }
                                    Galaxy sector = universe.getGalaxy(p.SectorStr);
                                    //Checks for moving to different sector
                                    if (p.Row == -1)
                                    {
                                        p.Sector        -= 16;
                                        p.SectorStr      = numToSectorID(p.Sector);
                                        p.Row            = 9;
                                        sectorChanged    = true;
                                        Galaxy newSector = universe.getGalaxy(p.SectorStr);
                                        sector.removePlayer(p.Name);
                                        newSector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10));
                                    }
                                    else if (p.Row == 10)
                                    {
                                        p.Sector        += 16;
                                        p.SectorStr      = numToSectorID(p.Sector);
                                        p.Row            = 0;
                                        sectorChanged    = true;
                                        Galaxy newSector = universe.getGalaxy(p.SectorStr);
                                        sector.removePlayer(p.Name);
                                        newSector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10));
                                    }
                                    else if (p.Column == -1)
                                    {
                                        p.Sector--;
                                        p.SectorStr      = numToSectorID(p.Sector);
                                        p.Column         = 9;
                                        sectorChanged    = true;
                                        Galaxy newSector = universe.getGalaxy(p.SectorStr);
                                        sector.removePlayer(p.Name);
                                        newSector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10));
                                    }
                                    else if (p.Column == 10)
                                    {
                                        p.Sector++;
                                        p.SectorStr      = numToSectorID(p.Sector);
                                        p.Column         = 0;
                                        sectorChanged    = true;
                                        Galaxy newSector = universe.getGalaxy(p.SectorStr);
                                        sector.removePlayer(p.Name);
                                        newSector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10));
                                    }
                                    if (!sectorChanged)
                                    { // sector is of type Galaxy
                                        sector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10));
                                        server.Reply(String.Format("ni:{0}:{1}:{2}", sector.PlanetLocations, sector.getPlayersLocs(), sector.getWeaponLocations()), received.Sender);
                                    }
                                    server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.SectorStr, p.Column, p.Row, parts[1], p.FuelPods), received.Sender);

                                    Char cellAction = onSpecialCell(p);
                                    sector          = universe.getGalaxy(p.SectorStr);
                                    switch (cellAction)
                                    {
                                    case 's':     //Player is on a star
                                        p.Health  = 0;
                                        p.IsAlive = false;
                                        server.Reply(String.Format("update:health:{0}", p.Health), received.Sender);
                                        server.Reply("dead:", received.Sender);
                                        break;

                                    case 'p':    //Player is on a planet
                                        p.Health    = 100;
                                        p.shields   = 15;
                                        p.Phasors   = 50;
                                        p.Torpedoes = 10;
                                        p.FuelPods  = 50;
                                        server.Reply(String.Format("update:health:{0}", p.Health), received.Sender);
                                        server.Reply(String.Format("update:shields:{0}", p.shields), received.Sender);
                                        server.Reply(String.Format("update:phasors:{0}", p.Phasors), received.Sender);
                                        server.Reply(String.Format("update:torpedos:{0}", p.Torpedoes), received.Sender);
                                        server.Reply(String.Format("update:fuelpods:{0}", p.FuelPods), received.Sender);
                                        server.Reply("You landed on a Planet", received.Sender);
                                        sector.removePlanet(p.Row * 10 + p.Column % 10);
                                        break;

                                    case 't':
                                        //Player found treasure
                                        Random r = new Random();
                                        int x    = r.Next(0, 5);

                                        if (x == 0)     // health regeneration
                                        {
                                            p.Health = 100;
                                            server.Reply("you Regenerated Health", received.Sender);
                                            server.Reply(String.Format("update:health:{0}", p.Health), received.Sender);
                                        }
                                        else if (x == 1)     // shields regenerated
                                        {
                                            p.shields = 15;
                                            server.Reply("you Found Shields", received.Sender);
                                            server.Reply(String.Format("update:shields:{0}", p.shields), received.Sender);
                                        }
                                        else if (x == 2)     // more phasor ammo
                                        {
                                            p.Phasors = 50;
                                            server.Reply("you found more Phasor Ammo", received.Sender);
                                            server.Reply(String.Format("update:phasors:{0}", p.Phasors), received.Sender);
                                        }
                                        else if (x == 3)     // torpedos replenished
                                        {
                                            p.Health = 10;
                                            server.Reply("you Found torpedo ammo", received.Sender);
                                            server.Reply(String.Format("update:torpedo:{0}", p.Torpedoes), received.Sender);
                                        }
                                        else if (x == 4)     // fuelpods refilled
                                        {
                                            p.FuelPods = 50;
                                            server.Reply("you Found Fuelpods", received.Sender);
                                            server.Reply(String.Format("update:fuel:{0}", p.FuelPods), received.Sender);
                                        }

                                        break;


                                    case 'b':

                                        sector           = universe.getGalaxy(p.SectorStr);
                                        p.Sector         = rnd.Next(0, 255);
                                        p.SectorStr      = numToSectorID(p.Sector);
                                        p.Column         = rnd.Next(0, 9);
                                        p.Row            = rnd.Next(0, 9);
                                        Galaxy newSector = universe.getGalaxy(p.SectorStr);
                                        sector.removePlayer(p.Name);
                                        newSector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10));
                                        server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.SectorStr, p.Column, p.Row, p.Oriantation, p.FuelPods), received.Sender);
                                        server.Reply("you went through a blackhole", received.Sender);
                                        sectorChanged = true;
                                        break;
                                    }
                                }
                                else
                                {
                                    server.Reply("Out of fuel!", received.Sender);
                                    server.Reply(String.Format("update:fuelpods:{0}", p.FuelPods), received.Sender);
                                    //server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.SectorStr, p.Column, p.Row, parts[1], p.FuelPods), received.Sender);
                                }
                            }
                            else if (parts[0].Equals("q"))
                            {
                                if (parts[1].Equals("p"))
                                {
                                    server.Reply("Phasors equipped!", received.Sender);
                                }
                                else
                                {
                                    server.Reply("Torpedos equipped!", received.Sender);
                                }
                            }
                            else if (parts[0].Equals("damage"))
                            {
                                int damage = 0;
                                Int32.TryParse(parts[1], out damage);
                                p.Health -= damage;
                            }
                            else if (parts[0].Equals("r"))
                            {
                                if (parts[1].Equals("n"))
                                {
                                    p.Oriantation = 'n';
                                    server.Reply(String.Format("or:{0}", parts[1]), received.Sender);
                                }
                                else if (parts[1].Equals("s"))
                                {
                                    p.Oriantation = 's';
                                    server.Reply(String.Format("or:{0}", parts[1]), received.Sender);
                                }
                                else if (parts[1].Equals("e"))
                                {
                                    p.Oriantation = 'e';
                                    server.Reply(String.Format("or:{0}", parts[1]), received.Sender);
                                }
                                else if (parts[1].Equals("w"))
                                {
                                    p.Oriantation = 'w';
                                    server.Reply(String.Format("or:{0}", parts[1]), received.Sender);
                                }
                            }
                            else if (parts[0].Equals("s"))
                            {
                                if (parts[1].Equals("2"))
                                {
                                    server.Reply("Out of Sheilds", received.Sender);
                                }
                                else if (parts[1].Equals("1"))
                                {
                                    if (p.shields > 0)
                                    {
                                        p.shields--;
                                        server.Reply(String.Format("update:shields:{0}", p.shields), received.Sender);
                                        p.ShieldOn = true;
                                        server.Reply(String.Format("sh:{0}", parts[1]), received.Sender);
                                    }
                                    else
                                    {
                                        server.Reply("Out of Shields", received.Sender);
                                        server.Reply(String.Format("sh:{0}", 2), received.Sender);
                                    }
                                }
                                else if (parts[1].Equals("0"))
                                {
                                    p.ShieldOn = false;
                                    server.Reply(String.Format("sh:{0}", parts[1]), received.Sender);
                                }
                            }
                            else if (parts[0].Equals("v"))
                            {
                                string rply = "unv:";
                                char sec    = 'a';
                                while (sec != 'q')
                                {
                                    for (int i = 0; i < 16; i++)
                                    {
                                        rply += universe.getGalaxy(sec + "" + i).getPlayerCount() + ":";
                                    }
                                    sec++;
                                }
                                server.Reply(rply, received.Sender);
                            }
                            else if (parts[0].Equals("f"))
                            {
                                if (parts[1].Equals("p"))
                                {
                                    //Add code for handelig shooting phasors
                                    if (p.Phasors != 0 && p.ShieldOn == false)
                                    {
                                        //server.Reply(String.Format("sh:{0}", parts[1]), received.Sender);
                                        Galaxy sector = universe.getGalaxy(p.SectorStr);
                                        sector.addWeapon('p', p.Column, p.Row, p.Oriantation, p.SectorStr);
                                        // rounds.Add(new Weapons('p', p.Column, p.Row, p.Oriantation, p.SectorStr));
                                        p.Phasors--;
                                        server.Reply(String.Format("update:weaponAngle:{0}", p.Oriantation), received.Sender);
                                        server.Reply(String.Format("update:weaponLoc:{0}:{1}", p.Column, p.Row), received.Sender);
                                        server.Reply(String.Format("update:phasors:{0}", p.Phasors), received.Sender);
                                        server.Reply(String.Format("ni:{0}:{1}:{2}", sector.PlanetLocations, sector.getPlayersLocs(), sector.getWeaponLocations()), received.Sender);
                                    }
                                    else if (p.ShieldOn == true)
                                    {
                                        server.Reply("Can't shoot with shields on", received.Sender);
                                    }
                                    else
                                    {
                                        server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.Sector, p.Column, p.Row, parts[1], p.Phasors), received.Sender);
                                        server.Reply(String.Format("Out of Phasors"), received.Sender);
                                    }
                                }
                                else if (parts[1].Equals("t"))
                                {
                                    //Add code for handeling shooting torpedo
                                    if (p.Torpedoes > 0 && p.ShieldOn == false)
                                    {
                                        Galaxy sector = universe.getGalaxy(p.SectorStr);
                                        sector.addWeapon('t', p.Column, p.Row, p.Oriantation, p.SectorStr);
                                        p.Torpedoes--;
                                        server.Reply(String.Format("update:torpedos:{0}", p.Torpedoes), received.Sender);
                                        server.Reply(String.Format("ni:{0}:{1}:{2}", sector.PlanetLocations, sector.getPlayersLocs(), sector.getWeaponLocations()), received.Sender);
                                    }
                                    else if (p.ShieldOn == true)
                                    {
                                        server.Reply("Can't shoot with shields on", received.Sender);
                                    }
                                    else
                                    {
                                        server.Reply("Out of Torpedos!", received.Sender);
                                        server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.Sector, p.Column, p.Row, parts[1], p.Torpedoes), received.Sender);
                                    }
                                    server.Reply(String.Format("sh:{0}", parts[1]), received.Sender);
                                }
                            }
                            else if (parts[0].Equals("h"))
                            {
                                if (p.FuelPods >= 5)
                                {
                                    Galaxy sector = universe.getGalaxy(p.SectorStr);
                                    p.Sector      = rnd.Next(0, 255);
                                    p.SectorStr   = numToSectorID(p.Sector);
                                    p.Column      = rnd.Next(0, 9);
                                    p.Row         = rnd.Next(0, 9);
                                    p.FuelPods   -= 5;
                                    server.Reply(String.Format("update:fuelpods:{0}", p.FuelPods), received.Sender);
                                    Galaxy newSector = universe.getGalaxy(p.SectorStr);
                                    sector.removePlayer(p.Name);
                                    newSector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10));
                                    server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.SectorStr, p.Column, p.Row, p.Oriantation, p.FuelPods), received.Sender);
                                    sectorChanged = true;
                                }
                                else
                                {
                                    server.Reply("Not enough fuel", received.Sender);
                                    server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.Sector, p.Column, p.Row, p.Oriantation, p.FuelPods), received.Sender);
                                }
                            }
                            if (sectorChanged)
                            {
                                p.SectorStr   = numToSectorID(p.Sector);
                                Galaxy sector = universe.getGalaxy(p.SectorStr);
                                server.Reply(String.Format("si:{0}:{1}:{2}:{3}", sector.StarLocations, sector.PlanetLocations, sector.BlackholeLocations, sector.getPlayersLocs()), received.Sender);
                                sectorChanged = false;
                            }
                        }
                        else
                        {
                            server.Reply("You Are Dead!", received.Sender);
                        }
                    }
                }
            });

            // Endless loop for user's to send messages to Client
            string read;

            do
            {
                read = Console.ReadLine();
                foreach (IPEndPoint ep in connections.Values)
                {
                    server.Reply(read, ep);
                }
            } while (read != "quit");
        }
示例#2
0
        static void Main(string[] args)
        {
            //create a new server
            Universe u      = new Universe();
            var      server = new UdpListener();
            Random   rnd    = new Random();
            Dictionary <string, IPEndPoint> connections = new Dictionary <string, IPEndPoint>();
            Dictionary <string, Player>     players     = new Dictionary <string, Player>();
            List <string> ip = new List <string>();

            Console.WriteLine("============================================= Server");

            string[] parts;

            //start listening for messages and copy the messages back to the client
            Task.Factory.StartNew(async() =>
            {
                while (true)
                {
                    var received = await server.Receive();
                    string msg   = received.Message.ToString();
                    parts        = msg.Split(':');
                    fixParts(parts);
                    Console.WriteLine(msg + " -- " + received.Sender.Address.MapToIPv4().ToString());

                    // Only add new connections to the list of clients
                    if (!connections.ContainsKey(received.Sender.Address.MapToIPv4().ToString()))
                    {
                        connections.Add(received.Sender.Address.MapToIPv4().ToString(), received.Sender);
                        p1 = new Player();
                        p1.setCol(rnd.Next(0, 9));
                        p1.setRow(rnd.Next(0, 9));
                        p1.setStartingLocation(rnd.Next(0, 255));
                        p1.setSector(u.getSectors()[p1.getStartingLocation()]);
                        u.getSectors()[p1.getStartingLocation()].addPlayer(p1);
                        players.Add(received.Sender.Address.MapToIPv4().ToString(), p1);
                        ip.Add(received.Sender.Address.MapToIPv4().ToString());
                        server.Reply(System.Text.Encoding.UTF8.GetString(p1.getSector().sendSectorData()), received.Sender);
                        server.Reply(String.Format("connected:true:{0}:{1}:{2}:{3}", p1.getSectorRegion(), p1.getSectorValue(), p1.getCol(), p1.getRow()), received.Sender);
                    }


                    string ret = "[Connected Users]";
                    if (received.Message.Equals("list"))
                    {
                        foreach (string s in connections.Keys)
                        {
                            ret += "\n>> " + s;
                        }
                        server.Reply(ret + "\n*****************", received.Sender);
                    }
                    else
                    {
                        // Okay, send message to everyone
                        //foreach (IPEndPoint ep in connections.Values)
                        //    server.Reply("[" + received.Sender.Address.ToString() + "] says: " + received.Message, ep);
                    }

                    if (received.Message == "quit")
                    {
                        connections.Remove(received.Sender.Address.ToString());     // Remove the IP Address from the list of connections
                    }
                    else if (received.Message == "shieldOn")
                    {
                        Player p = players[received.Sender.Address.MapToIPv4().ToString()];
                        p.changeShield();
                        Console.Write("reached");
                    }
                    else if (received.Message == "viewu")
                    {
                        string playerString = "";
                        foreach (Sector s in u.getSectors())
                        {
                            foreach (Player p in s.getPlayers())
                            {
                                playerString += "Player- ";
                                playerString += s.getRegion().ToString().ToUpper();
                                playerString += "-" + s.getValue().ToString();
                                playerString += System.Environment.NewLine;
                            }
                        }
                        server.Reply((String.Format("universe:{0}", playerString)), received.Sender);
                        Console.Write("reached");
                    }
                    else if (received.Message == "update0")
                    {
                        Player p = players[received.Sender.Address.MapToIPv4().ToString()];
                        p.setShipAngle(0);
                    }
                    else if (received.Message == "update90")
                    {
                        Player p = players[received.Sender.Address.MapToIPv4().ToString()];
                        p.setShipAngle(90);
                    }
                    else if (received.Message == "update180")
                    {
                        Player p = players[received.Sender.Address.MapToIPv4().ToString()];
                        p.setShipAngle(180);
                    }
                    else if (received.Message == "update270")
                    {
                        Player p = players[received.Sender.Address.MapToIPv4().ToString()];
                        p.setShipAngle(270);
                    }

                    else if (received.Message == ("fireP"))
                    {
                        Player p = players[received.Sender.Address.MapToIPv4().ToString()];
                        if (p.getPhasors() != 0)
                        {
                            if (p.getShield() == false)
                            {
                                p.setPhasors(p.getPhasors() - 1);
                                server.Reply((String.Format("phasors:{0}", p.getPhasors())), received.Sender);
                            }
                        }
                        else
                        {
                            server.Reply((String.Format("display:{0}", "Out of Ammo")), received.Sender);
                        }
                        if (p.getSector().getPlayers().Count > 1)
                        {
                            foreach (Player p1 in p.getSector().getPlayers())
                            {
                                if (p1.getRow() != p.getRow() || p1.getCol() != p.getCol())
                                {
                                    if (p.getShipAngle() == 0 && p1.getRow() < p.getRow() && p1.getCol() == p.getCol())
                                    {
                                        Console.Write("Hit");
                                        Console.Write(p.getShield());
                                        if (p1.getShield() == false && p.getShield() == false)
                                        {
                                            p1.setHealth(p1.getHealth() - 5);
                                        }
                                    }
                                    else if (p.getShipAngle() == 180 && p1.getRow() > p.getRow() && p1.getCol() == p.getCol())
                                    {
                                        Console.Write("Hit");
                                        if (p1.getShield() == false && p.getShield() == false)
                                        {
                                            p1.setHealth(p1.getHealth() - 5);
                                        }
                                    }
                                    else if (p.getShipAngle() == 90 && p1.getRow() == p.getRow() && p1.getCol() > p.getCol())
                                    {
                                        Console.Write("Hit");
                                        if (p1.getShield() == false && p.getShield() == false)
                                        {
                                            p1.setHealth(p1.getHealth() - 5);
                                        }
                                    }
                                    else if (p.getShipAngle() == 270 && p1.getRow() == p.getRow() && p1.getCol() < p.getCol())
                                    {
                                        Console.Write("Hit");
                                        if (p1.getShield() == false && p.getShield() == false)
                                        {
                                            p1.setHealth(p1.getHealth() - 5);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else if (received.Message == ("fireT"))
                    {
                        Player p = players[received.Sender.Address.MapToIPv4().ToString()];
                        if (p.getTorpedos() != 0)
                        {
                            p.setTorpedos(p.getTorpedos() - 1);
                            server.Reply((String.Format("torpedos:{0}", p.getTorpedos())), received.Sender);
                        }
                        else
                        {
                            server.Reply((String.Format("display:{0}", "Out of Ammo")), received.Sender);
                        }
                        if (p.getSector().getPlayers().Count > 1)
                        {
                            foreach (Player p1 in p.getSector().getPlayers())
                            {
                                if (p1.getRow() != p.getRow() || p1.getCol() != p.getCol())
                                {
                                    if (p.getShipAngle() == 0 && p1.getRow() < p.getRow() && p1.getCol() == p.getCol())
                                    {
                                        Console.Write("Hit");
                                        if (p1.getShield() == false && p.getShield() == false)
                                        {
                                            p1.setHealth(p1.getHealth() - 15);
                                        }
                                    }
                                    else if (p.getShipAngle() == 180 && p1.getRow() > p.getRow() && p1.getCol() == p.getCol())
                                    {
                                        Console.Write("Hit");
                                        if (p1.getShield() == false && p.getShield() == false)
                                        {
                                            p1.setHealth(p1.getHealth() - 15);
                                        }
                                    }
                                    else if (p.getShipAngle() == 90 && p1.getRow() == p.getRow() && p1.getCol() > p.getCol())
                                    {
                                        Console.Write("Hit");
                                        if (p1.getShield() == false && p.getShield() == false)
                                        {
                                            p1.setHealth(p1.getHealth() - 15);
                                        }
                                    }
                                    else if (p.getShipAngle() == 270 && p1.getRow() == p.getRow() && p1.getCol() < p.getCol())
                                    {
                                        Console.Write("Hit");
                                        if (p1.getShield() == false && p.getShield() == false)
                                        {
                                            p1.setHealth(p1.getHealth() - 15);
                                        }
                                    }
                                }
                            }
                        }
                    }

                    else if (parts[0].Equals("mov"))
                    {
                        string message = "";

                        Player p = players[received.Sender.Address.MapToIPv4().ToString()];
                        p.setFuel(p.getFuel() - 1);
                        if (parts[1].Equals("n"))
                        {
                            p.setShipAngle(0);
                            p.setRow(p.getRow() - 1);
                            int x = isCollision(p.getSector(), p.getRow(), p.getCol());
                            if (x == 1)
                            {
                                p.setHealth(0);
                                if (p.getSector().getPlayers().Count > 1)
                                {
                                    p.getSector().getPlayers().Remove(p);
                                }
                            }
                            else if (x == 2)
                            {
                                p.setFuel(50);
                                p.setHealth(100);
                                p.setPhasors(50);
                                p.setTorpedos(10);
                            }
                            else if (x == 3)
                            {
                                p.setStartingLocation(rnd.Next(0, 255));
                                p.getSector().removePlayer(p);
                                p.setSector(u.getSectors()[p.getStartingLocation()]);
                                p.getSector().addPlayer(p);
                                var chars  = p.getSector().getSafeLocation().ToCharArray();
                                string row = chars[0].ToString();
                                string col = chars[1].ToString();
                                p.setRow(Convert.ToInt32(row));
                                p.setCol(Convert.ToInt32(col));
                                server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender);
                            }
                            else if (x == 4)
                            {
                                message = "You found treasure!";
                            }
                        }
                        else if (parts[1].Equals("s"))
                        {
                            p.setShipAngle(180);
                            p.setRow(p.getRow() + 1);
                            int x = isCollision(p.getSector(), p.getRow(), p.getCol());
                            if (x == 1)
                            {
                                p.setHealth(0);
                                if (p.getSector().getPlayers().Count > 1)
                                {
                                    p.getSector().getPlayers().Remove(p);
                                }
                            }
                            else if (x == 2)
                            {
                                p.setFuel(50);
                                p.setHealth(100);
                                p.setPhasors(50);
                                p.setTorpedos(10);
                            }
                            else if (x == 3)
                            {
                                p.setStartingLocation(rnd.Next(0, 255));
                                p.getSector().removePlayer(p);
                                p.setSector(u.getSectors()[p.getStartingLocation()]);
                                p.getSector().addPlayer(p);
                                var chars  = p.getSector().getSafeLocation().ToCharArray();
                                string row = chars[0].ToString();
                                string col = chars[1].ToString();
                                p.setRow(Convert.ToInt32(row));
                                p.setCol(Convert.ToInt32(col));
                                p.setFuel(p.getFuel() - 5);
                                server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender);
                            }
                            else if (x == 4)
                            {
                                message = "You found treasure!";
                            }
                        }
                        else if (parts[1].Equals("e"))
                        {
                            p.setShipAngle(90);
                            p.setCol(p.getCol() + 1);
                            int x = isCollision(p.getSector(), p.getRow(), p.getCol());
                            if (x == 1)
                            {
                                p.setHealth(0);
                                if (p.getSector().getPlayers().Count > 1)
                                {
                                    p.getSector().getPlayers().Remove(p);
                                }
                            }
                            else if (x == 2)
                            {
                                p.setFuel(50);
                                p.setHealth(100);
                                p.setPhasors(50);
                                p.setTorpedos(10);
                            }
                            else if (x == 3)
                            {
                                p.setStartingLocation(rnd.Next(0, 255));
                                p.getSector().removePlayer(p);
                                p.setSector(u.getSectors()[p.getStartingLocation()]);
                                p.getSector().addPlayer(p);
                                var chars  = p.getSector().getSafeLocation().ToCharArray();
                                string row = chars[0].ToString();
                                string col = chars[1].ToString();
                                p.setRow(Convert.ToInt32(row));
                                p.setCol(Convert.ToInt32(col));
                                server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender);
                            }
                            else if (x == 4)
                            {
                                message = "You found treasure!";
                            }
                        }
                        else if (parts[1].Equals("w"))
                        {
                            p.setShipAngle(270);
                            p.setCol(p.getCol() - 1);
                            int x = isCollision(p.getSector(), p.getRow(), p.getCol());
                            if (x == 1)
                            {
                                p.setHealth(0);
                                if (p.getSector().getPlayers().Count > 1)
                                {
                                    p.getSector().getPlayers().Remove(p);
                                }
                            }
                            else if (x == 2)
                            {
                                p.setFuel(50);
                                p.setHealth(100);
                                p.setTorpedos(10);
                                p.setPhasors(50);
                            }
                            else if (x == 3)
                            {
                                p.setStartingLocation(rnd.Next(0, 255));
                                p.getSector().removePlayer(p);
                                p.setSector(u.getSectors()[p.getStartingLocation()]);
                                p.getSector().addPlayer(p);
                                var chars  = p.getSector().getSafeLocation().ToCharArray();
                                string row = chars[0].ToString();
                                string col = chars[1].ToString();
                                p.setRow(Convert.ToInt32(row));
                                p.setCol(Convert.ToInt32(col));
                                server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender);
                            }
                            else if (x == 4)
                            {
                                message = "You found treasure!";
                            }
                        }
                        else if (parts[1].Equals("h"))
                        {
                            Console.Write("print");
                            p.setStartingLocation(rnd.Next(0, 255));
                            p.getSector().removePlayer(p);
                            p.setSector(u.getSectors()[p.getStartingLocation()]);
                            p.getSector().addPlayer(p);
                            var chars  = p.getSector().getSafeLocation().ToCharArray();
                            string row = chars[0].ToString();
                            string col = chars[1].ToString();
                            p.setRow(Convert.ToInt32(row));
                            p.setCol(Convert.ToInt32(col));
                            p.setFuel(p.getFuel() - 5);
                            server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender);
                        }
                        if (p.getCol() > 9)
                        {
                            p.setStartingLocation(p.getStartingLocation() + 16);
                            if (p.getSectorRegion().Equals('P'))
                            {
                                p.getSector().removePlayer(p);
                                p.setSector(u.getSectors()[p.getSectorValue()]);
                                p.getSector().addPlayer(p);
                                server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender);
                                p.setStartingLocation(p.getSectorValue());
                            }


                            else
                            {
                                p.getSector().removePlayer(p);
                                p.setSector(u.getSectors()[p.getStartingLocation()]);
                                p.getSector().addPlayer(p);
                                server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender);
                            }
                            p.setCol(0);
                        }
                        if (p.getCol() < 0)
                        {
                            p.setStartingLocation(p.getStartingLocation() - 16);
                            if ((p.getSectorRegion().Equals('A')))
                            {
                                p.getSector().removePlayer(p);
                                p.setSector(u.getSectors()[u.getSectors().Count - (16 - p.getSectorValue())]);
                                p.getSector().addPlayer(p);
                                server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender);
                                p.setStartingLocation(u.getSectors().Count - (16 - p.getSectorValue()));
                            }
                            else
                            {
                                p.getSector().removePlayer(p);
                                p.setSector(u.getSectors()[p.getStartingLocation()]);
                                p.getSector().addPlayer(p);
                                server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender);
                            }
                            p.setCol(9);
                        }

                        if (p.getRow() < 0)
                        {
                            p.setStartingLocation(p.getStartingLocation() - 1);
                            if (p.getSectorValue() == 0)
                            {
                                p.getSector().removePlayer(p);
                                p.setSector(u.getSectors()[p.getStartingLocation() + 16]);
                                p.getSector().addPlayer(p);
                                server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender);
                                p.setStartingLocation(p.getStartingLocation() + 16);
                            }
                            else
                            {
                                p.getSector().removePlayer(p);
                                p.setSector(u.getSectors()[p.getStartingLocation()]);
                                p.getSector().addPlayer(p);
                                server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender);
                            }
                            p.setRow(9);
                        }
                        if (p.getRow() > 9)
                        {
                            p.setStartingLocation(p.getStartingLocation() + 1);
                            if (p.getSectorValue() == 15)
                            {
                                p.getSector().removePlayer(p);
                                p.setSector(u.getSectors()[p.getStartingLocation() - 16]);
                                p.getSector().addPlayer(p);
                                server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender);
                                p.setStartingLocation(p.getStartingLocation() - 16);
                            }
                            else
                            {
                                p.getSector().removePlayer(p);
                                p.setSector(u.getSectors()[p.getStartingLocation()]);
                                p.getSector().addPlayer(p);
                                server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender);
                            }
                            p.setRow(0);
                        }

                        if (p.getSector().getPlayers().Count == 1)
                        {
                            string sendStream = "";
                            sendStream       += p.getSectorRegion() + "-";
                            sendStream       += p.getSectorValue() + "-";
                            sendStream       += p.getRow() + "-";
                            sendStream       += p.getCol() + "-";
                            sendStream       += p.getHealth() + "-";
                            sendStream       += p.getFuel() + "-";
                            sendStream       += p.getPhasors() + "-";
                            sendStream       += p.getTorpedos();
                            byte[] b          = new byte[18];
                            b = Encoding.ASCII.GetBytes(sendStream);
                            server.Reply((String.Format("loc:{0}:{1}:{2}", System.Text.Encoding.UTF8.GetString(b), parts[1], message)), received.Sender);
                        }
                        else
                        {
                            Console.Write("Check 1");
                            string ourPlayer    = "";
                            string otherPlayers = "";
                            byte[] b1           = new byte[18];
                            int x     = p.getSector().getPlayers().Count;
                            byte[] b2 = new byte[x * 6];
                            foreach (Player p1 in p.getSector().getPlayers())
                            {
                                if (p1.getRow() == p.getRow() && p1.getCol() == p.getCol())
                                {
                                    ourPlayer += p.getSectorRegion() + "-";
                                    ourPlayer += p.getSectorValue() + "-";
                                    ourPlayer += p.getRow() + "-";
                                    ourPlayer += p.getCol() + "-";
                                    ourPlayer += p.getHealth() + "-";
                                    ourPlayer += p.getFuel() + "-";
                                    ourPlayer += p.getPhasors() + "-";
                                    ourPlayer += p.getTorpedos() + "-";
                                }
                                else
                                {
                                    if (p1.getHealth() > 0)
                                    {
                                        otherPlayers += p1.getRow() + "-";
                                        otherPlayers += p1.getCol() + "-";
                                        otherPlayers += p1.getShipAngle() + "-";
                                    }
                                }
                            }
                            b1 = Encoding.ASCII.GetBytes(ourPlayer);
                            b2 = Encoding.ASCII.GetBytes(otherPlayers);

                            server.Reply((String.Format("loc2:{0}:{1}:{2}:{3}", System.Text.Encoding.UTF8.GetString(b1), System.Text.Encoding.UTF8.GetString(b2), parts[1], message)), received.Sender);
                        }
                    }
                }
            });


            // Endless loop for user's to send messages to Client
            string read;

            do
            {
                read = Console.ReadLine();
                foreach (IPEndPoint ep in connections.Values)
                {
                    server.Reply(read, ep);
                }
            } while (read != "quit");
        }
示例#3
0
文件: Program.cs 项目: Glac/StarhWars
        static void Main(string[] args)
        {
            //create a new server
            var    server = new UdpListener();
            Random rnd    = new Random();
            Dictionary <string, IPEndPoint> connections = new Dictionary <string, IPEndPoint>();
            Dictionary <string, Player>     players     = new Dictionary <string, Player>();


            Console.WriteLine("============================================= Server");

            string[] parts;

            //start listening for messages and copy the messages back to the client
            Task.Factory.StartNew(async() => {
                while (true)
                {
                    var received = await server.Receive();
                    string msg   = received.Message.ToString();
                    parts        = msg.Split(':');
                    fixParts(parts);
                    Console.WriteLine(msg + " -- " + received.Sender.Address.MapToIPv4().ToString());

                    // Only add new connections to the list of clients
                    if (!connections.ContainsKey(received.Sender.Address.MapToIPv4().ToString()))
                    {
                        connections.Add(received.Sender.Address.MapToIPv4().ToString(), received.Sender);
                        p1        = new Player();
                        p1.sector = rnd.Next(0, 256);
                        p1.col    = rnd.Next(0, 9);
                        p1.row    = rnd.Next(0, 9);
                        players.Add(received.Sender.Address.MapToIPv4().ToString(), p1);
                        server.Reply(String.Format("connected:true:{0}:{1}:{2}", p1.sector, p1.col, p1.row), received.Sender);
                    }


                    string ret = "[Connected Users]";
                    if (received.Message.Equals("list"))
                    {
                        foreach (string s in connections.Keys)
                        {
                            ret += "\n>> " + s;
                        }
                        server.Reply(ret + "\n*****************", received.Sender);
                    }
                    else
                    {
                        // Okay, send message to everyone
                        //foreach (IPEndPoint ep in connections.Values)
                        //    server.Reply("[" + received.Sender.Address.ToString() + "] says: " + received.Message, ep);
                    }

                    if (received.Message == "quit")
                    {
                        connections.Remove(received.Sender.Address.ToString());     // Remove the IP Address from the list of connections
                    }
                    else if (parts[0].Equals("mov"))
                    {
                        Player p;
                        players.TryGetValue(received.Sender.Address.MapToIPv4().ToString(), out p);

                        if (parts[1].Equals("n"))
                        {
                            p.row--;
                        }
                        else if (parts[1].Equals("s"))
                        {
                            p.row++;
                        }
                        else if (parts[1].Equals("e"))
                        {
                            p.col++;
                        }
                        else if (parts[1].Equals("w"))
                        {
                            p.col--;
                        }

                        server.Reply(String.Format("loc:{0}:{1}:{2}:{3}", p.sector, p.col, p.row, parts[1]), received.Sender);
                    }
                    else if (parts[0].Equals("hyp"))
                    {
                        Player p;
                        players.TryGetValue(received.Sender.Address.MapToIPv4().ToString(), out p);
                        p.col        = rnd.Next(0, 9);
                        p.row        = rnd.Next(0, 9);
                        p.fuel_pods -= 5;
                        server.Reply(String.Format("loc:{0}:{1}:{2}:{3}", p.sector, p.col, p.row, p.fuel_pods), received.Sender);
                    }
                }
            });


            // Endless loop for user's to send messages to Client
            string read;

            do
            {
                read = Console.ReadLine();
                foreach (IPEndPoint ep in connections.Values)
                {
                    server.Reply(read, ep);
                }
            } while (read != "quit");
        }