三子棋游戏

想要完整地、清晰地实现三子棋的功能。必须有一个清晰地思路,再将思路转化为一个个功能不同的函数,最终实现三子棋人和电脑对战的效果。首先我先构想需要实现的功能,将这些功能封装成没一个函数,函数的具体实现在后面的过程中再具体完善。
首先我先要清楚我将要通过定义一个3*3的二维数组来完成三子棋基本功能,通过对二维数组的改变来实现三子棋的各个操作。
思路:选择菜单
1.打印棋盘;
2.玩家走;
3.判断输赢;
4.电脑走;
5.判断输赢;
代码如下:


game.h   //头文件



#ifndef _GAME_H_

#define _GAME_H_

#include 
#include 
#include 
#include 


#define ROW 3   //行数
#define COL 3   //列数

void Init_board(int arr[ROW][COL],int row,int col);//初始化棋盘
void Print_board(int arr[ROW][COL],int row,int col);//打印棋盘
void Player_move(int arr[ROW][COL],int row,int col);//玩家走
void Computer_move(int arr[ROW][COL],int row,int col);//电脑走
int Check_win(int arr[ROW][COL],int row,int col);//判断输赢


#endif// _GAME_H_




game.c   //游戏部分



#include "game.h"
void Init_board(int arr[ROW][COL],int row,int col)//初始化棋盘
{ 
    int i = 0;
    for(i=0;iint j = 0;
        for(j=0;j' ';
        }
    }

}
void Print_board(int arr[ROW][COL],int row,int col )//打印棋盘
{
    int i = 0;
    for(i=0;iprintf("|%2c|%2c|%2c|\n",arr[i][0],arr[i][1],arr[i][2]);
        if(i1)//最后一行不打印,美观
        {
            printf("|--|--|--|\n");
        }

    }
    printf("\n");

}
void Player_move(int arr[ROW][COL],int row,int col)//玩家走
{
    int x = 0;
    int y = 0;
    while(1)
    {
        printf("输入坐标(x,y):");
        scanf("%d%d",&x,&y);
        if((x>=1)&&(x<=row)&&(y>=1)&&(y<=col))//保证坐标有效
        {
            if(arr[x-1][y-1]!=' ')
            {
                printf("输入的坐标被占用,请重新输入!\n");
            }
            else 
            {
                arr[x-1][y-1]='*';//下标
                break;
            }
        }
        else
        {
            printf("输入的坐标无效!\n");
        }
    }
    printf("\n");
}
void Computer_move(int arr[ROW][COL],int row,int col)//电脑走
{
    int x = 0;
    int y = 0;
    while(1)
    {
        x=rand()%row;//电脑产生随机数
        y=rand()%col;
        if(arr[x][y]==' ')
        {
            arr[x][y]='X';
            break;
        }

    }
    printf("\n");
}
int Is_full(int arr[ROW][COL],int row,int col)//判断棋盘是否满格
{
    int i = 0;
    for(i = 0;iint j = 0;
        for(j=0;jif(arr[i][j]==' ')
                return 0;
        }
    }
    return 1;
}
int Check_win(int arr[ROW][COL],int row,int col)//判断输赢
{
    int i= 0;
    for(i=0;i//从行判断
    {
        if((arr[i][0]==arr[i][1])&&
            (arr[i][1]==arr[i][2])&&
            arr[i][2]!=' ')
        {
            return arr[i][0];
        }
    }
    for(i=0;i//从列判断
    {
        if((arr[0][i]==arr[1][i])&&
            (arr[1][i]==arr[2][i])&&
            arr[2][i]!=' ')
        {
            return arr[0][i];
        }

    }
    //从对角线判断
    if((arr[0][0]==arr[1][1])&&
        (arr[1][1]==arr[2][2])&&
        arr[2][2]!=' ')
    {
        return arr[0][0];
    }
    if((arr[0][2]==arr[1][1])&&
        (arr[1][1]==arr[2][0])&&
        arr[2][0]!=' ')
    {
        return arr[0][2];
    }
    if(Is_full(arr,row,col))
    {
        return 'q';
    }
    return ' ';
}




test.c   //测试部分




#define _CRT_SECURE_NO_WARNINGS 1

#include "game.h"

void menu()//打印菜单
{
    printf("******************************\n");
    printf("*****       1.play       *****\n");
    printf("*****       0.exit       *****\n");
    printf("******************************\n");
}
void game()//开始游戏
{
    int board[ROW][COL]={0};
    int ret = 0;
    Init_board(board,ROW,COL);//初始化棋盘
    do
    {
        Print_board(board,ROW,COL);
        printf("玩家走:");
        Player_move(board,ROW,COL);
        Print_board(board,ROW,COL);
        ret=Check_win(board,ROW, COL);

        if(ret!=' ')
            break;
        printf("电脑走:");
        printf("\n");
        Computer_move(board,ROW,COL);
        Print_board(board,ROW,COL);
        ret=Check_win(board,ROW, COL);

        if(ret!=' ')
            break;
    }while(1);

    if(ret=='X')
    {
        printf("电脑赢\n");

    };
    void  test ()
    {
        int input =0;
         srand=((unsigned)time(NULL));//初始化时间种子
         do
         {
        menu();
        printf("请输入->:")

        scanf("%d",&input);
        switch(input)
        {
        case 1:game();
            break;
        case 0:
            break;
        default:printf("输入错误,请重新输入!\n");
            break;
        }
    }while(input);
}
int main()
{
    test();
    system("pause");
    return 0;
}

结果:
三子棋游戏_第1张图片
三子棋游戏_第2张图片
三子棋游戏_第3张图片

总结完毕,请多指教!

你可能感兴趣的:(c语言项目,函数,二维数组,三子棋-游戏)