2017-03-11 19 views
1

私はチックタックのつま先のゲームを書きましたが、それはコンピュータには反対していません。簡単に言えば、ユーザーはボード上の場所(3X3)を入力し、その場所はxまたはo(xとoの順番によって異なります)に変換されます。 xまたはoが列、行または対角線を塗りつぶした場合、勝ちます。印刷時にマトリックス(2d配列)が正しく表示されない理由

私のコードのいくつかの問題に直面しています
1.マトリックスが正しく表示されず、選択したすべての場所が同じ場所に置かれます。
2.プログラムはxで始まりますが、oはスキップします。

私が間違っていた場所を説明していただければ幸いです。出力用

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <time.h> 
#include <math.h> 

#define COL 3 
#define ROW 3 

int validity(char board[][COL], int player,int row,int col); 
void turns(char board[][COL],int player); 
int win(char board[][COL]); 
void printBoard(char board[][COL]); 

/* 
main will determine the turn of x and o until there is a victory 
in: none 
out: 0 
*/ 
int main(void) 
{ 
    char board[ROW][COL] = { { 0 } }; 
    int player = 'o'; 
    do{ 
     if (player == 'x') 
     { 
      player = 'o'; 
      turns(board,player); 
     } 
     else if (player == 'o') 
     { 
      player = 'x'; 
      turns(board,player); 
     } 
    } while (win(board) == 0); 

    getchar(); 
    return 0; 
} 
/*this func will print the board 
in: board 
out: none 
*/ 
void printBoard(char board[][COL]) 
{ 
    int i = 0, j = 0; 

    for (i = 0; i < ROW; i++) 
    { 
     for (j = 0; j < COL; j++) 
     { 
      printf("%c ", board[i][j]); 
     } 
     printf("\n"); 
    } 
    printf("\n"); 
} 
/* 
this func will assign 'x' or 'o' to the entered location on the board 
in: the board and x or o 
out: none 
*/ 
void turns(char board[][COL],int player) 
{ 
    int row = 0, col = 0; 

    printf("It is %c turn's. \n", player); 
    printf("Enter a location on the board: \n"); 

    scanf("%d", &board[row][col]); 
    if (validity(board,player,row,col) == 1) 
    { 
     board[row][col] = player; 
    } 
    else 
    { 
     turns(board, player); 
    } 

    printBoard(board); 
} 
/* 
this func will determine if x or o has won 
in: the board 
out: 0 = noone has won 
    1 = x or o has won 
*/ 
int win(char board[][COL]) 
{ 
    int flag = 0; 
    int i = 0, j = 0, k = 0; 
    for (i = 0; i < ROW; i++) // this loop will check if o or x won by filling a row 
    { 
     if (board[i][j] == 'x') 
     { 
      printf("X won!"); 
      flag = 1; 
     } 
     else if (board[i][j] == 'o') 
     { 
      printf("O won!"); 
      flag = 1; 
     } 
     else 
     { 
      flag = 0; 
     } 
    } 
    for (j = 0; j < COL; j++) // this loop will check if o or x won by filling a column 
    { 
     if (board[i][j] == 'x') 
     { 
      printf("X won!"); 
      flag = 1; 
     } 
     else if (board[i][j] == 'o') 
     { 
      printf("O won!"); 
      flag = 1; 
     } 
     else 
     { 
      flag = 0; 
     } 
    } 
    for (k = 0; k < COL; k++) // this loop will check if x or o won by filling a diagonal 
    { 
     if (board[k][k] == 'x') 
     { 
      printf("X won!"); 
      flag = 1; 
     } 
     else if (board[k][k] == 'o') 
     { 
      printf("O won!"); 
      flag = 1; 
     } 
     else 
     { 
      flag = 0; 
     } 
    } 

    return flag; 
} 

/*this func will check the validity of a choice that the player has made (if the location is taken by o or x or not). 
in: board, x/o, the location 
out: 0 = the location is taken 
    1 = the location is valid 
*/ 
int validity(char board[][COL], int player,int row,int col) 
{ 
    int check = 0; 
    if (board[row][col] == 'o' && player == 'x' || board[row][col] == 'x' && player == 'o') 
    { 
     printf("Invalid choice.\n"); 
     check = 0; 
    } 
    else 
    { 
     check = 1; 
    } 
    return check; 
} 

例:
はここに私のコードですturns機能に場所の入力をしながらmisktakeがあり
enter image description here

+0

出力のサンプルをダンプして、どういう意味ですか?多分絵、私はお手伝いしたいと思います。 –

答えて

1

void turns(char board[][COL],int player) 
{ 
    int row = 0, col = 0; 

    printf("It is %c turn's. \n", player); 
    printf("Enter a location on the board: \n"); 

    scanf("%d %d", &row,&col); 
    if (validity(board,player,row,col) == 1) 
    { 
     board[row][col] = player; 
    } 
    else 
    { 
     turns(board, player); 
    } 

printBoard(board); 
} 

あなたのを次のように機能があるべき

は、行と列が常にゼロです

int row=0,col=0; 
scanf("%d",&board[row][col]) 

ました。

関連する問題