| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 12729 人关注过本帖
标题:C语言五子棋代码
只看楼主 加入收藏
B_Y
Rank: 1
等 级:新手上路
帖 子:27
专家分:4
注 册:2010-3-8
结帖率:42.86%
收藏
已结贴  问题点数:20 回复次数:51 
C语言五子棋代码
  不知道做了多久了,断断续续写了快2星期了吧,今天终于下狠心把这个终结了。

还是有很多bug (越界的时候会出错,有时候玩家赢了也没反应)

不过实在没耐性改了,写了这么久,也拿出来晾凉了。。。

pcthink函数可以自己改写,调整电脑下棋的智商。

不过写的很乱,注释没耐性写,估计大家也很难看懂,就娱乐一下,有兴趣的帮忙改下吧。毕竟bug 太多了;还有就是这个是在vc下做的 在TC下不行。。
准确的说是用2维数组建立一个棋盘,然后存到文件中,在执行操作后记录到文件中,清屏,然后再输出新的棋盘数据
整个思路大概就是这样

程序代码:
/*五子棋游戏*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define N 20
/*建立棋盘*/
creat(char g[N][N])
{
    FILE *fp;
    int i,j;   
    fp=fopen ("game.txt","w");
    for (i=0;i<N;i++)
        for (j=0;j<N;j++)
        {   
            if (j==(N-1))
                g[i][j]='|';
            else if (i==(N-1))
                g[i][j]='-';
            else g[i][j]=' ';
        }
        g[0][0]=1;   
        for (i=0;i<N;i++)
            fwrite (g+i,sizeof (char),N,fp);
        fclose (fp);
        return 1;
}
/*输出棋盘*/
print (char g[N][N])
{
    int i,j;
    FILE *fp;
    fp=fopen ("game.txt","rt");
    for (i=0;i<N;i++)
    {
        fread (g+i,sizeof (char),N,fp);
       
    }
    for (i=0;i<N;i++)
    {
        for (j=0;j<N;j++)
        {
           
            putchar (g[i][j]);
        }
        printf ("\n");
    }
    fclose (fp);
    return 1;
}
/*获取棋盘数据*/
getg(char g[N][N])
{
    FILE *fp;
    int i;
    fp=fopen ("game.txt","rt");
    for (i=0;i<N;i++)
        fread (g+i,sizeof (char),N,fp);
    fclose (fp);
}
/*保存棋盘数据*/
save (char g[N][N])
{
    FILE *fp;
    int i;
    fp=fopen ("game.txt","wt");
    for (i=0;i<N;i++)
        fwrite (g+i,sizeof (char),N,fp);
    fclose (fp);
    return (1);
   
}
/*左移光标*/
left (char g[N][N])
{
   
    int i,j;
    getg (g);
    for (i=0;i<N;i++)
    {        for (j=0;j<N;j++)
    if (g[i][j]==1) 
        break;
    if (g[i][j]==1) 
        break;
    }
    g[i][j]=' ';
    while (g[i][--j]!=' ');
    g[i][j]=1;
    save (g);
    return 1;
}
/*右移光标*/
right(char g[N][N])
{
    int i,j;
    getg (g);
    for (i=0;i<N;i++)
    {        for (j=0;j<N;j++)
    if (g[i][j]==1) 
        break;
    if (g[i][j]==1) 
        break;
    }
    g[i][j]=' ';
    while (g[i][++j]!=' ');
    g[i][j]=1;
    save (g);
    return 1;
}
/*上移光标*/
up(char g[N][N])
{
    int i,j;
    getg (g);
    for (i=0;i<N;i++)
    {        for (j=0;j<N;j++)
    if (g[i][j]==1) 
        break;
    if (g[i][j]==1) 
        break;
    }
    g[i][j]=' ';
    for (i=i-1;i<N;i--)
        if (g[i][j]==' ')
            break;
        g[i][j]=1;
        save (g);
        return 1;
}
/*下移光标*/
down (char g[N][N])
{
    int i,j,flag;
    flag=0;
    getg (g);
    for (i=0;i<N;i++)
    {        for (j=0;j<N;j++)
    if (g[i][j]==1) 
    {flag=1;break;}
    if (flag==1) 
        break;    }
                g[i][j]=' ';
                for (i=i+1;i<N;i++)
                    if (g[i][j]==' ')
                        break;
                    g[i][j]=1;
                    save (g);
                    return 1;
}
/*确认下子*/
go (char g[N][N])
{
    int i,j;
    getg (g);
    for (i=0;i<N;i++)
    {        for (j=0;j<N;j++)
    if (g[i][j]==1) 
        break;
    if (g[i][j]==1) 
        break;
    }
    g[i][j]='x';
    for (i=i+1;i<N;i++)
        if (g[i][j]==' ')
            break;
        g[i][j]=1;
        save (g);
        return 1;
}
/*刷新棋盘数据*/
renew (char g[N][N])
{
    getg (g);
    system("cls");
    print (g);
}
/*电脑下棋*/
pcthink (char g[N][N])
{
    int i,j,n,t,x,y,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,x8,y8,flag=0;
    int f[2];
    getg(g);
   
    for (i=0;i<N;i++)
        for (j=0;j<N;j++)
        {
            n=0;
            x1=i;
            y1=j;
            if (g[x1][y1]=='o'||g[x1][y1]=='x')
                while (g[x1][y1]==g[++x1][++y1])
                {
                    n++;
                }
                if (g[x1][y1]==' '||g[x1][y1]==1)
                    if (n>t)
                    {
                        t=n;
                        x=i;
                        y=j;
                        flag=1;
                    }
                    n=0;
                    x2=i;y2=j;
                    if (g[x2][y2]=='o'||g[x2][y2]=='x')
                        while (g[x2][y2]==g[++x2][y2])
                        {
                            n++;
                        }
                        if (g[x2][y2]==' '||g[x2][y2]==1)
                            if (n>t)
                            {
                                t=n;
                                x=i;
                                y=j;
                                flag=2;
                            }
                            n=0;
                            x3=i;
                            y3=j;
                            if (g[x3][y3]=='o'||g[x3][y3]=='x')
                                while (g[x3][y3]==g[x3][++y3])
                                {
                                    n++;
                                }
                                if (g[x3][y3]==' '||g[x3][y3]==1)
                                    if (n>t)
                                    {
                                        t=n;
                                        x=i;y=j;
                                        flag=3;
                                    }
                                    n=0;
                                    x4=i;
                                    y4=j;
                                   
                                    if (g[x4][y4]=='x'||g[x4][y4]=='o')
                                        while (g[x4][y4]==g[++x4][--y4])
                                        {
                                            n++;
                                            //    if (y4<=1)
                                            break;
                                        }
                                        if (g[x4][y4]==' '||g[x4][y4]==1)
                                            if (n>t)
                                            {
                                               
                                                t=n;
                                                x=i;
                                                y=j;
                                                flag=4;
                                            }
                                            n=0;
                                            x5=i;
                                            y5=j;
                                            if (g[x5][y5]=='o'||g[x5][y5]=='x')
                                                while (g[x5][y5]==g[--x5][y5])
                                                {
                                                    n++;
                                                }
                                                if (g[x5][y5]==' '||g[x5][y5]==1)
                                                    if (n>t)
                                                    {
                                                        t=n;
                                                        x=i;
                                                        y=j;
                                                        flag=5;
                                                       
                                                    }
                                                    n=0;
                                                    x6=i;
                                                    y6=j;
                                                    if (g[x6][y6]=='o'||g[x6][y6]=='x')
                                                        while (g[x6][y6]==g[x6][--y6])
                                                        {
                                                            n++;
                                                        }
                                                        if (g[x6][y6]==' '||g[x6][y6]==1)
                                                            if (n>t)
                                                            {
                                                                t=n;
                                                                x=i;
                                                                y=j;
                                                                flag=6;
                                                            }
                                                            n=0;
                                                            x7=i;
                                                            y7=j;
                                                            if (g[x7][y7]=='o'||g[x7][y7]=='x')
                                                                while (g[x7][y7]==g[--x1][--y1])
                                                                {
                                                                    n++;
                                                                }
                                                                if (g[x7][y7]==' '||g[x7][y7]==1)
                                                                    if (n>t)
                                                                    {
                                                                        t=n;
                                                                        x=i;
                                                                        y=j;
                                                                        flag=7;
                                                                    }
                                                                    n=0;
                                                                    x8=i;
                                                                    y8=j;
                                                                    if (g[x8][y8]=='o'||g[x8][y8]=='x')
                                                                        while (g[x8][y8]==g[--x8][++y8])
                                                                        {
                                                                            n++;
                                                                        }
                                                                        if (g[x8][y8]==' '||g[x8][y8]==1)
                                                                            if (n>t)
                                                                            {
                                                                                t=n;
                                                                                x=i;
                                                                                y=j;
                                                                                flag=8;
                                                                            }
                                                                           
        }
        switch (flag)
        {   
           
        case 1:{while (g[++x][++y]!=' '&&g[x][y]!=1);if (g[x][y]==1){g[x][y]='o';while (g[++x][++y]!=' ');g[x][y]=1;}else g[x][y]='o';break;}
        case 2:{while (g[++x][y]!=' '&&g[x][y]!=1);if (g[x][y]==1){g[x][y]='o';while (g[++x][y]!=' ');g[x][y]=1;}else g[x][y]='o';break;}
        case 3:{while (g[x][++y]!=' '&&g[x][y]!=1);if (g[x][y]==1){g[x][y]='o';while (g[x][++y]!=' ');g[x][y]=1;}else g[x][y]='o';break;}
        case 4:{while (g[++x][--y]!=' '&&g[x][y]!=1);if (g[x][y]==1){g[x][y]='o';while (g[++x][--y]!=' ');g[x][y]=1;}else g[x][y]='o';break;}
        case 5:{while (g[--x][y]!=' '&&g[x][y]!=1);if (g[x][y]==1){g[x][y]='o';while (g[--x][y]!=' ');g[x][y]=1;}else g[x][y]='o';break;}
        case 6:{while (g[x][--y]!=' '&&g[x][y]!=1);if (g[x][y]==1){g[x][y]='o';while (g[x][--y]!=' ');g[x][y]=1;}else g[x][y]='o';break;}
        case 7:{while (g[--x][--y]!=' '&&g[x][y]!=1);if (g[x][y]==1){g[x][y]='o';while (g[--x][--y]!=' ');g[x][y]=1;}else g[x][y]='o';break;}
        case 8:{while (g[--x][++y]!=' '&&g[x][y]!=1);if (g[x][y]==1){g[x][y]='o';while (g[--x][++y]!=' ');g[x][y]=1;}else g[x][y]='o';break;}
        /*
        case 1:while (g[++x][++y]!=' ');g[x][y]='o';break;
        case 2:while (g[++x][y]!=' ');g[x][y]='o';break;
        case 3:while (g[x][++y]!=' ');g[x][y]='o';break;
        case 4:while (g[++x][--y]!=' ');g[x][y]='o';break;
        case 5:while (g[--x][y]!=' ');g[x][y]='o';break;
        case 6:while (g[x][--y]!=' ');g[x][y]='o';break;
        case 7:while (g[--x][--y]!=' ');g[x][y]='o';break;
        case 8:while (g[--x][++y]!=' ');g[x][y]='o';break;
            */    }   
            save (g);
            renew (g);
           
            return ;
           
}
//判断胜利方和胜利
judge(char g[N][N])
{
   
    int i,j,n,t,x,y,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,x8,y8,flag;
    int f[2];
    getg(g);
   
    for (i=0;i<N;i++)
    {    for (j=0;j<N;j++)
    {
        if (g[i][j]=='o')
            flag=1;
        if (g[i][j]=='x')
            flag=0;
        n=0;
        x1=i;
        y1=j;
        if (g[x1][y1]=='o'||g[x1][y1]=='x')
            while (g[x1][y1]==g[++x1][++y1])
            {
                n++;
            }
            if (g[x1][y1]==' '||g[x1][y1]==1)
                if (n>t)
                {
                   
                    t=n;
                    x=i;
                    y=j;
                   
                }
                n=0;
                x2=i;
                y2=j;
                if (g[x2][y2]=='o'||g[x2][y2]=='x')
                    while (g[x2][y2]==g[++x2][y2])
                    {
                        n++;
                    }
                    if (g[x2][y2]==' '||g[x2][y2]==1)
                        if (n>t)
                        {
                            t=n;
                            x=i;
                            y=j;
                           
                        }
                        n=0;
                        x3=i;
                        y3=j;
                        if (g[x3][y3]=='o'||g[x3][y3]=='x')
                            while (g[x3][y3]==g[x3][++y3])
                            {
                                n++;
                            }
                            if (g[x3][y3]==' '||g[x3][y3]==1)
                                if (n>t)
                                {
                                    t=n;
                                    x=i;y=j;
                                   
                                }
                                n=0;
                                x4=i;
                                y4=j;
                               
                                if (g[x4][y4]=='x'||g[x4][y4]=='o')
                                    while (g[x4][y4]==g[++x4][--y4])
                                    {
                                        n++;
                                        //    if (y4<=1)
                                        break;
                                    }
                                    if (g[x4][y4]==' '||g[x4][y4]==1)
                                        if (n>t)
                                        {
                                            t=n;
                                            x=i;
                                            y=j;
                                           
                                        }
                                        n=0;
                                        x5=i;
                                        y5=j;
                                        if (g[x5][y5]=='o'||g[x5][y5]=='x')
                                            while (g[x5][y5]==g[--x5][y5])
                                            {
                                                n++;
                                            }
                                            if (g[x5][y5]==' '||g[x5][y5]==1)
                                                if (n>t)
                                                {
                                                    t=n;
                                                    x=i;
                                                    y=j;
                                                   
                                                   
                                                }
                                                n=0;
                                                x6=i;
                                                y6=j;
                                                if (g[x6][y6]=='o'||g[x6][y6]=='x')
                                                    while (g[x6][y6]==g[x6][--y6])
                                                    {
                                                        n++;
                                                    }
                                                    if (g[x6][y6]==' '||g[x6][y6]==1)
                                                        if (n>t)
                                                        {
                                                            t=n;
                                                            x=i;
                                                            y=j;
                                                           
                                                        }
                                                        n=0;
                                                        x7=i;
                                                        y7=j;
                                                        if (g[x7][y7]=='o'||g[x7][y7]=='x')
                                                            while (g[x7][y7]==g[--x1][--y1])
                                                            {
                                                                n++;
                                                            }
                                                            if (g[x7][y7]==' '||g[x7][y7]==1)
                                                                if (n>t)
                                                                {
                                                                    t=n;
                                                                    x=i;
                                                                    y=j;
                                                                   
                                                                }
                                                                n=0;
                                                                x8=i;
                                                                y8=j;
                                                                if (g[x8][y8]=='o'||g[x8][y8]=='x')
                                                                    while (g[x8][y8]==g[--x8][++y8])
                                                                    {
                                                                        n++;
                                                                    }
                                                                    if (g[x8][y8]==' '||g[x8][y8]==1)
                                                                        if (n>t)
                                                                        {
                                                                            t=n;
                                                                            x=i;
                                                                            y=j;
                                                                           
                                                                        }
                                                                        if (t>=4) break;
                                                                            }
                                                                            if (t>=4) break;}
                                                                            f[0]=t;   
                                                                            f[1]=flag;
                                                                            return (f);
}
/*移动光标方向选择*/
chos(char g[N][N])
{
    int flag;
    char ch;
    flag=0;
    switch (ch=getch())
    {
    case 'w':up (g);break;
    case 'd':right (g);break;
    case 'a':left (g);break;
    case 's':down (g);break;
    case 13:go (g);flag=1;break;
    }
    renew (g);
    return (flag);
}
main()
{
   
    char g[N][N];
    int *f;
    creat (g);
    print (g);
    while (1)
    {
        if (chos(g)==1)
            pcthink (g);
        f=judge(g);
        if (f[0]>=4)
        {    if (f[1]==1)
        {
            printf ("you lose ");
            break;
        }
        if (f[1]==0)
            printf ("you win!");
        break;
        }
    }
    getch();
    return 1;
}



