c语言编程实现简单三子棋游戏

分别创建test.c game.c 两个源文件,以及game.h头文件
这里的三子棋游戏是指棋盘为3*3,玩家与电脑之间的对决,先将各自的棋下为一排(横/竖/斜)者获胜,若棋盘占满还为分出胜负,则判为平局。

  1. game.h中用于函数定义
#define _CRT_SECURE_NO_WARNINGS 1
#ifndef ___TIME_H__
#define ___TIME_H__
#include<stdio.h>
#include<stdlib.h>
#define ROW 3
#define LINE 3
void  SETGRID(char arr[ROW][LINE], int row, int line);//打印棋盘
void  INIT(char arr[ROW][LINE], int row, int line);//初始化棋盘
void  PLAYER_MOVE(char arr[ROW][LINE], int row, int line);//玩家走
void  AI_MOVE(char arr[ROW][LINE], int row, int line);//电脑走
int ISFULL(char arr[ROW][LINE], int row, int line);//判断是否平局
void  CHEAK(char arr[ROW][LINE], int row, int line);//判断输赢
#endif
  1. test.c用于存放主函数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"game.h"
int main()
{
    int key;
    int choose;
    printf("******************************************\n");
    printf("***1.开始                        0.结束***\n");
    printf("******************************************\n");
    printf("你的选择是:");
    scanf("%d", &key);
    char arr[ROW][LINE] = { 0 };
    int ret = 0;
    switch (key)
    {
    case 1:
        SETGRID(arr, ROW, LINE);
        INIT(arr, ROW, LINE);
    flag:
        while (1)
        {
            PLAYER_MOVE(arr, ROW, LINE);
            SETGRID(arr, ROW, LINE);
            AI_MOVE(arr, ROW, LINE);
            SETGRID(arr, ROW, LINE);
            ret = WIN(arr, ROW, LINE);
            if (ret == '1')
            {
                printf("你赢了");
                break;
            }
            if (ret == '0')
            {
                printf("电脑赢了");
                break;
            }
            if (ret == 'p')
            {
                printf("平局");
                break;
            }
        }
        printf("是否再来一局Y N");
        scanf("%d", &choose);
        if (choose == 'Y')
        {
            goto flag;
        }
        else
        {
            ;
        }
        break;
    case 0:
        break;
    default:
        break;
    }
    return 0;
}

3.game.c中实现游戏的函数

//这里就是本游戏最核心的地方
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"game.h"
void  SETGRID(char arr[ROW][LINE], int row, int line)//打印棋盘
{
    int i = 0;
    printf("  1  2  3  \n");
    printf("  ________ \n");
    for (i = 1; i <= ROW; i++)
    {
        printf("%d| %c| %c| %c|\n", i, arr[i - 1][0], arr[i - 1][1], arr[i - 1][2]);
        printf(" |__|__|__|\n");
    }
}
void  INIT(char arr[ROW][LINE], int row, int line)//初始化棋盘
{
    int i = 0;
    int j = 0;
    for (i = 0; i < ROW; i++)
    for (j = 0; j < LINE; j++)
    {
        arr[i][j] = ' ';
    }
}
void  PLAYER_MOVE(char arr[ROW][LINE], int row, int line)//玩家走
{
    int x = 0;
    int y = 0;
flag:
    printf("玩家走\n");
    printf("输入你的坐标x,y:\n");
    scanf("%d %d", &x, &y);
    if (x > ROW || y > LINE)//判断玩家输入是否合理
    {
        printf("请正确输入\n");
        goto flag;
    }
    else
        arr[x - 1][y - 1] = '1';
}
void  AI_MOVE(char arr[ROW][LINE], int row, int line)
{
    int a = 0;
    int b = 0;
    printf("电脑走\n");
    while (1)
    {
        a = rand() % 3;//用随机数来控住电脑的下棋的位置
        b = rand() % 3;
        if (arr[a][b] == ' ')
        {
            arr[a][b] = '0';
            break;
        }
    }
}
int ISFULL(char arr[ROW][LINE], int row, int line)//判断棋盘是否占满
{
    int i = 0;
    int j = 0;
    for (i = 0; i < ROW; i++)
    {
        for (j = 0; j < LINE; j++)
        {
            if (arr[i][j] == ' ')
                return 0;
        }
    }
    return 1;
}
int  WIN(char arr[ROW][LINE], int row, int line)//判断输赢
{
    int k = 0;
    for (k = 0; k < ROW; k++)
    {
        if (arr[k][0] == arr[k][1] && arr[k][1] == arr[k][2] && arr[k][0] != 0)
        {
            return arr[k][0];
        }
    }
    for (k = 0; k < LINE; k++)
    {
        if (arr[0][k] == arr[1][k] && arr[1][k] == arr[2][k] && arr[0][k] != 0)
        {
            return arr[0][k];
        }
    }
    if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != 0)
    {
        return arr[0][0];
    }
    if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[0][2] != 0)
    {
        return arr[0][2];
    }
    if (ISFULL(arr, row, line))
        return 'p';
    return ' ';
}

好了,简单的三子棋就完成了,大家如果有不懂的地方或者有需改进的地方,欢迎大家在下方评论,谢谢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值