我正在用C ++制作一个Yahtzee游戏,我的目标是在那里建立一个智能游戏场,游戏将向用户提供他或她可以放置结果的示例。为了做到这一点,我必须将骰子从低到高排序,然后制作新的数组,这些骰子的一个数组彼此相等,每个数组的大小必须与其中的骰子数一样大。
这是我的基础课:
投掷每个骰子的功能。
void InGame::setDice(int dice){
if (this->diceCapacity <= this->nrOfDices){
this->expandDice();
}
for (int i = 0; i < nrOfDices; i++){
die[i]->roll(6);
}
}
setDice工作正常。在此之后,我在一个名为scoreCalculator的子类中对所有5个骰子进行排序。
排序功能:
void ScoreCalculator::sortDie(int arr[], int nrOfDieces){
int temp = -1;
int minIndex = 0;
for (int i = 0; i < nrOfDieces - 1; i++){
minIndex = i;
for (int k = (i + 1); k < nrOfDieces; k++){
if (arr[k] < arr[minIndex]){
minIndex = k;
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
现在我要将每个相同的骰子填充到不同的数组中,这些数组只保存那些彼此相等的骰子。
这是我到目前为止所做的事情
void ScoreCalculator::equalDie(int dice[]){
dice[5];
this->sortDie(dice, 5);
int count = 0;
int equal[5];
for (int i = 0; i < 5; i++){
for (int x = 1; x < 6; x++){
if (dice[i] == dice[x]){
for (int y = 0; y < 5; y++){
equal[y] = dice[i];
equal[y + 1] = dice[x];
y++;
}
}
}
}
}
这最后的功能根本不起作用
答案 0 :(得分:0)
为了说明没有c样式数组的事情,我已经创建了一个包含一卷骰子的结果的Roll
类。该类可以使用vector
来存储骰子的值。然后std::sort
可用于对骰子进行排序,vector::operator==
可用于比较滚动的相等性。方法counts
可以以索引i
是值为i+1
的die的数量的格式返回卷。 Roll可能如下所示:
class Roll
{
public:
Roll()
: die_( 6 )
{
roll();
}
void roll()
{
std::generate_n( die_.begin(), 6, [&] { return dist_( rng_ ); } );
std::sort( die_.begin(), die_.end() );
}
friend bool operator==( Roll const& lhs, Roll const& rhs )
{
return lhs.die_ == rhs.die_;
}
friend bool operator!=( Roll const& lhs, Roll const& rhs )
{
return !(lhs == rhs);
}
std::vector<int> counts() const
{
std::vector<int> counts(6, 0);
for( char dice : die_ )
counts[dice-1]++;
return counts;
}
private:
static std::mt19937 rng_;
static std::uniform_int_distribution<int> dist_;
std::vector<char> die_;
};
两个骰子的简单滚动,检查相等并输出六个可能值中的每一个的模具数量如下所示:
Roll r1;
Roll r2;
bool equal = r1 == r2;
std::cout << equal << std::endl;
auto c1 = r1.counts();
auto c2 = r2.counts();
for( int i = 0; i < 6; ++i )
{
std::cout << i + 1 << " : " << c1[i] << " " << c2[i] << std::endl;
}
<强> Live on Coliru 强>