我有一个严重的问题是打印一个数字作为图形元素,我开发了一个使用c ++,面向对象编程的游戏,当一个玩家获胜他收到一定的点,所以我想按顺序转换这些点图形数字。
例如:
首先,玩家得0分。他赢得1级并获得100分,所以我想显示4位数字:
游戏使用整数,我做的是:创建一个包含从0到9的所有图形数字的图形数组。
gGraphic digits[10];
gGraphic是一个创建和绘制对象的类..因此digits[0]
是一个代表0的图形元素,digits[1]
代表1,digits[2]
代表2 ...连续。例如,如果我想绘制数字1,如0001,这就是我所做的:
digits[0].draw(Xposition, Yposition);
digits[0].draw(Xposition + digits[0].ObtainScaleX(), Yposition);
digits[0].draw(Xposition + digits[0].ObtainScaleX()*2, Yposition);
digits[1].draw(Xposition + digits[0].ObtainScaleX()*3, Yposition);
正如你所看到的,我没有改变位置Y,但是我改变位置X以便我可以获得在X轴上表示的数字序列,函数ObtainScaleX()返回对象的宽度比例。
问题是如何才能完成1000点,1234点或3409 ???,数千种可能性以及if语句或开关案例不起作用,我真的需要一个解释,一个基本的想法,我必须使用指针吗?
答案 0 :(得分:3)
对您的问题最简单的解决方案是将有问题的数字转换为std::string
并从转换后的字符值中检索单个数字:
std::ostringstream oss;
oss << value;
int scale = 0;
for(std::string::const_iterator it = oss.str().begin();
it != oss.str().end();
++it, ++scale) {
int drawDigitIndex = *it - `0`;
digits[drawDigitIndex].draw(Xposition +
digits[drawDigitIndex].ObtainScaleX() * scale
, Yposition);
}
答案 1 :(得分:1)
您可以使用数学来计算出您应该使用的值。例如
7632
// ^ ones
// ^ tens
// ^ hundreds
// ^ thousands
所以你可以在每个地方找到要绘制的数字
int digits[4];
int value = 7632;
digits[0] = value % 10; // ones
digits[1] = value % 100 / 10; // tens
digits[2] = value % 1000 / 100; // hundreds
digits[3] = value % 10000 / 1000; // thousands
你显然可以循环执行此操作,我只想逐步显示每个值的来源。这将导致数组digits
具有值
{ 2, 3, 6, 7 }
一旦知道了数字,就可以使用已有的绘图代码。
答案 2 :(得分:1)
您的问题有两个部分:
您可以使用in this SO answer使用的方法来获取数字。
您似乎已经有了显示数字的方法。