Exemple #1
0
        private RawCard GetRawCard(String suit, String value)
        {
            RawCard card;

            switch (suit)
            {
            case "Red":
                card = new RawCard(ESuit.Red, Int32.Parse(value));
                return(card);

            case "Yellow":
                card = new RawCard(ESuit.Yellow, Int32.Parse(value));
                return(card);

            case "Blue":
                card = new RawCard(ESuit.Blue, Int32.Parse(value));
                return(card);

            case "Green":
                card = new RawCard(ESuit.Green, Int32.Parse(value));
                return(card);
            }

            return(null);
        }
Exemple #2
0
        public Boolean SendTrumpCard(RawCard card, Player specificPlayer = null)
        {
            if (runState == State.Server)
            {
                if (specificPlayer == null)
                {
                    try {
                        foreach (Player player in playerList.GetPlayers())
                        {
                            NetworkComms.SendObject("TrumpCard", player.IP, player.Port, card);
                        }

                        return(true);
                    } catch (Exception e) {
                        baseClass.NetworkError("[SendTrumpCard] SendTrumpCard: " + e.Message);
                    }
                }
                else
                {
                    try {
                        NetworkComms.SendObject("TrumpCard", specificPlayer.IP, specificPlayer.Port, card);
                        return(true);
                    } catch (Exception e) {
                        baseClass.NetworkError("[SendTrumpCard] SendTrumpCard: " + e.Message);
                    }
                }
            }

            return(false);
        }
Exemple #3
0
        public RawCard draw()
        {
            RawCard card = cards[0];

            cards.Remove(card);
            return(card);
        }
Exemple #4
0
 public void HostTrumpPlayed(RawCard trump)
 {
     if (MainGame.Instance.HostOnly)
     {
         debugOut("Trump received");
         client.playTrump(trump);
         clientData.newRound();
     }
 }
Exemple #5
0
 public void TrumpCardReceived(RawCard card, Boolean restoringState = false)
 {
     if (MainGame.Instance.HostOnly)
     {
         debugOut("Trump received");
         client.playTrump(card);
         clientData.newRound();
     }
 }
Exemple #6
0
 public void TrumpCardReceived(RawCard card, Boolean restoringState = false)
 {
     debugOut("Trump received");
     client.playTrump(card);
     lastReceivedBid = null;
     if (!restoringState)
     {
         clientData.newRound();
     }
 }
Exemple #7
0
 public void playTrump(RawCard trump)
 {
     if (frameHand.IsActive)
     {
         frameHand.table.setTrump(new Card(trump, new Vector2(screenSize.X * 0.5f, 0f)));
     }
     else
     {
         frameTable.setTrump(new Card(trump, new Vector2(screenSize.X * 0.5f, 0f)));
     }
 }
Exemple #8
0
 public void playCard(RawCard card)
 {
     if (frameHand.IsActive)
     {
         frameHand.table.playCard(new Card(card, new Vector2(screenSize.X * 0.5f, 0f)));
     }
     else
     {
         frameTable.playCard(new Card(card, new Vector2(screenSize.X * 0.5f, 0f)));
     }
 }
Exemple #9
0
        public void bringToTop(RawCard raw)
        {
            Card card = cards.Find(x => x.Raw.Equals(raw));

            if (card == null)
            {
                return;
            }

            cards.Remove(card);
            cards.Insert(cards.Count, card);
        }
Exemple #10
0
        public bool removeCard(RawCard raw)
        {
            int index = cards.FindIndex(x => x.Raw.Equals(raw));

            if (index == -1)
            {
                return(false);
            }

            cards.RemoveAt(index);
            return(true);
        }
Exemple #11
0
        public void sendToBottom(RawCard raw)
        {
            Card card = cards.Find(x => x.Raw.Equals(raw));

            if (card == null)
            {
                return;
            }

            cards.Remove(card);
            cards.Insert(0, card);
        }
Exemple #12
0
        public RawCard waitForNextCard()
        {
            receivedCard = null;
            while (receivedCard == null)
            {
                ;
            }
            RawCard card = receivedCard;

            receivedCard = null;
            return(card);
        }
Exemple #13
0
        private Boolean AddCardToHands(RawCard card)
        {
            if (runState == State.Server)
            {
                if (!restoringState && !cardsInHands.Contains(card) && !roundPlayedCards.Contains(card))
                {
                    cardsInHands.Add(card);
                }
                return(true);
            }

            return(false);
        }
Exemple #14
0
        public void HostCardPlayed(RawCard card, Player player)
        {
            if (MainGame.Instance.HostOnly)
            {
                debugOut("Card received");

                card.Player = player.ID;
                client.playCard(card);
                clientData.cardPlayed(card, player.ID);

                AudioHelper.play(ContentStore.soundSlide);
            }
        }
