我想在一行中绘制3个形状的所有组合(3!= 6):空单元格,X
或矩形。
当前代码:
对于空单元格:
void drawEmptyCell()
{
printf("||||||||||||||||||||||||||\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("| |\n");
printf("||||||||||||||||||||||||||\n");
}
对于带有矩形的单元格:
void drawCellWithRectangle()
{
printf("||||||||||||||||||||||||||\n");
printf("| |\n");
printf("| |\n");
printf("| ************** |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| ************** |\n");
printf("| |\n");
printf("| |\n");
printf("||||||||||||||||||||||||||\n");
}
对于X
的单元格:
void drawCellWithX()
{
printf("||||||||||||||||||||||||||\n");
printf("| |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| * * |\n");
printf("| |\n");
printf("||||||||||||||||||||||||||\n");
}
我可以使用蛮力方式并采用所有6个选项,例如:
void drawOption1()
{
// empty , rectangle , x
printf("||||||||||||||||||||||||||");printf("||||||||||||||||||||||||||");printf("||||||||||||||||||||||||||\n");
printf("| |");printf("| |");printf("| |\n");
printf("| |");printf("| |");printf("| * * |\n");
printf("| |");printf("| ************** |");printf("| * * |\n");
printf("| |");printf("| * * |");printf("| * * |\n");
printf("| |");printf("| * * |");printf("| * * |\n");
printf("| |");printf("| * * |");printf("| * |\n");
printf("| |");printf("| * * |");printf("| * * |\n");
printf("| |");printf("| * * |");printf("| * * |\n");
printf("| |");printf("| ************** |");printf("| * * |\n");
printf("| |");printf("| |");printf("| * * |\n");
printf("| |");printf("| |");printf("| |\n");
printf("||||||||||||||||||||||||||");printf("||||||||||||||||||||||||||");printf("||||||||||||||||||||||||||\n");
}
但我正在寻找别的东西,一路上没有蛮力。
任何建议都将不胜感激。
答案 0 :(得分:3)
您可以在printf();
中使用gotoxy(x,y);和for-loop
。
答案 1 :(得分:3)
一种好方法是将形状放入字符串数组中。 然后一个适当的算法将绘制它们
以下内容将完成这项工作。 希望你明白这个想法
char* x[] = {
"||||||||||||||||||||||||||",
"| |",
"| * * |",
"| * * |",
"| * * |",
"| * * |",
"| * |",
"| * * |",
"| * * |",
"| * * |",
"| * * |",
"| |",
"||||||||||||||||||||||||||"};
char* o[] ..
char* empty[] ..
..
output (" XO");
..
void output (const char* pOut) {
// assert (sizeof(x) == sizeof(o));
// assert (sizeof(x) == sizeof(empty));
int i, j;
for (i = 0; i < sizeof(o) / sizeof(o[0]); i ++) {
const char* c = pOut;
while (*c != 0) {
switch (*c ++) {
case 'X':
printf (x[i]); break;
case 'O':
printf (o[i]); break;
default:
printf (empty[i]); break;
}
}
printf ("\n");
}
}
显然x,o,empty需要保持相同的行数。
现在在C中,尚未编译,因此可能有错误