Untitled

mail@pastecode.io avatarunknown
plain_text
22 days ago
6.9 kB
4
Indexable
Never
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class BridgeGame {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();
        
        List<Card> deck = initializeDeck();
        int dealer = random.nextInt(2); // 0 or 1
        int currentPlayer = dealer;
        int[] scores = new int[2];
        
        while (true) {
            System.out.println("------ New Hand ------");
            dealer = (dealer + 1) % 2;
            List<Card>[] hands = dealHands(deck);
            Contract contract = bidding(scanner, hands, dealer);
            System.out.println("Contract: " + contract);
            int tricksTaken = playHand(scanner, hands, contract, dealer);
            scores[dealer] += tricksTaken;
            System.out.println("Hand Over");
            System.out.println("Scores: Player 1 - " + scores[0] + ", Player 2 - " + scores[1]);
            
            System.out.print("Do you want to play another hand? (yes/no): ");
            String playAgain = scanner.next();
            if (!playAgain.equalsIgnoreCase("yes")) {
                break;
            }
        }
        
        System.out.println("Game Over");
        System.out.println("Final Scores: Player 1 - " + scores[0] + ", Player 2 - " + scores[1]);
        scanner.close();
    }
    
    private static List<Card> initializeDeck() {
        List<Card> deck = new ArrayList<>();
        String[] suits = {"Hearts", "Diamonds", "Clubs", "Spades"};
        String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"};
        
        for (String suit : suits) {
            for (String rank : ranks) {
                deck.add(new Card(rank, suit));
            }
        }
        
        Collections.shuffle(deck);
        return deck;
    }
    
    private static List<Card>[] dealHands(List<Card> deck) {
        List<Card>[] hands = new List[2];
        hands[0] = new ArrayList<>();
        hands[1] = new ArrayList<>();
        
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 2; j++) {
                hands[j].add(deck.remove(0));
            }
        }
        
        return hands;
    }
    
    private static Contract bidding(Scanner scanner, List<Card>[] hands, int dealer) {
        int currentBidder = dealer;
        int opponent = (dealer + 1) % 2;
        Contract currentContract = null;
        
        while (true) {
            System.out.println("Bidding: Player " + (currentBidder + 1));
            System.out.print("Enter your bid (e.g., 'pass', 'one club', 'two spades'): ");
            String bid = scanner.nextLine().toLowerCase();
            
            if (bid.equals("pass")) {
                if (currentContract != null) {
                    break;
                }
            } else if (Contract.isValidBid(bid)) {
                currentContract = Contract.parse(bid);
            } else {
                System.out.println("Invalid bid. Try again.");
                continue;
            }
            
            // Swap the bidder
            currentBidder = opponent;
            opponent = (opponent + 1) % 2;
        }
        
        return currentContract;
    }
    
    private static int playHand(Scanner scanner, List<Card>[] hands, Contract contract, int dealer) {
        int tricksTaken = 0;
        int currentTrickTaker = dealer;
        List<Card> trick = new ArrayList<>();
        
        for (int i = 0; i < 13; i++) {
            int currentPlayer = (dealer + i) % 2;
            
            System.out.println("Player " + (currentPlayer + 1) + "'s turn");
            System.out.println("Your hand:");
            for (Card card : hands[currentPlayer]) {
                System.out.println(card);
            }
            
            if (currentPlayer == currentTrickTaker) {
                System.out.print("Lead a card: ");
            } else {
                System.out.print("Play a card: ");
            }
            
            String input = scanner.nextLine();
            Card selectedCard = findCardInHand(input, hands[currentPlayer]);
            
            if (selectedCard == null) {
                System.out.println("Invalid card. Try again.");
                i--;
                continue;
            }
            
            hands[currentPlayer].remove(selectedCard);
            trick.add(selectedCard);
            
            if (currentPlayer == currentTrickTaker && trick.size() == 1) {
                contract.setTrumpSuit(selectedCard.getSuit());
            }
            
            if (trick.size() == 2) {
                System.out.println("Trick: " + trick.get(0) + " vs. " + trick.get(1));
                int winnerIndex = contract.getTrickWinner(trick);
                currentTrickTaker = (currentTrickTaker + winnerIndex) % 2;
                System.out.println("Player " + (currentTrickTaker + 1) + " wins the trick.");
                trick.clear();
                tricksTaken++;
            }
        }
        
        return tricksTaken;
    }
    
    private static Card findCardInHand(String cardName, List<Card> hand) {
        for (Card card : hand) {
            if (card.toString().equalsIgnoreCase(cardName)) {
                return card;
            }
        }
        return null;
    }
}

class Card {
    private final String rank;
    private final String suit;
    
    public Card(String rank, String suit) {
        this.rank = rank;
        this.suit = suit;
    }
    
    public String getRank() {
        return rank;
    }
    
    public String getSuit() {
        return suit;
    }
    
    @Override
    public String toString() {
        return rank + " of " + suit;
    }
}

class Contract {
    private String level;
    private String suit;
    
    public Contract(String level, String suit) {
        this.level = level;
        this.suit = suit;
    }
    
    public static boolean isValidBid(String bid) {
        // Implement your own validation logic here
        return true;
    }
    
    public static Contract parse(String bid) {
        // Implement parsing logic here
        return new Contract("level", "suit");
    }
    
    public void setTrumpSuit(String suit) {
        this.suit = suit;
    }
    
    public int getTrickWinner(List<Card> trick) {
        // Implement logic to determine the winner of a trick
        return 0; // Return the index of the winning player
    }
    
    @Override
    public String toString() {
        return level + " " + suit;
    }
}