C言語でオセロ(未完成)

自分用メモです。
ですが、プログラミング初心者なので改善点があれば教えてください。

- 今後実装するもの
    - パスの判定
    - 勝ち負けの判定
    - VS CPU
- 改善点
    - 2重for文が多く見にくいので、綺麗な書き方の模索
    - コメントの書き方
    - 処理が似ている関数の同一化

```C:Reversi.c
#include<stdio.h>
#include<stdlib.h>

int board[10][10]; //10x10の盤面

int turn = 0; 
int player = 1; //1なら黒色の番、2なら白色の番

int i = 0;
int j = 0;

//与えられたマスに石が置けるかを判別する関数
void checkPutStone(int player){
    for(i = 1; i < 9; i++){
        for(j = 1; j < 9; j++){
            //そこが空いているか判別
            if(board[i][j] == 0){
                // 調べるマス周囲8マスを探索
                for(int x = i - 1; x < i + 2 ; x++){
                    for(int y = j - 1; y < j + 2 ; y++){
                        // 周囲8マスに自分と違う色の石があればその方向ベクトルを得る
                        if(board[x][y] > 0 && abs(board[x][y] - player) == 1){
                            int vector_x = x - i;
                            int vector_y = y - j;
                            // 得た方向ベクトルの先に自色の石がある場合、置ける判定にする
                            int x2 = x;
                            int y2 = y;

                            if(vector_y == 0){ // 縦方向のとき
                                for(x2; x2 > 0 && x2 < 9; x2 += vector_x){
                                    if(board[x2][y] == player){
                                        board[i][j] = 4;
                                        break;
                                    }   
                                } 
                            }else if(vector_x == 0){ //横方向のとき
                                for(y2; y2 > 0 && y2 < 9; y2 += vector_y){
                                    if(board[x][y2] == player){
                                        board[i][j] = 4;
                                        break;
                                    }   
                                } 
                            }else { //その他(斜め方向)のとき
                                for(x2, y2; x2 > 0 && x2 < 9 && y2 > 0 && y2 < 9; x2 += vector_x, y2 += vector_y){
                                    if(board[x2][y2] == player){
                                        board[i][j] = 4;
                                        break;
                                    }   
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

// 盤面の表示
void showNowBoard(){
    int line[9] = {0,1,2,3,4,5,6,7,8};
    char row[9] = " ABCDEFGH";

    for( i = 0; i < 9; i++){
        printf(" %c",row[i]);
    }

    for( i = 1; i < 9; i++){
        printf("\n");
        printf("%d ",line[i]);
        for( j = 1; j < 9; j++){
            // 何も置かれていないなら□、黒色が置かれていたら●、白色が置かれていたら○、置ける場所の候補なら＊
            if(board[i][j] == 0){
                printf("□ ");
            }else if(board[i][j] == 1){
                printf("● ");
            }else if(board[i][j] == 2){
                printf("○ ");
            }else if(board[i][j] == 4){
                printf("* ");
            }else{
                printf("? ");
            }
        }
    }
}

// アルファベットを数字に変換して返す関数
int chengeEngToNum(char i){
    char row[8] = "ABCDEFGH";

    if(i == row[0]){
        return 1;
    }else if(i == row[1]){
        return 2;
    }else if(i == row[2]){
        return 3;
    }else if(i == row[3]){
        return 4;
    }else if(i == row[4]){
        return 5;
    }else if(i == row[5]){
        return 6;
    }else if(i == row[6]){
        return 7;
    }else if(i == row[7]){
        return 8;
    }
}

//　石を反転する関数
void TurnOverStone(int player){
    for(i = 1; i < 9; i++){
        for(j = 1; j < 9; j++){
            //そこが新たに置かれたマスか判別
            if(board[i][j] == 6 || board[i][j] == 7){
                board[i][j] = player;
                // 調べるマス周囲8マスを探索
                for(int x = i - 1; x < i + 2 ; x++){
                    for(int y = j - 1; y < j + 2 ; y++){
                        // 周囲8マスに自分と違う色の石があればその方向ベクトルを得る
                        if(board[x][y] > 0 && abs(board[x][y] - player) == 1){
                            int vector_x = x - i;
                            int vector_y = y - j;
                            // 得た方向ベクトルの先に自色の石がある場合、置ける判定にする
                            int x2 = x;
                            int y2 = y;

                            if(vector_y == 0){ // 縦方向のとき
                                for(x2; x2 > 0 && x2 < 9; x2 += vector_x){
                                    if(board[x2][y] == player){
                                        for(x2; x2 != i; x2 -= vector_x){
                                            board[x2][y] = player;
                                        }
                                        break;
                                    }   
                                } 
                            }else if(vector_x == 0){ //横方向のとき
                                for(y2; y2 > 0 && y2 < 9; y2 += vector_y){
                                    if(board[x][y2] == player){
                                        for(y2; y2 != j; y2 -= vector_y){
                                            board[x][y2] = player;
                                        }
                                        break;
                                    }   
                                } 
                            }else { //その他(斜め方向)のとき
                                for(x2, y2; x2 > 0 && x2 < 9 && y2 > 0 && y2 < 9; x2 += vector_x, y2 += vector_y){
                                    if(board[x2][y2] == player){
                                        for(x2, y2; x2 != i && y2 != j; x2 -= vector_x, y2 -= vector_y){
                                            board[x2][y2] = player;
                                        }
                                        break;
                                    }   
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

int main(void){
    //盤面の状態のリセット
    for(i = 0; i < 10; i++){
        for( j = 0; j < 10; j++){
            board[i][j] = 0;
        }
    }

    //ゲームの初期状態設定
    for(i = 4; i < 6; i++){
        for( j = 4; j < 6; j++){
            board[i][j] = abs(i - j) + 1;
        }
    }

    printf("\nゲーム開始です。●は黒色、○は白色、＊は打てるマスを示します。\nPlayer1が黒色、Player2が白色です。\n");

    for(turn = 0; turn < 100; turn++){

        player = turn % 2 + 1;

        checkPutStone(player);
        showNowBoard();

        printf("\nPlayer%dはどこに打ちますか？(例：3E)：",player);
        char square[3]; 
        scanf("%s",square);

        i = square[0] - '0';
        j = chengeEngToNum(square[1]);

        if(board[i][j] != 4){
            while(board[i][j] != 4){
                printf("そこは石を置けるマスではありません。\n");
                printf("Player%dはどこに打ちますか？(例：3E)：",player);
                scanf("%s",square);

                i = square[0] - '0';
                j = chengeEngToNum(square[1]);
            }   
        }

        board[i][j] = player + 5;

        for(i = 1; i < 9; i++){
            for(j = 1; j < 9; j++){
                if(board[i][j] == 4){
                    board[i][j] = 0;
                }
            }
        }

        TurnOverStone(player);
    }

    return 0;
}
```