显示板在Tic Tac Toe游戏中

时间:2012-01-13 21:00:31

标签: c

我目前正在编写一个简单的井字游戏,事实证明并非如此简单(至少对我而言,我是初学者)。我在编写display_board函数时遇到问题,应该打印出类似这样的内容:

_|_|_
_|_|_
 | |

当玩家将棋盘标记到特定位置时,添加X或O.我打算做的就是把这一切都放到一个字符串中,但它特别容易让我想要添加的新行混淆,所以电路板正常出来。新行操作符是否计为字符串中的一个或两个字符? 如果你想查看我的游戏代码,请点击这里:

#include <stdio.h>
#include <stdbool.h>

int board[3][3] = {
                        {0, 0, 0},
                        {0, 0, 0},
                        {0, 0, 0}
                  };

int main (void)
{
    int const user1 = 1;
    int const user2 = 2;
    char move[];

    while (! all_locations_filled()) {
        printf("User-1, please enter your move:");
        scanf("%s", &move);

        if(valid_location(move)) {
            mark_location(user1, move);
            display_board();
        else if(won_the_game(user1) {
            printf("Congratulations User-1, You Won the Game!");
            break;
        }
        else {
            printf("Invalid Move");
        }
        }
        printf("User-2, please enter your move:");
        scanf("%s", &move);

        if(valid_location(move)) {
            mark_location(user2, move);
            display_board();
        else if(won_the_game(user2) {
            printf("Congratulations User-2, You Won the Game!");
            break;
        }
        else {
            printf("Invalid Move");
        }
        }
}

bool valid_location(char str[]) {
    if (str[] == "upperLeft" || str[] == "up" || str[] == "upperRight" || str[] == "left" || str[] == "center" || str[] == "right" || str[] == "lowerLeft" || str[] == "down" || str[] == "lowerRight") {
        return true;
    }
}

void mark_location(int userU, char str[]) {
    if (str[] == "upperLeft") {
        board[0][0] = userU;
    else if (str[] == "up") {
        board[0][1] = userU;
    else if (str[] == "upperRight") {
        board[0][2] = userU;
    else if (str[] == "left") {
        board[1][0] = userU;
    else if (str[] == "center") {
        board[1][1] = userU;
    else if (str[] == "right") {
        board[1][2] = userU;
    else if (str[] == "lowerLeft") {
        board[2][0] = userU;
    else if (str[] == "down") {
        board[2][1] = userU;
    else if (str[] == "lowerRight") {
        board [2][2] = userU;
    }
}

它有点混乱,正如我所说的那样,我也是新的。如果您有任何建议要清理,请随时帮我。

5 个答案:

答案 0 :(得分:2)

您的代码中存在很多错误。以下是一些:

使用strcmp函数比较C

中的字符串

str[] == "upperLeft"

不是有效的C表达式。

此定义:

char move[];

不是有效的数组定义,它错过了[]

之间的元素数

此外

scanf("%s", &move);

%s转换规范将指向char的指针作为参数。 &move的值是指向数组的指针,而不是指向char的指针。以这种方式调用函数:

scanf("%s", move);

答案 1 :(得分:2)

使用RedirectMatch ^/((?!shop/?).*)$ /shop/$1 函数比较C

中的字符串
strcmp

不是有效的C表达式。

此定义:

str[] == "upperLeft"

不是有效的数组定义,它错过了char move[];

之间的元素数

此外,

[]

scanf("%s", &move); 转换规范将指向char的指针作为参数。 %s的值是指向数组的指针,而不是指向char的指针。以这种方式调用函数:

&move

答案 2 :(得分:1)

尝试循环遍历行和列。 我不想为你写答案,但有点像......

function print_board()
    iterate over rows
       iterate over columns
           print board location
           if this is not the third spot, print a vertical bar character
       print a newline followed be a line of dashes followed by a newline

答案 3 :(得分:0)

新行'\n'"\n"计为单个字符,即使大多数终端需要输出两个字符。 (在DOS / Windows中,这是通过CRT将\n转换为CRLF来实现的,而在Unix中则是由TTY驱动程序完成的。)

答案 4 :(得分:0)

这是tic tac toe的printf函数 无效板() {

printf("\n\n\tTic Tac Toe\n\n");

printf("Player 1 (X)  -  Player 2 (O)\n\n\n");


printf("     |     |     \n");
printf("  %c  |  %c  |  %c \n", square[1], square[2], square[3]);

printf("_____|_____|_____\n");
printf("     |     |     \n");

printf("  %c  |  %c  |  %c \n", square[4], square[5], square[6]);

printf("_____|_____|_____\n");
printf("     |     |     \n");

printf("  %c  |  %c  |  %c \n", square[7], square[8], square[9]);

printf("     |     |     \n\n");

}