C语言五子棋小游戏实现代码

 更新时间:2022年08月05日 15:27:35   作者:我今年十六岁  
这篇文章主要为大家详细介绍了C语言五子棋小游戏实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现五子棋小游戏的具体代码,供大家参考,具体内容如下

#include<stdio.h>
#include<windows.h>
#define ROW 14
#define COL 14
 
void gotoxy(int x,int y)//形参
{
    HANDLE hOut;
    COORD pos= {x,y};
    // 光标的起始位(第1列,第3行) 0是第1列 2是第3行
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOut, pos);
    //printf("定位光标位置搜索(%d,%d)\n",pos.X,pos.Y);
}
 
/*
函数名:paintGameUI()
函数功能:绘制棋盘
函数参数:无
函数返回值:无
*/
void paintGameUI()  //打印游戏棋盘  使用ROW COL在上面宏定义可以改变//棋盘大小
{
    int i=0;
    int j=0;
    printf("┌ ");     //顶部
    for(i=0;i<COL;i++)
    {
        printf("┬ ");
    }
    printf("┐\n");
    //中间
    for(j=0;j<ROW;j++)
    {
        printf("├ ");
        for(i=0;i<COL;i++)
        {
            printf("┼ ");    
        }
        printf("┤\n");
    }
    //底部
    printf("└ ");
    for(i=0;i<COL;i++)
    {
        printf("┴ ");
    }
    printf("┘\n");
}
 
void playgame()
{
    int arr[ROW][COL]={0}; // 初始化 0-没有棋子 1用户下棋黑 2电脑下棋白
    int x,y;      //用户输入的行 列
    int row,col;  //落子的位置
    int i,j; //  规则   判断输赢 遍历二维数组
    paintGameUI();     //    绘制棋盘
    while(1)//确保多次 确保用户电脑有效落子多次
    {
        while(1)    //      保证用户能够有效落子一次 用户下棋
        {
            gotoxy(0,16);//打印文字 0距离左边 16距离顶部
            printf("                        ");  //覆盖掉用户之前所输,//让用户可以再输
            gotoxy(0,16); //打印文字 0距离左边 16距离顶部
            
            printf("请输入下棋的位置,例如:(2 3):");
            scanf("%d %d",&x,&y);
            row = x-1;  //行 距离顶部的长度 数组是0开始的
            col =y-1;  //列 距离左边的长度 下棋的位置
            if(arr[row][col]==0)   //下棋位置是否是棋子
            {   
                gotoxy(col*2,row); 
                printf("●");//用户下棋
                //修改二维数组的值
                arr[row][col]=1; //用户下棋
                for(i=0;i<ROW;i++)    
                {    
                    for(j=0;j<COL;j++)   
                    {
                        //横着五个都是1  列变
                        if( arr[i][j]==arr[i][j+1]&&arr[i][j]==arr[i][j+2]&& 
                            arr[i][j]==arr[i][j+3]&&arr[i][j]==arr[i][j+4]&&j+4<=COL&&arr [i][j]==1)
                        {
                            gotoxy(0,18);
                            printf("用户赢了\n");
                            return ;    
                            
                        }//竖着五个都是1 行变
                        else if(arr[i][j]==arr[i+1][j]&&arr[i][j]==arr[i+2][j]&& 
                            arr[i][j]==arr[i+3][j]&&arr[i][j]==arr[i+4][j]&&i+4<=ROW&&arr [i][j]==1)
                        {
                            gotoxy(0,18);
                            printf("用户赢了\n");
                            return ;   
                        }    
                    }
                }
                break;    //轮到对方下棋    
            }
            else if(arr[row][col]==1||arr[row][col]==2)  //用户下棋1 电脑下棋2
            {
                gotoxy(0,17);
                printf("请重新输入坐标");
            }    
        }
        while(1) //    确保电脑有效落子一次 电脑下棋
        {
            //电脑下棋  电脑随机落子
            row= rand()%14+0;  //二维数组索引0-13  
            col= rand()%14+0;  //电脑随机落子
            //行距离顶部row  列距离左边col
            if(arr[row][col]==0)   //下棋位置是否是棋子 空 电脑可以下棋
            {   
                gotoxy(col*2,row);
                printf("○");//下棋
                //修改二维数组的值
                arr[row][col]=2; //电脑下棋
                for(i=0;i<ROW;i++)     //电脑赢 最好用算法
                {
                    for(j=0;j<COL;j++)
                    {
                        //横着五个都是1  列变
                        if( arr[i][j]==arr[i][j+1]&&arr[i][j]==arr[i][j+2]&& 
                            arr[i][j]==arr[i][j+3]&&arr[i][j]==arr[i][j+4]&&j+4<=COL&&arr [i][j]==2)
                        {
                            gotoxy(0,18);
                            printf("电脑赢了\n");
                            return;
                            
                        }//竖着五个都是1
                        else if(arr[i][j]==arr[i+1][j]&&arr[i][j]==arr[i+2][j]&& 
                            arr[i][j]==arr[i+3][j]&&arr[i][j]==arr[i+4][j]&&i+4<=ROW&&arr [i][j]==2)
                        {
                            gotoxy(0,18);
                            printf("电脑赢了\n");
                            return; 
                        }    
                    }
                }
                break;    
            }    
        }    
    }
}
 
