C语言实现“三子棋”小游戏

Posted 系白杨呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言实现“三子棋”小游戏相关的知识,希望对你有一定的参考价值。

::: hljs-center

C语言实现“三子棋”小游戏

:::

一、编程思路:

\\

二、具体编写代码过程:

game.h文件---包含所有的头文件和函数声明:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3
//函数声明
void IniBoard(char board[ROW][COL], int row, int col);

void DisplayBoard(char board[ROW][COL], int row, int col);

void PlayerMove(char board[ROW][COL], int row, int col);

void ComputerMove(char board[ROW][COL], int row, int col);

char IsWin(char board[ROW][COL], int row, int col);

int IsFull(char board[ROW][COL], int row, int col);

test.c文件:用于整个游戏逻辑实现

主函数:
int main()

test();
return 0;
//显示菜单函数
void menu()

    printf("*************三子棋**********\\n");
    printf("*******1.play      0.exit*****\\n");
    printf("*******************************\\n");
void game()实现整个游戏的操作逻辑:
//整个游戏的逻辑
void game()

    int ret;   //用来接收IsWin()函数的返回值
    //printf("wanyouxi\\n");
    //创建棋盘
    char board[ROW][COL] =  0 ;
    //初始化数组
    IniBoard(board,ROW,COL);
    //打印棋盘
    DisplayBoard(board,ROW,COL);
    //下棋
    while (1)
    
        //1.玩家下
        PlayerMove(board, ROW, COL);
        DisplayBoard(board, ROW, COL);
        //判断输赢
        ret = IsWin(board, ROW, COL);
        if (ret != C)
        
            break;
        
        //2.电脑下
        ComputerMove(board, ROW, COL);
        DisplayBoard(board, ROW, COL);
        ret = IsWin(board, ROW, COL);
        if (ret != C)
        
            break;
        
    
    //判断输赢
    //ret = IsWin(board,ROW,COL);

    if (ret == *)
    
        printf("***电脑获胜!\\n");
    
    if (ret == F)
    
        printf("游戏平局\\n");
    
    if (ret == #)
    
        printf("***玩家获胜!\\n");
    
void test()用来调试:

void test()

    //设置随机数产生起点
    srand((unsigned int)time(NULL));
    int input = 0;
    do
    
        menu();
        printf("请输入:\\n");
        scanf("%d", &input);
        switch (input)
        
        case 1:
            //printf("玩游戏\\n");
            game();
            break;
        case 0:
            printf("退出游戏!\\n");
            break;
        defaoult:
            printf("输入有误请重新输入!\\n");
        
     while (input);

game.c文件--用来实现所有的函数功能:

#include"game.h"
//数组棋盘的初始化,令其为空格
void IniBoard(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 DisplayBoard(char board[ROW][COL], int row, int col)

    int i;
    int j;
    for (i = 0; i < row; i++)
    
        //1.打印一行的数据
        for (j = 0; j < col; j++)
        
            //printf(" %c | %c | %c \\n", board[i][0], board[i][1], board[i][2]);
            printf(" %c ", board[i][j]);
            if (j < col - 1)
            
                printf("|");
            

        
        printf("\\n");
        //2.打印每行的分隔符
        if (i < row - 1)
        
            for (j = 0; j < col; j++)
            
                printf("---");
                if (j < col - 1)
                
                    printf("|");
                
            
        
        printf("\\n");
    


//下棋
//1.玩家下
void PlayerMove(char board[ROW][COL], int row, int col)

    int x = 0;
    int y = 0;
    printf("*****玩家走*****->\\n");
    while (1)
    
        printf("请输入你所下的坐标:\\n");
        scanf("%d%d", &x, &y);
        //判断玩家所输入的坐标是否合理
        if (x >= 1 && x <= 3 && y >= 1 && y <= 3)
        
            //判断所下的位置是否为空
            if (board[x - 1][y - 1] ==  )
            
                //在玩家输入的位置上填上#
                board[x - 1][y - 1] = #;
                break;
            
            else
            
                printf("此位置已经被占用!\\n");
            
        
        else
        
            printf("坐标非法!请重新输入:\\n");
        
    

//电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col)

    int x = 0;
    int y = 0;
    printf("*****电脑走*****\\n");
    //x,y为随机数
    while (1)
    
        x = rand() % ROW;
        y = rand() % COL;
        //判断位置是否为空
        if (board[x][y] ==  )
        
            board[x][y] = *;
            break;
        
    


//判断输赢
//四种情况:
//1.玩家赢 返回#
//2.电脑赢 返回*
//3.平局 返回F
//4.继续 返回C
// IsFull()函数返回0表示没满,返回1表示满了
int IsFull(char board[ROW][COL], int row, int col)

    int i;
    int j;
    for (i = 0; i < row; i++)
    
        for (j = 0; j < col; j++)
        
            if (board[i][j] !=  )
            
                return 0;
            
        
    
    return 1;

char IsWin(char board[ROW][COL], int row, int col)

    int i;
    int j;
    for (i = 0; i < row; i++)
    
        //判断行
        if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][2] !=  )//判断每一行
        
            return board[i][1];
        
        //判断列
        if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[2][i] !=  )
        
            return board[0][i];
        
        //判断对角线
        if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[2][2] !=  )
        
            return board[1][1];
        
        if(board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[0][2] !=  )
        
            return board[1][1];
        
        //判断是否平局
        if (1 == IsFull(board, row, col))
        
            return F;
        
        else
            return C;
    

\\

三、运行截图:

简单的给了一张实现截图,具体可以拷贝源码后自行运行,有疑问可以留言一起讨论!

以上是关于C语言实现“三子棋”小游戏的主要内容,如果未能解决你的问题,请参考以下文章

三子棋游戏C语言版

C语言实现简单的三子棋

C语言实现简单的三子棋

三子棋(C语言实现)

C语言实现三子棋游戏

这个三子棋,输了就要接受惩罚哦!