当前位置:首页 > 行业动态 > 正文

c十点半游戏代码

本文介绍了使用C语言编写的十点半游戏代码,该游戏通过模拟扑克牌的洗牌、发牌和玩家与电脑的点数比较来实现。代码首先初始化一副扑克牌,并通过随机函数实现洗牌功能。玩家和电脑轮流取牌,玩家根据手牌点数决定是否继续要牌,最终比较双方点数大小确定胜负。整个游戏过程涉及扑克牌的基本操作和简单的AI逻辑判断,适合作为初学者学习C语言编程和游戏开发的入门案例。

代码示例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_CARDS 52
typedef struct {
    int value;
} Card;
Card deck[NUM_CARDS];
void shuffleDeck(Card deck[], int size) {
    for (int i = 0; i < size; i++) {
        int j = rand() % size;
        Card temp = deck[i];
        deck[i] = deck[j];
        deck[j] = temp;
    }
}
int getCardValue(int cardNum) {
    if (cardNum >= 2 && cardNum <= 9) {
        return cardNum;
    } else if (cardNum == 10 || cardNum == 11 || cardNum == 12 || cardNum == 13) {
        return 10;
    } else if (cardNum == 14) {
        return 11; // Ace can be 1 or 11, here we use 11 as default
    }
    return 0;
}
int main() {
    srand(time(NULL));
    int playerCards[5] = {0};
    int dealerCards[5] = {0};
    int playerSum = 0, dealerSum = 0;
    char hit;
    // Initialize the deck of cards
    for (int i = 0; i < NUM_CARDS; i++) {
        deck[i].value = (i % 13) + 1;
    }
    shuffleDeck(deck, NUM_CARDS);
    // Deal initial 2 cards to player and dealer
    for (int i = 0; i < 2; i++) {
        playerCards[i] = deck[i].value;
        playerSum += getCardValue(playerCards[i]);
        dealerCards[i] = deck[i + 2].value;
        dealerSum += getCardValue(dealerCards[i]);
    }
    printf("Player's hand: ");
    for (int i = 0; i < 2; i++) {
        printf("%d ", playerCards[i]);
    }
    printf("
Dealer's hand: ");
    for (int i = 0; i < 2; i++) {
        printf("%d ", dealerCards[i]);
    }
    printf("
");
    // Player's turn to hit or stand
    do {
        printf("Do you want to hit? (y/n): ");
        scanf(" %c", &hit);
        if (hit == 'y' || hit == 'Y') {
            playerCards[2 + (playerSum / 10)] = deck[2 + (playerSum / 10)].value;
            playerSum += getCardValue(playerCards[2 + (playerSum / 10)]);
            printf("You drew a %d
", playerCards[2 + (playerSum / 10)]);
        }
    } while (hit == 'y' || hit == 'Y');
    // Dealer's turn to hit or stand
    while (dealerSum < 17) {
        dealerCards[2 + (dealerSum / 10)] = deck[2 + (dealerSum / 10) + 2].value;
        dealerSum += getCardValue(dealerCards[2 + (dealerSum / 10)]);
        printf("Dealer drew a %d
", dealerCards[2 + (dealerSum / 10)]);
    }
    // Determine the winner
    if (playerSum > 21) {
        printf("Player busts! Dealer wins.
");
    } else if (dealerSum > 21) {
        printf("Dealer busts! Player wins.
");
    } else if (playerSum > dealerSum) {
        printf("Player wins with a score of %d to the dealer's %d.
", playerSum, dealerSum);
    } else if (playerSum < dealerSum) {
        printf("Dealer wins with a score of %d to the player's %d.
", dealerSum, playerSum);
    } else {
        printf("It's a tie! Both have a score of %d.
", playerSum);
    }
    return 0;
}

代码解释

1、初始化牌组:我们定义了一个包含52张牌的数组deck,每张牌都有一个值,我们使用shuffleDeck函数来随机打乱这些牌的顺序。

c十点半游戏代码

2、获取牌的值getCardValue函数用于根据牌的编号返回其对应的值,2到9的牌返回其面值,而10、J、Q、K和A分别返回10和11(这里假设A默认为11)。

3、发牌:在main函数中,我们首先给玩家和庄家各发两张牌,并计算他们的初始点数总和,玩家有机会选择是否继续要牌(即“hit”),直到他们决定停止或爆牌(点数超过21),庄家也会根据规则继续要牌,直到其点数总和达到或超过17。

c十点半游戏代码

4、判断胜负:我们比较玩家和庄家的点数总和来确定胜者,如果玩家爆牌,则庄家获胜;如果庄家爆牌,则玩家获胜;如果两者都没有爆牌,则点数高者获胜;如果点数相同,则为平局。

c十点半游戏代码