• Copyright© 2025 xPralak Designs - Joseph Downey
<?php
session_start();
// Define card values
$cardValues = [
'2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9,
'J' => 10, 'Q' => 10, 'K' => 10, 'A' => 11
];
$playerScore = 100;
// Function to calculate hand value
function calculateHandValue($hand) {
global $cardValues;
$value = 0;
$aces = 0;
foreach ($hand as $card) {
$cardRank = explode(' ', $card)[0];
$value += $cardValues[$cardRank];
// Count the number of Aces
if ($cardRank == 'A') {
$aces++;
}
}
while ($value > 21 && $aces) {
$value -= 10;
$aces--;
}
return $value;
}
// Function to initialize deck
function initializeDeck() {
$deck = [];
foreach (['Hearts', 'Diamonds', 'Clubs', 'Spades'] as $suit) {
foreach (array_merge(range(2, 9), ['J', 'Q', 'K', 'A']) as $rank) {
$deck[] = $rank . ' of ' . $suit;
}
}
shuffle($deck);
return $deck;
}
// Reset game on "Play Again" action
if (isset($_POST['action']) && $_POST['action'] == 'Play Again') {
unset($_SESSION['deck']);
unset($_SESSION['playerHand']);
unset($_SESSION['dealerHand']);
unset($_SESSION['gameStatus']);
$_SESSION['gameStatus'] = 'playing';
$_SESSION['deck'] = initializeDeck();
$_SESSION['playerHand'] = [array_pop($_SESSION['deck']), array_pop($_SESSION['deck'])];
$_SESSION['dealerHand'] = [array_pop($_SESSION['deck']), array_pop($_SESSION['deck'])];
$_SESSION['betAmount'] = 5; // Reset bet to minimum
}
// Initialize the game if not already initialized
if (!isset($_SESSION['deck'])) {
$_SESSION['deck'] = initializeDeck();
$_SESSION['playerHand'] = [array_pop($_SESSION['deck']), array_pop($_SESSION['deck'])];
$_SESSION['dealerHand'] = [array_pop($_SESSION['deck']), array_pop($_SESSION['deck'])];
$_SESSION['gameStatus'] = 'playing';
$_SESSION['betAmount'] = 5; // Set initial bet amount to minimum
}
// Handle player actions
if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_SESSION['gameStatus'] == 'playing') {
$action = $_POST['action'];
if ($action == 'Hit') {
$_SESSION['playerHand'][] = array_pop($_SESSION['deck']);
} elseif ($action == 'Stand') {
$_SESSION['gameStatus'] = 'dealerPlaying';
} elseif ($action == 'Quit') {
$_SESSION['gameStatus'] = 'quit';
} elseif (isset($_POST['changeBet'])) {
$betChange = (int)$_POST['changeBet'];
$newBet = $_SESSION['betAmount'] + $betChange;
if ($newBet >= 5) {
$_SESSION['betAmount'] = $newBet;
}
}
if (calculateHandValue($_SESSION['playerHand']) > 21) {
$_SESSION['gameStatus'] = 'playerBusted';
}
}
// Dealer's turn (reveals cards one at a time)
if ($_SESSION['gameStatus'] == 'dealerPlaying') {
while (calculateHandValue($_SESSION['dealerHand']) < 17) {
$_SESSION['dealerHand'][] = array_pop($_SESSION['deck']);
}
if (calculateHandValue($_SESSION['dealerHand']) > 21) {
$_SESSION['gameStatus'] = 'dealerBusted';
} elseif (calculateHandValue($_SESSION['playerHand']) > calculateHandValue($_SESSION['dealerHand'])) {
$_SESSION['gameStatus'] = 'playerWins';
} elseif (calculateHandValue($_SESSION['playerHand']) < calculateHandValue($_SESSION['dealerHand'])) {
$_SESSION['gameStatus'] = 'dealerWins';
} else {
$_SESSION['gameStatus'] = 'tie';
}
}
?>
<div class="game">
<?php include('includes/blackjackheader.php');
if ($_SESSION['gameStatus'] == 'playing') {
echo "<div class='GameArea'>";
echo "<div class='DeckArea'>";
echo "<img class='card' src='svgfiles/cardback.svg' alt='Deck'>";
echo "</div>";
echo "<div class='PlayArea'>";
echo "<div class='Dealer'>";
echo "<h3>";
// Display dealer's first card
$dealerFirstCard = $_SESSION['dealerHand'][0];
$dealerFirstCardDetails = explode(' ', $dealerFirstCard);
$dealerFirstCardRank = strtolower($dealerFirstCardDetails[0]);
$dealerFirstCardSuit = strtolower($dealerFirstCardDetails[2]);
echo "<div class='cards'>";
echo "<img class='card' src='svgfiles/{$dealerFirstCardRank}_of_{$dealerFirstCardSuit}.svg' alt='{$dealerFirstCard}'>";
// Display dealer's second card only if the player has finished (dealer's turn)
if ($_SESSION['gameStatus'] == 'dealerPlaying' || $_SESSION['gameStatus'] == 'dealerBusted' || $_SESSION['gameStatus'] == 'playerWins' || $_SESSION['gameStatus'] == 'tie') {
$dealerSecondCard = $_SESSION['dealerHand'][1];
$dealerSecondCardDetails = explode(' ', $dealerSecondCard);
$dealerSecondCardRank = strtolower($dealerSecondCardDetails[0]);
$dealerSecondCardSuit = strtolower($dealerSecondCardDetails[2]);
echo "<img class='card' src='svgfiles/{$dealerSecondCardRank}_of_{$dealerSecondCardSuit}.svg' alt='{$dealerSecondCard}'>";
} else {
// Display back of the card if the dealer is still playing
echo "<img class='card' src='svgfiles/cardback.svg' alt='Card Back'>";
}
echo "</div>";
echo "(Value: $dealerFirstCardRank + ?)</h3>"; // Display dealer score
echo "</div>";
echo "<hr><div class='Player'>";
echo "<h3>Player ";
echo "<div class='cards'>";
foreach ($_SESSION['playerHand'] as $card) {
$cardDetails = explode(' ', $card);
$cardRank = strtolower($cardDetails[0]);
$cardSuit = strtolower($cardDetails[2]);
echo "<img class='card' src='svgfiles/{$cardRank}_of_{$cardSuit}.svg' alt='{$card}'>";
}
echo "</div>";
echo "(Value: " . calculateHandValue($_SESSION['playerHand']) . ")</h3>"; // Display player score
echo "</div>";
}
// Show result only after the game is finished (when it's not 'playing')
if ($_SESSION['gameStatus'] != 'playing') {
echo "<div class='GameArea'>";
echo "<div class='DeckArea'>";
echo "<img class='card' src='svgfiles/cardback.svg' alt='Deck'>";
echo "</div>";
echo "<div class='PlayArea'>";
echo "<div class='Dealer'>";
echo "<h3>Dealer";
echo "<div class='cards'>";
foreach ($_SESSION['dealerHand'] as $card) {
$cardDetails = explode(' ', $card);
$cardRank = strtolower($cardDetails[0]);
$cardSuit = strtolower($cardDetails[2]);
echo "<img class='card' src='svgfiles/{$cardRank}_of_{$cardSuit}.svg' alt='{$card}'>";
}
echo "</div>";
echo "(Value: " . calculateHandValue($_SESSION['dealerHand']) . ")</h3>";
echo "</h3></div>";
echo "<h2>Game Over</h2>";
echo "<div class='Player'>";
echo "<h3>Player";
echo "<div class='cards'>";
foreach ($_SESSION['playerHand'] as $card) {
$cardDetails = explode(' ', $card);
$cardRank = strtolower($cardDetails[0]);
$cardSuit = strtolower($cardDetails[2]);
echo "<img class='card' src='svgfiles/{$cardRank}_of_{$cardSuit}.svg' alt='{$card}'>";
}
echo "</div>";
echo "(Value: " . calculateHandValue($_SESSION['playerHand']) . ")</h3>";
echo "</h3></div>";
echo "</div>";
echo "</div>";
if ($_SESSION['gameStatus'] == 'playerBusted') {
echo "<h4>Player Busted! You lose!</h4>";
} elseif ($_SESSION['gameStatus'] == 'dealerBusted') {
echo "<h4>Dealer Busted! You win!</h4>";
} elseif ($_SESSION['gameStatus'] == 'playerWins') {
echo "<h4>Player Wins!</h4>";
} elseif ($_SESSION['gameStatus'] == 'dealerWins') {
echo "<h4>Dealer Wins!</h4>";
} elseif ($_SESSION['gameStatus'] == 'tie') {
echo "<h4>It's a Tie!</h4>";
}
}
?>
<div class="buttons">
<form method="POST">
<?php if ($_SESSION['gameStatus'] == 'playing') { ?>
<button type="submit" name="action" value="Hit">HIT 🃏</button>
<button type="submit" name="action" value="Stand">STAND ✋</button>
<button type="submit" name="action" value="Quit">QUIT 🚪</button>
<?php } else { ?>
<button type="submit" name="action" value="Play Again">Play Again ↺</button>
<?php } ?>
</form>
</div>
</div>
</div>
<?php include('includes/footer.php');?>