三子棋初学!!!

作为一位初学C语言的小白,在对C语言有了初步认识后,现在来尝试一下三子棋的编程来作为一次挑战!!

首先把需要的头文件声明:

#ifndef __GAME_H__
#define __GAME_H__


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


#define ROW 3
#define COL 3


void init_board(char board[ROW][COL], int row, int col);
void print_board(char board[ROW][COL], int row, int col);
void player_move(char board[ROW][COL], int row, int col);
void computer_move(char board[ROW][COL], int row, int col);
char is_win(char board[ROW][COL], int row, int col);


#endif//__GAME_H__

接下来开始正式的代码:如下

#include"game.h"  
#include<time.h>  写之前引用自己定义的“game.h”头文件与电脑自己下棋所需要的<time,h>头文件


void game()//程序主体大致就是-->初始化棋盘数组-玩家走-判断输赢-打印棋盘-电脑走-判断输赢-打印棋盘
{
int board[ROW][COL] = {0};
int ret = 0;
    init_board(board, ROW, COL);
    print_board(board, ROW, COL);
    srand((unsigned int)time(NULL));
while(1)
{
player_move(board, ROW, COL);
ret = is_win(board, ROW, COL);
if(ret != ' ')
break;
        print_board(board, ROW, COL);
computer_move(board, ROW, COL);
ret = is_win(board, ROW, COL);
print_board(board, ROW, COL);
if(ret != ' ')
break;
}
{
if (ret == 'q')
           {
             printf("平局\n");
           }
         if (ret == '*')
           {
             printf("恭喜你,你赢了%c\n", 1);
           }
         if (ret == '0')
           {
             printf("你输了,不要灰心哦%c\n", 1);
           }
}
}
void menu()//实现菜单界面
{
printf("-------------------------\n");
printf("#        1.start        #\n");
printf("#        0.exit         #\n");
printf("-------------------------\n");
}
int main()
{
    int input = 0;
do 
{
menu();
printf("请选择:");
        scanf("%d",&input);
switch (input)
{
     case 1:
game();
break;
     case 0:
break;
     default:
printf("输入有误,请重新输入\n");
break;
}
}while(input);
return 0;

}

下面就是自己编写的game.h头文件里所用的函数编写大笑


void init_board(char board[ROW][COL], int row, int col)//初始化棋盘,将棋盘置为空格
{
int i = 0;
int j = 0;
for(i = 0;i < row;i++)
for(j = 0;j < col;j++)
{
board[i][j] = ' ';
}
}
void print_board(char board[ROW][COL], int row, int col)//打印棋盘
{
    int i = 0;
    int j = 0;
    printf(" ___ ___ ___ \n");
    for (i = 0; i < row; i++)
    {
        printf("| %c | %c | %c |\n", board[i][0], board[i][1], board[i][2]);
        printf("|___|___|___|\n");
    } 
}
void player_move(char board[ROW][COL], int row, int col)
{
    int x = 0;
    int y = 0;
    while (1)
    {
        printf("请选择坐标>:");
        scanf("%d.%d", &x,&y);
x--;
y--;
        if ((x >= 0) && (x <= 2) && (y >= 0) && (y <= 2))//玩家输入坐标需在棋盘坐标范围内
        {
            if (board[x][y] == ' ')//坐标位置并没有棋子
            {
                board[x][y] = '*';
                break;
            }
            else if (board[x][y] == '0' || board[x][y] == '*')
{
                printf("此位置已有棋子,请从新输入坐标%c",1);
            }
        }
        else
        {
            printf("输入坐标有误,请重新输入坐标%c",1);
        }
    }
}


void computer_move(char board[ROW][COL], int row, int col)
{
     printf("电脑下\n");
     while (1)
     {
        int x = 0;
        int y = 0;
        x = rand() % 3;
        y = rand() % 3;
        if (board[x][y] == ' ')
        {
            board[x][y] = '0';
            break;
        }
     }
}


static int is_full(char board[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 (board[i][j] == ' ')
            {
                return 0;
            }
        }
    }
    return 1;
}




char is_win(char board[ROW][COL], int row, int col)
{
    int i = 0;
    for (i = 0; i < row; i++)
    {
        if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][0] != ' '))
        {
            return board[i][0];
        }
    }
    for (i = 0; i < row; i++)
    {
        if ((board[0][i] == board[1][i]) && (board[1][i] == board[2][i]) && (board[0][i] != ' '))
        {
            return board[0][i];
        }
    }
    if ((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && (board[0][0] != ' '))
    {
        return board[1][1];
    }
    if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]) && (board[0][0] != ' '))
    {
        return board[1][1];
    }
    if (is_full(board, row, col))
    {
        return 'q';
    }
    return ' ';
}






猜你喜欢

转载自blog.csdn.net/qq_36971449/article/details/80186565