回 帖 发 新 帖 刷新版面

主题:我从网上复制了一个五子棋程序,有点错误 帮我改改吧

我想在c-free如鹏版上运行


/*五子棋游戏*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define N 20
/*建立棋盘*/
int 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;
}
/*输出棋盘*/
int 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;
}
/*获取棋盘数据*/
void 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);
}
/*保存棋盘数据*/
int 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);
   
}
/*左移光标*/
int 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;
}
/*右移光标*/
int 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;
}
/*上移光标*/
int 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;
}
/*下移光标*/
int 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;
}
/*确认下子*/
int 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;
}

回复列表 (共4个回复)

沙发

/*刷新棋盘数据*/
void renew (char g[N][N])/*?????????????????????????????????????????????????????????????*/
{
    getg (g);
    system("cls");
    print (g);
}
/*电脑下棋*/
int 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 1 ;
           
}
//判断胜利方和胜利
int 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);
}
/*移动光标方向选择*/
int 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);
}
int 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;
}

板凳

lz这程序也太大了,而且缩进格式很乱,看得眼都花了...稍微改了改勉强可以通过编译。不过还存在不少使用未初始化变量的问题,自己好好看看吧...
#define N 20
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int 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;
}


int 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;
}


void 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);
}


int 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);
}


int 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;
}


int 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;
}


int 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;
}


int 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;
}


int 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;
}

3 楼

void renew (char g[N][N])
{
    getg (g);
    system("cls");
    print (g);
}

4 楼

余下的就不贴了。
主要修改:
int judge(char g[N][N]) => int* 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; => 给各个变量赋上初值。如:flag = 0;

我来回复

您尚未登录,请登录后再回复。点此登录或注册