主题:我从网上复制了一个五子棋程序,有点错误 帮我改改吧
竹林听雨
[专家分:0] 发布于 2010-04-08 12:53:00
我想在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个回复)
沙发
竹林听雨 [专家分:0] 发布于 2010-04-08 12:55:00
/*刷新棋盘数据*/
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;
}
板凳
rtygbwwwerr [专家分:910] 发布于 2010-04-08 13:57:00
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 楼
rtygbwwwerr [专家分:910] 发布于 2010-04-08 14:00:00
void renew (char g[N][N])
{
getg (g);
system("cls");
print (g);
}
4 楼
rtygbwwwerr [专家分:910] 发布于 2010-04-08 14:04:00
余下的就不贴了。
主要修改:
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;
我来回复