如何在c+中将给定数字显示为图形数字+; 我有一个严重的问题:把数字打印成图形元素,我用C++开发了一个游戏,面向对象编程,当玩家获胜时,他收到了一些点,所以我想把这些点转换成一个图形数字序列。
例如: 首先,球员得0分。他赢了1级,得了100分,所以我想显示如下4位数字:如何在c+中将给定数字显示为图形数字+; 我有一个严重的问题:把数字打印成图形元素,我用C++开发了一个游戏,面向对象编程,当玩家获胜时,他收到了一些点,所以我想把这些点转换成一个图形数字序列。,c++,oop,graphics,C++,Oop,Graphics,例如: 首先,球员得0分。他赢了1级,得了100分,所以我想显示如下4位数字: 首先:0000 获胜:100分,积分0100 游戏使用整数,我做的是:创建一个包含从0到9的所有图形数字的图形数组 gGraphic digits[10]; gGraphic是一个创建和绘制对象的类,因此,digits[0]是一个表示0的图形元素,digits[1]表示1,digits[2]依次表示2。。例如,如果我想画数字1,比如0001,我会这样做: digits[0].draw(Xposition, Yp
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语句或switch case不起作用,我真的需要一个解释,一个基本的想法,我必须使用指针吗?你可以使用数学计算出你应该使用的值。比如说
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
很明显,你可以在一个循环中这样做,我只是想一步一步地展示每个值的来源。这将导致数组数字具有
{ 2, 3, 6, 7 }
一旦知道数字,就可以使用已有的图形代码。问题有两个部分:
获取给定数字的数字
显示数字
您可以使用用于获取数字的方法
您似乎已经有了显示数字的方法。解决您问题的最简单方法是将有问题的数字转换为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);
}
std::ostringstream oss;
oss为什么循环不起作用?所以你基本上是在问如何确定任意十进制数的位数?可以使用除法和模。使用一个循环,也许可以添加一个偏移量,该偏移量是每次迭代数字宽度的倍数。我尝试了一个循环,但我不知道如何实现它,以便它可以在图形序列中显示任何给定的数。