0

我正在为 c++ 类编写一个 Yatzy 程序。我们应该使用 std::cout 打印不同骰子的值。我想要做的就是保存一个常量字符串,然后只保存那个常量来打印骰子,而不是使用:

std::cout << "-------\n|     |\n|  *  |\n|     |\n-------\n"

我想要一个具有该值的常量字符串并执行以下操作:

std::cout << theConstantString;

通用编程再次获胜!

-------
|     |
|  *  |
|     |
-------

我的解决方案对我来说似乎不是最理想的。这是相关代码:

YatzyIO.h

class YatzyIO
{
    private:

    // Define die constants
    static const std::string dieOnePrint;
    static const std::string dieTwoPrint;
    static const std::string dieThreePrint;
    static const std::string dieFourPrint;
    static const std::string dieFivePrint;
    static const std::string dieSixPrint;


    void dieOne();
    void dieTwo();
    void dieThree();
    void dieFour();
    void dieFive();
    void dieSix();

};
(那里的代码比那个多,我只是删掉了任何不相关的东西,我认为无论如何我都应该这样做)

现在,在 YatzyIO.cpp 中任何函数的实现之外:

const std::string YatzyIO::dieOnePrint = "-------\n|     |\n|  *  |\n|     |\n-------\n";
const std::string YatzyIO::dieTwoPrint = "-------\n|  *  |\n|     |\n|  *  |\n-------\n";
const std::string YatzyIO::dieThreePrint = "-------\n| *   |\n|  *  |\n|   * |\n-------\n";
const std::string YatzyIO::dieFourPrint = "-------\n| * * |\n|     |\n| * * |\n-------\n";
const std::string YatzyIO::dieFivePrint = "-------\n| * * |\n|  *  |\n| * * |\n-------\n";
const std::string YatzyIO::dieSixPrint = "-------\n| * * |\n| * * |\n| * * |\n-------\n";

最后在 YatzyIO.ccp 我有这些功能:

void YatzyIO::dieOne()
{
    //output die side 1
    std::cout << dieOnePrint;
}

(每个骰子+1,看起来很相似)

到目前为止,这只是我完成的 3 个实验中的第 2 个,第三个用数组替换了这些常量。我在实验 1 中评分,其中也包含此代码,我的老师说(我在这里翻译,因为我是瑞典语,所以无论翻译中丢失了什么,我很抱歉!):

“你最好使用成员变量来保存不同的骰子输出。我建议你将不同的行(形成不同的输出)保存在你的成员变量中。”

他什么意思?有更好的方法吗?我无法在头文件中初始化非整数常量。我尝试了很多不同的方式,因为老实说,我的解决方案对我来说似乎不是那么理想。

4

1 回答 1

1

您的老师可能建议所有不同的输出实际上是一小部分线条的组合,您可以只维护这些线条并根据需要组合解决方案,而不是维护整个骰子图像。

例如-------\n作为每个不同组合的上下边框出现,| * * |\n可以用来生成4、5、6的上下线,也可以是6的中间元素。| * |\n可以是1、3的中间线, 5 并且您将需要一个空行来表示 1 的顶部和底部行,以及 2 和 4 中的中间行......您可以将它们存储为成员,然后根据这些图元生成骰子图。

例如,要绘制 6,您需要执行以下操作:

std::cout << line        // -------
          << two_dots    // | * * |
          << two_dots    // | * * |
          << two_dots    // | * * |
          << line;       // -------

这样,您只需要存储 4 个基元而不是所有完整的骰子值。

于 2012-06-30T15:14:59.853 回答