예제 #1
0
파일: Comando.cs 프로젝트: joninvski/padi
 public Comando(string accao, Cliente ligacao, RoomDesc sala, string idMapa)
 {
     _accao = accao;
     _ligacao = ligacao;
     _sala = sala;
     _idMapa = idMapa;
 }
예제 #2
0
파일: MapLoader.cs 프로젝트: joninvski/padi
        private static int FindRoom(RoomDesc room, int[,] map, Direction dir)
        {
            if (map[room.Line,room.Column] != room.Num) {
                throw new Exception("Inconsistent map.");
            }

            int l, c, lmax = map.GetLength(0) - 1, cmax = map.GetLength(1) - 1;

            switch(dir) {

                case Direction.North:
                    l = room.Line - 1;
                    while (l >= 0 && map[l,room.Column] == -1) {
                        l--;
                    }
                    if (l != room.Line -1 && l >= 0 && map[l,room.Column] > 0) {
                        return map[l,room.Column];
                    }
                    break;
                case Direction.South:
                    l = room.Line + 1;
                    while (l <= lmax && map[l,room.Column] == -1) {
                        l++;
                    }
                    if (l != room.Line + 1 && l <= lmax && map[l,room.Column] > 0) {
                        return map[l,room.Column];
                    }
                    break;
                case Direction.East:
                    c = room.Column + 1;
                    while (c <= cmax && map[room.Line,c] == -1) {
                        c++;
                    }
                    if (c != room.Column + 1 && c <= cmax && map[room.Line,c] > 0) {
                        return map[room.Line,c];
                    }
                    break;
                case Direction.West:
                    c = room.Column - 1;
                    while (c >= 0 && map[room.Line,c] == -1) {
                        c--;
                    }
                    if (c != room.Column - 1 && c >= 0 && map[room.Line,c] > 0) {
                        return map[room.Line,c];
                    }
                    break;
            }
            return -1;
        }
예제 #3
0
파일: Comando.cs 프로젝트: joninvski/padi
        /// <summary>
        /// Dada uma sala e uma direccao, indica qual o numero da proxima sala
        /// </summary>
        /// <param name="accao">Direccao a tomar</param>
        /// <param name="Sala">Sala Actual</param>
        /// <returns>Numero da proxima sala</returns>
        public static int IndicaSalaDestino(string accao, RoomDesc Sala)
        {
            if (accao.Equals(MapDesc.NORTE))
            {
                return Sala.North;
            }

            if (accao.Equals(MapDesc.SUL))
            {
                return Sala.South;
            }

            if (accao.Equals(MapDesc.ESTE))
            {
                return Sala.East;
            }

            if (accao.Equals(MapDesc.OESTE))
            {
                return Sala.West;
            }

            return -1;
        }
예제 #4
0
        public static MensagemServidor UpdateEstadoGlobalSistema(string idCliente, string idJogo, string idOrigem, string destino, RoomDesc novaSala, int pontuacaoAntiga, int pontuacaoNova, bool jogoTerminou, string resultadoAccaoCliente, string guid)
        {
            MensagemServidor mensagem = new MensagemServidor(idCliente, idOrigem, destino, Mensagem.UPDATEESTADOGLOBAL);
             mensagem._novaSala = novaSala;
             mensagem._idJogo = idJogo;
             mensagem._pontuacaoAntiga = pontuacaoAntiga;
             mensagem._pontuacaoNova = pontuacaoNova;
             mensagem._jogoTerminou = jogoTerminou;
             mensagem._resultadoAccaoCliente = resultadoAccaoCliente;
             mensagem._idUnico = guid;

             return mensagem;
        }
예제 #5
0
파일: MapDesc.cs 프로젝트: joninvski/padi
        public void ActualizaSala(RoomDesc sala)
        {
            _mapa[sala.Num - 1] = sala;

             return;
        }
예제 #6
0
        /// <summary>
        /// Acende os botoes adequados conforme o que se puder fazer e diz se os existe aroma a veneno
        /// ou se existe um cofre sem tesouro la dentro
        /// </summary>
        /// <param name="salaActual">A sala em que o jogador se encontra</param>
        private void AcertaBotoesDireccoesAdequadas(RoomDesc salaActual)
        {
            //Norte
             if (_salaActual.North == -1)
             {
            _btNorte.Enabled = false;
             }
             else
             {
            _btNorte.Enabled = true;
             }

             //Este
             if (_salaActual.East == -1)
             {
            _btEste.Enabled = false;
             }
             else
             {
            _btEste.Enabled = true;
             }

             //Sul
             if (_salaActual.South == -1)
             {
            _btSul.Enabled = false;
             }
             else
             {
            _btSul.Enabled = true;
             }

             //Oeste
             if (_salaActual.West == -1)
             {
            _btOeste.Enabled = false;
             }
             else
             {
            _btOeste.Enabled = true;
             }

             char tipoSala = _salaActual.RoomType;
             //Sala com cofre
             if (tipoSala.Equals(MapDesc.SALAVAZIA) || tipoSala.Equals(MapDesc.SALAAROMAVENENO) || tipoSala.Equals(MapDesc.COFREVAZIO))
             {
            _btAbre.Enabled = false;
             }
             else
             {
            _btAbre.Enabled = true;
             }

             //So para DEBUG (sugerido pelo professor)
             if (tipoSala.Equals(MapDesc.SALAAROMAVENENO))
             {
            MMGCliente.EscreveLog(Configuration.TEXTO_SALA_ONDE_EXISTIU_VENENO, _salaActual.Num);
             }
             if (tipoSala.Equals(MapDesc.COFREVAZIO))
             {
            MMGCliente.EscreveLog(Configuration.TEXTO_COFRE_VAZIO, _salaActual.Num);
             }
        }
