internal void Add(Collection <Card> added) { foreach (Card card in added) { AIHand.Add(card); } }
private Card GetHighestCardOfSuit(PlayState playState, Suit suit) { Card ret = null; if ((playState.Trick.Contains(new Card(Suit.Spades, FaceValue.Ace, true)) || playState.Trick.Contains(new Card(Suit.Spades, FaceValue.King, true))) && AIHand.Contains(Suit.Spades, FaceValue.Queen) && playState.Lead.CardSuit == Suit.Spades) { return(new Card(Suit.Spades, FaceValue.Queen, true)); } foreach (Card c in AIHand.Cards) { if (c.CardSuit == suit) { if (ret == null) { ret = c; } else if (ret.CardRank < c.CardRank) { if (!(c.CardValue == FaceValue.Queen && c.CardSuit == Suit.Spades)) { ret = c; } } } } return(ret); }
internal Card Play(PlayState playState) { Card ret = null; if (playState.Trick.Count == 0) { if ((ret = ChooseLead(playState)) == null) { throw new InvalidOperationException("AI - CHOOSE LEAD FAILED!"); } } else if ((ret = ChooseFollow(playState)) == null) { throw new InvalidOperationException("AI - CHOOSE FOLLOW FAILED!"); } if (!AIHand.Contains(ret.CardSuit, ret.CardValue)) { throw new InvalidOperationException("AI - PLAYED CARD NOT IN HAND !"); } AIHand.Remove(ret); AIHand.Sort(); return(ret); }
/* AI Card Action Methods */ private Card ChooseLead(PlayState playState) { Card ret; if (AIHand.Contains(Suit.Clubs, FaceValue.Two)) { return(new Card(Suit.Clubs, FaceValue.Two, true)); } else { if (!playState.QueenHasBeenPlayed && !AIHand.Contains(Suit.Spades, FaceValue.Queen)) { ret = GetHighestSpadeBelowQueen(playState); } else if (playState.IsBroken) { ret = GetLowestCard(); } else { ret = GetLowestNonPointCard(); } if (ret == null) { ret = GetLowestCard(); } return(ret); } }
private Card GetHighestNonPointCard() { int removeValue = (int)CardRank.AceHigh; if (AIHand.Contains(Suit.Spades, FaceValue.Ace)) { return(new Card(Suit.Spades, FaceValue.Ace, true)); } else if (AIHand.Contains(Suit.Spades, FaceValue.King)) { return(new Card(Suit.Spades, FaceValue.King, true)); } while (removeValue >= 0) { for (int i = AIHand.Cards.Count - 1; i >= 0; i--) { if (AIHand.Cards[i].CardSuit != Suit.Hearts) { if (!(AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.Queen)) { if (AIHand.Cards[i].CardRank >= removeValue) { return(AIHand.Cards[i]); } } } } removeValue--; } return(null); }
private void Remove(Collection <Card> removed) { foreach (Card c in removed) { AIHand.Remove(c); } }
internal bool HasTwoOfClubs() { if (AIHand.Contains(Suit.Clubs, FaceValue.Two)) { return(true); } return(false); }
internal void SetHand(Hand hand) { _AIHand.SetHand(hand.Cards); if (AIHand.Contains(Suit.Spades, FaceValue.Queen)) { preferredSpades = false; } }
void Update() { if(manager.activateShootingAI && transform.position.y < 0.6f) { if(enemyHand == null){ enemyHand = GameObject.FindGameObjectWithTag("EnemyAIHand").GetComponent<AIHand>(); enemyHand.FollowEnemy(this); } } if (!wasCaptured && transform.position.y > -0.15f) MoveToShip (); }
private Card ChooseFollow(PlayState playState) { Card ret = null; if (!HasSuit(playState.Lead.CardSuit)) { if (playState.Lead.CardSuit == Suit.Clubs && playState.Lead.CardValue == FaceValue.Two) { ret = GetHighestNonPointCard(); } else if (AIHand.Contains(Suit.Spades, FaceValue.Queen)) { ret = new Card(Suit.Spades, FaceValue.Queen, true); } else { ret = GetHighestHeartOrOtherCard(); } } else { if (playState.Lead.CardSuit == Suit.Clubs && playState.Lead.CardValue == FaceValue.Two) { ret = GetHighestCardOfSuit(playState, Suit.Clubs); } else if (playState.Trick.Count < 3 || PointInTrick(playState)) { ret = TryToNotWinTrick(playState, GetHighestTrickCard(playState), playState.Trick.Count == 3 ? true : false); } else { ret = GetHighestCardOfSuit(playState, playState.Lead.CardSuit); } if (ret.CardSuit != playState.Lead.CardSuit) { throw new InvalidOperationException("AI - NOT FOLLOWING SUIT"); } } if (playState.Lead.CardSuit == Suit.Clubs && playState.Lead.CardValue == FaceValue.Two) { if (ret.CardSuit == Suit.Spades && ret.CardValue == FaceValue.Queen || ret.CardSuit == Suit.Hearts) { throw new InvalidOperationException("AI - PLAYED POINT CARD FIRST TRICK!"); } } return(ret); }
public new void Awake() { MatrixValue = 1; InstanceType = 1; instance = this; CardSlotList.Add(CardSlot0); CardSlotList.Add(CardSlot1); CardSlotList.Add(CardSlot2); CardSlotList.Add(CardSlot3); CardSlotList.Add(CardSlot4); CardSlotList.Add(CardSlot5); CardSlotList.Add(CardSlot6); CardSlotList.Add(CardSlot7); CardSlotList.Add(CardSlot8); CardSlotList.Add(CardSlot9); CardSlotList.Add(CardSlot10); if (!silent) { InitializeCardSlots(); } //Debug.Log("Check y (AI):" + CardSlotList[4].TargetTransform.position.y); }
public void Awake() { instance = this; PlayerHand = GameObject.Find("PlayerHand").GetComponent <PlayerHand>(); AIHand = GameObject.Find("AIHand").GetComponent <AIHand>(); }
private void Awake() { main = this; }
void Update() { if(manager.activateTreasureAI && transform.position.y < 0.6f) { if(treasureHand == null){ treasureHand = GameObject.FindGameObjectWithTag("TreasureAIHand").GetComponent<AIHand>(); treasureHand.FollowTreasure(this); } } if(!treasureFilled) DoTreasureFill(); else MoveToShip(); }
internal ReadOnlyCollection <int> PassIndexes() { Collection <int> ret = new Collection <int>(); int suit = CheckShortSuited(); if (AIHand.Contains(Suit.Spades, FaceValue.Queen)) { ret.Add(AIHand.IndexOf(Suit.Spades, FaceValue.Queen)); } if (AIHand.Contains(Suit.Spades, FaceValue.King)) { ret.Add(AIHand.IndexOf(Suit.Spades, FaceValue.King)); } if (AIHand.Contains(Suit.Spades, FaceValue.Ace)) { ret.Add(AIHand.IndexOf(Suit.Spades, FaceValue.Ace)); } if (suit != -1 && ret.Count == 0) { for (int i = 0; i < AIHand.Cards.Count && ret.Count < 3; i++) { if (AIHand.Cards[i].CardSuit == (Suit)suit && !ret.Contains(i)) { ret.Add(i); } } } //Return High Cards Starting with Hearts int removeValue = (int)CardRank.Ten; while (ret.Count < 3) { for (int i = AIHand.Cards.Count - 1; i >= 0 && ret.Count < 3; i--) { if (AIHand.Cards[i].CardRank >= removeValue) { if (AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.Ace) { if (!ret.Contains(i)) { ret.Add(i); } } else if (AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.King) { if (!ret.Contains(i)) { ret.Add(i); } } else if (AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.Queen) { if (!ret.Contains(i)) { ret.Add(i); } } else if (!ret.Contains(i)) { ret.Add(i); } } } removeValue--; } return(new ReadOnlyCollection <int>(ret)); }
internal Collection <Card> Pass() { if (AIHand.Cards.Count != 13) { throw new InvalidOperationException("AI - HAND IS NOT FULL ON PASS"); } Collection <Card> ret = new Collection <Card>(); int suit = CheckShortSuited(); if (AIHand.Contains(Suit.Spades, FaceValue.Queen)) { ret.Add(new Card(Suit.Spades, FaceValue.Queen, true)); } if (AIHand.Contains(Suit.Spades, FaceValue.King)) { ret.Add(new Card(Suit.Spades, FaceValue.King, true)); } if (AIHand.Contains(Suit.Spades, FaceValue.Ace)) { ret.Add(new Card(Suit.Spades, FaceValue.Ace, true)); } if (suit != -1 && ret.Count == 0) { for (int i = 0; i < AIHand.Cards.Count && ret.Count < 3; i++) { if (AIHand.Cards[i].CardSuit == (Suit)suit && !ret.Contains(AIHand.Cards[i])) { ret.Add(AIHand.Cards[i]); } } } //Return High Cards Starting with Hearts int removeValue = (int)CardRank.Ten; while (ret.Count < 3) { for (int i = AIHand.Cards.Count - 1; i >= 0 && ret.Count < 3; i--) { if (AIHand.Cards[i].CardRank >= removeValue) { if (AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.Ace) { if (!ret.Contains(new Card(Suit.Spades, FaceValue.Ace, true))) { ret.Add(AIHand.Cards[i]); } } else if (AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.King) { if (!ret.Contains(new Card(Suit.Spades, FaceValue.King, true))) { ret.Add(AIHand.Cards[i]); } } else if (AIHand.Cards[i].CardSuit == Suit.Spades && AIHand.Cards[i].CardValue == FaceValue.Queen) { if (!ret.Contains(new Card(Suit.Spades, FaceValue.Queen, true))) { ret.Add(AIHand.Cards[i]); } } else if (!ret.Contains(AIHand.Cards[i])) { ret.Add(AIHand.Cards[i]); } } } removeValue--; } Remove(ret); if (AIHand.Cards.Count != 10) { throw new InvalidOperationException("AI - NOT REMOVING CORRECTLY"); } return(ret); }
private Card TryToNotWinTrick(PlayState playState, Card highCard, bool last) { if ((playState.Trick.Contains(new Card(Suit.Spades, FaceValue.Ace, true)) || playState.Trick.Contains(new Card(Suit.Spades, FaceValue.King, true))) && AIHand.Contains(Suit.Spades, FaceValue.Queen) && playState.Lead.CardSuit == Suit.Spades) { return(new Card(Suit.Spades, FaceValue.Queen, true)); } Card ret = null; foreach (Card c in AIHand.Cards) { if (c.CardSuit == playState.Lead.CardSuit) { if (c.CardRank <= highCard.CardRank) { if (!(c.CardSuit == Suit.Spades && c.CardValue == FaceValue.Queen)) { ret = c; } } } } if (ret == null) { if (playState.Lead.CardSuit == Suit.Spades) { if (AIHand.Contains(Suit.Spades, FaceValue.King) && AIHand.Contains(Suit.Spades, FaceValue.Queen)) { ret = new Card(Suit.Spades, FaceValue.King, true); } else if (AIHand.Contains(Suit.Spades, FaceValue.Ace) && AIHand.Contains(Suit.Spades, FaceValue.Queen)) { ret = new Card(Suit.Spades, FaceValue.Ace, true); } else if (last == true) { ret = GetHighestCardOfSuit(playState, playState.Lead.CardSuit); } else { ret = GetLowestCardOfSuit(playState.Lead.CardSuit); } } else { if (last == true) { ret = GetHighestCardOfSuit(playState, playState.Lead.CardSuit); } else { ret = GetLowestCardOfSuit(playState.Lead.CardSuit); } } } if (ret.CardSuit != playState.Lead.CardSuit) { throw new InvalidOperationException("AI - NOT FOLLOWING SUIT"); } return(ret); }