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; } }
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); } }