let deck = [];
let playerHand = [];
let computerHand = [];
let playerPairs = 0;
let computerPairs = 0;
function createDeck() {
const suits = ['Hearts', 'Diamonds', 'Clubs', 'Spades'];
const values = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'];
for (let suit of suits) {
for (let value of values) {
deck.push({suit, value});
}
}
}
function shuffleDeck() {
for (let i = deck.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[deck[i], deck[j]] = [deck[j], deck[i]];
}
}
function dealCards() {
for (let i = 0; i < 7; i++) {
playerHand.push(deck.pop());
computerHand.push(deck.pop());
}
renderHands();
}
function renderHands() {
const playerCardsDiv = document.getElementById('player-cards');
const computerCardsDiv = document.getElementById('computer-cards');
playerCardsDiv.innerHTML = '';
computerCardsDiv.innerHTML = '';
playerHand.forEach(card => {
playerCardsDiv.innerHTML += `
${card.value} ${card.suit[0]}
`;
});
computerHand.forEach(card => {
computerCardsDiv.innerHTML += `?
`;
});
}
function checkForPairs(hand) {
const cardCount = {};
hand.forEach(card => {
cardCount[card.value] = (cardCount[card.value] || 0) + 1;
});
for (let value in cardCount) {
if (cardCount[value] === 4) {
return value;
}
}
return null;
}
function removePairs(hand, value) {
return hand.filter(card => card.value !== value);
}
function askForCard() {
const askCardValue = document.getElementById('ask-card').value.trim().toUpperCase();
if (!askCardValue) {
alert('Please enter a card value.');
return;
}
let log = document.getElementById('game-log');
const initialHandSize = computerHand.length;
computerHand = computerHand.filter(card => card.value !== askCardValue);
const cardsTaken = initialHandSize - computerHand.length;
if (cardsTaken > 0) {
log.innerHTML += `You took ${cardsTaken} ${askCardValue}(s) from the computer.
`;
playerHand.push(...Array(cardsTaken).fill({value: askCardValue}));
} else {
log.innerHTML += `Go Fish! You drew a card.
`;
playerHand.push(deck.pop());
}
const playerPair = checkForPairs(playerHand);
if (playerPair) {
playerHand = removePairs(playerHand, playerPair);
playerPairs++;
log.innerHTML += `You formed a pair of ${playerPair}s.
`;
document.getElementById('player-score').innerText = `Player Pairs: ${playerPairs}`;
}
renderHands();
setTimeout(computerTurn, 1000);
}
function computerTurn() {
const askCardValue = computerHand[Math.floor(Math.random() * computerHand.length)].value;
let log = document.getElementById('game-log');
log.innerHTML += `Computer asks for ${askCardValue}.
`;
const initialHandSize = playerHand.length;
playerHand = playerHand.filter(card => card.value !== askCardValue);
const cardsTaken = initialHandSize - playerHand.length;
if (cardsTaken > 0) {
log.innerHTML += `Computer took ${cardsTaken} ${askCardValue}(s) from you.
`;
computerHand.push(...Array(cardsTaken).fill({value: askCardValue}));
} else {
log.innerHTML += `Computer goes fishing and draws a card.
`;
computerHand.push(deck.pop());
}
const computerPair = checkForPairs(computerHand);
if (computerPair) {
computerHand = removePairs(computerHand, computerPair);
computerPairs++;
log.innerHTML += `Computer formed a pair of ${computerPair}s.
`;
document.getElementById('computer-score').innerText = `Computer Pairs: ${computerPairs}`;
}
renderHands();
checkForGameEnd();
}
function checkForGameEnd() {
if (deck.length === 0 && (playerHand.length === 0 || computerHand.length === 0)) {
const log = document.getElementById('game-log');
if (playerPairs > computerPairs) {
log.innerHTML += `You win!
`;
} else if (playerPairs < computerPairs) {
log.innerHTML += `Computer wins!
`;
} else {
log.innerHTML += `It's a tie!
`;
}
}
}
document.getElementById('ask-button').addEventListener('click', askForCard);
createDeck();
shuffleDeck();
dealCards();