Blackjack Program
Blackjack Program
我必须创建一个与7名玩家和经销商一起玩的二十一点程序。对于suit类型,我必须使用switch or and if语句,并且该语句只能使用一次。
我知道不能工作的是Shuffle()函数:
当我在没有调试的情况下运行时,它会给我和输出(黑桃A)两次但我放了一个数组,这样它就不会重复一张牌。
然而,当我调试它并进入每一行代码时,输出将给我两个不重复的卡片。
我也有麻烦计算玩家总数的要求"写一个函数处理两张牌给每个玩家",我如何将两张牌添加到一个数组,没有明确的大小?
这个网络相册包含了我的项目的全部要求:
https://picasaweb.google.com/zaidalmas/November172011?authuser=0& authkey = Gv1sRgCNXrltTFwZnYNQ&壮举= 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 <<"tttWelcome to BlackJack!nn";
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数组,从而可以多次处理同一张牌。
建议创建两个子例程。每手洗一副牌一次。第二张牌
Shuffle()循环的操作如下:
dup[i] = 0;
...
/* Generate card */
...
dup[card] = 1;
考虑当这个循环的迭代x生成纸牌x+n时会发生什么。当到达迭代x+n时,覆盖dup[x+n]。
第一行任意设置当前索引为0 (false)。Shuffle函数的其余部分基于随机的"牌"索引dup[]数组。您正在dup[]数组中设置一个随机索引为'1' (true),然后可能在以后的迭代中覆盖它,使dup[]数组不正确。
从技术上讲,不应该将数组项初始化为0。应该是自动发生的。但是,由于各种原因,无论如何,预先初始化整个数组通常被认为是一种良好的做法。所以,做一个快速循环:
for(int i = 0; 52 > i; ++i)
dup[i] = 0;
所以,快速的解决方法是删除for循环中的dup[] = 0行
- Monty Hall program c++
- "Program ended with exit code: 0"出现在我的输出的开头?
- LCM program in C++
- 为什么 C++ 编译器在"c:program filesgnu emacsinclude"中查找包含文件?
- 在 EAX 模式下加密数据时"program has stopped working"
- 为什么删除执行组件指针会导致"Program.exe has triggered a breakpoint"
- for(;;) vs do..while() for main program loop
- C++ "Program has stopped working" - ROT-107(凯撒密码)
- OS X Eclipse C++ "Program File Does Not Exist"
- 在 Eclipse.It 中运行C++代码时出错,'Your program cannot output..'
- 如何设置Visual Studio来调试DLL ("Unable to start program error")
- 标准Windows 7用户如何能够删除C:Program Files下的文件
- xlC 警告,"The NOSTRICT option has the potential to alter the semantics of a program"
- 树莓派"error: stray 255 in program"
- 错误"<url> is not recognized as an internal or external command, operable program or batch file.
- 错误 PRJ0002:错误结果 -1073741515 从"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.
- 很多杂散错误 - "error: stray ‘210’ in program in C++"
- free.c 抛出异常并带有"this program has stopped working"
- Ubuntu SDL program
- Blackjack Program