【问题标题】:I need help changing the integer value of ace in blackjack if the total sum is going to be higher then 21, C如果总和将高于 21,C,我需要帮助更改二十一点中 ace 的整数值
【发布时间】:2016-04-13 11:25:34
【问题描述】:

在我的二十一点游戏中,ace 的整数值固定为 11,但在这种情况下,当一名玩家获得 ace 但她手中牌的总价值将高于 21 时,我想要 ace 的整数值为 1。

void deal(const Card * const Deck, int value, int size, int size_1, int size_2){

int i, j, length;
char anotherCard[2];
char name1[30];
char name2[30];
int valueName1 = 0, valueName2 = 0, valueDealer = 0;

printf("Name player one > ");
scanf("%s", name1);
printf("Name player two > ");
scanf("%s", name2);

printf("\nWelcome %s and %s, lets begin!\n\n", name1, name2);
getchar();

while (valueName1 < 21 || valueName2 < 21 || valueDealer < 17){
    printf("%s's card:\n", name1);
    for (i = 0; i < size; i++){
        printf("%5s of %-8s%c", Deck[i].decks, Deck[i].suits, (i + 1) % 2 ? '\t' : '\n');


    if (valueName1 > 21 && Deck[i].value == 11){
        Deck[i].value = 1;                          //error on this line
        valueName1 += Deck[i].value;
        printf("value > %d\n", valueName1);
        }
    else{
        printf("value > %d\n", valueName1);
        }
    }


int main(void){

Card allCards[52];
Card cardValue[52];
char *suitname[] = { "spades", "hearts", "diamonds", "clubs" };
char *deckname[] = { "ace", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "jack", "queen", "king" };
int cardvalue[] = { 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10 };



void fillDeck(Card * const Deck, const char *suit[], const char *deck[], const int value[]){

int s;

for (s = 0; s < 52; s++){
    Deck[s].suits = deck[s % 13];
    Deck[s].decks = suit[s / 13];
    Deck[s].value = value[s % 13];
}

return;
}

我的结构:

typedef struct card{
    const char *suits;
    const char *decks;
    int value;
};

错误信息: 错误 C2166:左值指定 const 对象

【问题讨论】:

  • 您是否在struct 中使用const 修饰符声明了value
  • 我认为我们需要更多代码来提供帮助。看起来 Deck[] 可以用 {x,y,z...} 方法定义,但很难用你给我们的东西来判断。请包括 valueName1 和 Deck 的定义。
  • 发布有关错误的问题时,请在消息正文中包含完整且未经编辑的错误输出,然后标记错误所在的行。并且始终提供上下文,如变量和函数声明,最好创建一个 Minimal, Complete, and Verifiable Example 并向我们展示该 MCVE 中的错误。
  • 在二十一点程序中,总是更容易以这种方式对待 ace:ace 被视为一个。时期。将一手牌相加时,将数值相加,然后进行简单检查:如果手牌 (a) 包含至少一个 A,并且 (b) 总点数

标签: c blackjack


【解决方案1】:

您将Deck 声明为

const Card * const Deck

这意味着Deck 是一个指向常量数据的常量指针,也就是说,您不能更改指针,并且(更重要的是)您不能更改它指向的数据。您需要删除第一个 const 才能使其工作

Card * const Deck

【讨论】:

  • 我认为这是第 2 次(共 4 次)OP 就他的项目问了一个问题。
猜你喜欢
  • 2016-04-12
  • 2018-04-17
  • 2016-01-08
  • 2013-04-29
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
相关资源
最近更新 更多