예제 #1
0
 public Move CombineExistingBuilds(Build build1, Build build2)
 {
     _combinedExistingBuilds = new Tuple <Build, Build>(build1, build2);
     return(this);
 }
예제 #2
0
            private static Move Pickup(string[] cmdArgs)
            {
                if (cmdArgs.Length < 2 || cmdArgs.Length > 3)
                {
                    throw new UnparseableMoveException("Two or three arguments expected. First argument pickup, " +
                                                       "second argument card on table, third argument card in hand.", string.Join(' ', cmdArgs));
                }
                if (cmdArgs.Length == 2)
                {
                    //"pickup 4" should be interpreted as "use the sole 4 in hand to pick up the sole 4 on table"
                    cmdArgs = new string[3] {
                        cmdArgs[0], cmdArgs[1], cmdArgs[1]
                    }
                }
                ;
                string fromTable = cmdArgs[1];
                string fromHand  = cmdArgs[2];

                if (ExtractBuildNamesFromString(ref fromTable)?.Count() != 0 || ExtractBuildNamesFromString(ref fromHand)?.Count() != 0)
                {
                    throw new UnparseableMoveException("Build names cannot be used when picking up cards. Use capture instead.",
                                                       string.Join(' ', cmdArgs));
                }
                List <byte> playOnTableRaw, playOnTable;
                byte        playFromHandRaw, playFromHand;

                playOnTableRaw  = playOnTable = new List <byte>();
                playFromHandRaw = playFromHand = 0;

                try {
                    playOnTableRaw  = ExtractCardsFromString(fromTable);
                    playFromHandRaw = ExtractCardFromString(fromHand);
                } catch (Exception ex) {
                    if (ex is ArgumentOutOfRangeException || ex is ArgumentNullException)
                    {
                        throw new UnparseableMoveException(Errorstr.NoMove(), string.Join(' ', cmdArgs));
                    }
                    else
                    {
                        throw ex;
                    }
                }

                playOnTable  = GetCorrespondingCards(playOnTableRaw, table.CardsOnTable, CardLocations.Table);
                playFromHand = GetCorrespondingCards(new List <byte> {
                    playFromHandRaw
                }, table.GetActivePlayer().Hand,
                                                     (table.GetActivePlayer().PlayerNo == Players.One) ? CardLocations.PlayerOneHand : CardLocations.PlayerTwoHand)[0];

                if (ContainsPictureCard(playOnTable.ToList()))
                {
                    if (playOnTable.Count != 1 || !CardsMatchInValue(playFromHand, playOnTable[0]))
                    {
                        throw new IllegalPickupException(
                                  "Cannot pickup multiple picture cards at once", playFromHand, (byte)GetCardValue(playFromHand));
                    }
                }
                else
                {
                    //if no error, then valid move
                    Build build = new Build(BuildNames.NONE, playOnTable, (byte)GetCardValue(playFromHand));
                }

                return(new Move(MoveTypes.Pickup).PlayCard(playFromHand).PickupCards(playOnTable));
            }
예제 #3
0
 public Move PickupBuild(Build build)
 {
     _buildPickedUp = build;
     return(this);
 }