Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在我的21点游戏C中,如何将int值分配给const char数组_C_Blackjack_Const Char - Fatal编程技术网

在我的21点游戏C中,如何将int值分配给const char数组

在我的21点游戏C中,如何将int值分配给const char数组,c,blackjack,const-char,C,Blackjack,Const Char,我正在用C编写一个21点游戏。我有三个功能,一个用于填充牌组,一个用于洗牌,另一个用于发牌。我的问题是,我不知道如何给我的牌一个整数值,我需要它来看看谁赢。如果您能就如何解决这一问题提供一些意见,我将不胜感激 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "func.h" /*fill deck with 52 cards*/ void fillDeck(Card *

我正在用C编写一个21点游戏。我有三个功能,一个用于填充牌组,一个用于洗牌,另一个用于发牌。我的问题是,我不知道如何给我的牌一个整数值,我需要它来看看谁赢。如果您能就如何解决这一问题提供一些意见,我将不胜感激

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "func.h"

/*fill deck with 52 cards*/
void fillDeck(Card * const Deck, const char *suit[], const char *deck[]){

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



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "func.h"

/*shuffle cards*/
void shuffle(Card * const Deck){
int i, j;
Card temp;

for (i = 0; i < 52; i++){
    j = rand() % 52;
    temp = Deck[i];
    Deck[i] = Deck[j];
    Deck[j] = temp;
}
return;
}



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "func.h"

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

int i, j, length;
char anotherCard[2];
char name1[30];
char name2[30];

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();

    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');
    }

    printf("\n%s's card:\n", name2);
    for (i = 2; i < size_1; i++){
        printf("%5s of %-8s%c", Deck[i].decks, Deck[i].suits, (i + 1) % 2 ? '\t' : '\n');
    }

    printf("\nDealer card:\n");
    for (i = 4; i < size_2; i++){
        printf("%5s of %-8s%c", Deck[i].decks, Deck[i].suits, (i + 1) % 2 ? '\t' : '\n');
    }
return;
}



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "func.h"

int main(void){

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

srand(time(NULL));

fillDeck(allCards, suits, decks, values);
shuffle(allCards);
deal(allCards, 2, 4, 6);

getchar();
return 0;
}



/*func.h*/
struct card{
    const char *suits;
    const char *decks;
};

typedef struct card Card;

void fillDeck(Card * const Deck, char *suit[], char *deck[]);

void shuffle(Card * const Deck);

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

#endif
#包括
#包括
#包括
#包括“func.h”
/*用52张牌填满这副牌*/
无效填充甲板(卡片*常量甲板,常量字符*套装[],常量字符*甲板[]){
int-s;
对于(s=0;s<52;s++){
甲板[s]。西服=甲板[s%13];
甲板[s]。甲板=西服[s/13];
}
返回;
}
#包括
#包括
#包括
#包括“func.h”
/*洗牌*/
无效洗牌(牌组*常量牌组){
int i,j;
卡片温度;
对于(i=0;i<52;i++){
j=rand()%52;
温度=甲板[i];
甲板[i]=甲板[j];
甲板[j]=温度;
}
返回;
}
#包括
#包括
#包括
#包括
#包括“func.h”
/*交易卡*/
无效交易(常数卡*常数卡组,整数大小,整数大小_1,整数大小_2){
int i,j,长度;
另一张卡片[2];
字符名称1[30];
字符名称2[30];
printf(“名字玩家一号>”);
scanf(“%s”,名称1);
printf(“命名玩家2>”;
scanf(“%s”,名称2);
printf(“\n欢迎%s和%s,让我们开始!\n\n”,名称1,名称2);
getchar();
printf(“%s的卡:\n”,名称1);
对于(i=0;i
我建议您在卡结构中添加一个字段来保存值

typedef struct card {
    const char *suits;
    const char *decks;
    int value;
}
要为卡分配您将使用的值,请执行以下操作:

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 = suit[s / 13];
        Deck[s].decks = deck[s % 13];
        Deck[s].value = value[s % 13];
    }
}
void fillDeck(卡片*const-Deck,const-char*suit[],const-char*Deck[],const-int*value[])
{
int-s;
对于(s=0;s<52;s++){
甲板[s]。西服=西服[s/13];
甲板[s]。甲板=甲板[s%13];
甲板[s]。值=值[s%13];
}
}

然后,当您决定赢家时,您只需查看他们手中的所有卡片,并将其值相加。

不要将程序的卡片值与其等级混淆-明确区分程序使用的等级
0..12
,以及卡片的描述性值

//char *suitname[] = { "Hearts", "Clubs", "Diamonds", "Spades" };
//char *rankname[] = { "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", 
                          "Ten", "Jack", "Queen", "King", "Ace" };

char *suitname[] = { "Hearts", "Diamonds", "Spades", "Clubs" };
char *rankname[] = { "Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", 
                          "Ten", "Jack", "Queen", "King" };
无论“Ace”是高还是低,排名“三”的值都不是
3
。我建议(双关语!)处理卡值
0..51
,并使用

int suit = card / 13;       // range 0..3
int rank = card % 13;       // range 0..12
在这两种情况下,suit或rank的值范围从
0
,到suit(pun!)数组索引

至于排名的得分值,您可以定义另一个类似这样的数组

int cardvalue[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10 };
因此,您可以使用

int value = cardvalue[card % 13];
并使用

printf("%s of %s", rankname[card % 13], suitname[card / 13]);

正如我所展示的,你也可以根据你定义的顺序来获得套装等级(在某些纸牌游戏中很重要)。

到底是什么问题?不太清楚。代码太多了。
“我不知道如何给我的卡一个整数值”
。你想在哪里做这件事?给卡片编号
0..51
,然后西装可以是
card/13
,排名可以是
card%13
。其中西服编号为
0..3
和军衔编号为
0..12
。我不能从他的问题中分辨出来,但需要注意的是,枚举可以很容易地做到这一点,因为您可以指定枚举在幕后的“隐藏”值。使用
enum
s定义军衔和西服,使用字符串数组将索引值
0…
转换为等级和适合的名称。谢谢,这非常有用。我猜当我在fillDeck函数中有值时,我也需要在shuffle和deal函数中有值?我试图在shuffle中实现它,但我只是得到了错误<代码>无效洗牌(卡牌*const-Deck,const-int*value[]){inti,j;卡牌温度;for(i=0;i<52;i++){j=rand()%52;temp=Deck[i];Deck[i]=Deck[j];Deck[j]=temp;value[j];}返回;}
是的,理想情况下,您可以在使用卡牌和套装的任何地方增加价值。此外,只是一个建议,我会考虑重新命名数组“{王牌”,“二”等},因为名称甲板或甲板可能容易混淆与你的班级甲板持有一套52张卡。我写了代码>值[i] =值[j];<代码>在for循环内的我的shuffle函数中,但它不工作。我不能这样写吗?有了你在帖子中写的shuffle函数,你不需要在shuffle中使用value。当我说在你使用牌组的地方使用它时,我指的是数组{“ace”,“two”,等等,}而不是实际的牌组。这就是为什么我建议给你的变量起更多独特的名字。你是在说主函数吗?我仍然需要fillDeck,shuffle和deal功能,对吗?我根据你的建议更改了我的名字。如果你觉得需要单独的功能。数组的填充是一行,洗牌几乎不多。