- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
很抱歉,这没有达到应有的详细程度,但我的时间实在是太紧迫了。我正在尝试编写一个程序来模拟 Blackjack 游戏,该程序使用代表输入文件(模拟牌组)中的纸牌的字符。我还没有完成,但正如我所说,我几乎没有时间把它打出来。我在指针的使用和涉及 main() 中的“if”语句的错误代码方面特别有问题。它说 ranOut(应该用于在文件用完纸牌时结束游戏,在文件中表示为 0)抛出异常:读取访问冲突,nullptr。如果这是微不足道的,我很抱歉,但我仍然是 C 的新手,指针是我存在的祸根。这是我的代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
FILE *fpOut;
FILE *fpIn;
#define TRUE 1
#define FALSE 0
int playHand(int *dealerTotal, int *playerTotal, int *ranOut); //Plays one hand
int getCard(int total); //Reads next card from input, assigns value to points
int main() {
if (!(fpOut = fopen("csis.txt", "w")))
{
printf("csis.txt could not be opened for output.");
exit(1);
}
if (!(fpIn = fopen("cards.txt", "r")))
{
printf("cards.txt could not be opened for input.");
exit(1);
}
int *dealerTotal = 0; //Initialize variables to count wins
int *playerTotal = 0;
int *ranOut = 0; //ends loop
while (1)
{
playHand(dealerTotal, playerTotal, ranOut);
if (*ranOut == TRUE)
break;
}
printf("Total Dealer Wins: %d", *dealerTotal);
printf("Total Player Wins: %d", *playerTotal);
fclose(fpIn);
fclose(fpOut);
getchar();
return 0;
}
int playHand(int *dealerTotal,int *playerTotal, int *ranOut)
{
int pCard[10] = { 0 };
int dCard[10] = { 0 };
int dWin = 0;
int pWin = 0;
int i = 0;
int dFin = 0;
int pFin = 0;
while (i < 10)
{
int sumP = pCard[0] + pCard[1] + pCard[2] + pCard[3] + pCard[4] +
pCard[5] + pCard[6] + pCard[7] + pCard[8] + pCard[9];
int sumD = dCard[0] + dCard[1] + dCard[2] + dCard[3] + dCard[4] +
dCard[5] + dCard[6] + dCard[7] + dCard[8] + dCard[9];
if (sumP <= 15)
{
pCard[i] = getCard(sumP);
}
else
pFin = TRUE;
if (sumD <= 16)
{
dCard[i] = getCard(sumD);
}
else
dFin = TRUE;
if (pCard[i] == 42 || dCard[i] == 42)
{
*ranOut = TRUE;
break;
}
sumP = pCard[0] + pCard[1] + pCard[2] + pCard[3] + pCard[4] + pCard[5] +
pCard[6] + pCard[7] + pCard[8] + pCard[9];
sumD = dCard[0] + dCard[1] + dCard[2] + dCard[3] + dCard[4] + dCard[5] +
dCard[6] + dCard[7] + dCard[8] + dCard[9];
if (sumP > 21 || sumD == 21)
{
dWin = TRUE;
pWin = FALSE;
}
else if (sumD > 21 || sumP == 21)
{
dWin = FALSE;
pWin = TRUE;
}
else if (dFin && pFin)
{
if ((21 - sumP) > (21 - sumD))
{
dWin = TRUE;
pWin = FALSE;
}
else
{
dWin = FALSE;
pWin = TRUE;
}
}
if (dWin)
{
*dealerTotal++;
break;
}
else if (pWin)
{
*playerTotal++;
break;
}
i++;
}
return 1;
}
int getCard(int total)
{
char x;
int y = 0;
if (!feof(fpIn))
{
x = fgetc(fpIn);
switch (x)
{
case '0':
y = 42;
break;
case '1':
y = 1;
break;
case '2':
y = 2;
break;
case '3':
y = 3;
break;
case '4':
y = 4;
break;
case '5':
y = 5;
break;
case '6':
y = 6;
break;
case '7':
y = 7;
break;
case '8':
y = 8;
break;
case '9':
y = 9;
break;
case 'T':
y = 10;
break;
case 'K':
y = 10;
break;
case 'Q':
y = 10;
break;
case 'J':
y = 10;
break;
case 'A':
if(total > 10)
y = 1;
else if (total >= 10)
y = 11;
break;
}
}
return y;
}
最佳答案
int *ranOut = 0; //ends loop
这声明了一个指向 0
的整数指针,因此它是一个 NULL
指针。
尝试将 ranOut
声明为整数
int ranOut = 0; //ends loop
然后将其地址传递给playHand()
playHand(dealerTotal, playerTotal, &ranOut);
当然,在 Main()
if (ranOut == TRUE)
关于C Blackjack Lab,指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50456930/
我正在研究二十一点游戏,作为面向对象编程类(class)的期末项目。我一生都无法弄清楚为什么我的牌无法正确渲染(未显示的牌的值仍然被考虑在内 - 这意味着如果我有二十一点并且我只能看到我的一张牌,我仍
我已分配使用老师提供的 JFrame 和卡片图像编写一个基本的 BlackJack 窗口程序。我按照我认为应该有效的方式写下了所有内容,但是当我编译它时它根本没有显示出来。我是不是错过了什么? 当我编
#include #include #include #include typedef enum {Clubs, Diamonds, Hearts, Spades} suit_t; ty
我正在创建一个二十一点程序。我目前正处于“号码检查”过程中。因此,一旦发牌并且玩家要求“Hit”,我需要检查他们所发的牌是否超过 21 张。我试过这个: if(pCard1+pCard2+pCard3
第一次在这里发帖。我听说过很多关于社区的好消息。我是一名业余程序员,到目前为止已经涉足过 C++ 和 Java。无论如何,我一直在绞尽脑汁地研究这个在过去几天里随意组合的 Java 二十一点游戏。基本
我的代码有问题。它会产生随机错误,我不知道为什么。我是 C++ 的新手,所以请多多包涵 >.> 这是有问题的代码: while (!IsGameOver) { struct decktype
很抱歉,这没有达到应有的详细程度,但我的时间实在是太紧迫了。我正在尝试编写一个程序来模拟 Blackjack 游戏,该程序使用代表输入文件(模拟牌组)中的纸牌的字符。我还没有完成,但正如我所说,我几乎
我正在使用 openaigym 来制作二十一点的 AI。 但我不擅长 python 和gym,所以不知道如何完成代码。 我一直在尝试编写一个简单的代码来使用 Q-learning 构建人工智能。 但我
我的 child 有一项家庭作业是用 Java 编写 Blackjack。我帮了他一点忙,但大部分都是他自己做的,而且实际上演奏得很好。他甚至发现了一个我在计算手牌值(value)时没有看到的错误。然
所以我在玩 Java 二十一点游戏时遇到了一些麻烦。我已经不再使用 HashMap 来表示卡名称和值,并将其转换为 String[],因为它更容易。然而,我似乎破坏了其中的一些代码: private
尝试创建二十一点游戏,但我在弄清楚如何打印纸牌和纸牌阵列时遇到了一些麻烦。 因此,当玩家看到前两张牌后,他们可以选择要牌或停牌。 当他们选择击中时,我希望它从我创建的数组中打印一张随机卡,并将卡的整数
想想二十一点游戏...我创建了一个方法,它可以简单计算计算机是否应该抽牌,并且只是对规则进行硬编码。我想让它变得更加“智能”,从而使游戏变得更加难以预测,即使对于创作者(我)来说也是如此。 我可以在这
我正在用 Java 编写一个经典的二十一点游戏程序。 规则是一样的,我们作为玩家和庄家(CPU)在一定的规则下进行选择。 我的代码,即下面的,制作了 2 堆独立的牌组,一组用于玩家,一组用于经销商,每
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在尝试使用 PHP 制作 BlackJack 游戏,但我遇到了以下问题: 我制作了以下数组: function random_card(){ $cards = array( 1
这是我的代码: import java.util.*; import java.util.Scanner; public class Assignment2 { public static v
我正在尝试在 java 中玩二十一点,但在尝试从类创建对象时遇到问题。代码是: 参与者:此类为玩家和荷官生成一手牌。 public abstract class Participant { prote
我正在对 Elm 进行独立研究,我感觉我又重新开始学习编程了!作为一个学习语言的项目,我试图让一个简单的二十一点启动并运行,但是一旦我开始,我意识到我仍然没有掌握多少。我可以从一副牌中抽取卡片并将它们
锁定。这个问题及其答案是locked因为这个问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 挑战 按字符数计算的最短代码,用于从给定的号码牌列表中输出最佳情况下的二十一点手牌。 输入是由空
我正在用 Java 创建一个 BlackJack 游戏,并尝试在创建它时使用 MVC 设计。到目前为止我已经创建了以下类:- 卡:持有创建卡- 牌组:创建一副包含全部 52 张牌的牌组- 手牌:持有一
我是一名优秀的程序员,十分优秀!