关于一个井字棋如何创建玩家账户并统计

现在已经把游戏做出来了,需要程序应该为用户提供创建帐户的能力。一个帐户应该是一个结构类型变量,其中包含:一个用户名、一个密码和累计的输赢数。所有的帐户都应该存储在一个数据文件中,并由程序访问。一旦用户登录到游戏他们应该能够选择继续还是重新开始。
下面是目前完成情况 :

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

#define MAX_ROW 3
#define MAX_COL 3

void init(char chess[MAX_ROW][MAX_COL]) {
    for (int row = 0; row < MAX_ROW; row++) {
        for (int col = 0; col < MAX_COL; col++) {
            chess[row][col] = ' ';
        }
    }
}

void print(char chess[MAX_ROW][MAX_COL]) {
    printf("=---+---+---=\n");
    for (int row = 0; row < MAX_ROW; row++) {
        printf("|");
        for (int col = 0; col < MAX_COL; col++) {
            printf(" %c |", chess[row][col]);
        }
        printf("\n=---+---+---=\n");
    }
}

void print_chessBoard(char chessBoard[MAX_ROW][MAX_COL]) {
    for (int row = 0; row < MAX_ROW; row++) {
        for (int col = 0; col < MAX_COL; col++) {
            printf("%c", chessBoard[row][col]);
        }
        printf("\n");
    }

}

void plearMove(char chessBoard[MAX_ROW][MAX_COL]) {
    printf("Player's failure...\n");
    while (1) {
        printf("Please enter coordinates.(row col): ");
        int row = 0;
        int col = 0;
        scanf("%d %d", &row, &col);
        if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) {
            printf("Your input is wrong, please re-enter.\n");
            continue;
        }
        if (chessBoard[row][col] != ' ') {
            printf("The location you entered has been changed, please re-enter.\n");
            continue;
        }
        chessBoard[row][col] = 'x';
        break;
    }
}

void computerMove(char chessBoard[MAX_ROW][MAX_COL]) {
    srand((unsigned int)time(0));
    while (1) {
        int row = rand() % MAX_ROW;
        int col = rand() % MAX_COL;
        if (chessBoard[row][col] != ' ') {
            continue;
        }
        chessBoard[row][col] = 'o';
        break;
    }

}

char isFull(char chessBoard[MAX_ROW][MAX_COL]) {
    for (int row = 0; row < MAX_ROW; row++) {
        for (int col = 0; col < MAX_ROW; col++) {
            if (chessBoard[row][col] == ' ') {
                return 0;
            }
        }
    }
    return 1;
}


char isGameOver(char chessBoard[MAX_ROW][MAX_COL]) {
    for (int row = 0; row < MAX_ROW; row++) {
        if (chessBoard[row][0] != ' '
            && chessBoard[row][0] == chessBoard[row][1]
            && chessBoard[row][0] == chessBoard[row][2]) {
            return chessBoard[row][0];
        }
    }
    for (int col = 0; col < MAX_COL; col++) {
        if (chessBoard[0][col] != ' '
            && chessBoard[0][col] == chessBoard[1][col]
            && chessBoard[0][col] == chessBoard[2][col]) {
            return chessBoard[0][col];
        }
    }
    if (chessBoard[0][0] != ' '
        && chessBoard[0][0] == chessBoard[1][1]
        && chessBoard[0][0] == chessBoard[2][2]) {
        return chessBoard[0][0];
    }
    if (chessBoard[0][2] != ' '
        && chessBoard[0][2] == chessBoard[1][1]
        && chessBoard[0][2] == chessBoard[2][0]) {
        return chessBoard[0][2];
    }
    if (isFull(chessBoard)) {
        return 'q';
    }
    return ' ';
}

int menu() {
    printf("--------------------------\n");
    printf("--------1.start the game--------\n");
    printf("--------0.Exit the game--------\n");
    printf("--------------------------\n");
    int choice = 0;
    printf("Please enter your choice.:");
    scanf("%d", &choice);
    return choice;
}

void game() {
    char chessBoard[MAX_ROW][MAX_COL];
    //Initialize chessboard
    init(chessBoard);
    char winner = ' ';
    while (1) {
        //Print chessboard
        system("cls");
        print(chessBoard);
        //Player's failure
        plearMove(chessBoard);
        //Determine the outcome
        winner = isGameOver(chessBoard);
        if (winner != ' ') {
            break;
        }
        //Computer loser
        computerMove(chessBoard);
        winner = isGameOver(chessBoard);
        if (winner != ' ') {
            break;
        }
    }
    system("cls");
    print(chessBoard);
    if (winner == 'x') {
        printf("You win\n");
    }
    else if (winner == 'o') {
        printf("You lost\n");
    }
    else {
        printf("Game draw\n");
    }

}