[ 本帖最后由 B_Y 于 2010-3-11 11:45 编辑 ]
收到的鲜花
  • Devil_W2010-03-12 19:14 送鲜花  -2朵   附言:水得很。
  • pgy2010-03-14 21:30 送鲜花  2朵   附言:动手该奖,楼上的说法也确实存在,+2扯平
搜索更多相关主题的帖子: 代码 五子棋 C语言 
2010-03-10 22:39
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
很厉害

我就是真命天子,顺我者生,逆我者死!
2010-03-10 23:33
天堂路bc
Rank: 1
等 级:新手上路
帖 子:3
专家分:2
注 册:2010-3-3
收藏
得分:0 
厉害,留下脚印…慢慢看
2010-03-11 00:16
B_Y
Rank: 1
等 级:新手上路
帖 子:27
专家分:4
注 册:2010-3-8
收藏
得分:0 
我是新手啊。。,仅供参考啊,写的很不规范,大家帮忙改下就行了哈
2010-03-11 10:31
wangxiao3571
Rank: 2
来 自:济宁
等 级:论坛游民
帖 子:55
专家分:47
注 册:2010-2-23
收藏
得分:0 
看不明白
2010-03-11 10:38
mylongphy
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2010-3-11
收藏
得分:0 
的确厉害啊,请问lz学了多就发的c语言,小弟正在学c。
2010-03-11 13:41
a6998537
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2010-3-11
收藏
得分:0 
很牛,
我是新手,
诚心找个老师学习C语言,和编程,QQ272548723
2010-03-11 14:24
judy1114
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2010-3-11
收藏
得分:0 
我要研究研究
2010-03-11 14:49
f26842684
Rank: 2
等 级:论坛游民
帖 子:19
专家分:47
注 册:2010-3-8
收藏
得分:0 
有点繁琐...  
2010-03-11 15:22
smltq
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:566
专家分:400
注 册:2008-1-21
收藏
得分:0 
有bug还发……

简单的生活
2010-03-11 15:26
快速回复:C语言五子棋代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024374 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved