private Contract Bidding() { var currentPlayer = this.game.GetFirstPlayerForTheDeal(); IList<BidType> previousBids = new List<BidType>(); var currentContract = new Contract(); var passesLeft = 4; while (passesLeft > 0) { var allowedBids = currentContract.GetAvailableBidsAfterThisContract(this.game[this.game.GetTeamMate(currentPlayer)]); var bid = currentPlayer.AskForBid(currentContract, allowedBids, previousBids); if (bid == BidType.Pass) { passesLeft--; } else { if (!allowedBids.Contains(bid)) { throw new InvalidPlayerActionException(currentPlayer, string.Format("Invalid bid: {0}", bid)); } switch (bid) { case BidType.Clubs: currentContract = new Contract(this.game[currentPlayer], ContractType.Clubs); break; case BidType.Diamonds: currentContract = new Contract(this.game[currentPlayer], ContractType.Diamonds); break; case BidType.Hearts: currentContract = new Contract(this.game[currentPlayer], ContractType.Hearts); break; case BidType.Spades: currentContract = new Contract(this.game[currentPlayer], ContractType.Spades); break; case BidType.NoTrumps: currentContract = new Contract(this.game[currentPlayer], ContractType.NoTrumps); break; case BidType.AllTrumps: currentContract = new Contract(this.game[currentPlayer], ContractType.AllTrumps); break; case BidType.Double: currentContract = new Contract(this.game[currentPlayer], currentContract.Type, currentContract.PlayerPosition, true, false); break; case BidType.ReDouble: currentContract = new Contract(this.game[currentPlayer], currentContract.Type, currentContract.OriginalBidder, false, true); break; } passesLeft = 3; } this.game.GameInfo.InformForBid(new BidEventArgs(this.game[currentPlayer], bid, currentContract)); previousBids.Add(bid); currentPlayer = this.game.GetNextPlayer(currentPlayer); } return currentContract; }
private Contract Bidding() { var currentPlayer = this.game.GetFirstPlayerForTheDeal(); IList <BidType> previousBids = new List <BidType>(); var currentContract = new Contract(); var passesLeft = 4; while (passesLeft > 0) { var allowedBids = currentContract.GetAvailableBidsAfterThisContract(this.game[this.game.GetTeamMate(currentPlayer)]); var bid = currentPlayer.AskForBid(currentContract, allowedBids, previousBids); if (bid == BidType.Pass) { passesLeft--; } else { if (!allowedBids.Contains(bid)) { throw new InvalidPlayerActionException(currentPlayer, string.Format("Invalid bid: {0}", bid)); } switch (bid) { case BidType.Clubs: currentContract = new Contract(this.game[currentPlayer], ContractType.Clubs); break; case BidType.Diamonds: currentContract = new Contract(this.game[currentPlayer], ContractType.Diamonds); break; case BidType.Hearts: currentContract = new Contract(this.game[currentPlayer], ContractType.Hearts); break; case BidType.Spades: currentContract = new Contract(this.game[currentPlayer], ContractType.Spades); break; case BidType.NoTrumps: currentContract = new Contract(this.game[currentPlayer], ContractType.NoTrumps); break; case BidType.AllTrumps: currentContract = new Contract(this.game[currentPlayer], ContractType.AllTrumps); break; case BidType.Double: currentContract = new Contract(this.game[currentPlayer], currentContract.Type, currentContract.PlayerPosition, true, false); break; case BidType.ReDouble: currentContract = new Contract(this.game[currentPlayer], currentContract.Type, currentContract.OriginalBidder, false, true); break; } passesLeft = 3; } this.game.GameInfo.InformForBid(new BidEventArgs(this.game[currentPlayer], bid, currentContract)); previousBids.Add(bid); currentPlayer = this.game.GetNextPlayer(currentPlayer); } return(currentContract); }