int main()
{
    playgame();    
    return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++ set的使用方法详解

    C++ set的使用方法详解

    这篇文章主要介绍了C++ set的使用方法详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握set的使用方法,需要的朋友可以参考下
    2017-10-10
  • QT中几种常用的排序函数用法总结

    QT中几种常用的排序函数用法总结

    Qt是目前最先进、最完整的跨平台C++开发工具,下面这篇文章主要给大家介绍了关于QT中几种常用的排序函数用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • C++详细分析引用的使用及其底层原理

    C++详细分析引用的使用及其底层原理

    引用是C++一个很重要的特性,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作完全等价,这篇文章主要给大家总结介绍了C++中引用的相关知识点,需要的朋友可以参考下
    2022-04-04
  • C++:构造函数,析构函数详解

    C++:构造函数,析构函数详解

    今天小编就为大家分享一篇关于C++构造函数和析构函数的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-09-09
  • C语言修炼之路一朝函数思习得 模块思维世间生下篇

    C语言修炼之路一朝函数思习得 模块思维世间生下篇

    函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数
    2022-03-03
  • C++与QML进行数据交互的常见方法总结

    C++与QML进行数据交互的常见方法总结

    这篇文章主要为大家详细介绍了C++与QML进行数据交互的常见方法,文中 的示例代码讲解详细,具有一定的参考价值,有需要的小伙伴可以跟随小编一起了解一下
    2023-10-10
  • C/C++中获取数组长度的方法示例

    C/C++中获取数组长度的方法示例

    这篇文章主要介绍了C/C++中获取数组长度的方法,很实用的一种方法,需要的朋友可以参考下
    2014-08-08
  • 深入Windows下的回车是回车换行(\r\n)还是换行回车(\n\r)的详解

    深入Windows下的回车是回车换行(\r\n)还是换行回车(\n\r)的详解

    本篇文章对Windows下的回车是回车换行(\r\n)还是换行回车(\n\r)进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++使用邮件槽实现ShellCode跨进程传输

    C++使用邮件槽实现ShellCode跨进程传输

    在计算机安全领域,进程间通信(IPC)一直是一个备受关注的话题,在本文中,我们将探讨如何使用Windows邮件槽(Mailslot)实现ShellCode的跨进程传输,需要的可以参考下
    2023-12-12
  • C语言数据结构之判断循环链表空与满

    C语言数据结构之判断循环链表空与满

    这篇文章主要介绍了C语言数据结构之判断循环链表空与满的相关资料,希望通过本文能帮助到大家,让大家掌握这部分内容,需要的朋友可以参考下
    2017-10-10

最新评论