public void play(Player player)
        {
            if(player != localPlayer){
                throw new InvalidOperationException("Not the local player. Only one local player is allowed.");
            }

            gameObserver.trigger(Events.LOCAL_PLAYERS_TURN, player);
        }
 public void play(Player player)
 {
     //socket.sendMessage<Player>(new Message<Player>(
     //    "ShouldPlay",
     //    player,
     //    player.GetType().FullName
     //));
 }
Esempio n. 3
0
        public void addPlayer(Player player)
        {
            if(currentRoom.players.Count == MAX_PLAYERS){
                throw new InvalidOperationException("Max players on turn already reached.\nWhat's That?");
            }
            if(currentRoom.players.Contains(player)){
                throw new InvalidOperationException("Player already playing.\nWhat's That?");
            }

            currentRoom.players.Add(player);
        }
Esempio n. 4
0
        public void play(Player player)
        {
            gameObserver.trigger(Events.NPC_TURN, player);

            if (player.cards.Count > 0) {

                Card bestCard = player.cards[player.cards.Count - 1];

                Property selectedProperty = turnService.currentProperty == Property.NONE ? getBestProperty(bestCard) : turnService.currentProperty;

                turnService.selectProperty(selectedProperty, player);

                turnService.play(bestCard, player);
            }
        }
Esempio n. 5
0
        public void endTurn()
        {
            List<Card> cards = cardsOnTable.Keys.ToList();

            Card winner = getBiggest(cards, currentProperty);

            currentHand = 1;

            currentProperty = Property.NONE;

            if (winner == null) {

                cardsIdle.AddRange(cardsOnTable.Keys);

                cardsOnTable.Clear();

                Random r = new Random();
                currentPlayer = currentRoom.players[r.Next(0, currentRoom.players.Count)];
                gameObserver.trigger(Events.NEXT_PLAYERS_TURN, currentPlayer);

            } else {

                Player turnWinner = cardsOnTable[winner];

                turnWinner.cards.InsertRange(0, cards);

                turnWinner.cards.InsertRange(0, cardsIdle);

                currentPlayer = turnWinner;

                cardsOnTable.Clear();
                cardsIdle.Clear();

                gameObserver.trigger(Events.TURN_WINNER, turnWinner);

            }

            gameObserver.trigger(Events.END_TURN   , this);
        }
        private void showCards()
        {
            var cardPrefab = Resources.Load("Card");

            var cardOnTablePrefab = Resources.Load("CardOnTable");

            localPlayer = turnService.currentPlayer;

            GameObject[] cardsGame = GameObject.FindGameObjectsWithTag("Card");

            foreach(var card in cardsGame){
                Destroy(card);
            }

            Card cardOnTop = localPlayer.cards[localPlayer.cards.Count -1];

            var cardObject = Instantiate(cardPrefab) as GameObject;

            PlayLocalController cardCtrl = (PlayLocalController)cardObject.GetComponent<PlayLocalController>();

            cardCtrl.inactiveTex = (Texture2D) Resources.Load(String.Format("Images/Card/{0}/{1}",cardOnTop.id[0],cardOnTop.id));

            cardCtrl.activeTex = (Texture2D) Resources.Load(String.Format("Images/Card/{0}/{1}", cardOnTop.id[0], cardOnTop.id));

            cardCtrl.eventMessage = cardOnTop;

            cardObject.guiTexture.texture = cardCtrl.inactiveTex;

            var index = turnService.currentPlayer.cards.IndexOf(cardOnTop);

            cardObject.transform.position = new Vector3(0.1F, cardObject.transform.position.y, cardObject.transform.position.z);

            turnService.cardsOnTable.Keys.ToList().TrueForAll((cardOnTable) => {

                cardObject = Instantiate(cardOnTablePrefab) as GameObject;

                cardCtrl = (PlayLocalController)cardObject.GetComponent<PlayLocalController>();

                cardCtrl.inactiveTex = (Texture2D)Resources.Load(String.Format("Images/Card/{0}/{1}", cardOnTable.id[0], cardOnTable.id));

                cardCtrl.activeTex = (Texture2D)Resources.Load(String.Format("Images/Card/{0}/{1}", cardOnTable.id[0], cardOnTable.id));

                cardCtrl.eventMessage = cardOnTable;

                cardObject.guiTexture.texture = cardCtrl.inactiveTex;

                index = turnService.cardsOnTable.Keys.ToList().IndexOf(cardOnTable);

                var x = 0.1F + index * 0.2F;

                cardObject.transform.position = new Vector3(x, cardObject.transform.position.y, cardObject.transform.position.z);

                return index < 4;

            });
        }
Esempio n. 7
0
 public Play(Player player, Card card)
 {
     this.player = player;
     this.selectedCard = card;
 }
Esempio n. 8
0
        public void startGame()
        {
            if(GameState.NOT_STARTED != gameState){
                throw new InvalidOperationException("Already started the game.\nWhat's That?");
            }
            if(currentRoom.players.Count < MIN_PLAYERS){
                throw new InvalidOperationException("Not enough players on turn.\nWhat's That?");
            }

            gameState = GameState.PLAYING;

            deck = cardStrategy.getAll();

            if(isMaster)
                cardsToPlayers();

            currentPlayer = currentRoom.players[0];

            currentProperty = Property.NONE;
        }
Esempio n. 9
0
 public void selectProperty(Property property, Player player)
 {
     if (player == currentPlayer && property != Property.NONE) {
         currentProperty = property;
         gameObserver.trigger(Events.SELECT_PROPERTY, property);
     }
     else {
         throw new InvalidOperationException("Invalid player or property already assined or both.");
     }
 }
Esempio n. 10
0
        public void play(Card chosenCard, Player player)
        {
            if (currentPlayer != player){
                throw new InvalidOperationException("That's not the current player.\nWhat's That?");
            }

            if (currentPlayer.cards.IndexOf(chosenCard) == -1){
                throw new InvalidOperationException("Current Player does not have that card.\nWhat's That?");
            }

            if (cardsOnTable.Values.Contains(currentPlayer)) {
                throw new InvalidOperationException("Current Player already chose his card for this turn.\nWhat's That?");
            }

            gameObserver.trigger(Events.CARD_TO_TABLE, new Play(player, chosenCard));

            if (isTrumph(chosenCard)) {
                gameObserver.trigger(Events.TRUMPH_ON_GAME, player);
            }

            cardsOnTable[chosenCard] = currentPlayer;

            currentPlayer.cards.Remove(chosenCard);

            currentPlayer = nextPlayer;

            currentHand++;

            if(currentHand > currentRoom.players.Count){
                endTurn();
            } else {
                gameObserver.trigger(Events.NEXT_PLAYERS_TURN, currentPlayer);
            }
        }
Esempio n. 11
0
 public JoinRoom(Player player, Room room)
 {
     this.player = player;
     this.room = room;
 }