gpt4 book ai didi

c++ - 二十一点计划

转载 作者:行者123 更新时间:2023-11-28 08:14:04 26 4
gpt4 key购买 nike

我必须创建一个 BlackJack 程序,让 7 位玩家和一位庄家一起玩。我必须对花色类型使用 switch 或 and if 语句,并且此语句只能使用一次。

我知道不起作用的是 Shuffle() 函数:

当我在没有调试的情况下运行时,它会给我并输出两次(黑桃A)但我放了一个数组,这样它就不会复制一张卡片。

然而,当我调试它并进入每一行代码时,输​​出会给我两张非重复的卡片。

我在计算玩家总数时也遇到了麻烦,要求“编写一个函数来向每个玩家发两张牌。”,如何将这两张牌添加到一个没有确定大小的数组中?

此网络相册包含我的项目的全部要求:

https://picasaweb.google.com/zaidalmas/November172011?authuser=0&authkey=Gv1sRgCNXrltTFwZnYNQ&feat=directlink

#include <iostream>
#include <iomanip>
#include <ctime>
#include <windows.h>
#include <stdio.h>
using namespace std;

void Header();
void Shuffle(int&, char&);
void Dealer();
void Deal();
void Another_Card();
void Fin_Dealer();
void WLT();

void gotoxy(int h, int w)
{
HANDLE hConsole = GetStdHandle ( STD_OUTPUT_HANDLE );

if ( INVALID_HANDLE_VALUE != hConsole )
{
COORD pos = {h, w};
SetConsoleCursorPosition ( hConsole, pos );
}
return;
}

int main()
{
Header();
Dealer();
Deal();
WLT();
gotoxy(0,19);
return 0;
}

void Header()
{
cout <<"\t\t\tWelcome to BlackJack!\n\n";
gotoxy(3,3);
cout <<"Dealer Player1 Player2 Player3 Player4 Player5 Player6 Player7 "<<endl;
return;
}
void Shuffle(int& num, char& suit)
{
int cards[52], dup[52];
int card;
srand(time(NULL));

for(int i = 0; i <52; i++)
dup[i] = 0;

card = rand() % 52;

while(dup[card])
card = rand() % 52;

dup[card] = 1;
suit = char(card/13 + 3); //display suit
num = card % 13;

switch(num)
{
case 0: cout<<setw(6)<<right<<" A"<<suit;
break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9: cout<<setw(6)<<right<<" "<<num + 1<<suit;
break;
case 10: cout<<setw(6)<<right<<" J"<<suit;
break;
case 11:cout<<setw(6)<<right<<" Q"<<suit;
break;
case 12:cout<<setw(6)<<right<<" K"<<suit;
break;
default:cout<<setw(6)<<right<<"Error";
break;
}
return;
}
void Dealer()
{
int i = 0;
int num = 0;
char suit;
for(i = 4;i <6; i++)
{
gotoxy(0,i);
Shuffle(num, suit);
}
return;
}
void Deal()
{
int i = 0;
int num = 0;
int row = 4;
char suit;

for(i = 1; i < 8; i++)
{
gotoxy(i*8, row);
Shuffle(num,suit);
}
if(playertotal <=20)
{
Another_Card()
}
return;
}
void Another_Card()
{
return;
}
void Fin_Dealer()
{
return;
}
void WLT()
{
return;
}

最佳答案

您的洗牌代码不会跟踪已经发过哪些牌。每次调用它时,它都会重新初始化 dup 数组,从而可以多次发同一张牌。

作为建议,创建两个子例程。每手洗一副牌一次。洗牌后的第二张牌。

关于c++ - 二十一点计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8221269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com