C++ 有关二维扑克牌阵列C++;
所以我在请求帮助一次之后,又继续我的计划,这就是我现在所拥有的C++ 有关二维扑克牌阵列C++;,c++,arrays,C++,Arrays,所以我在请求帮助一次之后,又继续我的计划,这就是我现在所拥有的 #include "stdafx.h" #include <iostream> #include <string> #include <ctime> #include <iomanip> using namespace std; void main() { const int ROWS = 4; string suits[ROWS] = { "Diamonds", "Cl
#include "stdafx.h"
#include <iostream>
#include <string>
#include <ctime>
#include <iomanip>
using namespace std;
void main()
{
const int ROWS = 4;
string suits[ROWS] =
{
"Diamonds", "Clubs", "Hearts", "Spades"
};
const int COLS = 13;
string faces[COLS] =
{
"Ace", "Deuce", "Three", "Four", "Five", "Six",
"Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"
};
int deck[ROWS][COLS] =
{
{1,2,3,4,5,6,7,8,9,10,11,12,13},
{14,15,16,17,18,19,20,21,22,23,24,25,26},
{27,28,29,30,31,32,33,34,35,36,37,38,39},
{40,41,42,43,44,45,46,47,48,49,50,51,52}
};
for(int iii = 0; iii < ROWS; iii++)
{
for(int jjj = 0; jjj < COLS; jjj++)
{
cout << deck[iii][jjj] << " " << faces[jjj] << " of " << suits[iii] << endl;
}
}
srand((unsigned) time(0));
for(int c = 0; c < ROWS; c++)
{
for(int d = 0; d < COLS; d++)
{
int face = rand() % 13;
int suit = rand() % 4;
cout << left << setw(5) << " " << faces[face] << " of " << suits[suit] << endl;
int e = deck[suit][face];
deck[suit][face] = deck[c][d];
deck[c][d] = e;
cout << deck[c][d];
}
}
等等。但是,第二个循环应该重新洗牌并打印牌组:
Nine of Clubs
22 King of Hearts
39 Queen of Spades
51 Seven of Spades
46 Ace of Spades
40 Six of Spades
45 Three of Spades
42 Seven of Hearts
33 Four of Diamonds
46 Five of Diamonds
40 Seven of Diamonds
42 Queen of Clubs
25 Five of Clubs
18 Four of Hearts
30 Ace of Clubs
30 Three of Clubs
16 Jack of Clubs
24 Deuce of Spades
41 Eight of Diamonds
33 Queen of Spades
3 Seven of Hearts
8 Jack of Hearts
37 Eight of Diamonds
19 Four of Clubs
24 Queen of Hearts
38 Three of Hearts
29 Nine of Clubs
37 Ace of Diamonds
22 Ace of Hearts
37 Queen of Diamonds
25 Four of Diamonds
9 Four of Diamonds
31 Three of Hearts
37 Nine of Clubs
27 Nine of Clubs
34 Ten of Hearts
36 Five of Hearts
9 Jack of Clubs
24 Five of Spades
44 Seven of Clubs
3 Six of Hearts
31 Jack of Spades
50 Ten of Diamonds
40 Six of Clubs
33 Eight of Diamonds
23 Ten of Hearts
36 Ace of Hearts
26 Six of Spades
23 Nine of Clubs
35 Seven of Clubs
5 Five of Hearts
1 Five of Diamonds
10Press any key to continue . . .
问题1:2D数组的所有数字都与1D数组的字符串不正确对应。举个例子,九个球杆在22号球杆的旁边,这是正确的,数字是正确的,直到你到达1号球杆,这是在三个球杆的旁边,这是不正确的,从那里一切都搞砸了
问题2:数字和字符串没有完全对齐,字符串首先开始打印,因此字符串的数字向下一个,然后超过一个
问题3:有些数字和字符串重复,我不想重复。如何确保它们不会重复。出现问题的第一个原因是打印输出循环中断。由于您正在使用
iii
和jjj
索引deck[][][]
和faces[]
/suites[]
对,因此只有当牌都按顺序排列时,它才会正常工作,就像洗牌之前一样
也就是说,如果你想一想,当你洗牌的时候,把牌组保持为二维数组就变得毫无意义了。只需将其保持为一个由52张卡组成的一维数组。不管怎样,从0
到51
进行编号,从长远来看,这将为您节省大量的痛苦和痛苦
要将卡号转换回人脸和套装,您需要从deck
数组中读取卡号,计算x/13
以获得到suit[]
数组中的索引,以及x%13
以获得到faces[]
数组中的索引
最后但并非最不重要的是,你的洗牌不是很完美。实际上,对于一个测试程序来说,这是可以的,但是如果你想认真对待的话,你应该修改它以使用Fisher-Yates算法。乍一看,它看起来一模一样,但对随机数生成器参数的修改会产生不同
还要避开提供的库
rand()
,它通常很糟糕。我之所以使用xor shift RNG,是因为它很好,足以用于Monte Carlo,而且速度非常快。尝试将问题分解为更小的部分或步骤,然后运行/调试它们,看看结果如何。尝试在循环中的每个步骤中放置cout语句(或使用断点进行调试),并打印(或在调试器中查看)所涉及的不同变量。一步一步地去试着确定哪里出了问题。不要害怕将循环的执行步骤写在纸上。有时这样做之后,错误会变得非常明显
如何调试是所有程序员必须学习的关键技能。如果您无法很好地调试代码,那么随着程序变得更加复杂,这些问题只会变得更糟,甚至更难解决。至于对齐问题,请检查。关于第一个问题注意,C++中的索引开始于<代码> 0 <代码>,而不是<代码> 1 <代码>!你应该有
{0,1,2,3,4,5,6,7,8,9,10,11,12}
作为你的第一组aso。“更多帮助”不是问题。而且帖子中提到的问题太广泛(更不用说它不止一个问题)。请每次关注一个特定的问题。它不仅能帮你找到问题的答案,甚至能帮你自己解决问题。使用调试器总是比使用StackOverflow查找问题更有效率。
Nine of Clubs
22 King of Hearts
39 Queen of Spades
51 Seven of Spades
46 Ace of Spades
40 Six of Spades
45 Three of Spades
42 Seven of Hearts
33 Four of Diamonds
46 Five of Diamonds
40 Seven of Diamonds
42 Queen of Clubs
25 Five of Clubs
18 Four of Hearts
30 Ace of Clubs
30 Three of Clubs
16 Jack of Clubs
24 Deuce of Spades
41 Eight of Diamonds
33 Queen of Spades
3 Seven of Hearts
8 Jack of Hearts
37 Eight of Diamonds
19 Four of Clubs
24 Queen of Hearts
38 Three of Hearts
29 Nine of Clubs
37 Ace of Diamonds
22 Ace of Hearts
37 Queen of Diamonds
25 Four of Diamonds
9 Four of Diamonds
31 Three of Hearts
37 Nine of Clubs
27 Nine of Clubs
34 Ten of Hearts
36 Five of Hearts
9 Jack of Clubs
24 Five of Spades
44 Seven of Clubs
3 Six of Hearts
31 Jack of Spades
50 Ten of Diamonds
40 Six of Clubs
33 Eight of Diamonds
23 Ten of Hearts
36 Ace of Hearts
26 Six of Spades
23 Nine of Clubs
35 Seven of Clubs
5 Five of Hearts
1 Five of Diamonds
10Press any key to continue . . .