这是家庭作业
我必须编写一个TicTacToe游戏,我唯一的问题就是格式化。这是我的矩阵功能,用户和计算机必须输入他们的O和X.
void the_matrix() { // Like the movie
//Get rid of the underscores
int m;
printf("The current state of the board:\n");
for (m = 0; m < 3; m++) {
printf("%c_ %c_ %c_\n", table[m][0], table[m][1], table[m][2]);
}
printf("\n");
}
所以该项目要求编译器像这样显示游戏(为了简单起见,我只显示第一行应该在这篇文章中的样子。):
&#34; _ _ _&#34; [忽略引号]
然后用户输入“&#39; O&#39;对于(1,1)位置O _ _。
当我运行我的程序时,它看起来像这样
O_ _ _
我知道为什么程序会这样做,因为我的printf语句将其设置为那样。但我的问题是如何将下划线与O或X交换,因此下划线不会显示。
任何帮助都会得到帮助!
答案 0 :(得分:2)
printf ("%c_")
将打印一个后跟下划线的字符。
你需要的是printf ("%c")
,论证应决定你是否打印O,X或下划线。
第二个想法,最简单的做法是将数组初始化为在每个空间都有_
,你的逻辑应该认识到&#34;空&#34;。然后你可以打印出阵列中出现的字符。
答案 1 :(得分:1)
我将电路板的逻辑/状态与显示它的方式区分开来。因此,董事会的价值可以有明确的含义,例如0
表示空白,1
表示玩家1,2
表示玩家2,而打印方式则可能不同取决于您是否具有GUI或终端。特别是您的算法不依赖于显示问题,例如您不必更改算法只是因为您决定按.
而不是-
显示空白字段:
请参阅以下代码说明此方法:
typedef enum {
BLANK = 0,
PLAYER1 = 1,
PLAYER2 = 2
} BoardValue;
BoardValue table[3][3] = { BLANK };
char displayValue(int state) {
return (state == PLAYER1 ? 'O' : (state == PLAYER2 ? 'X' : '-'));
}
void the_matrix() { // Like the movie
//Get rid of the underscores
int m;
printf("The current state of the board:\n");
for (m = 0; m < 3; m++) {
printf("%c %c %c\n", displayValue(table[m][0]), displayValue(table[m][1]), displayValue(table[m][2]));
}
printf("\n");
}
int main() {
table[0][0] = PLAYER1;
table[1][1] = PLAYER2;
the_matrix();
}