コード例 #1
0
        private void parsePacket(PacketType type, String data)
        {
            switch(type) {
            case PacketType.Chat: {
              ChatMsg msg = new ChatMsg();
              msg.msg = data;

              if(m_msgs.Count > 5) {
            m_msgs.RemoveAt(0);
              }

              m_msgs.Add(msg);

              redrawMap();
            }
            break;

            case PacketType.NameExists:
            {
              MessageBox.Show("Ten nick jest już używany, wybierz inny.");

              Width += 210;
              animTimer.Enabled = false;
              connGroupBox.Visible = true;
              connectButton.Visible = true;
              exitButton.Visible = true;
              controlTextBox.Visible = false;
            }
            break;

            case PacketType.Map:
            {
              String[] lines = data.Split(' ');
              int y = 0;
              foreach(String line in lines) {
            line.Trim();

            if(line.Length > 0) {
              List<Field> list = new List<Field>();
              m_map.Add(list);
              for(int x = 0; x < line.Length; x++) {
                Field field = new Field();
                field.type = (FieldType)Convert.ToInt32(line.Substring(x, 1));

                m_map.Last().Add(field);
              }
            }

            y++;
              }

              sendData(PacketType.MapOK, "");

              redrawMap();
            }
            break;

            case PacketType.Spawn: {
              String[] spawn_pos = data.Split(' ');
              if(spawn_pos.Length == 3) {
            m_player.x = Convert.ToInt32(spawn_pos[0]);
            m_player.y = Convert.ToInt32(spawn_pos[1]);
            m_player.color = Color.FromArgb(Convert.ToInt32(spawn_pos[2]));

            moveCamera();
            redrawMap();
              }
            }
            break;

            case PacketType.PlayerAdd: {
              String[] player_info = data.Split(' ');
              if(player_info.Length == 4) {
            Player player = new Player();
            player.x = Convert.ToInt32(player_info[0]);
            player.y = Convert.ToInt32(player_info[1]);
            player.name = player_info[2];
            player.color = Color.FromArgb(Convert.ToInt32(player_info[3]));

            m_players.Add(player);
            redrawMap();
              }
            }
            break;

            case PacketType.PlayerMove: {
              String[] info = data.Split(' ');
              if(info.Length == 3) {
            if(info[0] == m_player.name) {
              m_player.x = Convert.ToInt32(info[1]);
              m_player.y = Convert.ToInt32(info[2]);

              moveCamera();
            } else {
              playerByName(info[0]).x = Convert.ToInt32(info[1]);
              playerByName(info[0]).y = Convert.ToInt32(info[2]);
            }

            redrawMap();
              }
            }
            break;

            case PacketType.BombAdd: {
              String[] bomb_pos = data.Split(' ');

              if(bomb_pos.Length == 2) {
            Point bomb = new Point();
            bomb.X = Convert.ToInt32(bomb_pos[0]);
            bomb.Y = Convert.ToInt32(bomb_pos[1]);

            m_bombs.Add(bomb);

            redrawMap();
              }
            }
            break;

            case PacketType.BombBoom: {
              String[] bomb_pos = data.Split(' ');

              if(bomb_pos.Length == 2) {
            int x = Convert.ToInt32(bomb_pos[0]);
            int y = Convert.ToInt32(bomb_pos[1]);

            Point rem = Point.Empty;
            foreach(Point bomb in m_bombs) {
              if((bomb.X == x) && (bomb.Y == y)) {
                rem = bomb;
              }
            }

            if(!rem.IsEmpty) {
              m_bombs.Remove(rem);
            }

            Explosion expl = new Explosion();
            expl.pos.X = x;
            expl.pos.Y = y;
            m_explo.Add(expl);

            if((m_map[y][x].type == FieldType.Breakable)) {
              m_map[y][x].type = FieldType.Nothing;
            } else if((m_map[y - 1][x].type == FieldType.Breakable)) {
              m_map[y - 1][x].type = FieldType.Nothing;
            } else if((m_map[y + 1][x].type == FieldType.Breakable)) {
              m_map[y + 1][x].type = FieldType.Nothing;
            } else if((m_map[y][x - 1].type == FieldType.Breakable)) {
              m_map[y][x - 1].type = FieldType.Nothing;
            } else if((m_map[y][x + 1].type == FieldType.Breakable)) {
              m_map[y][x + 1].type = FieldType.Nothing;
            }

            redrawMap();
              }
            }
            break;

            case PacketType.PlayerQuit: {
              m_players.Remove(playerByName(data));
              redrawMap();
            }
            break;

            default:
              //addLog(String.Format("Nieznany typ pakietu: {0}", type));
            break;
              }
        }
コード例 #2
0
        private void drawExplosion(Explosion expl)
        {
            drawBoom(expl.pos.X, expl.pos.Y);

              if(m_map[expl.pos.Y - 1][expl.pos.X].type == FieldType.Nothing) {
            drawBoom(expl.pos.X, expl.pos.Y - 1);
              }
              if(m_map[expl.pos.Y + 1][expl.pos.X].type == FieldType.Nothing) {
            drawBoom(expl.pos.X, expl.pos.Y + 1);
              }
              if(m_map[expl.pos.Y][expl.pos.X + 1].type == FieldType.Nothing) {
            drawBoom(expl.pos.X + 1, expl.pos.Y);
              }
              if(m_map[expl.pos.Y][expl.pos.X - 1].type == FieldType.Nothing) {
            drawBoom(expl.pos.X - 1, expl.pos.Y);
              }
        }