public void RemoverNavio(TipoDeNavio barco) { switch (barco) { case TipoDeNavio.PortaAvioes: pbPortaAvioes.Image = null; break; case TipoDeNavio.Encouracado: pbEncouracado.Image = null; break; case TipoDeNavio.Cruzador: pbCruzador.Image = null; break; case TipoDeNavio.Destroier: pbDestroier.Image = null; break; case TipoDeNavio.Submarino: pbSubmarino.Image = null; break; } }
public NavioInfo(TipoDeNavio navio, int direcao, Point pos) { Navio = navio; Direcao = direcao; Pos = pos; Valido = false; }
public void DoDragDrop(TipoDeNavio navio) { Direcao = 0; IsDragging = true; Navio = navio; OnDragStart(); }
/// <summary> /// Construtor /// </summary> /// <param name="col">Número da coluna da célula</param> /// <param name="row">Número da linha da célula</param> /// <param name="tipo">Tipo de navio da célula</param> /// <param name="prox">Próxima célula do mesmo navio</param> /// <param name="proxHorz">Próxima célula na horizontal</param> /// <param name="proxVert">Próxima célula na vertical</param> public Celula(int col, int row, TipoDeNavio tipo, Celula primeira, Celula prox, Celula proxHorz = null, Celula proxVert = null) { Coluna = col; Linha = row; TipoDeNavio = tipo; ProximaDoNavio = prox; ProxHorz = proxHorz; ProxVert = proxVert; FoiAcertada = false; }
private void pictureBox1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.Bitmap)) { e.Effect = DragDropEffects.Copy; navio = (TipoDeNavio)Enum.Parse(typeof(TipoDeNavio), ((Bitmap)e.Data.GetData(DataFormats.Bitmap)).Tag.ToString()); } else { e.Effect = DragDropEffects.None; } }
/// <summary> /// Obtém o número de navios de um certo tipo no tabuleiro /// </summary> /// <param name="tipoDeNavio">O tipo do navio</param> /// <returns>O número de navios de um certo tipo no tabuleiro</returns> public int Contar(TipoDeNavio tipoDeNavio) { int n = 0; foreach (TipoDeNavio navio in Navios.Values) { if (navio == tipoDeNavio) { n++; } } return(n); }
private void pictureBox1_DragDrop(object sender, DragEventArgs e) { if (frmNavios.Direcao == 0) { if (10 - navio.Tamanho() < y1) { y1 = 10 - navio.Tamanho(); } } else if (10 - navio.Tamanho() < x1) { x1 = 10 - navio.Tamanho(); } try { tabuleiro.PosicionarNavio(navio, x1, y1, (Direcao)frmNavios.Direcao); frmNavios.RemoverNavio(navio); } catch (Exception ex) { MessageBox.Show("Posição inválida"); } if (tabuleiro.EstaCompleto()) { frmNavios.Close(); cliente = new ClienteP2P(lblJogador.Text, tabuleiro); frmJogadores = new Jogadores(); frmJogadores.btnConectar.Click += BtnConectar_Click; frmJogadores.Show(this); cliente.OnClienteDisponivel += Cliente_OnClienteDisponivel; cliente.OnClienteRequisitandoConexao += Cliente_OnClienteRequisitandoConexao; cliente.OnClienteConectado += Cliente_OnClienteConectado; cliente.OnClienteDesconectado += Cliente_OnClienteDesconectado; cliente.OnDarTiro += Cliente_OnDarTiro; cliente.OnResultadoDeTiro += Cliente_OnResultadoDeTiro; cliente.OnTiroRecebido += Cliente_OnTiroRecebido; cliente.OnClienteDisponivel += Cliente_OnClienteDisponivel; cliente.OnClienteIndisponivel += Cliente_OnClienteIndisponivel; // cliente.OnFimDeJogo += Cliente_OnFimDeJogo; cliente.Iniciar(); } navio = default(TipoDeNavio); }
public NavioInfo(TipoDeNavio navio, int direcao) { Navio = navio; Direcao = direcao; }
public NavioDirecionado(TipoDeNavio navio, int direcao) { Navio = navio; direcao = direcao % 3; }
public void Adicionar(TipoDeNavio navio) { navios.Add(Rectangle.Empty, navio); Rearranjar(); }
public void Remover(TipoDeNavio navio) { navios.Remove(navios.First(kvp => kvp.Value == navio).Key); Arranjado = false; }
public void DragOver(Point pos, TipoDeNavio navio, int direcao) { MouseMove(pos); navioArrastado = new NavioInfo(navio, direcao, pos); // Inicialmente, coloca a posição literal do mouse no navio }
/// <summary> /// Obtém o limite de um tipo de navio no mapa /// </summary> public static int Limite(this TipoDeNavio nav) { return((int)(((uint)nav & 0xff00) >> 8)); }
/// <summary> /// Obtém o tamanho do navio acertado por um tiro /// </summary> public static int Tamanho(this TipoDeNavio nav) { return((int)((uint)nav & 0xff)); }
/// <summary> /// Posiciona um navio no mapa com a primeira posição dada por X e Y e /// a direção por d. /// /// A direção /// </summary> /// <param name="tipo">Tipo de navio a ser posicionado</param> /// <param name="x">Posição X do navio</param> /// <param name="y">Posição Y do navio</param> /// <param name="d">Direção do navio.</param> /// <exception cref="IndexOutOfRangeException">Se o navio sair dos limites do mapa</exception> /// <exception cref="ArgumentException">Se a direção for inválida</exception> /// <exception cref="Exception">Se o navio interseccionar com outro ou o tabuleiro já tiver navios demais do tipo passado</exception> public void PosicionarNavio(TipoDeNavio tipo, int x, int y, Direcao d) { if (Contar(tipo) == tipo.Limite()) { throw new Exception("O tabuleiro já tem navios demais desse tipo"); } // Determina o incremento na posição X e Y para a direção dada int ix = 0, iy = 0; switch ((int)d) { case 0: iy = 1; break; case 1: ix = -1; break; case 2: iy = -1; break; case 3: ix = 1; break; default: throw new ArgumentException("Direção inválida"); } // Gera as células para o navio int len = tipo.Tamanho(); Celula[] celulas = new Celula[len]; for (int i = celulas.Length - 1; i >= 0; i--) { int nx = x + ix * i, ny = y + iy * i; if (nx < 0 || nx >= NumeroDeColunas || ny < 0 || ny >= NumeroDeLinhas) { throw new Exception("Navio fora do tabuleiro"); } celulas[i] = new Celula(nx, ny, tipo, null, i == celulas.Length - 1 ? null : celulas[i + 1]); } // Define a primeiro célula do navio para cada célula do navio e verifica intersecção foreach (Celula celula in celulas) { celula.PrimeiraDoNavio = celulas[0]; // Define o ponteiro para a primeira célula do navio posicionado if (this[celula.Linha, celula.Coluna] != null) { throw new Exception("Intersecção de navios"); } } // Posiciona as células na matriz foreach (Celula celula in celulas) { this[celula.Linha, celula.Coluna] = celula; } Navios.Add(new int[] { x, y, (int)d }, tipo); }