Exemplo n.º 1
0
 public void PlayCard(IPlayer player, Carta card)
 {
     Jogada jogada = new Jogada(player, card);
     this.partidas[this.curPartida].vazas[partidas[this.curPartida].vazas.Count - 1].jogadas.Add(jogada);
     if (VazaChanged != null)
     {
         VazaChanged();
     }
     if (player is HumanPlayer)
     {
         // so se pode remover a carta depois de mudar a vaza, devido a conflitos de imagens
         HumanPlayer h = this.ActivePlayer as HumanPlayer;
         h.Retirar(h.tempPosicao);
         h.tempPosicao = -1;
     }
     else if (player is BotPlayer)
     {
         BotPlayer h = this.ActivePlayer as BotPlayer;
         h.Retirar(h.tempPosicao);
         h.tempPosicao = -1;
     }
 }
Exemplo n.º 2
0
        public void DeserializeFromXML(string filename)
        {
            IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();
            IsolatedStorageFileStream isfStream = null;

            XDocument doc = null;

            isfStream = new IsolatedStorageFileStream(filename, FileMode.Open, FileAccess.Read, myIsolatedStorage);

            doc = XDocument.Load(isfStream);
            isfStream.Close();

               // XDocument doc = XDocument.Load(filename);

            this.nextPartidaPlayer = Convert.ToInt32(doc.Element("GameModel").Element("nextPartidaPlayer").Value);
            this.activePlayer = Convert.ToInt32(doc.Element("GameModel").Element("activePlayer").Value);

            this.equipas = new Team[2];
            this.players = new IPlayer[4];
            List<IPlayer> jogadores = new List<IPlayer>();
            var xmlEquipas = from al in doc.Element("GameModel").Element("Partida").Element("Equipas").Descendants("Equipa") select al;
            int i = 0;
            int n = 0;
            foreach (var newTeam in xmlEquipas)
            {
                var xmlJogadores = from al in newTeam.Descendants("Jogador") select al;

                foreach (var newJogador in xmlJogadores)
                {
                    int jogadorID = Convert.ToInt32(newJogador.Attribute("id").Value);
                    var xmlMao = from al in newJogador.Element("Mao").Descendants("Carta") select al;
                    List<Carta> cartasMao = new List<Carta>();
                    foreach (var newCarta in xmlMao)
                    {
                        int id = Convert.ToInt32(newCarta.Attribute("id").Value);
                        Carta carta;
                        if (id != -1)
                        {
                            NAIPE naipe = (NAIPE)(id / 10);
                            int rank = id % 10;
                            int pontos = pontosFull[id - 10 * (id / 10)];
                            carta = new Carta(naipe, pontos, id, rank);
                        }
                        else
                        {
                            //carta = new Carta(NAIPE.nenhum, -1, -1, -1);
                            carta = null;
                        }
                        cartasMao.Add(carta);
                    }
                    if (newJogador.Attribute("human").Value == "true")
                    {
                        HumanPlayer human = new HumanPlayer();
                        human.Nome = newJogador.Element("Nome").Value;
                        human.tempPosicao = Convert.ToInt32(newJogador.Element("tempPosicao").Value);
                        //human.Receber(cartasMao);
                        human.ID = jogadorID;
                        //this.players[n] = human;
                        jogadores.Add(human);
                    }
                    else
                    {
                        BotPlayer bot = new BotPlayer();
                        bot.Nome = newJogador.Element("Nome").Value;
                        bot.tempPosicao = Convert.ToInt32(newJogador.Element("tempPosicao").Value);
                        //bot.Receber(cartasMao);
                        bot.ID = jogadorID;
                        //this.players[n] = bot;
                        jogadores.Add(bot);
                    }
                    PlayerHandLists.Add(n, cartasMao);
                    if (jogadores.Count == 2)
                    {
                        this.equipas[i] = new Team(jogadores);
                        this.equipas[i].pontosPartida = Convert.ToInt32(newTeam.Attribute("pontosPartida").Value);
                        this.equipas[i].pontosJogo = Convert.ToInt32(newTeam.Attribute("pontosJogo").Value);
                        jogadores = new List<IPlayer>();
                    }
                    n++;
                }
                i++;
            }
            for (int j = 0; j < 4; j++)
            {
                this.players[j] = this.equipas[j % 2].jogadores[j / 2];
            }
            Partida partida = new Partida(deck, equipas, 0);
            int trunfoID = Convert.ToInt32(doc.Element("GameModel").Element("Partida").Element("CartaTrunfo").Value);
            int numVazas = Convert.ToInt32(doc.Element("GameModel").Element("Partida").Element("numVazas").Value);
            NAIPE naipeTrunfo = (NAIPE)(trunfoID / 10);
            int rankTrunfo = trunfoID % 10;
            int pontosTrunfo = trunfoID - 10 * (trunfoID / 10);
            Carta cartaTrunfo = new Carta(naipeTrunfo, pontosTrunfo, trunfoID, rankTrunfo);
            partida.trunfo = cartaTrunfo;
            partida.numVazas = numVazas;
            this.partidas = new List<Partida>();
            this.partidas.Add(partida);

            List<Vaza> listaVazas = new List<Vaza>();

            var xmlVazas = from al in doc.Element("GameModel").Element("Partida").Element("Vazas").Descendants("Vaza") select al;
            foreach (var newVaza in xmlVazas)
            {
                List<Jogada> listaJogadas = new List<Jogada>();
                var xmlCartasVaza = from al in newVaza.Descendants("Carta") select al;
                foreach (var newCarta in xmlCartasVaza)
                {
                    Jogada jogada = null;
                    int id = Convert.ToInt32(newCarta.Attribute("id").Value);
                    Carta carta;
                    if (id != -1)
                    {
                        NAIPE naipe = (NAIPE)(id / 10);
                        int rank = id % 10;
                        int pontos = pontosFull[id - 10 * (id / 10)];
                        carta = new Carta(naipe, pontos, id, rank);
                    }
                    else
                    {
                        //carta = new Carta(NAIPE.nenhum, -1, -1, -1);
                        carta = null;
                    }
                    int jID = Convert.ToInt32(newCarta.Attribute("jogadorId").Value);
                    IPlayer vazaPlayer = getPlayerFromID(jID);
                    if (vazaPlayer != null)
                    {
                        if (vazaPlayer is HumanPlayer)
                        {
                            jogada = new Jogada(vazaPlayer as HumanPlayer, carta);
                        }
                        else
                        {
                            jogada = new Jogada(vazaPlayer as BotPlayer, carta);
                        }
                    }
                    listaJogadas.Add(jogada);
                }
                listaVazas.Add(new Vaza(listaJogadas));
            }
            this.partidas[0].vazas = listaVazas;
            if (AnswerGameStart != null)
            {
                AnswerGameStart();
            }
        }