三子棋(智能版)

来源:互联网 发布:javascript数字格式化 编辑:程序博客网 时间:2024/06/06 00:43

一、应用多文件的方法,把代码分为三部分
1、头文件
2、主函数代码
3、玩游戏过程

二、代码展示
1、头文件

#ifndef __GAME_H__#define __GAME_H__ #define _CRT_SECURE_NO_WARNINGS 1#define ROW 3#define COL 3#include<stdio.h>#include <stdlib.h>#include <time.h>void start_board(char arr[ROW][COL],int row,int col);void print_board(char arr[ROW][COL],int row,int col);void computer_move(char arr[ROW][COL],int row,int col);void player_move(char arr[ROW][COL],int row,int col);char check_win(char arr[ROW][COL],int row,int col);#endif//__GAME_H__

2、主函数

#include "game.h"void print_menu(){    printf("****************************welcome you !****************************\n");    printf("********************   1、play          0、exit  ********************\n");    printf("****************************good   luck !****************************\n");}void game(){    char ret = 0;    long input = 0;    long flag = 1;    char board[ROW][COL]={0};    start_board(board,ROW,COL);    printf("********************  1、computer       2、you  ********************\n");    while (flag)  //选择谁先走    {        printf("please sclect:>");        scanf("%d",&input);        if (input==1)        {            flag=0;            goto loop1;        }        else if(input==2)        {            print_board(board,ROW,COL); //打印棋盘            flag=0;            goto loop2;        }        else            printf("enter error !\n");    }    //print_board(board,ROW,COL);    do     {loop1:    printf("computer>:\n");    computer_move(board,ROW,COL);  //电脑走    print_board(board,ROW,COL);  //打印棋盘    ret = check_win(board,ROW,COL);  //判断输赢    {    if (ret != 'g')      break;    }loop2:    player_move(board,ROW,COL);  //玩家走    print_board(board,ROW,COL);  //打印棋盘    ret = check_win(board,ROW,COL);  //判断输赢    } while (ret == 'g');    if (ret == '#')    {        printf("computer win !\n");    }    else if (ret=='e')    {        printf("equal !\n");    }    else if (ret=='*')    {        printf("you win !\n");    }}void test(){    int input = 0;    srand((unsigned int)time(NULL));  //产生随机数种子    do     {        print_menu();  //打印菜单        printf("please select:>");        scanf("%d",&input);        switch (input)        {        case 1:            game();            break;        case 0:            break;        default:            printf("oh this error!\n");        }    } while (input);}int main(){    test();    return 0;}

3、玩游戏过程