Exemple #15
0
 private void TrumpCardHandler(PacketHeader header, Connection connection, RawCard card)
 {
     if (!IsCorrectPort(connection))
     {
         return;
     }
     Thread.Sleep(SLEEP_TIME);
     while (card == null)
     {
         ;
     }
     baseClass.TrumpCardReceived(card);
 }
Exemple #16
0
        public void HistoryTrumpCardDealt(RawCard card)
        {
            Card cardToAdd = new Card(card);

            cardsInHands.addCard(cardToAdd);

            if (playingLastTrick)
            {
                foreach (Player p in UltraServer.Instance.network.Players.GetPlayers())
                {
                    UltraServer.Instance.network.SendCard(cardToAdd.Raw, p);
                }
            }
        }
Exemple #17
0
        private Boolean RemoveCardFromHands(RawCard card)
        {
            if (runState == State.Server)
            {
                if (!restoringState && cardsInHands.Contains(card))
                {
                    trickPlayedCards.Add(card);
                    roundPlayedCards.Add(card);
                }
                return(true);
            }

            return(false);
        }
Exemple #18
0
        public void HistoryCardDealt(RawCard card, Player player)
        {
            Card cardToAdd = new Card(card);

            cardToAdd.Raw.Player = player.ID;
            cardsInHands.addCard(cardToAdd);

            if (playingLastRound)
            {
                if (cardsInHands.getCards().Contains(cardToAdd))
                {
                    UltraServer.Instance.network.SendCard(card, player);
                }
            }
        }
Exemple #19
0
 public Card(RawCard raw, Vector2 position, float rotation, float scale)
 {
     this.raw    = raw;
     this.hitbox = new LinePoly(
         Vector2.Zero,
         new Vector2(-20, -32),
         new Vector2(20, -32),
         new Vector2(20, 32),
         new Vector2(-20, 32)
         );
     resize(scale - 1);
     blink(position);
     rotate(rotation);
     cardTextureHelper = CardTextureHelper.getInstance();
 }
Exemple #20
0
 public void TrickWinnerReceived(Player winner)
 {
     while (winner == null)
     {
         ;
     }
     debugOut("Trick winner received (" + winner.Name + ")");
     MainGame.Instance.GeneralMessageQueue.Enqueue(network.Players.GetPlayerByID(winner.ID).Name + " won the trick!");
     clientData.trickWon(winner.ID);
     AudioHelper.play(ContentStore.soundGood);
     lastReceivedCard = null;
     Thread.Sleep(2000);
     client.frameTable.clearTrick();
     client.frameHand.table.clearTrick();
     clientData.trickStart();
 }
Exemple #21
0
 private void CardHandler(PacketHeader header, Connection connection, RawCard card)
 {
     if (!IsCorrectPort(connection))
     {
         return;
     }
     Thread.Sleep(SLEEP_TIME);
     while (card == null)
     {
         ;
     }
     if (runState == State.Server)
     {
         RemoveCardFromHands(card);
     }
     receivedCard = card;
     baseClass.CardReceived(card);
 }
Exemple #22
0
        public Boolean SendCard(RawCard card, Player player)
        {
            if (runState == State.Server && player != null)
            {
                if (!restoringState)
                {
                    RawCard cardToAdd = new RawCard(card.Suit, card.Number);
                    while (cardToAdd == null)
                    {
                        ;
                    }
                    cardToAdd.Player = player.ID;
                    AddCardToHands(cardToAdd);
                }

                try {
                    NetworkComms.SendObject("Card", player.IP, player.Port, card);
//					Thread.Sleep(100);
//					if (!restoringState) AddCardToHands(cardToAdd);
                } catch (Exception e) {
                    baseClass.NetworkError("[SendCard] SendCard: " + e.Message);
                    return(false);
                }
            }
            else if (runState == State.Client && player == null)
            {
                try {
                    if (!CheckConnection())
                    {
                        return(false);
                    }
                    NetworkComms.SendObject("Card", serverIP, serverPort, card);
                } catch (Exception e) {
                    baseClass.NetworkError("[SendCard] SendCard: " + e.Message);
                    return(false);
                }
            }
            else
            {
                baseClass.NetworkError("[Method] SendCard: player should be null if the client is sending to the server. If the server is sending to the client, player should not be null.");
            }

            return(true);
        }
Exemple #23
0
 public void cardPlayed(RawCard card, int playerID)
 {
     trickCards[playerID - 1] = card;
     if (leadSuit == null && !leadWizard)
     {
         if (card.Number == 15)
         {
             leadWizard = true;
         }
         else if (card.Number != 1)
         {
             leadSuit = card.Suit;
             if (LeadSuitChanged != null)
             {
                 LeadSuitChanged(this, new ChangedSuit(leadSuit));
             }
         }
     }
 }
