BJ 1
BJ 1
h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "gfx.h"
typedef struct {
char face[10];
char suit[10];
int value;
} Card;
Card deck[52];
int top = 0; // Tracks the top card in the deck
// Function Prototypes
void createDeck();
void shuffleDeck();
Card dealCard();
void drawCard(int x, int y, const char *face, const char *suit);
void renderHand(Card *hand, int numCards, int xStart, int yStart, const char
*label);
int calculateHandValue(Card *hand, int numCards);
void renderTable();
void startNewGame();
void gameOver(const char *message);
int main() {
srand(time(0)); // Seed for random number generation
gfx_open(WIDTH, HEIGHT, "Blackjack 21");
createDeck();
shuffleDeck();
while (1) {
gfx_clear();
renderTable();
char c = gfx_wait();
if (c == 'n') { // Start a new game
startNewGame();
} else if (c == 'q') { // Quit the game
break;
}
}
return 0;
}
void createDeck() {
const char *suits[] = {"Hearts", "Diamonds", "Clubs", "Spades"};
const char *faces[] = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"Jack", "Queen", "King"};
int values[] = {11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10};
int index = 0;
for (int s = 0; s < 4; s++) {
for (int f = 0; f < 13; f++) {
strcpy(deck[index].suit, suits[s]);
strcpy(deck[index].face, faces[f]);
deck[index].value = values[f];
index++;
}
}
top = 0;
}
void shuffleDeck() {
for (int i = 0; i < 52; i++) {
int j = rand() % 52;
Card temp = deck[i];
deck[i] = deck[j];
deck[j] = temp;
}
}
Card dealCard() {
if (top >= 52) {
createDeck();
shuffleDeck();
}
return deck[top++];
}
void renderHand(Card *hand, int numCards, int xStart, int yStart, const char
*label) {
gfx_color(255, 255, 255);
gfx_text(xStart, yStart - 20, label);
for (int i = 0; i < numCards; i++) {
drawCard(xStart + (i * (CARD_WIDTH + 10)), yStart, hand[i].face,
hand[i].suit);
}
}
return total;
}
void renderTable() {
gfx_color(0, 128, 0);
gfx_fillrectangle(0, 0, WIDTH, HEIGHT);
gfx_color(255, 255, 255);
gfx_text(10, 20, "Press 'N' to Start a New Game or 'Q' to Quit.");
}
void startNewGame() {
playerCards = dealerCards = 0;
playerHand[playerCards++] = dealCard();
playerHand[playerCards++] = dealCard();
dealerHand[dealerCards++] = dealCard();
while (1) {
gfx_clear();
renderTable();
gfx_text(10, HEIGHT - 20, "Press 'H' to Hit, 'S' to Stand, 'Q' to Quit.");
char c = gfx_wait();
if (c == 'h') { // Hit
playerHand[playerCards++] = dealCard();
if (calculateHandValue(playerHand, playerCards) > 21) {
gameOver("Bust! You lose.");
break;
}
} else if (c == 's') { // Stand
while (dealerTotal < 17) {
dealerHand[dealerCards++] = dealCard();
dealerTotal = calculateHandValue(dealerHand, dealerCards);
}