Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c+中将给定数字显示为图形数字+; 我有一个严重的问题:把数字打印成图形元素,我用C++开发了一个游戏,面向对象编程,当玩家获胜时,他收到了一些点,所以我想把这些点转换成一个图形数字序列。_C++_Oop_Graphics - Fatal编程技术网

如何在c+中将给定数字显示为图形数字+; 我有一个严重的问题:把数字打印成图形元素,我用C++开发了一个游戏,面向对象编程,当玩家获胜时,他收到了一些点,所以我想把这些点转换成一个图形数字序列。

如何在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

例如:

首先,球员得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, 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为什么循环不起作用?所以你基本上是在问如何确定任意十进制数的位数?可以使用除法和模。使用一个循环,也许可以添加一个偏移量,该偏移量是每次迭代数字宽度的倍数。我尝试了一个循环,但我不知道如何实现它,以便它可以在图形序列中显示任何给定的数。