Exemple #24
0
        public void HistoryCardReceived(RawCard card, Player player)
        {
            Card cardToRemove = new Card(card);

            cardToRemove.Raw.Player = player.ID;

            UltraServer.Instance.CardReceived(card);

            if (playingLastTrick)
            {
                if (cardsInHands.getCards().Contains(cardToRemove))
                {
                    foreach (Player p in UltraServer.Instance.network.Players.GetPlayers())
                    {
                        UltraServer.Instance.network.SendCard(cardToRemove.Raw, p);
                    }
                }
            }

            cardsInHands.removeCard(cardToRemove);
        }
Exemple #25
0
        public void shuffle()
        {
            cards = new List <RawCard>();
            for (int i = 0; i < 4; i++)
            {
                for (int j = 1; j <= 15; j++)
                {
                    cards.Add(new RawCard((ESuit)i, j));
                }
            }

            // KNUTH SHUFFLE
            rand = new Random();
            for (int i = cards.Count - 1; i > 0; i--)
            {
                int     j    = rand.Next(0, i);
                RawCard swap = cards[j];
                cards[j] = cards[i];
                cards[i] = swap;
            }
        }
Exemple #26
0
        public void CardReceived(RawCard card)
        {
            debugOut("Card received");
            if (card == lastReceivedCard)
            {
                return;
            }

            if (card.Player != -1)
            {
                client.playCard(card);
                clientData.cardPlayed(card, card.Player);
            }
            else
            {
                client.dealtCard(card);
            }

            lastReceivedCard = card;

            AudioHelper.play(ContentStore.soundSlide);
        }
Exemple #27
0
 public void dealtCard(RawCard card)
 {
     playerHand.addCard(new Card(card, new Vector2(screenSize.X * 0.5f, 0f)));
 }
Exemple #28
0
 public EventTrumpCardDealt(RawCard trumpCard)
 {
     this.trumpCard = trumpCard;
 }
Exemple #29
0
        private void SetupRejoinedPlayer(Player oldPlayer, Player newPlayer)
        {
            if (!gameStarted)
            {
                return;
            }
            restoringState = true;
            Thread.Sleep(SLEEP_TIME);
            SendStartGameMessage(newPlayer);
            Thread.Sleep(SLEEP_TIME);
            Console.WriteLine(newPlayer.IP + ":" + newPlayer.Port);

            SendTrumpCard(GameScheduler.LastTrumpCard, newPlayer);
            Thread.Sleep(SLEEP_TIME);

            foreach (RawCard card in cardsInHands)
            {
                try {
                    if (card.Player == newPlayer.ID && !roundPlayedCards.Contains(card))
                    {
                        RawCard cardToSend = new RawCard(card.Suit, card.Number, card.Player);
                        Thread.Sleep(250);
                        cardToSend.Player = -1;

                        SendCard(cardToSend, newPlayer);

                        Console.WriteLine("[Rejoin] Hand card sent");

                        Thread.Sleep(SLEEP_TIME);
                    }
                } catch (Exception e) {
                    Console.WriteLine("[Rejoin error] " + e.Message);
                }
            }

            Console.WriteLine("[Rejoin] After cardsInHands");

            foreach (RawCard card in trickPlayedCards)
            {
                SendCard(card, newPlayer);
                Thread.Sleep(SLEEP_TIME);
                Console.WriteLine("[Rejoin] Played card sent");
            }

            Console.WriteLine("[Rejoin] After playedCards");

            foreach (Bid bid in bidsInRound)
            {
                SendBid(bid, newPlayer);
                Thread.Sleep(SLEEP_TIME);
                Console.WriteLine("[Rejoin] Bid sent");
            }

            Console.WriteLine("[Rejoin] After bidsInRound");

            if (lastRequestPlayer.ID == newPlayer.ID && lastBidRequest != null)
            {
                RequestBid(newPlayer, lastBidRequest.MaxBid);
            }
            else if (lastRequestPlayer.ID == newPlayer.ID && lastCardRequest != null)
            {
                RequestCard(newPlayer);
            }

            Thread.Sleep(SLEEP_TIME);

            Console.WriteLine("[Rejoin] After request sending");

            foreach (Score score in scores.GetAllScores())
            {
                try {
                    NetworkComms.SendObject("Score", newPlayer.IP, newPlayer.Port, score);
                    Thread.Sleep(SLEEP_TIME);
                } catch (Exception e) {
                    Console.WriteLine("[SetupRejoinedPlayer] Exception " + e.Message);
                }
            }

            Console.WriteLine("[Rejoin] After score sending");

            restoringState = false;
            GameScheduler.UpdatePlayer(oldPlayer, newPlayer);
        }
