栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言实现三子棋

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言实现三子棋

亲爱的读者们,你们好鸭!(* ̄3 ̄)╭,我!又回来啦!和上次不同,这次我给你们带来了一个大宝贝儿(把手伸进口袋),瞧,是新出炉的三子棋教程呦( •̀ ω •́ )✧。那么话不多说,我们开始吧!

(前半部分为讲解分析,后半为源码)

1.创建菜单(毕竟比较简单,我就不多讲啦)

2.初始化棋盘 (1)头文件中

宏定义ROW与COL

申明initboard函数

(2)源文件中(主)

创建二维数组board

(3)源文件(函数实现)

解释:将二维数组初始为空格

3.打印棋盘 (1)头文件申明函数

 (2)源文件(主)

(3)打印函数实现

具体步骤为

第一行:空格 | 空格 | 空格 

第二行: --- | --- | ---

第三行:空格 | 空格 | 空格 

第四行: --- | --- | ---

第五行:空格 | 空格 | 空格 

 4.玩家下棋实现 (1)头文件申明

(2)源文件(主)

          玩家下棋后,并打印棋盘

 (3)源文件(函数实现)

        对应玩家输入的坐标,将二维数组board中的空格替换为星号

 5.电脑下棋实现(伪随机) (1)头文件

 (2)源文件(主)

其中srand((unsigned int)time(NULL));是为了生成随机数

与rand()一起使用

具体见   rand - C++ Reference (cplusplus.com)

 (3)源文件(函数实现)

与前面的“玩家下棋”同一原理

 6.判断输赢实现

那么,现在就到了最难的一步啦!加油啊(自我想象)

(1)头文件

(2)源文件(主)

 如果ret = ‘*’,则玩家赢

 如果ret = ‘#’,则电脑赢

 如果ret = ‘c',   则为’继续‘

 如果ret = ‘p',则为平局

(3)源文件(函数实现) 

主要分为三部分

a.同一行相同

b.同一列相同

c.对角线交叉相同

 其中有一个函数isfull判断是否平局(下满棋盘)

就这样,讲解完毕(终于)!!!!

那么下面就放码出来吧!!!

///game.c/


#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 


#define ROW 3
#define COL 3


//初始化棋盘
void initboard(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)

/test.c/


#include "game.h"

void menu()
{
    printf("********************n");
    printf("*****  三子棋  *****n");
    printf("*****  1.play  *****n");
    printf("*****  0.exit  *****n");
    printf("********************n");
}
int game()
{
    char board[ROW][COL];
    //初始化棋盘
    initboard(board, ROW, COL);
    //打印棋盘
    displayboard(board, ROW, COL);

    char ret = 0;

    while (1)
    {
        //玩家下棋
        playermove(board, ROW, COL);
        displayboard(board, ROW, COL);
        //判断玩家是否赢
        ret = iswin(board, ROW, COL);
        if (ret != 'c')
        {
            break;
        }
        //电脑下棋
        computermove(board, ROW, COL);
        displayboard(board, ROW, COL);
        //判断电脑是否赢
        ret = iswin(board, ROW, COL);
        if (ret != 'c')
        {
            break;
        }
    }
    if (ret == '*')
    {
        printf("小伙子,原来你赢得了啊。n");
    }
    else if (ret == '#')
    {
        printf("这个玩家就是逊呀,还让电脑赢了n");
    }
    else
    {
        printf("恭喜你,你的智商和我设计的程序一样高!(平局)n");
    }
}
int main()
{
    int input = 0;
    srand((unsigned int)time(NULL));
    while (1)
    {
        menu();
        scanf("%d", &input);

        if (input == 1)
        {
            game();
        }
        else
        {
            printf("游戏结束n");
            break;
        }
    }
    return 0;
}



/game.c/


#include "game.h"

//初始化棋盘
void initboard(char board[ROW][COL], int row, int col)
{
    for (row = 0; row < 3; row++)
    {
        for (col = 0; col < 3; col++)
        {
            board[row][col] = ' ';
        }
    }
}

//打印棋盘
void displayboard(char board[ROW][COL], int row, int col)
{
    int i = 0;
    for (i = 0; i < row; i++)
    {
        int j = 0;
        for (j = 0; j < col; j++)
        {
            printf(" %c ", board[i][j]);
            if (j != col-1)
            {
                printf("|");
            }
        }
        printf("n");
        if (i != row-1)
        {
            for (j = 0; j < col; j++)
            {
                printf("---");
                if (j != col - 1)
                {
                    printf("|");
                }
            }
            printf("n");
        }
    }
}

//玩家下棋
void playermove(char board[ROW][COL], int row, int col)
{
    printf("玩家下棋:>");
    int i = 0;
    int j = 0;
    while (1)
    {
        scanf("%d %d", &i, &j);
        if (board[i - 1][j - 1] == ' ')
        {
            board[i - 1][j - 1] = '*';
            break;
        }
        else
        {
            printf("坐标错误或被占用,请重新输入:>");
        }
    }
}

//电脑下棋
void computermove(char board[ROW][COL], int row, int col)
{
    printf("电脑下棋:n");
    while (1)
    {
        int i = rand() % row;
        int j = rand() % col;
        if (board[i][j] == ' ')
        {
            board[i][j] = '#';
            break;
        }
    }
}


//判断是否下满
int isfull(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 iswin(char board[ROW][COL],int row,int col)
{
    int i = 0;
    int j = 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 (j = 0; j < col; j++)
    {
        if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' ')
        {
            return board[0][j];
        }
    }
    //对角线
    if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
    {
        return board[0][0];
    }
    if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')
    {
        return board[0][2];
    }
    int a = isfull(board,row,col);
    if (a == 1)
    {
        return 'p';
    }
    return 'c';
}

/over/

靓仔,你发现了彩蛋撒☆*: .。. o(≧▽≦)o .。.:*☆

sai  ko  ni  hai tei si da !!!!  jo  jo  !!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849280.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号