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