Package org.gnubridge.core.bidding.rules

Source Code of org.gnubridge.core.bidding.rules.OvercallSuit

package org.gnubridge.core.bidding.rules;

import java.util.Collection;

import org.gnubridge.core.Hand;
import org.gnubridge.core.bidding.Auctioneer;
import org.gnubridge.core.bidding.Bid;
import org.gnubridge.core.bidding.PointCalculator;
import org.gnubridge.core.deck.Suit;

public class OvercallSuit extends BiddingRule {

  private final PointCalculator calculator;

  public OvercallSuit(Auctioneer a, Hand h) {
    super(a, h);
    calculator = new PointCalculator(hand);
  }

  @Override
  protected boolean applies() {
    return this.auction.mayOvercall() && calculator.getCombinedPoints() >= 10;
  }

  @Override
  protected Bid prepareBid() {
    Bid result = null;
    if (calculator.getCombinedPoints() < 13) {
      return firstValidBid( //
          bidSuit(1, hand.getSuitsWithAtLeastCards(6)), //
          bidSuit(1, hand.getDecent5LengthSuits()));
    } else if (calculator.getCombinedPoints() < 16) {
      return firstValidBid( //
          bidSuit(1, hand.getSuitsWithAtLeastCards(5)), //
          bidSuit(2, hand.getSuitsWithAtLeastCards(6)), //
          bidSuit(2, hand.getGood5LengthSuits()));
    } else if (calculator.getCombinedPoints() < 19) {
      return firstValidBid( //
          bidSuit(1, hand.getSuitsWithAtLeastCards(5)), //
          bidSuit(2, hand.getSuitsWithAtLeastCards(5)));
    }
    return result;
  }

  private Bid bidSuit(int bidLevel, Collection<Suit> suits) {
    for (Suit suit : suits) {
      if (auction.isValid(new Bid(bidLevel, suit))) {
        return new Bid(bidLevel, suit);
      }
    }
    return null;
  }

  private Bid firstValidBid(Bid... bids) {
    for (Bid bid : bids) {
      if (bid != null) {
        return bid;
      }
    }
    return null;
  }

}
TOP

Related Classes of org.gnubridge.core.bidding.rules.OvercallSuit

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.