// draws card to different piles public void DrawCard(Pile drawPile, Pile destinationPile, float delay) { if (destinationPile.drawnTo) { return; } ableToReBegin = false; destinationPile.drawnTo = true; Card temp = null; switch (myType) { case gameType.Levels: case gameType.Normal: temp = drawPile.Take(); break; case gameType.Marathon: case gameType.Timed: temp = getRandomCard(drawPile); base.Add(temp); break; } temp.Flip(true, delay); temp.toPile(destinationPile, delay); if (destinationPile.hasPowerUp) { destinationPile.RemovePowerUp(); } temp.WhenDoneMoving(delegate() { destinationPile.drawnTo = false; Timer drawTimer = new Timer(1); base.Add(drawTimer); drawTimer.SetTimer(0, .5f, delegate() { ableToReBegin = true; }); if ((destinationPile == lGameStack || destinationPile == rGameStack) && !destinationPile.hasPowerUp) { SelectPowerUp(destinationPile); } }); }
// plays cards from selected piles to destination piles public void PlayCard(Player player, int selectedPile, Pile destinationPile) { if (speedState != gameState.GamePlay) { return; } Pile fromPile; if (player.isPlayer1) { fromPile = yourCards[player.selector]; } else { fromPile = opponentCards[player.selector]; } if (fromPile.Count() == 0) { return; } if (fromPile.drawnTo) { return; } speedState = gameState.PlayingCard; Card c = fromPile.Peek(); int cv = c.cardValue; int value = destinationPile.Peek().cardValue; if ((cv == 0 && value == 12) || (cv == 12 && value == 0) || (cv == value + 1 || cv == value - 1)) { //if(myType == gameType.Timed) delayTimer.ResetTimer(0); Card m = fromPile.Take(); m.toPile(destinationPile); if (soundOn) { playcard.Play(); } if (vibrateOn) { GamePad.SetVibration(PlayerIndex.One, 1.0f, 1.0f); } m.Rotate(Actions.ExpoMove, (float)(random.NextDouble() - .5) / 2, .3f); m.WhenDoneMoving(delegate() { m.Move(Actions.LinearMove, m.attributes.position + new Vector2(random.Next(-5, 5), random.Next(-5, 5)), 3f); player.score++; if (powerUpOn) { if (destinationPile.hasPowerUp) { Player victim; if (player.isPlayer1) { victim = opp; } else { victim = you; } destinationPile.PlayPowerUp(victim); } } speedState = gameState.GamePlay; if (player.isPlayer1) { if (yourStack.Count() != 0) { if (fromPile.Count() == 0) { DrawCard(yourStack, fromPile, 0f); } } } else { if (opponentStack.Count() != 0) { if (fromPile.Count() == 0) { DrawCard(opponentStack, fromPile, 0f); } } } Shake(); SelectPowerUp(destinationPile); ParticleEngine smoke = new ParticleEngine(textures, destinationPile.position, new Vector2(300, 300), m.attributes.depth, .3f, Color.WhiteSmoke); base.Add(smoke); }); } else { speedState = gameState.GamePlay; c.attributes.color = Color.Red; Timer timer = new Timer(1); base.Add(timer); timer.SetTimer(0, 1, delegate() { c.attributes.color = Color.White; player.RemovePenalty(); }); player.Penalize(); } }