用C实现三子棋游戏

用C实现三子棋游戏_第1张图片
游戏规则:同一横竖或斜线如果为同一符号,即可获胜。
游戏结果:任意一方获胜或平局。
首先游戏的流程:
@选择菜单@
1.初始化棋盘
2.默认电脑先走
@展示棋盘@
3.判断是否连成三子或平局
4.玩家走
@展示棋盘@
5.判断是否连成三子或平局
@游戏结束进入选择菜单@

开始代码编辑
1.首先创建一个main.c的文件,写一个菜单函数

int menu()//这里返回值是整形
{
    int choose = 0;
    srand((unsigned)time(NULL));//随机数生成
    printf("---------------------\n");
    printf("------1.开始游戏-----\n");
    printf("------0.退出游戏-----\n");
    printf("---------------------\n");
    scanf("%d", &choose);
    return choose;
}

2.在主函数里完成基本流程控制

int main()
{
    int choose = 0;
    char arr[ROW][COL];
    do
    {
        choose = menu();
        switch (choose)
        {
        case 1:
            game(arr);
            break;
        case 0:
            break;
        default:
            break;
        }
    } while (choose);
    system("pause");
    return 0;
}

3.游戏函数game();

void game(char arr[ROW][COL])
{
    printf("\n开始游戏\n");
    init(arr);
    char ret;
    do
    {
        computer(arr);
        show(arr);
        iswin(arr);
        ret = iswin(arr);
        if (ret == 'X')
        {
            printf("电脑赢\n");
            break;
        }
        else if (ret == 'O')//注意要用else if
        {
            printf("你赢\n");
            break;
        }
        else if (ret == 'F')
        {
            printf("平局\n");
            break;
        }
        player(arr);
        show(arr);
        ret = iswin(arr);
        if (ret == 'X')
        {
            printf("电脑赢\n");
            break;
        }
        else if (ret == 'O')
        {
            printf("你赢\n");
            break;
        }
    } while (1);
}

4.以上需要的头文件和其他

#define  _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include"three.h"
#include

5.新建的three.h头文件写出了我们需要的各种方法

#pragma once
#ifndef  __THREE_H__
#define __THREE_H__
#define ROW 3
#define COL 3

void init(char arr[ROW][COL]);//初始化棋盘
void show(char arr[ROW][COL]);//展示目前的棋盘状态
void computer(char arr[ROW][COL]);//电脑下子
void player(char arr[ROW][COL]);//玩家下子
char iswin(char arr[ROW][COL]);//判断输赢和平局
#endif

6.新建的three.c文件里具体实现了three.h里面的函数方法

#define  _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include"three.h"

void init(char arr[ROW][COL])//初始化
{
    int i = 0;
    int j = 0;
    for (i = 0; i < ROW; i++)
    {
        for (j = 0; j < COL; j++)
        {
            arr[i][j] = ' ';//空格表示没有下子
        }
    }
}

void show(char arr[ROW][COL])//展示目前棋盘
{
    int i = 0;
    int j = 0;

    for (i = 0; i < ROW; i++)
    {
        printf("------------\n");
        for (j = 0; j < COL; j++)
        {
            printf("%2c |", arr[i][j]);
        }
        printf("\n");
    }
    printf("------------\n");

}

void computer(char arr[ROW][COL])
{
    printf("电脑下子:\n");
    do
    {
        int i = rand() % 3;//随机化坐标
        int j = rand() % 3;
        if (arr[i][j] == ' ')//判断条件:有空格才可以下子
        {
            arr[i][j] = 'X';
            break;
        }
    } while (1);
}

void player(char arr[ROW][COL])
{
    int x = 0;
    int y = 0;
    do
    {
        printf("请输入坐标:>");
        scanf("%d%d", &x, &y);
        x -= 1;
        y -= 1;
        if (arr[x][y] == ' ')
        {
            arr[x][y] = 'O';
            break;
        }
        else
        {
            printf("您输入的坐标位置非法!请重新输入!");
        }
    } while (1);
}

char iswin(char arr[ROW][COL])
{
    int i = 0;
    int j = 0;
    for (j = 0; j < COL; j++)
    {
    //竖列相同
        if (
            (arr[0][j] == arr[1][j]) && (arr[1][j] == arr[2][j])
            )
        {
            if (arr[0][j] == 'X')//只要有一个是X,说明是电脑
            {
                return 'X';
            }
            if (arr[0][j] == 'O')
            {
                return 'O';
            }
        }
//行相同
        if (
            (arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])
            )
        {
            if (arr[i][0] == 'X')
            {
                return 'X';
            }
            if (arr[i][0] == 'O')
            {
                return 'O';
            }
        }
//对角线相同,左上到右下
        if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]))
        {
            if (arr[0][0] == 'X')
            {
                return 'X';
            }
            if (arr[0][0] == 'O')
            {
                return 'O';
            }
        }
//右上到左下对角线相同
        if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]))
        {
            if (arr[0][2] == 'X')
            {
                return 'X';
            }
            if (arr[0][2] == 'O')
            {
                return 'O';
            }
        }
    }
    //判断是否平局,遍历全部元素
    for (i = 0; i < ROW; i++)
    {
        for (j = 0; j < COL; j++)
        {
            if (arr[i][j] == ' ')//只要出现空格,说明没有平局,随便返回一个字符
            {
                return 'a';
            }
        }
    }
    return 'F';//说明平局了,主函数里的判断条件会用到这个返回值
}

用C实现三子棋游戏_第2张图片

你可能感兴趣的:(C)