public Move CombineExistingBuilds(Build build1, Build build2) { _combinedExistingBuilds = new Tuple <Build, Build>(build1, build2); return(this); }
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)); }
public Move PickupBuild(Build build) { _buildPickedUp = build; return(this); }