#include "game.h"void start_board(char arr[ROW][COL],int row,int col)  //初始化数组{    int i = 0;    int j = 0;    for (i=0; i<row; i++)    {        for (j=0; j<col; j++)        {            arr[i][j]=' ';        }    }}void print_board(char arr[ROW][COL],int row,int col)  //打印棋盘{    int i = 0;    int j = 0;    for (i=0; i<row; i++)    {        printf(" %c | %c | %c \n",arr[i][0],arr[i][1],arr[i][2]);        if (i<row-1)        {            printf("--- --- ---\n");        }    }    printf("\n");}void computer_move(char arr[ROW][COL],int row,int col)  //电脑走 电脑识别不让对方赢{    int x = 0;    int y = 0;    int i = 0;    int j = 1;        if (j==1)        {            for (i=0; i<row-1; i++)            {                if (arr[i][0]==arr[i][1] && arr[i][2]==' ' && arr[i][1]!=' ')                {                    arr[i][2]='#';                    j=0;                    break;                }            }        }            if (j==1)        {            for (i=0; i<row; i++)            {                if (arr[i][1]==arr[i][2] && arr[i][0]==' ' && arr[i][1]!=' ')                {                    arr[i][0]='#';                    j=0;                    break;                }            }        }        if (j==1)        {            for (i=0; i<row; i++)            {                if (arr[0][i]==arr[1][i] && arr[2][i]==' ' && arr[1][i]!=' ')                {                    arr[2][i]='#';                    j=0;                    break;                }            }        }        if (j==1)        {            for (i=0; i<row; i++)            {                if (arr[1][i]==arr[2][i] && arr[0][i]==' ' && arr[1][i]!=' ')                {                    arr[0][i]='#';                    j=0;                    break;                }            }        }        if (j==1)        {            for (i=0; i<row; i++)            {                if (arr[i][0]==arr[i][2] && arr[i][1]==' ' && arr[i][0]!=' ')                {                    arr[i][1]='#';                    j=0;                    break;                }            }        }        if (j==1)        {            for (i=0; i<row; i++)            {                if (arr[0][i]==arr[2][i] && arr[1][i]==' ' && arr[0][i]!=' ')                {                    arr[1][i]='#';                    j=0;                    break;                }            }        }        if(j==0)        {            goto end;        }        else if (arr[1][1]==' ')        {            arr[1][1]='#';            j=0;        }        else if (arr[0][0]==' '&& (arr[0][1]=='*' || arr[1][0]=='*'))        {            arr[0][0]='#';            j=0;        }        else if (arr[0][2]==' '&& (arr[0][1]=='*' || arr[1][2]=='*'))        {            arr[0][2]='#';            j=0;        }        else if (arr[2][0]==' ' && (arr[1][0]=='*' || arr[2][1]=='*'))        {            arr[2][0]='#';            j=0;        }        else if (arr[2][2]==' ' && (arr[2][1]=='*' || arr[1][2]=='*'))        {            arr[2][2]='#';            j=0;        }        else if (arr[0][0]==' ')        {            arr[0][0]='#';            j=0;        }        else if (arr[0][2]==' ')        {            arr[0][2]='#';            j=0;        }        else if (arr[2][0]==' ')        {            arr[2][0]='#';            j=0;        }        else if (arr[2][2]==' ')        {            arr[2][2]='#';            j=0;        }        else if(arr[0][0]==arr[1][1] && arr[2][2]==' ' && arr[1][1]!=' ')        {            arr[2][2]='#';            j=0;        }        else if (arr[0][2]==arr[1][1] && arr[2][0]==' ' && arr[1][1]!=' ')        {            arr[2][0]='#';            j=0;        }        else if (arr[2][0]==arr[1][1] && arr[0][2]==' ' && arr[1][1]!=' ')        {            arr[0][2]='#';            j=0;        }        else if (arr[2][2]==arr[1][1] && arr[0][0]==' ' && arr[1][1]!=' ')        {            arr[0][0]='#';            j=0;        }        while (j)        {        x = rand()%row;        y = rand()%col;        if (arr[x][y]==' ')        {            arr[x][y]='#';            break;        }end:;       }}void player_move(char arr[ROW][COL],int row,int col)  //玩家走{    int x = 0;    int y = 0;    while (1)    {        printf("please player enter:>");        scanf("%d%d",&x,&y);        if (x>=1 && x<=3 && y>=1 && y<=3)  //判断玩家坐标是否合格        {            if (arr[x-1][y-1]==' ')            {                arr[x-1][y-1]='*';                break;            }            else            {                printf("Be occupied!\n");            }        }        else            printf("enter error !\n");    }}char  check_full(char arr[ROW][COL],int row,int col)  //判断棋盘是否满了{    int i = 0;    int j = 0;    for (i=0; i<row; i++)    {        for (j=0; j<col; j++)        {            if (arr[i][j]==' ')            {                return 0;            }        }    }    return 1;}char check_win(char arr[ROW][COL],int row,int col)  //判断输赢{    int i = 0;    for (i=0; i<row; i++)    {        if (arr[i][0]==arr[i][1] && arr[i][1]==arr[i][2] && arr[i][1] != ' ')       {           return arr[i][1];       }    }    for (i=0; i<row; i++)    {        if (arr[0][i]==arr[1][i] && arr[1][i]==arr[2][i] && arr[1][i] != ' ')        {            return arr[1][i];        }    }    if (arr[0][0]==arr[1][1] && arr[1][1]==arr[2][2] && arr[1][1]!=' ')     {        return arr[1][1];    }    else if (arr[0][2]==arr[1][1] && arr[1][1]==arr[2][0] && arr[1][1]!=' ')    {        return arr[1][1];    }    else if(check_full(arr,ROW,COL))    {        return 'e';    }    else     {        return 'g';    }}

三、神叨叨,本代码中间有很多需要优化的地方,大家多多指正,欢迎关注,私信。