请注意我已经使用srand((unsigned) time(NULL));
种子rand()
。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#define NUM_SUITS 4
#define NUM_RANKS 13
bool in_hand[NUM_SUITS][NUM_RANKS] = {false};
bool newcard = {false};
int num_cards, rank, suit, totrank;
const char rank_code[] = {'A','2','3','4','5','6','7','8','9','T','J','Q','K',};
const char suit_code[] = {'C','D','H','S'};
int main_hand ()
{
suit = rand() % NUM_SUITS;
rank = rand() % NUM_RANKS;
if (!in_hand[suit][rank]) {
in_hand[suit][rank] = true;
num_cards--;
if (suit == 0){
printf("%c of Clubs \n", rank_code[rank]);
}
else if (suit == 1){
printf("%c of Diamonds \n", rank_code[rank]);
}
else if (suit == 2){
printf("%c of Hearts \n", rank_code[rank]);
}
else if (suit == 3){
printf("%c of Spades \n", rank_code[rank]);
}
}
}
int print_hand (suit)
{
}
int totrank_check (totrank)
{
if (totrank > 21) {
printf ("You lose!");
}
else if (totrank == 21) {
printf ("You win!");
}
}
int main()
{
bool stay = {false};
srand((unsigned) time(NULL));
totrank = 0;
num_cards = 2;
printf("Your hand: ");
while (num_cards > 0) {
main_hand();
totrank = totrank + (rank + 1);
}
printf("Total rank: %d\n", totrank);
totrank_check(totrank);
printf("\n");
while (totrank < 24 && stay == false) {
printf("Another card? 1. Yes 0. No\n");
scanf("%d", &newcard);
if(!newcard) {
main_hand();
}
totrank = totrank + (rank + 1);
totrank_check(totrank);
printf("Total rank: %d\n", totrank);
printf("Stay? 1. Yes 0. No\n");
scanf("%d", &stay);
}
return 0;
}
基本上它是一个模拟&#34;模拟&#34;一只二十一点。
它开始,rand()
选择两个数字,即卡片的等级和套装,在矩阵中设置为true,这样就不能再以相同的组合选择它们然后打印。
检查卡的总排名(如果超过21,则自动丢失)然后会询问您是否需要另一张卡或者您想留下。
这里出现错误:如果您选择要另外一张卡,这张新卡将与最后一张卡相同。 基本上,你得到一个黑桃王牌和两个钻石,然后你想要另一张牌,你得到另外两个钻石。而另一个,另一个。如果您在第二个中删除了排名检查,而您可以看到排名根据最后一张卡的排名而增长。
之前,printfs在print_hand()函数中,你可以看到你总是得到相同的卡,现在我在main_hand()函数中移动它们因为我认为它可能是问题(它不是&# 39; t)并且因为具有单独的印刷功能是多余的。但是从技术上来说,你可以看到if(!in_hand [suit] [rank])有效,因为,由于卡片是相同的,它不会输入if而且它不会被打印。< / p>
我不知道造成这个问题的原因。任何的想法?我尝试在rand()上面的函数中移动srand()但没有改变。这很奇怪,因为它第二次工作正常,但第三次并且它没有。我觉得我很遗憾,这件事显而易见。
(之前我已经问过这个问题了,但是有些人甚至没有费心去阅读它,因此我没有得到任何有用的答案。)