示例#1
0
        //Check secondary objectives - end game
        public void checkEndGameSecondaryObjectives(ResistilePlayer player)
        {
            var objectives = player.secondaryObjective;

            foreach (var objective in objectives)
            {
                switch (objective)
                {
                case 1:
                    player.secondaryObjectiveChecks[1] = checkEasyStreet();
                    break;

                case 2:
                    player.secondaryObjectiveChecks[2] = checkLongestRoad();
                    break;

                case 4:
                    player.secondaryObjectiveChecks[4] = checkCleanHouse();
                    break;

                case 5:
                    player.secondaryObjectiveChecks[5] = checkAllTheConnections();
                    break;
                }
            }
        }
示例#2
0
        public GameTile drawResistorSolder(ResistilePlayer player)
        {
            var resistorSolder = deck.drawResistorSolder();

            player.hand.Add(resistorSolder);
            return(resistorSolder);
        }
示例#3
0
 public bool AddTileWithSolder(ResistilePlayer player, GameTile tile, GameTile solder, int[] coords)
 {
     checkItsFutile(player, tile, coords);
     player.hand.Remove(solder);
     AddTile(player, tile, coords);
     return(false);
 }
示例#4
0
        public void calculateWhoWon(ResistilePlayer player, ResistilePlayer opponent)
        {
            int playerScore   = (player.primaryAchieved ? 1 : 0) + (player.guessAchieved ? 1 : 0) + player.getSecondaryObjectiveResults().Count(e => e);
            int opponentScore = (opponent.primaryAchieved ? 1 : 0) + (opponent.guessAchieved ? 1 : 0) + opponent.getSecondaryObjectiveResults().Count(e => e);

            player.won   = playerScore > opponentScore;
            opponent.won = !player.won;
        }
示例#5
0
        //Check secondary objectives - end turn
        //private void checkEndTurnSecondaryObjectives(GameTile tile, int[] coords)
        //{
        //}

        //3 IT'S FUTILE: Solder out a piece (resistor or wire) and replace it with an identical piece.
        private void checkItsFutile(ResistilePlayer player, GameTile tile, int[] coords)
        {
            if (player.secondaryObjectiveChecks[3] == false)
            {
                var  tileToBeChecked = board.board[coords[0], coords[1]];
                bool check           = tileToBeChecked.type == tile.type && tileToBeChecked.rotation == tile.rotation &&
                                       (Math.Abs(tileToBeChecked.resistance - tile.resistance) < 0.01);

                player.secondaryObjectiveChecks[3] = check; // once its true, its always true.
            }
        }
示例#6
0
 public bool AddTile(ResistilePlayer player, GameTile tile, int[] coords)
 {
     board.AddTile(tile, coords);
     if (tile.type.Contains("Wire"))
     {
         wireHand.Remove(tile);
     }
     else if (tile.type.Contains("Resistor"))
     {
         player.hand.Remove(tile);
     }
     return(board.isGameOver);
 }
示例#7
0
        public GameManager(string playerOneUsername, string playerTwoUsername)
        {
            /*
             * Initialize Board
             */
            board = new BoardManager();

            /*
             * Initialize Deck
             */
            deck = new DeckManager();

            /*
             * Initialize playerOne
             */
            ArrayList tempHand = new ArrayList();

            for (int i = 0; i < MAXHAND; i++)
            {
                tempHand.Add(deck.drawResistorSolder());
            }
            var p1SecObj = CreateSecondaryObj();

            //var p1SecObj = new[] {1, 2}; //to set objectives manually for testing
            playerOne = new ResistilePlayer(playerOneUsername, tempHand, GetRandomPrimary(primaryMIN, primaryMAX), p1SecObj);

            /*
             * Initialize playerTwo
             */
            tempHand = new ArrayList();
            for (int i = 0; i < MAXHAND; i++)
            {
                tempHand.Add(deck.drawResistorSolder());
            }
            var p2SecObj = CreateSecondaryObj();

            //var p2SecObj = new[] {3, 5};
            playerTwo = new ResistilePlayer(playerTwoUsername, tempHand, GetRandomPrimary(primaryMIN, primaryMAX), p2SecObj);

            currentTurnPlayer = random.Next(0, 2) == 1 ? playerOne : playerTwo;
            for (int i = 0; i < MAXHAND; i++)
            {
                wireHand.Add(deck.drawWire());
            }
        }
示例#8
0
        private void writeClientOnValidMove(bool isGameOver, bool isSolder, GameTile tile, int rotation, int[] coords, ResistilePlayer player, ResistilePlayer opponent,
                                            GameTile solder)
        {
            //Sent opponent placed tile data
            var opponentHandle = handleClients.Find(handle => handle.clName == opponent.userName);
            var oppMsg1        = new ResistileMessage(gameID, ResistileMessageTypes.tilePlaced);

            oppMsg1.tileID      = tile.id;
            oppMsg1.turn        = true;
            oppMsg1.rotation    = rotation;
            oppMsg1.coordinates = new ArrayList(coords);
            opponentHandle.writeClient(oppMsg1);

            writeClient(gameID, ResistileMessageTypes.validMove, "");
            if (isGameOver)
            {
                writeClient(gameID, ResistileMessageTypes.gameOver);
                opponentHandle.writeClient(gameID, ResistileMessageTypes.gameOver);

                gameManager.checkEndGameSecondaryObjectives(player);
                gameManager.checkEndGameSecondaryObjectives(opponent);
                gameManager.calculateResistance();
                gameManager.checkEndGamePrimaryObjective(player, opponent);
            }
            else
            {
                Thread.Sleep(100);
                //Sent player new tile data
                var messageToBeSent = new ResistileMessage(gameID, ResistileMessageTypes.drawTile);
                var card            = gameManager.draw(tile, player);
                messageToBeSent.turn   = false;
                messageToBeSent.tileID = card.id;
                writeClient(messageToBeSent);

                Thread.Sleep(100);
                if (card.type.Contains("Wire"))
                {
                    var oppMsg2 = new ResistileMessage(gameID, ResistileMessageTypes.drawTile);
                    oppMsg2.turn   = true;
                    oppMsg2.tileID = card.id;
                    opponentHandle.writeClient(oppMsg2);
                }
                if (isSolder)
                {
                    var messageToBeSent2 = new ResistileMessage(gameID, ResistileMessageTypes.drawTile);
                    var cardID2          = gameManager.draw(solder, player);
                    messageToBeSent2.tileID = cardID2.id;
                    messageToBeSent2.turn   = false;
                    writeClient(messageToBeSent2);
                }
            }
        }
示例#9
0
 public void checkGuessAchieved(ResistilePlayer player)
 {
     player.guessAchieved = Math.Abs(resistance - player.guess) < 0.2;
 }
示例#10
0
 public void checkEndGamePrimaryObjective(ResistilePlayer player, ResistilePlayer opponent)
 {
     player.primaryAchieved   = Math.Abs(resistance - player.primaryObjective) < Math.Abs(resistance - opponent.primaryObjective);
     opponent.primaryAchieved = !player.primaryAchieved;
 }
示例#11
0
 public GameTile draw(GameTile tile, ResistilePlayer player)
 {
     return(tile.type.Contains("Wire") ? drawWire() : drawResistorSolder(player));
 }