如何在c ++中将给定数字显示为图形数字

时间:2015-04-30 17:32:24

标签: c++ oop graphics

我有一个严重的问题是打印一个数字作为图形元素,我开发了一个使用c ++,面向对象编程的游戏,当一个玩家获胜他收到一定的点,所以我想按顺序转换这些点图形数字。

例如:

首先,玩家得0分。他赢得1级并获得100分,所以我想显示4位数字:

  1. Firtly: 0000
  2. enter image description here

    1. 胜利:100分至 0100
    2. enter image description here

      游戏使用整数,我做的是:创建一个包含从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语句或开关案例不起作用,我真的需要一个解释,一个基本的想法,我必须使用指针吗?

3 个答案:

答案 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)

您的问题有两个部分:

  1. 获取给定数字的数字。
  2. 显示数字。
  3. 您可以使用in this SO answer使用的方法来获取数字。

    您似乎已经有了显示数字的方法。