我正在为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,看起来相似)
这只是我到目前为止完成的实验2中的第3个,第三个用数组替换了这些consts。我在实验室1上得到了评分,其中也包含了这段代码,我的老师也说了(因为我是瑞典语,所以我在这里翻译,所以翻译中遗失的任何东西都很抱歉!):
“你使用成员变量是好的,所以保存不同的骰子输出。我建议你在成员变量中保存不同的行(形成不同的输出)。”
他的意思是什么?有没有更好的方法呢?我无法在头文件中初始化非整数常量。我尝试了一些不同的方式,因为说实话,我的解决方案对我来说似乎不那么优秀。
答案 0 :(得分: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个基元而不是所有完整的骰子值。