Beispiel #1
0
        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;
 }
Beispiel #3
0
        public void DoDragDrop(TipoDeNavio navio)
        {
            Direcao    = 0;
            IsDragging = true;
            Navio      = navio;

            OnDragStart();
        }
Beispiel #4
0
 /// <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;
 }
Beispiel #5
0
 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;
     }
 }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
 public NavioInfo(TipoDeNavio navio, int direcao)
 {
     Navio   = navio;
     Direcao = direcao;
 }
Beispiel #9
0
 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
 }
Beispiel #13
0
 /// <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));
 }
Beispiel #14
0
 /// <summary>
 /// Obtém o tamanho do navio acertado por um tiro
 /// </summary>
 public static int Tamanho(this TipoDeNavio nav)
 {
     return((int)((uint)nav & 0xff));
 }
Beispiel #15
0
        /// <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);
        }