Пример #1
0
 public void DrawBlock(Stone b)
 {
     spriteBatch.Draw(stoneTexture, new Rectangle(b.x * 50, b.y * 50, 45, 45), null, Color.White);
 }
Пример #2
0
        public void processMsg(String data, TimeSpan time)
        {
            if (data == null) return;

            //To Pani - update the grid[] as required.
            //This is the parser. add if conditions to identify messages and do the required process

            if (data.Length < 2) //Pre test for invalid messages
            {
                //Invalid message
                return;
            }

            if (data.Substring(0, 2) == "I:")
            {
                //Game init
                String[] arr = data.Split(':', '#');

                //Player details---------------------
                thisPlayer.name = arr[1];
                thisPlayer.colour = Color.Green;

                players[int.Parse(arr[1][1].ToString())] = thisPlayer;

                //Console.WriteLine(thisPlayer.name);
                //Console.WriteLine(players[1].name);

                //Add bricks,stones,water------------
                String[] brickCordinates = arr[2].Split(';');
                for (int i = 0; i < brickCordinates.Length; i++)
                {
                    int x = int.Parse(brickCordinates[i][0].ToString());
                    int y = int.Parse(brickCordinates[i][2].ToString());
                    //blocks.Add(new Brick(x, y, 100));
                    blocks[x, y] = new Brick(x, y, 100);
                    //(blocks[x, y] as Brick).health = 234;
                    grid[x, y] = Constant.BRICK;
                }

                String[] stoneCordinates = arr[3].Split(';');
                for (int i = 0; i < stoneCordinates.Length; i++)
                {
                    int x = int.Parse(stoneCordinates[i][0].ToString());
                    int y = int.Parse(stoneCordinates[i][2].ToString());
                    //blocks.Add(new Stone(x, y));
                    blocks[x, y] = new Stone(x, y);
                    grid[x, y] = Constant.STONE;
                }

                String[] waterCordinates = arr[4].Split(';');
                for (int i = 0; i < waterCordinates.Length; i++)
                {
                    int x = int.Parse(waterCordinates[i][0].ToString());
                    int y = int.Parse(waterCordinates[i][2].ToString());
                    //blocks.Add(new Water(x, y));
                    blocks[x, y] = new Water(x, y);
                    grid[x, y] = Constant.WATER;
                }

                for(int i=0; i<10; i++)
                {
                    for(int j=0; j<10; j++)
                    {
                        if (blocks[i, j] == null)
                            blocks[i, j] = new EmptyBlock(i, j);
                    }
                }

            }

            //Console.WriteLine(thisPlayer.name);
            if (data.Substring(0, 2) == "S:")
            {
                String[] arr = data.Split(':', ';', '#');

                thisPlayer.x = int.Parse(arr[2][0].ToString());
                thisPlayer.y = int.Parse(arr[2][2].ToString());
                thisPlayer.direction = int.Parse(arr[3][0].ToString());

            }

            if (data.Substring(0, 2) == "C:")
            {
                String[] arr = data.Split(':', '#');

                Coin c = new Coin();
                c.x = int.Parse(arr[1][0].ToString());
                c.y = int.Parse(arr[1][2].ToString());
                c.lifeTime = int.Parse(arr[2]);
                c.value = int.Parse(arr[3]);
                c.arrivedTime = time; //Save the arrive time
                coins.Add(c);
            }

            if (data.Substring(0, 2) == "L:")
            {
                String[] arr = data.Split(':', '#');
                LifePack l = new LifePack();
                l.x = int.Parse(arr[1][0].ToString());
                l.y = int.Parse(arr[1][2].ToString());
                l.lifeTime = int.Parse(arr[2]);
                l.arrivedTime = time; //Save the arrive time
                lifePacks.Add(l);
            }

            if (data.Substring(0, 2) == "G:")
            {
                String[] arr = data.Split(':', '#');

                for (int i = 0; i < arr.Length - 1; i++)
                {
                    if (arr[i].Length > 1 && arr[i][0] == 'P')
                    {
                        String[] details1 = arr[i].Split(';');

                        int j = int.Parse(details1[0][1].ToString());
                        if (j < players.Count && j >= 0)
                        {
                            if (players[j] == null)
                                players[j] = new Player();
                            players[j].name = details1[0];
                            players[j].x = int.Parse(details1[1][0].ToString());
                            players[j].y = int.Parse(details1[1][2].ToString());
                            players[j].direction = int.Parse(details1[2][0].ToString());
                            players[j].isShot = int.Parse(details1[3][0].ToString());
                            players[j].health = int.Parse(details1[4]);
                            players[j].coins = int.Parse(details1[5]);
                            players[j].points = int.Parse(details1[6]);

                        }
                    }

                    else if (arr[i].Length > 1)
                    {
                        String[] details2 = arr[i].Split(';');
                        for (int k = 0; k < details2.Length; k++)
                        {
                            String[] xyHealth = details2[k].Split(',');
                            int x = int.Parse(xyHealth[0].ToString());
                            int y = int.Parse(xyHealth[1].ToString());
                            int damage = int.Parse(xyHealth[2].ToString());
                            int health;

                            if (damage == 0)
                            {
                                health = 100;
                                (blocks[x, y] as Brick).health = health;
                            }

                            if (damage == 1)
                            {
                                health = 75;
                                (blocks[x, y] as Brick).health = health;
                            }

                            if (damage == 2)
                            {
                                health = 50;
                                (blocks[x, y] as Brick).health = health;
                            }

                            if (damage == 3)
                            {
                                health = 25;
                                (blocks[x, y] as Brick).health = health;
                            }

                            if (damage == 4)
                            {
                                health = 0;
                                (blocks[x, y] as Brick).health = health;
                            }

                            //(blocks[x, y] as Brick).health = health;
                            (blocks[x, y] as Brick).x = x;
                            (blocks[x, y] as Brick).y = y;

                        }

                    }

                }

                //After global update, check if there is a pile on a player's location then delete it
                foreach (dynamic player in players)
                {
                    if (player == null) continue;
                    // Remove life packs
                    for (int i = 0; i < lifePacks.Count; i++)
                    {
                        if (lifePacks[i].x==player.x &&  lifePacks[i].y == player.y)
                        {
                            lifePacks.RemoveAt(i);
                            i--;
                        }
                    }
                    // remove coins
                    for (int i = 0; i < coins.Count; i++)
                    {
                        //Console.WriteLine(coins[i].lifeTime);
                        if (coins[i].x == player.x && coins[i].y == player.y)
                        {
                            coins.RemoveAt(i);
                            i--;
                        }
                    }

                }
            }

            //By Janaka---------------------------------------------------------
            else if (data == Constant.S2C_GAMESTARTED)
            {
                //Game started
            }
            //Add others
            else if (data == Constant.S2C_TOOEARLY)
            {

                //Messages which can't be recognized
            }
            //------------------------------------------------------------------
        }