예제 #7
0
 public static void TrataRespostaMovimento(RoomDesc novaSala, int numGasRedor, int pontuacao)
 {
     ActualizaSalaActual(novaSala);
      if (_salaActual.CofreAberto == true)
      {
     MMGCliente.EscreveLog(Configuration.TEXTO_COFRE_ABERTO, novaSala.Num);
      }
      MMGCliente.form.AcertaBotoesDireccoesAdequadas(_salaActual);
      form._btMudarServidor.Enabled = true;
      form._tbSalasGas.Text = "" + numGasRedor;
 }
예제 #8
0
        void TrataBotoesMovimento(string movimento)
        {
            if (_modoOffline == true)
             {
            if (movimento.Equals(MapDesc.ABRIR))
            {
               _lstCofresAbertosOffline.Add(_salaActual.Num);
               _btAbre.Enabled = false;
               return;
            }
            int salaDestino = Comando.IndicaSalaDestino(movimento, _salaActual);
            _salaActual = _mapaOffline.GetSala(salaDestino);
            AcertaBotoesDireccoesAdequadas(_salaActual);
            _tbNumeroSala.Text = "" + _salaActual.Num;
            _tbSalasGas.Enabled = false;

            if (_lstCofresAbertosOffline.Contains(_salaActual.Num))
            {
               EscreveLog("Ja tentou abrir o cofre desta sala em modo offline. Só 1vez permitida", _salaActual.Num);
               _btAbre.Enabled = false;
            }
             }
             else
             {
            DisableBotoesForm();
             }
        }
예제 #9
0
 public static void ActualizaSalaActual(RoomDesc sala)
 {
     _salaActual = sala;
      form._tbNumeroSala.Text = "" + sala.Num;
 }
예제 #10
0
        public static MensagemCliente RespostaMovimentoJogador(string idCliente, RoomDesc novaSala, int NumSalasAdjComGas, int pontuacaoNova)
        {
            MensagemCliente mensagem = new MensagemCliente(idCliente, Mensagem.RESPOSTAMOVIMENTO, idCliente);

             mensagem._nick = idCliente;
             mensagem._novaSala = novaSala;
             mensagem._numSalasAdjComGas = NumSalasAdjComGas;
             mensagem._pontuacaoNova = pontuacaoNova;

             return mensagem;
        }
예제 #11
0
        public static void RealizaUpdateDoEstado(string idJogo, RoomDesc sala, string idCliente, int pontuacaoAntiga, int pontuacaoNova, bool jogoTerminou, string resultadoAccaoCliente)
        {
            Configuration.Debug("Vou fazer update da sala:" + sala.Num + " do jogo:" + idJogo + " devido ao jogador:" + idCliente, Configuration.PRI_MIN);

             //Significa que o estado do sistema global mudou. Preciso de actualizar a sala
             Jogo jogo = Jogo.GetJogo(idJogo, ServerMain._lstJogos);

             if (jogo == null)
             {
            Configuration.Debug("Descartei msg referente a 1jogo que eu ainda nem sei que foi criado.", Configuration.PRI_MAX);
            return;
             }

             if (LigacaoCliente.ClienteExiste(idCliente, ServerMain._lstLigacoesAJogadores) == false)
             {
            Configuration.Debug("Esta mensagem é devido a um cliente que eu ainda nem conheco mas nao há problema.", Configuration.PRI_MAX);
             }

             //Preciso de actualizar a sala
             jogo.Mapa.ActualizaSala(sala);
             //E pontuacao do cliente
             jogo.ActualizaPontuacao(idCliente, pontuacaoNova);
             //E se o jogo acabou ou nao
             jogo.Terminou = jogoTerminou;

             //Se este update corresponde a um pedido de um cliente meu entao vou avisa-lo
             if (LigacaoCliente.EMeuCliente(idCliente, ServerMain._lstLigacoesAJogadores) == true)
             {
            MensagemCliente mensagem;

            if (jogoTerminou == false)
            {
               mensagem = MensagemCliente.RespondeAbertura(idCliente, pontuacaoAntiga, pontuacaoNova, resultadoAccaoCliente);
            }
            else
            {
               ArrayList top10 = jogo.ElaboraListaTop10();
               mensagem = MensagemCliente.RespondeJogoFim(idCliente, pontuacaoNova, top10);
            }

            ComunicacaoServidor.MeteMensagemParaEnviar(mensagem);
             }
             return;
        }