IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 用C语言制作三子棋(井字棋) -> 正文阅读

[C++知识库]用C语言制作三子棋(井字棋)

????????三子棋,我相信许多人都有玩过,曾经晚自习无聊时就拿张稿子,画个井字就可以和同桌愉快的博弈了。但是一张稿纸只能玩几次就被画满了,十分的浪费纸张,而用C语言只需要利用一个循坏就可以玩到你不想玩。

????????首先,我们先写一个main()函数,用来控制这整个程序,你是否想玩利用mune()函数进行控制,而游戏的过程由game()函数负责实施。

????????如图,当mune()的返回值为2时,结束程序,否则就是不断的循环进行游戏,每次游戏结束进行一次清屏,保证屏幕的干净整洁。

????????mune()函数进行菜单的打印,以及接受玩家的选择并作出相应的处理,如果输入1||2以外的数字,就会陷入循环,知道输入1||2为止。

? ? ? ? game()函数就开始对游戏过程的具体实施,其中qipan()函数进行对棋盘的打印,panding函数进行对胜负的判定,以及对现在轮到谁下进行提醒,因为三子棋最多只能走9步,所以在k=10(第10步)退出循环,如果在循环中为判定出胜负,则为平局,应为最快也要先手走3步,后手走两步才能分出胜负,所以可以在第5步及以后的每一步进行胜负的判定。?

????????

? ? ? ? 棋盘的效果如图。?

????????三子棋的胜负就这8种情况,虽然str数组开始被我全部赋值为' '(空格),但是这里绝对要对该三连珠进行判定,保证其不为空格,如果没有这个判定,则在实际游戏过程中,当你实际连成的三连珠的判定在一个空的三连珠的判定后面时,程序无法判定胜负。

?????????这是一次游戏的截图。

????????以下为源码:

#include <stdio.h>
int mune()
{
    printf("------------------------\n");
    printf("     欢迎来到三子棋     \n");
    printf("       1.开始游戏       \n");
    printf("       2.退出游戏       \n");
    printf("------------------------\n");
    choice:
    while(1)
    {
        int control;
        scanf("%d",&control);
        switch(control)
        {
            case 1:return 1;
            case 2:return 2;
            default:printf("输出错误,请重新输入\n");
        }
    }
}
void game()
{
    char str[3][3]={0};
    int p=' ';
    int i,j,k;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            str[i][j]=' ';
    for(k=1;k<=9;k++)
    {
        system("cls");
        printf("轮到");
        if(k%2==1)
            printf("先手下\n");
        else
            printf("后手下\n");
        qipan(str);
        chongxia:
        printf("请输入要下的位置;");
        scanf("%d%d",&i,&j);
        if(str[i-1][j-1]!=' ')
        {
            printf("该位置已有棋子,请重下\n");goto chongxia;
        }
        if(k%2==1)
            str[i-1][j-1]='O';
        else
            str[i-1][j-1]='X';
        if(k>=5)
        {
            p=panding(str);
            if(p=='O')
            {
                system("cls");qipan(str);printf("先手胜,按回车键继续\n");getchar();getchar();return;
            }
            if(p=='X')
            {
                system("cls");qipan(str);printf("后手胜,按回车键继续\n");getchar();getchar();return;
            }
        }
    }
    printf("平局,按回车键继续\n");
    getchar();
    getchar();
}
void qipan(char str[3][3])
{
    printf("  -------------\n");
    printf("3 | %c | %c | %c |\n",str[2][0],str[2][1],str[2][2]);
    printf("  -------------\n");
    printf("2 | %c | %c | %c |\n",str[1][0],str[1][1],str[1][2]);
    printf("  -------------\n");
    printf("1 | %c | %c | %c |\n",str[0][0],str[0][1],str[0][2]);
    printf("  -------------\n");
    printf("    1   2   3  \n");
}
int panding(char str[3][3])
{
    if(str[0][0]==str[1][1]&&str[1][1]==str[2][2]&&str[1][1]!=' ')
        return str[1][1];
    if(str[0][2]==str[1][1]&&str[1][1]==str[2][0]&&str[1][1]!=' ')
        return str[1][1];
    if(str[0][1]==str[1][1]&&str[1][1]==str[2][1]&&str[1][1]!=' ')
        return str[1][1];
    if(str[1][0]==str[1][1]&&str[1][1]==str[2][1]&&str[1][1]!=' ')
        return str[1][1];
    if(str[0][0]==str[0][1]&&str[0][1]==str[0][2]&&str[0][0]!=' ')
        return str[0][1];
    if(str[0][0]==str[1][0]&&str[1][0]==str[2][0]&&str[0][0]!=' ')
        return str[1][0];
    if(str[2][2]==str[2][1]&&str[2][1]==str[2][0]&&str[2][2]!=' ')
        return str[2][1];
    if(str[2][2]==str[1][2]&&str[1][2]==str[0][2]&&str[2][2]!=' ')
        return str[1][2];
    return ' ';
}
int main()
{
    int control=0;
    while(1)
    {
        system("cls");
        control=mune();
        switch(control)
        {
            case 1:
            {
                game();
                break;
            }
            case 2:return 0;
        }
    }
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 10:38:58  更:2022-01-24 10:39:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:43:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码