返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >怎么用C语言实现三子棋
  • 831
分享到

怎么用C语言实现三子棋

2023-06-22 07:06:42 831人浏览 薄情痞子
摘要

本篇内容介绍了“怎么用C语言实现三子棋”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!三子棋大家小时候应该都玩过三子棋吧,学习了这么久的C语言

本篇内容介绍了“怎么用C语言实现三子棋”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    三子棋

    大家小时候应该都玩过三子棋吧,学习了这么久的C语言,我们其实已经具备了做三子棋这种小型项目的能力,今天我会尽量沉浸式的教大家实现三子棋,如果看完这篇博客还是不会的可以去我最后附上的gitee仓库链接中寻找。但我还是希望大家能自己完成,在三子棋中体现自己的风格。

    创建项目环境

    首先,第一步,打开我们的vs编译器,新建一个三子棋项目

    在这个新建的项目中创建三个文件

    test.c

    game.c

    game.h

    怎么用C语言实现三子棋

    我们把函数声明和头文件的引入放在game.h这个头文件中

    将一些自定义函数定义放在game.c中

    将主函数的编写放在test.c中

    现在直接上头文件的内容,一会一步一步的教大家实现头文件中的接口和引用头文件的原因

    头文件内容

    #ifndef __GAME_H__#define __GAME_H__#include<stdio.h>#include<stdlib.h>#include<time.h>#include<windows.h>#define H 3#define L 3void menu();void game();void board(char arr[H][L],int x,int y);void printfboard(char arr[H][L], int x,int y);void  play(char arr[H][L], int x, int y);void computerplay(char arr[H][L], int x, int y);char win(char arr[H][L],int x,int y);#endif
    #ifndef #define #endif是为了防止头文件重复引入,其实在大家自己创建头文件时自带的#pramga once同样也可以达到目的

    编写main函数(test.c)

    写test.c第一步引用头文件game.h即#include"game.h"玩游戏一定要有一个菜单,所以我们需要打印写一个菜单,这个菜单函数的实现就在test.c中进行即可但我们先需要在头文件中声明void menu();接下来实现菜单void menu(){printf("*******************\n");printf("***1.play 0.exit***\n");printf("*******************\n");}我们使用了printf函数,我们这个时候需要引用带有标准输入输出流的头文件stdio.h然后我们在game.h中加上#include<stdio.h>
    像这种选择1,开始游戏,选择退出程序的模式,我们可以直接用switch来实现游戏肯定不止一把,只要用户不选择0,就让用户一直玩,所以我们这样编写主函数int main() {    int input;    do{    menu();again:        printf("请输入:");    scanf("%d", &input);    switch (input) {    case 1:        game();        break;    case 0:        printf("退出游戏\n");        break;    default:        printf("输入错误,请重新输入\n");        Goto again;    }    } while (input);    return 0;}为了防止用户输入错误,直接退出了程序,我们利用goto的特性来实现

    接下来我们组装一下,text.c就完成了

     #include"game.h"void menu() {    printf("*********************\n");    printf("**1.play  0.exit*****\n");    printf("*********************\n");}int main() {    int input;    do{    menu();again:    printf("请输入:");    scanf("%d", &input);    switch (input) {    case 1:        game();        break;    case 0:        printf("退出游戏\n");        break;    default:        printf("输入错误,请重新输入\n");        goto again;    }    } while (input);    return 0;}

    实现每一个接口函数

    这一个过程可能有点复杂,大家可能需要多多上手实验

    game函数是相当于game.c的main函数,我们需要一步一步去构建

    1.board

    在下三子棋之前我们应该知道用什么来承载棋子,三行三列的棋子,正好对应了二维数组的行和列我们就用二维数组来进行在game函数中我们可以加入int arr[3][3];但是在实际设计程序中,不建议大家使用数字,可能会出现错误,而且直接定义三行三列之后我们想改造三子棋为五子棋会很麻烦,这个时候我们可以用常量来代替所以我们应该在头文件中加入这两行代码,H代表行,L代表列#define H 3#define L 3
    void game(){char arr[H][L];board(arr,H,L);}board函数是用来实现初始化棋盘的,没有下子的位置都将其初始化为空,即空格void board(char arr[H][L], int x, int y) {    int i, j;    for (i = 0; i < x; i++) {        for (j = 0; j < y; j++) {            arr[i][j] = ' ';        }    }}

    2.printfboard

    初始化之后,我们需要打印棋盘这个printfboard函数是用来打印棋盘的,这一步比较重要,也比较困难,这个需要大家多动手尝试,先给大家看看我们理想的棋盘效果

    怎么用C语言实现三子棋

    从图中我们可以看到,我们用|和-作为分割符

    void printfboard(char arr[H][L], int x, int y) {    for (int i = 0; i < x; i++) {        for (int j = 0; j < y; j++) {            printf(" %c ", arr[i][j]);            if (j < y - 1)                printf("|");        }        printf("\n");        if (i < x - 1) {            for (int j = 0; j < y; j++) {                printf("---");                if (j < y - 1)                    printf("|");            }            printf("\n");        }    }}
    接下来讲game函数改造为void game(){char arr[H][L];board(arr,H,L);printfboard(arr,H,L);}

    这个函数的实现并不简单,希望大家多多尝试

    3.play

    接下来我们开始下棋了,我们先人为固定,我们下的是&lsquo;*&rsquo;,电脑下的是&lsquo;#&rsquo;

    首先,用户并不知道数组下标是从零开始的,我们需要设计从1开始

    其次,我们需要提醒用户的错误下棋,比如下在已有棋子的地方和下在棋盘以外

    最后,我们需要提醒用户正确的下棋方法,防止出现程序错误

    void play(char arr[H][L], int x,int y) {    int i, j;    again:    printf("(提示,以x y的形式输入,x代表行,y代表列)请输入你要下棋的位置:");    scanf("%d %d", &i, &j);    if (i >= 1 && i <= 3 && j >= 1 && j <= 3) {        if (arr[i - 1][j - 1] != ' ') {            printf("该位置以有棋子,请重新输入");            goto again;        }        else        {            arr[i-1][j-1] = '*';            printfboard(arr, x, y);//下完棋打印棋盘        }    }    else    {        printf("输入错误,请重新输入");        goto again;    } }

    4.computerplay

    玩家下完之后,需要电脑来下棋,电脑下棋就需要随机数rand来进行

    首先我们在头文件中引用#include<time.h>#include<stdlib.h>
    computerplay的要点与play一致void computerplay(char arr[H][L], int x, int y) {    int i, j;    srand((unsigned)time(NULL));//作为随机数的生成起点again:    i = rand()%x;   //这样i和j都只能是0 1 2符合数组下标规则    j = rand() % y;    if (arr[i][j] == ' ')    {        arr[i][j] = '#';        printfboard(arr, H, L);    }    else goto again;}
    电脑和人在还没有结束之前需要一直下,而且电脑有时候下的很快,我们需要用Sleep休息一下void game() {    char arr[H][L] = { 0 };    board(arr, H, L);    printfboard(arr, H, L);    while (1) {        play(arr, H, L);        printf("电脑正在下棋请稍等\n");        Sleep(1000);        computerplay(arr, H, L);    }}

    5.win

    接下来便是整个三子棋的最后一步,判断输赢

    我们先想一想输赢的条件,连成一条线就是赢,没有位置就是平局平局的条件比较好判断,但判断赢我们找不到好的方法就只能一一列举但是我们可以想一些有用的思路,我们从行和列交叉一次判读如果相等且不为空格直接返回当棋盘满了,返回!char win(char arr[H][L], int x, int y) {    int i, j;    int flag = 0;     for (i = 0; i < x; i++) {   //行        for (j = 0; j < y - 2; j++) {            if (arr[i][j] == arr[i][j + 1] && arr[i][j + 1] == arr[i][j + 2] && arr[i][j] != ' ')                return arr[i][j];        }    }    for (j = 0; j < y; j++) {  //列        for (i = 0; i < x - 2; i++) {            if (arr[i][j] == arr[i + 1][j] && arr[i + 1][j] == arr[i + 2][j] && arr[i][j] != ' ')                return arr[i][j];        }    }    for (i = 0; i < x - 2; i++) {  //对角线        for (j = 0; j < y - 2; j++) {            if (arr[i][j] == arr[i + 1][j + 1] && arr[i + 1][j + 1] == arr[i + 2][j + 2] && arr[i][j] != ' ')                return arr[i][j];        }        for (i = 0; i < x; i++) {//对角线            for (j = y - 1; j > 1; j--) {                if (arr[i][j] == arr[i + 1][j - 1] && arr[i + 1][j - 1] == arr[i + 2][j - 2] && arr[i][j] != ' ')                    return arr[i][j];            }         }     }    for (i = 0; i < x; i++) {        for (j = 0; j < y; j++) {            if (arr[i][j] == ' ')                flag = 1;        }    }    if (flag == 1)        return ' ';    else        return '!';}

      再将game进行改造

    void game() {    char arr[H][L] = { 0 };    char ret;    board(arr, H, L);    printfboard(arr, H, L);    while (1) {        play(arr, H, L);        ret = win(arr, H, L);        if (ret != ' ')            break;        printf("电脑正在下棋请稍等\n");        Sleep(1000);        computerplay(arr, H, L);        ret = win(arr, H, L);        if (ret != ' ')            break;    }    if (ret == '*')        printf("恭喜你获胜了\n");    else if (ret == '#')        printf("很遗憾你输了\n");    else        printf("势均力敌,再接再厉\n");}

    然后将game.c拼装在一起就完事了

    #include"game.h"void board(char arr[H][L], int x, int y) {    int i, j;    for (i = 0; i < x; i++) {        for (j = 0; j < y; j++) {            arr[i][j] = ' ';        }    }}void printfboard(char arr[H][L], int x, int y) {    for (int i = 0; i < x; i++) {        for (int j = 0; j < y; j++) {            printf(" %c ", arr[i][j]);            if (j < y - 1)                printf("|");        }        printf("\n");        if (i < x - 1) {            for (int j = 0; j < y; j++) {                printf("---");                if (j < y - 1)                    printf("|");            }            printf("\n");        }    }}void play(char arr[H][L], int x,int y) {    int i, j;    again:    printf("(提示,以x y的形式输入,x代表行,y代表列)请输入你要下棋的位置:");    scanf("%d %d", &i, &j);    if (i >= 1 && i <= 3 && j >= 1 && j <= 3) {        if (arr[i - 1][j - 1] != ' ') {            printf("该位置以有棋子,请重新输入");            goto again;        }        else        {            arr[i-1][j-1] = '*';            printfboard(arr, x, y);        }    }    else    {        printf("输入错误,请重新输入");        goto again;    } }void computerplay(char arr[H][L], int x, int y) {    int i, j;    srand((unsigned)time(NULL));//作为随机数的生成起点again:    i = rand()%x;   //这样i和j都只能是0 1 2符合数组下标规则    j = rand() % y;    if (arr[i][j] == ' ')    {        arr[i][j] = '#';        printfboard(arr, H, L);    }    else goto again;}char win(char arr[H][L], int x, int y) {    int i, j;    int flag = 0;    for (i = 0; i < x; i++) {        for (j = 0; j < y - 2; j++) {            if (arr[i][j] == arr[i][j + 1] && arr[i][j + 1] == arr[i][j + 2] && arr[i][j] != ' ')                return arr[i][j];        }    }    for (j = 0; j < y; j++) {        for (i = 0; i < x - 2; i++) {            if (arr[i][j] == arr[i + 1][j] && arr[i + 1][j] == arr[i + 2][j] && arr[i][j] != ' ')                return arr[i][j];        }    }    for (i = 0; i < x - 2; i++) {        for (j = 0; j < y - 2; j++) {            if (arr[i][j] == arr[i + 1][j + 1] && arr[i + 1][j + 1] == arr[i + 2][j + 2] && arr[i][j] != ' ')                return arr[i][j];        }        for (i = 0; i < x; i++) {            for (j = y - 1; j > 1; j--) {                if (arr[i][j] == arr[i + 1][j - 1] && arr[i + 1][j - 1] == arr[i + 2][j - 2] && arr[i][j] != ' ')                    return arr[i][j];            }         }     }    for (i = 0; i < x; i++) {        for (j = 0; j < y; j++) {            if (arr[i][j] == ' ')                flag = 1;        }    }    if (flag == 1)        return ' ';    else        return '!';}void game() {    char arr[H][L] = { 0 };    char ret;    board(arr, H, L);    printfboard(arr, H, L);    while (1) {        play(arr, H, L);        ret = win(arr, H, L);        if (ret != ' ')            break;        printf("电脑正在下棋请稍等\n");        Sleep(1000);        computerplay(arr, H, L);        ret = win(arr, H, L);        if (ret != ' ')            break;    }    if (ret == '*')        printf("恭喜你获胜了\n");    else if (ret == '#')        printf("很遗憾你输了\n");    else        printf("势均力敌,再接再厉\n");}

    “怎么用C语言实现三子棋”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

    --结束END--

    本文标题: 怎么用C语言实现三子棋

    本文链接: https://lsjlt.com/news/303456.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 怎么用C语言实现三子棋
      本篇内容介绍了“怎么用C语言实现三子棋”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!三子棋大家小时候应该都玩过三子棋吧,学习了这么久的C语言...
      99+
      2023-06-22
    • C语言怎么实现三子棋
      这篇文章主要介绍了C语言怎么实现三子棋的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言怎么实现三子棋文章都会有所收获,下面我们一起来看看吧。1、三子棋是什么?1.1 百度百科三子棋是黑白棋的一种。三子棋是一...
      99+
      2023-06-30
    • 用C语言实现三子棋
      本文实例为大家分享了用C语言实现三子棋的具体代码,供大家参考,具体内容如下 三子棋含义: 三子棋是黑白棋的一种。三子棋又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相...
      99+
      2024-04-02
    • C语言实现井字棋(三子棋)
      本文实例为大家分享了C语言实现井字棋的具体代码,供大家参考,具体内容如下 一、实现思路 1、初始化数组 三子棋是九宫格的格式,所以用二维数组接收数据。用‘O'代表电脑下的子,‘X'代...
      99+
      2024-04-02
    • 怎么用c语言实现三子棋游戏
      这篇文章给大家分享的是有关怎么用c语言实现三子棋游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译、...
      99+
      2023-06-14
    • C语言怎么实现三子棋算法
      这篇文章主要介绍“C语言怎么实现三子棋算法”,在日常操作中,相信很多人在C语言怎么实现三子棋算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么实现三子棋算法”的疑惑有所帮助!接下来,请跟着小编一起来...
      99+
      2023-06-20
    • C语言怎么实现三子棋游戏
      这篇文章主要讲解了“C语言怎么实现三子棋游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言怎么实现三子棋游戏”吧!很多人从小都玩过三子棋,相信很多人都对这个游戏的实现有所疑问。那么今天...
      99+
      2023-06-20
    • 用C语言实现三子棋游戏
      本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 初始工作,通过#define 定义一个标识符来表示一个常量(棋盘的横纵坐标) (因为在代码的编写中,会有...
      99+
      2024-04-02
    • 教你用C语言实现三子棋
      目录三子棋work.c的设置game.h的内容设置game.c的设置1.棋盘的内容2.棋盘以及棋盘的初始化3.打印棋盘4.下棋步骤 玩家下棋5.判断是否胜利总结三子棋 三子棋的规则是...
      99+
      2024-04-02
    • C语言实现三子棋游戏
      本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 game.h 设置头文件 #define ROW 3 #define COL 3 #include&...
      99+
      2024-04-02
    • C语言实现简易三子棋
      前言 检验学习成果最好的方式是实践,在学习完C语言的函数和数组以后,就可以简易的实现一些小游戏,本文将介绍如何实现三字棋小游戏。欢迎探讨 思路分析 三子棋的规则是在3X3的棋盘里,率...
      99+
      2024-04-02
    • C语言如何实现三子棋
      目录三子棋测试逻辑游戏逻辑初始化棋盘下棋判断胜利总结相信在座的各位都玩过三子棋和扫雷,但是有哪一位想过自己能够在电脑上实现三子棋呢?今天我们就一起来实现一下吧。三子棋首先我们看三子棋...
      99+
      2022-12-27
      C语言实现三子棋 C语言三子棋 C三子棋
    • 怎么用C语言实现三子棋小游戏
      这篇文章主要介绍了怎么用C语言实现三子棋小游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用C语言实现三子棋小游戏文章都会有所收获,下面我们一起来看看吧。思想提升及重要代码片段为什么要拆成三个文件写:1....
      99+
      2023-06-30
    • C语言怎么实现三子棋小游戏
      这篇文章主要介绍“C语言怎么实现三子棋小游戏”,在日常操作中,相信很多人在C语言怎么实现三子棋小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么实现三子棋小游戏”的疑惑有所帮助!接下来,请跟着小编...
      99+
      2023-06-17
    • C语言怎样实现简易三子棋
      这篇文章将为大家详细讲解有关C语言怎样实现简易三子棋,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言检验学习成果最好的方式是实践,在学习完C语言的函数和数组以后,就可以简易的实现一些小游戏,本文将介绍如...
      99+
      2023-06-20
    • C语言怎样实现三子棋游戏
      这篇文章给大家分享的是有关C语言怎样实现三子棋游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。思路:main函数结构部署game函数功能的实现①创建存储空间②初始化存储空间为空格③打印棋盘④实现玩家下棋⑤实现电...
      99+
      2023-06-25
    • C语言实现三子棋(井字棋)算法
      本文实例为大家分享了C语言实现三子棋算法,供大家参考,具体内容如下 游戏文件主干(test.c): #include"game.h" void menu()//游戏菜单 { ...
      99+
      2024-04-02
    • 用C语言实现三子棋小游戏
      本文实例为大家分享了C语言实现三子棋小游戏的具体代码,供大家参考,具体内容如下 1. 规则介绍 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起...
      99+
      2024-04-02
    • 使用C语言实现三子棋游戏
      本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 先简单介绍一下我的三子棋小游戏是怎么玩的,就是自己跟电脑pk,只不过电脑没这么智能。自己输入想要下的坐标...
      99+
      2024-04-02
    • 用C语言实现简单的三子棋
      三子棋代码的实现需要一个简单的思路做指引,所以我们先来做一下思路的整理,代码的实现主要分为以下几个步骤: 1.初始化数组2.显示数组3.电脑走4.玩家走5.判断输赢 所以,先写出源文...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作