【新年第一个程序】三子棋小游戏(C语言数组实现)

一、游戏效果

二、游戏规则

❶ 输入1进入游戏

❷ 输入0退出游戏

❸ 玩家先走

❹ 玩家落子是选择棋盘的坐标位置

❺ 电脑是随机落子

❻ 如果电脑连了三子则提示电脑赢了,选择要不要继续游戏

三、实现游戏的代码思路

✪ 先构架游戏整体思路

void game(){    char ret = 0;    //数组存放棋盘信息    char board[ROW][COL] = { 0 };//二维数组的初始化并没有这么简单    int row = ROW;    int col = COL;    //1.初始化棋盘    //一定要初始化    InitBoard(board, ROW, COL);    //2.打印棋盘    DisplayBoard(board, ROW, COL);    //3.玩游戏,开始下棋了    while (1)    {        //玩家下棋        PlayerMove(board, ROW, COL);        DisplayBoard(board, ROW, COL);        //判断玩家是否赢了        ret = Iswin(board, ROW, COL);        //如果不是游戏继续,那么就直接跳出循环        if (ret != 'D')        {            break;        }        //电脑下棋        ComputerMove(board, ROW, COL);        DisplayBoard(board, ROW, COL);        //判断电脑是否赢了        ret = Iswin(board, ROW, COL);        //如果不是游戏继续,那么就直接跳出循环        if (ret != 'D')        {            break;        }    }    if (ret == 'X')        printf("玩家赢了\n");    else if (ret == 'O')        printf("电脑赢了\n");    else        printf("平局\n");}

————————

✪ 再分步写出相应所需函数

1、菜单函数

void mnue(){    printf("-------------------------------\n");    printf("-------------------------------\n");    printf("----1.play      0.exit--------\n");    printf("-------------------------------\n");    printf("-------------------------------\n");}

————————

2、初始化棋盘函数

//函数的初始化//将棋盘所有元素都初始化为空格//空格为不在屏幕上显示其字符的字符(0也是)void InitBoard(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  )        {            board[i][j] = ' ';        }    }}

————————

3、打印棋盘函数

//打印棋盘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");        }    }}

————————

4、用来存储玩家下棋信息的函数

//玩家下棋void PlayerMove(char board[ROW][COL], int row, int col){    int x = 0;    int y = 0;    printf("玩家走\n");    while (1)    {        printf("请输入要下的坐标:");        scanf("%d%d", &x, &y);        if (x >= 1 && y >= 1 && x <= row && y <= col)        {            if (board[x - 1][y - 1] == ' ')            {                board[x - 1][y - 1] = 'X';                break;            }            else                printf("该坐标被占用,请重新输入\n");        }        else            printf("该坐标不存在,请重新输入\n");    }}

————————

5、电脑随机下棋的函数

//电脑随机下棋void ComputerMove(char board[ROW][COL], int row, int col){    printf("电脑走\n");//三子棋中电脑只要下在空棋盘上即可    int x = 0;    int y = 0;    while (1)    {        x = rand() % row;//将电脑走的随机值控制在棋盘中        y = rand() % col;        if (x >= 1 && y >= 1 && x <= row && y <= col)        {            if (board[x - 1][y - 1] == ' ')            {                board[x - 1][y - 1] = 'O';                break;            }        }    }}

————————

6、判断棋盘是否满了的函数

//返回1,表示棋盘满了//返回0,表示棋盘还没满int IsFull(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  )        {            if (board[i][j] == ' ')                return 0;//没满        }    }    return 1;//满了}

————————

7、判断输赢和游戏是否继续的函数

//判断输赢和游戏是否继续//判断输赢//4种状态//1.玩家赢了---'X'//2.电脑赢了---'O'//3.平局----'C'//4.游戏继续---'D'char Iswin(char board[ROW][COL], int row, int col){    int i = 0;    //横3行    for (i = 0; i < row; i  )    {        if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')        {            return board[i][0];//Iswin直接结束        }    }    //列3行    for (i = 0; i < col; i  )    {        if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')        {            return board[0][i];        }    }    //两个对角线    if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')        return board[1][1];    if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')        return board[1][1];    //判断是否平局    if (1 == IsFull(board, ROW, COL))        return 'C';    //继续游戏    return 'D';}

————————

8、主函数控制游戏的进程

int main(){    int input = 0;    srand((unsigned int)time(NULL));//扩大电脑走的随机值范围    do    {        mnue();        printf("请输入(0/1):");        scanf("%d", &input);        switch (input)        {        case 1:            printf("三子棋游戏开始\n");            game();            break;        case 0:            printf("退出游戏\n");            break;        defout:            printf("输入错误,请重新输入\n");            break;        }    } while (input);    return 0;}
(0)

相关推荐

  • ​LeetCode刷题实战130:被围绕的区域

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • 用 Python 跟自己下棋

    今天,李世乭终于在与 AlphaGo 的人机大战中扳回一局.但计算机 AI 可以在围棋上战胜人类顶尖棋手的时代已经到来.可以预见,人工智能和机器人将会在更多领域做到比人力更高效.准确.安全.所以未来, ...

  • C语言初级编程实践:2048小游戏

    大部分同学学习C语言编程以后不知道能通过什么样的项目才可以锻炼自己的思维功力,2048相信大家都应该熟悉,不管是手机上还是网页版的相信大家都玩过,这个简单的控制台版本的游戏是我曾经在伟易达上班时一个嵌 ...

  • ​LeetCode刷题实战37: 解数独

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • C语言将4个16进制char字符合并成一个int数

    串口接收只能按照char字符发送 所以需要拆分数据,下面代码为串口接收到的字符还原为int类型数字(int为32位) int rev_data(int a,int b,int c,int d) {  ...

  • 翻译图解|21001贝瑞-可爱小领巾。新年第一翻,从可爱小物件开始吧

    HI,新年快乐 感恩你们一直都在 新的一年 愿大家都能顺顺利利 健健康康 笑口常开 今天分享的图解是R网新的免费解 一款可爱的小领巾 百搭单品 必须要来一个 此文为A Lin林个人翻译作品,免费分享给 ...

  • 微信小游戏大全:10个好玩的微信小程序,第一个射击游戏不错

    微信小游戏大全! 微信小游戏小程序大全! 只有你想不到, 没有我找不到的好游戏! 「良心好游戏推荐」 搜罗了好玩的微信小游戏大全, 模拟经营游戏.恐怖游戏.消除游戏.休闲游戏. 益智游戏.吃鸡游戏.烧 ...

  • 小游戏开放测试!我们第一时间采访了微信小程序,另传或实行六四分成 | 游戏陀螺

    游戏陀螺 小游戏官方回复游戏陀螺 游戏陀螺第一时间联系到了微信官方,咨询了一些大家最为关心的核心问题.以下是微信官方对游戏陀螺问题的具体解答: 1.开发者最关心的还是游戏类目的情况,开放注册上显示所有 ...

  • 小游戏从0到1:第 2 课 创建第一个小游戏项目

    目录 了解运行机制 注册开发者帐号 安装开发工具 创建第一个项目 预览项目 自动预览项目 熟悉项目结构 如何调试代码 本课源码 文 / 石桥码农 本文约 11982 字符,阅读需要 17 分钟 微信小 ...

  • 新年第一天,送你一朵小红花

    2020国庆档后首部预售破亿影片(据说全年也仅4部),跨年夜开画,抗癌温情题材,顶流爱豆易烊千玺+新任谋女郎刘浩存,黄海出手设计海报,微博上线专属小红花表情-- <送你一朵小红花>的火爆是 ...

  • 程序员奶爸必修课——用 pygame 写小游戏

    来源:Python 技术「ID: pythonall」 周末在家没事,大哥和嫂子要出去 happy,于是将他的儿子丢到我家,让我当奶爸陪玩一下.为了让这磨人的小妖精消停会,我好安静地打盘王者,我灵机一 ...

  • 六大最经典的小游戏,第一款绝对是童年回忆

    00后的经典回忆,除了单机游戏外,还有很多网页小游戏,00后的家中,大部分都普及了电脑,所以玩电脑游戏十分方便,那么本期这六款小游戏,都是当年最经典的作品,00后都玩过,你是否还记得呢? <狙击 ...

  • 萌犬变变变小游戏:便便便萌犬小程序,点开既玩

    50000+游戏爱好者已加入我们! 每天推荐好玩游戏! 关注我们,沐沐带你发现好游戏! <萌犬变变变>游戏小程序好玩吗? <萌犬变变变>小游戏怎么玩? 怎么进入<萌犬变变 ...

  • 微信小游戏推荐:灵兽争霸!超魔性灵兽融合小程序

    50000+游戏爱好者已加入我们! 每天推荐好玩游戏! 关注我们,沐沐带你发现好游戏! <灵兽争霸>游戏小程序好玩吗? <灵兽争霸>小游戏怎么玩? 怎么进入<灵兽争霸&g ...