/// <summary> /// This method is used when the user trhrows a card in the table /// </summary> /// <param name="clickedPoint">where the user clicked on the table</param> /// <param name="thisPlayer">who is playing</param> /// <param name="tableLimits">limits of the playing table</param> /// <param name="selectedCard">which card is been trown</param> /// <param name="cardSlots">spaces allowed to place cards</param> /// <returns>returns true if a valid place on the playing table was clicked</returns> public bool ProcessMesaClicked( Point clickedPoint, int thisPlayer, Rectangle tableLimits, Naipe selectedCard, CardSlots cardSlots) { if (tableLimits.Contains(clickedPoint.X, clickedPoint.Y)) { NaipesEnMesa.NaipesEnGrupo.Add(selectedCard); Manos[thisPlayer].NaipesEnGrupo.Remove(selectedCard); selectedCard.Selected = false; oneInHandSelected = false; for (int i = 0; i < 10; i++) { if (!cardSlots.UsedTableCardPosition[i]) { selectedCard.SetCenter(cardSlots.TableCardPosition[i]); cardSlots.UsedTableCardPosition[i] = true; selectedCard.SlotAssigned = CardSlots.getGroupIndexCardsInTable(i); break; } } return(true); } return(false); }
/// <summary> /// Make a movement once the player has clicked the button Make Move /// </summary> /// <param name="thisPlayer">Which player is this</param> /// <param name="thisTeam">Which team the player belongs to</param> /// <param name="cardSlots">Slots or places to lay down cards in the game</param> /// <returns>Returns True if a valid move was completed</returns> public bool MakeMove(int thisPlayer, int thisTeam, CardSlots cardSlots) { List <Naipe> touchedCardsOnTable = new List <Naipe>(); Naipe selectedCardOnHand = new Naipe(); //Get a list of touched cards on table foreach (Naipe card in NaipesEnMesa.NaipesEnGrupo) { if (card.Touched) { touchedCardsOnTable.Add(card); } } //Get a list of the selected card on hand foreach (Naipe card in Manos[thisPlayer].NaipesEnGrupo) { if (card.Selected) { selectedCardOnHand = card; break; } } //No matter if the move is complited, the selected card on hand will be unselected foreach (Naipe card in Manos[thisPlayer].NaipesEnGrupo) { card.Selected = false; card.MoveToOriginalPosition(); } oneInHandSelected = false; //No matter if the move is complited, the selected cards on the table will be unselected foreach (Naipe card in NaipesEnMesa.NaipesEnGrupo) { card.Touched = false; } oneInMesaTouched = false; //Sort the list of touched Table Cards touchedCardsOnTable.Sort(new NaipesComparer()); //Execute this if the move is valid if (ProcessMove(selectedCardOnHand, touchedCardsOnTable)) { //Remove the selected card on hand and selected cards on table Manos[thisPlayer].NaipesEnGrupo.Remove(selectedCardOnHand); foreach (Naipe card in touchedCardsOnTable) { Pair <CardGroup, int> slot = card.SlotAssigned; cardSlots.UsedTableCardPosition[slot.Second] = false; NaipesEnMesa.NaipesEnGrupo.Remove(card); } //Move the cards to their new position (Carton) selectedCardOnHand.SetCenter(cardSlots.CartonCardPosition[thisTeam, 0]); selectedCardOnHand.SlotAssigned = CardSlots.getGroupIndexCartonCards(thisTeam, 0); Carton[thisTeam].AnadirArriba(selectedCardOnHand); foreach (Naipe card in touchedCardsOnTable) { card.SetCenter(cardSlots.CartonCardPosition[thisTeam, 0]); card.SlotAssigned = CardSlots.getGroupIndexCartonCards(thisTeam, 0); Carton[thisTeam].AnadirArriba(card); } return(true); } //Execute this if it was not a valid move else { return(false); } }