Exemple #30
0
        public static void schedulerThread()
        {
            // GAME START
            for (int round = 1; round <= numRounds; round++)
            {
                // ROUND START
                network.StartNewRound();
                deck.shuffle();
                Player dealersLeft = leadPlayer.Peek();
                // DEAL CARDS
                for (int p = 0; p < leadPlayer.Count; p++)
                {
                    network.SendPing();
                    wait_handle.WaitOne();

                    debugOut("Dealing Cards to Player " + leadPlayer.ToArray()[p].ID);
                    for (int i = 0; i < round; i++)
                    {
                        networkingCheck(() => network.SendCard(deck.draw(), leadPlayer.ToArray()[p]));
                        Thread.Sleep(SLEEP_TIME);
                    }
                }

                Thread.Sleep(SLEEP_TIME);
                // DEAL TRUMP
                RawCard trump = deck.draw();

                lastTrumpCard = trump;

                network.SendPing();
                wait_handle.WaitOne();
                networkingCheck(() => network.SendTrumpCard(trump));

                server.HostTrumpPlayed(trump);
                debugOut("Trump Dealt");
                for (int p = 0; p < leadPlayer.Count; p++)
                {
                    // REQUEST BID
                    network.SendPing();
                    wait_handle.WaitOne();
                    networkingCheck(() => network.RequestBid(leadPlayer.ToArray()[p], round));

                    debugOut("Bid Requested");
                    Bid bid = network.waitForNextBid();
                    debugOut("Bid Received");
                    network.ClearLastRequest();
                    UltraServer.Instance.Bids.AddBid(bid);
                    server.HostBidReceived(bid);
                    // BROADCAST BID
                    for (int q = 0; q < players.Count; q++)
                    {
                        network.SendPing();
                        wait_handle.WaitOne();
                        networkingCheck(() => network.SendBid(bid, players.ToArray()[q]));

                        debugOut("Bid Sent");
                    }
                    network.ClearBids();
                    Thread.Sleep(SLEEP_TIME);
                }
                debugOut("Beginning Tricks");
                Player trickWinner = leadPlayer.Peek();
                for (int trick = 1; trick <= round; trick++)
                {
                    // TRICK START
                    Trick trickObj = new Trick(trump);
                    while (leadPlayer.Peek().ID != trickWinner.ID)
                    {
                        leadPlayer.Enqueue(leadPlayer.Dequeue());
                    }
                    for (int p = 0; p < leadPlayer.Count; p++)
                    {
                        // REQUEST CARD
                        rejoinedPlayer = null;

                        network.SendPing();
                        wait_handle.WaitOne();
                        networkingCheck(() => network.RequestCard(leadPlayer.ToArray()[p]));

                        debugOut("Card Requested");
                        RawCard card = network.waitForNextCard();
                        debugOut("Card Received");
                        network.ClearLastRequest();
                        server.HostCardPlayed(card, leadPlayer.ToArray()[p]);
                        // PLAY CARD
                        trickObj.playCard(card, leadPlayer.ToArray()[p].ID);
                        // BROADCAST CARD
                        card.Player = leadPlayer.ToArray()[p].ID;
                        for (int q = 0; q < players.Count; q++)
                        {
                            network.SendPing();
                            wait_handle.WaitOne();
                            networkingCheck(() => network.SendCard(card, players.ToArray()[q]));
                            Thread.Sleep(SLEEP_TIME);
                        }
                        Thread.Sleep(SLEEP_TIME);
                    }
                    debugOut("Resolving Trick");
                    // RESOLVE TRICK
                    int winnerID = trickObj.resolveTrick();
                    // BROADCAST TRICK WINNER
                    trickWinner = players.Find(x => x.ID == winnerID);

                    network.SendPing();
                    wait_handle.WaitOne();
                    networkingCheck(() => network.SendTrickWinner(trickWinner));

                    UltraServer.Instance.Bids.TrickWon(trickWinner);
                    debugOut("Trick Resolved");

                    Thread.Sleep(2000);
                    server.HostEndOfTrick(trickWinner);
                }

                network.SendPing();
                wait_handle.WaitOne();

                UltraServer.Instance.CalculateScores();                 // Calculates (and broadcasts via the Network class) scores
                foreach (Score score in network.Scores.GetAllScores())
                {
                    debugOut(network.Players.GetPlayerByID(score.ID).Name + " bid " + ": " + score.Value);
                    server.HostScoreReceived(score);
                }

                // ROTATE DEALER
                while (leadPlayer.Peek() != dealersLeft)
                {
                    leadPlayer.Enqueue(leadPlayer.Dequeue());
                }
                leadPlayer.Enqueue(leadPlayer.Dequeue());
                debugOut("Round End");
                // ROUND END
            }

            server.EndGame();
        }