int main() {

    while (1) {
        int choice = menu();
        if (choice == 1) {
            game();
        }
        else if (choice == 0) {
            printf("Exit the game,GOODBYE!!!!!\n");
            break;
        }
        else {
            printf("Input error! Please re-enter!\n");
            continue;
        }
    }
    system("pause");
    return 0;
}



```c


希望有大佬知道怎么添加所需目的

加好了。增加了用户增加菜单,用户登录菜单,用户增加函数,用户登录函数,用户成绩查询菜单及函数。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_ROW 3
#define MAX_COL 3

typedef struct _user
{
    char username[20];
    char password[20];
    int win;
    int loss;
    int draw;
}user;

void init(char chess[MAX_ROW][MAX_COL]) {
    for (int row = 0; row < MAX_ROW; row++) {
        for (int col = 0; col < MAX_COL; col++) {
            chess[row][col] = ' ';
        }
    }
}
void print(char chess[MAX_ROW][MAX_COL]) {
    printf("=---+---+---=\n");
    for (int row = 0; row < MAX_ROW; row++) {
        printf("|");
        for (int col = 0; col < MAX_COL; col++) {
            printf(" %c |", chess[row][col]);
        }
        printf("\n=---+---+---=\n");
    }
}
void print_chessBoard(char chessBoard[MAX_ROW][MAX_COL]) {
    for (int row = 0; row < MAX_ROW; row++) {
        for (int col = 0; col < MAX_COL; col++) {
            printf("%c", chessBoard[row][col]);
        }
        printf("\n");
    }
}
void plearMove(char chessBoard[MAX_ROW][MAX_COL]) {
    printf("Player's failure...\n");
    while (1) {
        printf("Please enter coordinates.(row col): ");
        int row = 0;
        int col = 0;
        scanf("%d %d", &row, &col);
        if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) {
            printf("Your input is wrong, please re-enter.\n");
            continue;
        }
        if (chessBoard[row][col] != ' ') {
            printf("The location you entered has been changed, please re-enter.\n");
            continue;
        }
        chessBoard[row][col] = 'x';
        break;
    }
}
void computerMove(char chessBoard[MAX_ROW][MAX_COL]) {
    srand((unsigned int)time(0));
    while (1) {
        int row = rand() % MAX_ROW;
        int col = rand() % MAX_COL;
        if (chessBoard[row][col] != ' ') {
            continue;
        }
        chessBoard[row][col] = 'o';
        break;
    }
}
char isFull(char chessBoard[MAX_ROW][MAX_COL]) {
    for (int row = 0; row < MAX_ROW; row++) {
        for (int col = 0; col < MAX_ROW; col++) {
            if (chessBoard[row][col] == ' ') {
                return 0;
            }
        }
    }
    return 1;
}
char isGameOver(char chessBoard[MAX_ROW][MAX_COL]) {
    for (int row = 0; row < MAX_ROW; row++) {
        if (chessBoard[row][0] != ' '
            && chessBoard[row][0] == chessBoard[row][1]
            && chessBoard[row][0] == chessBoard[row][2]) {
            return chessBoard[row][0];
        }
    }
    for (int col = 0; col < MAX_COL; col++) {
        if (chessBoard[0][col] != ' '
            && chessBoard[0][col] == chessBoard[1][col]
            && chessBoard[0][col] == chessBoard[2][col]) {
            return chessBoard[0][col];
        }
    }
    if (chessBoard[0][0] != ' '
        && chessBoard[0][0] == chessBoard[1][1]
        && chessBoard[0][0] == chessBoard[2][2]) {
        return chessBoard[0][0];
    }
    if (chessBoard[0][2] != ' '
        && chessBoard[0][2] == chessBoard[1][1]
        && chessBoard[0][2] == chessBoard[2][0]) {
        return chessBoard[0][2];
    }
    if (isFull(chessBoard)) {
        return 'q';
    }
    return ' ';
}
int menu() {
    printf("--------------------------\n");
    printf("--------4.user login------------\n");
    printf("--------3.Add user--------------\n");
    printf("--------2.your score------------\n");
    printf("--------1.start the game--------\n");
    printf("--------0.Exit the game--------\n");
    printf("--------------------------\n");
    int choice = 0;
    printf("Please enter your choice.:");
    scanf("%d", &choice);
    getchar();
    return choice;
}
int game() {
    char chessBoard[MAX_ROW][MAX_COL];
    //Initialize chessboard
    init(chessBoard);
    char winner = ' ';
    while (1) 
    {
        //Print chessboard
        system("cls");
        print(chessBoard);
        //Player's failure
        plearMove(chessBoard);
        //Determine the outcome
        winner = isGameOver(chessBoard);
        if (winner != ' ') {
            break;
        }
        //Computer loser
        computerMove(chessBoard);
        winner = isGameOver(chessBoard);
        if (winner != ' ') {
            break;
        }
    }
    system("cls");
    print(chessBoard);
    if (winner == 'x') {
        printf("You win\n");
        return 1;
    }
    else if (winner == 'o') {
        printf("You lost\n");
        return -1;
    }
    printf("Game draw\n");
    return 0;
}

void loaduser(user *p,int *n)
{
    FILE *fp = fopen("D:\\score.dat","r");
    if(fp != NULL)
    {
        fread(n,sizeof(int),1,fp);
        fread(p,sizeof(user),*n,fp);
        fclose(fp);
    }
}

void saveuser(user *p,int n)
{
    FILE *fp = fopen("D:\\score.dat","w");
    if(fp != NULL)
    {
        fwrite(&n,sizeof(int),1,fp);
        fwrite(p,sizeof(user),n,fp);
        fclose(fp);
    }
}

int checkuser(user *p,int n)
{
    char name[20],pass[20];
    while(1)
    {
        printf("Input username:");
        gets(name);
        printf("Input password:");
        gets(pass);
        for(int i=0;i<n;i++)
        {

            if(strcmp(name,p[i].username) == 0 && strcmp(pass,p[i].password) == 0)
            {
                printf("%s is welcome!\n",name);
                return i;
            }
        }
        printf("username or password error! input again?(Y/N):");
        char c = getchar();
        getchar();
        if(c == 'N')
            break;
    }
    return -1;
}

void showscore(user *p,int nowuser)
{
    printf("Your username is:%s\n",p[nowuser].username);
    printf("Your score is:\n");
    printf("Win:%d,Loss:%d,Draw:%d\n",p[nowuser].win,p[nowuser].loss,p[nowuser].draw);
}

int adduser(user *p, int *n)
{
    char name[20],pass[20];
    int i;
    while(1)
    {
        printf("Input username:");
        gets(name);
        printf("Input password:");
        gets(pass);
        for(i=0;i<*n;i++)
        {
            if(strcmp(name,p[i].username) == 0)
                break;
        }
        if(*n!=0 && i==*n)
        {
            printf("username is exist,input again?(Y/N):");
            char c = getchar();
            getchar();
            if(c == 'N')
                break;
        }
        strcpy(p[*n].username,name);
        strcpy(p[*n].password,pass);
        p[*n].draw = p[*n].loss = p[*n].win = 0;
        (*n)++;
        printf("user add OK\n");
        return 1;
    }
    return -1;
}

int main() {
    user u[1000];
    int n=0;
    int nowuser;
    int res;
    loaduser(u,&n);
    
    while (1) {
        int choice = menu();
        if(choice == 4)
            nowuser = checkuser(u,n);
        else if(choice == 3)
        {
            if(adduser(u,&n) == 1)
            {
                n++;
            }
        }
        else if(choice == 2)
            if(nowuser >= 0)
                showscore(u,nowuser);
            else
                printf("please login first!\n");
        else if (choice == 1) {
            if(nowuser >= 0)
            {
                res = game();
                if(res == 1)
                    u[nowuser].win++;
                else if(res==-1)
                    u[nowuser].loss++;
                else
                    u[nowuser].draw++;
            }
            else
                printf("please login first!\n");
        }
        else if (choice == 0) {
            printf("Exit the game,GOODBYE!!!!!\n");
            saveuser(u,n);
            break;
        }
        else {
            printf("Input error! Please re-enter!\n");
            continue;
        }
    }
    system("pause");
    return 0;
}

完整的,你可以试试
C语言小游戏——井字棋

#include "game.h"
 
 
int main() {
 
    int input = 0;
    int cmp_x = 0;
    int cmp_y = 0;
    srand((unsigned int)time(NULL));
 
    do {
        game_head();
        printf("输入1开始游戏>>");
        scanf("%d", &input);
        InitMap(arr, ROW, COL);
        switch (input) {
        case PLAY:
            map();
            while (is_end() == -1) {
 
                play_game();
                map();
                cmp_game();
                map();
            }
            if (is_win() == 'X') {
                printf("玩家获胜\n");
            }
            else if (is_win() == 'O') {
                printf("电脑获胜\n");
            }
            else {
                printf("平局\n");
            }
            
            break;
        case EXIT:
            printf("游戏结束!\n");
            break;
        default:
            printf("输入不合法,请重新输入\n");
        }
    } while (input != 0);
    return 0;
}

完整的代码链接
http://t.csdn.cn/Try9F