情况
嘿伙计们,所以我现在正在做一个项目。基本上我需要制作传统的老虎机,或水果机,或者单机强盗#34;。它是一个3 x 1 x 3字符的网格,只要用户“拉动杠杆”就会改变#34;我现在已经从头顶完成了所有代码,但我陷入了僵局,我想知道你们是否可能提供帮助。
我使用单词"chamber"
,但是将其视为单词"Wheel"
,并且在任何给定时间,屏幕上只显示三个值,因此我将这些称为"Blocks"
。
我尝试使用单室显示输出,例如:
2
3
4
其中我生成随机数3,并输出4和2,因为它们在腔室上相邻。这将是房间的起始位置,然后我可以操纵它。
显然,为了获得转换并显示在屏幕上的随机数,我需要将该整数转换为char*
以后我将需要的图标,这不是很好我需要做一个常数char
。
我有两个问题。
1)首先,我称我的spinChamer()
方法3次(因为我有3个房间),但方法中的随机数生成器似乎对输出没有任何影响方法,几乎就像某个地方有一个常数。
srand(time(NULL));
//generate start position for central block. use this to find upper and lower block.
int startpoint = rand() % 7 + 1;
2)第二个是,要在屏幕上绘制一个坐标,我必须转换为char*
。这涉及将我的随机int
变量转换为char*
变量,这似乎很简单,但是,当我尝试将此转换后的值与它的上下元素一起添加到矢量时,所有3个位置都是相同的值,当它们不应该再次出现时,似乎某个地方有一个我不在的地方。
for (int i = 0; i < 3; i++){
convert = std::to_string(startpoint + assigner);
temporarystore = (char*)convert.c_str();
blocks.push_back(temporarystore);
assigner++;
}
//spin around twice for visual effect.
for (int counter = 0; counter < 2; counter++){
Draw_String(drawY, drawX - 1, blocks.at(0));
Draw_String(drawY, drawX, blocks.at(1));
Draw_String(drawY, drawX + 1, blocks.at(2));
}
非常感谢任何帮助。
Draw_String()
只是将字符串绘制到屏幕上,由于其他地方的依赖性,我不会编辑该方法。
答案 0 :(得分:3)
第一期:请勿在生成随机数的函数内调用srand(time(NULL));
。把它移到功能之外!在程序执行期间,srand()
只能被调用一次。
第二个问题:目前尚不清楚您要完成的工作以及原因。
答案 1 :(得分:0)
如果您可以在程序中使用C ++ 11,则会出现一系列与随机性相关的新功能。
#include <random>
#include <iostream>
namespace
{
std::random_device rd;
std::mt19937 mt(rd()); // seed the random number generator once
}
int GetRandomNumber(const int lowBound, const int highBound)
{
std::uniform_int_distribution<int> dist(lowBound, highBound);
return dist(mt);
}
int main()
{
const auto diceResult = GetRandomNumber(1, 6);
std::cout << diceResult << std::endl;
return 0;
}