|
1鱼币
QQ截图20121026215138.rar
(3.19 KB, 下载次数: 2)
# include<stdio.h>
# include<string.h>
# include<stdlib.h>
int a,b,c,d,x; /* a b为玩家下子坐标 ,c d为电脑下子坐标 x为剩余空位置*/
int qipan[15][15];
void draw(); /* 画棋盘 */
void start(); /* 程序的主要控制函数 */
void draw(); /* 画棋盘 */
int win(int p,int q); /* 判断胜利 p q为判断点坐标 */
void yiwei(int n,int *i,int *j); /* 在n方向上对坐标 i j 移位 n为1-8方向 从右顺时针开始数 */
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
char k;
do{
x=225;/*15*15的棋盘共有225种可能*/
start();
printf("还要再来一把吗?输入y或n:");
getchar();
scanf("%c",&k);
while(k!='y'&&k!='n')
{
printf("输入错误,请重新输入\n");
scanf("%c",&k);
}
system("cls");
}while(k=='y');
printf("谢谢使用!\n");
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void star()
{
int i,j,a1,b1,c1,d1,choice;/* a1 b1储存玩家上手坐标 c1 d1储存电脑上手坐标 */
printf("\t╔═══════════════════════════════╗\n");
printf("\t║ ║\n");
printf("\t║ 欢迎使用五子棋对战程序 祝您玩的愉快挑战无极限 ║\n");
printf("\t║ ║\n");
printf("\t║ ._______________________. ║\n");
printf("\t║ | _____________________ | ║\n");
printf("\t║ | I I | ║\n");
printf("\t║ | I 五 子 棋 I | ║\n");
printf("\t║ | I I | ║\n");
printf("\t║ | I made by 邓世超 I | ║\n");
printf("\t║ | I___________________I | ║\n");
printf("\t║ !_______________________! ║\n");
printf("\t║ ║\n");
printf("\t║ ║\n");
printf("\t║ ║\n");
printf("\t║ ║\n");
printf("\t║ 1.双人游戏 2.退出游戏 ║\n");
printf("\t║ ║\n");
printf("\t╚═══════════════════════════════╝\n");
printf("\t\t\t请输入1或2:");
scanf("%d",&choice);
while(choice!=1&&choice!=2)
{
printf("输入错误,请重新输入:");
scanf("%d",&choice);
}
if(choice==2)
{
//////////////////////////////////////////////////////////////////////////////////////////////
}
if(choice==1)
{
system("cls");
printf("欢迎使用五子棋双人对战!下子请输入坐标(如13 6)。悔棋请输入15 15。 \n\n\n");
for(j=0;j<15;j++)
for(i=0;i<15;i++)
qipan[j][i]=0; /* 置棋盘全为空 */
draw();/*调用画图*/
while(x!=0)
{
printf("1P请输入:");
scanf("%d%d",&a,&b);
if(a==15&&b==15)/*是悔棋,重置棋盘,重新获取棋子坐标*/
{ x+=2;
qipan[d][c]=0;
qipan[b1][a1]=0;
system("cls");
draw(); /*调用画图函数*/
printf("1P请输入:");
scanf("%d%d",&a,&b);
}
while((a<0||a>14)||(b<0||b>14)||qipan[b][a]!=0) /*判断棋子坐标是否超出范围,或者是否有棋子*/
{
printf("坐标错误或该位置已有子!请重新输入:");
scanf("%d%d",&a,&b);
}
a1=a;
b1=b;
x--;
qipan[b][a]=1;
system("cls");
draw();/*调用画图函数*/
printf("1P下在%d %d。\n",a,b);
if(win(a,b))
{
printf("你真棒!!!\n");
return;
} /* 玩家1赢 */
printf("2P请输入:");
scanf("%d%d",&c,&d);
if(c==15&&d==15)
{
x+=2;
qipan[b][a]=0;
qipan[d1][c1]=0;
system("cls");
draw();
printf("2P请输入:");
scanf("%d%d",&c,&d);
}
while((c<0||c>14)||(d<0||d>14)||qipan[d][c]!=0)
{
printf("坐标错误或该位置已有子!请重新输入:");
scanf("%d%d",&c,&d);
}
c1=c;
d1=d;
x--;
qipan[d][c]=2;
system("cls");
draw();/*调用画图函数*/
printf("2P下在%d %d。\n",c,d);
if(win(c,d))
{
printf("你真棒!!!\n");
return;
} /* 玩家2赢 */
}
printf("和局\n");/*和局是下完所有的225个地方*/
}/*上接if==2语句*/
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int win(int p,int q) /* 判断胜利 p q为判断点坐标,胜利返回1,否则返回0 */
{
int k,n=1,m,P,Q; /* k判断p q坐标是玩家下的棋子还是电脑下的棋子【
k储存判断点p q的状态2或1(空位置设为0 ,玩家下的位置设为1 ,电脑下的位置设为2)。】
P Q储存判断点坐标。n为判断方向。m为个数。 */
P=p;
Q=q;
k=qipan[q][p];
while(n!=5)
{
m=0;
while(k==qipan[q][p])/*这个语句什么意思*/
{
m++;
if(m==5)
return 1;
yiwei(n,&p,&q);
if(p<0||p>14||q<0||q>14)
break;
}
n+=4;
m-=1;
p=P;
q=Q; /* 转向判断 什么意思? */
while(k==qipan[q][p])/*这个语句什么意思*/
{
m++;
if(m==5)
return 1;
yiwei(n,&p,&q);
if(p<0||p>14||q<0||q>14)
break;
}
n=n-3;
p=P;
q=Q; /* 不成功则判断下一组方向 什么意思?*/
}
return 0;/*什么意思*/
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
void draw() /* 画棋盘 */
{
int i,j;
char p[15][15][4];
for(j=0;j<15;j++)
for(i=0;i<15;i++)
{
if(qipan[j][i]==0)
strcpy(p[j][i]," \0");
if(qipan[j][i]==1)
strcpy(p[j][i],"●\0");
if(qipan[j][i]==2)
strcpy(p[j][i],"◎\0");
}
printf(" 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 \n");
printf(" ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐\n");
for(i=0,j=0;i<14;i++,j++)/*控制打印13个横向*/
{
printf(" %2d│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%d\n",j,p[i][0],p[i][1],p[i][2],p[i][3],p[i][4],p[i][5],p[i][6],p[i][7],p[i][8],p[i][9],p[i][10],p[i][11],p[i][12],p[i][13],p[i][14],j);
printf(" ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
}
printf(" 14│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│%s│14\n",p[14][0],p[14][1],p[14][2],p[14][3],p[14][4],p[14][5],p[14][6],p[14][7],p[14][8],p[14][9],p[14][10],p[14][11],p[14][12],p[14][13],p[14][14]);
printf(" └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘\n");
printf(" 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 \n");
}
/////////////////////////////////////////////////////////////////////////////////////////////
void yiwei(int n,int *i,int *j) /* 在n方向上对坐标 i j 移位 n为1-8方向 从右顺时针开始数 */
{
switch(n)
{
case 1: *i+=1;
break;
case 2: *i+=1; *j+=1;
break;
case 3: *j+=1;
break;
case 4: *i-=1; *j+=1;
break;
case 5: *i-=1;
break;
case 6: *i-=1; *j-=1;
break;
case 7: *j-=1;
break;
case 8: *i+=1; *j-=1;
break;
}
}
|
|