#include
#include
#include
#include
#defineN19
inti,j,k,size=N;
intisBlack=1;
charstate[N][N];
charx,y,temp[10];
charc;
voidprintState();
voidstartGame();
voidaboutThanks();
intmain(void)
{
system(colorf1);-----------------调用的是系统命令,设置背景颜色
while(1)
{
printf(\n\t-----五子棋-----\n\n);
printf(\t\t1.StartGame!。\n);
printf(\t\t2.Aboutgame.\n);
printf(\t\t3.EXIT。\n);
printf(\n\t请选择!:);
L:k=scanf(%d,&i);-----------------“L:”是标签(Label)的意思,只起个标识作用
if(k==0)
{
printf(\n\t输入错误!.\n从新输入:);
gotoL;-----------------跳转到标签L处,就在上面,运行到这时,就跳转到上面那个L的地方
}
switch(i)
{
case1:
startGame();break;
case2:
aboutThanks();break;
case3:
printf(\t\t\t\t바이바이!!!\n\n\n\t);
return0;
default:
printf(\t无此选项\n);break;
}
}
}
voidprintState()
{
charp='A';
system(cls);
printf(\t棋盘如下.:\n\n);
printf(\t);
for(i=0;i<size;i++)
{
printf(%c,p+i);
}
printf(\n\t);
for(i=0;i<size;i++)
{
printf(%c,p+i);
for(j=0;j<size;j++)
{
printf(%c,state[i][j]);
}
printf(%c\n\t,p+i);
}
printf();
for(i=0;i<size;i++)
{
printf(%c,p+i);
}
printf(\n);
}
voidstartGame()
{
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
{
state[i][j]='*';
}
}
printState();
while(1)
{
printf(\n\t请%s放子.:,isBlack?black:white);
scanf(%s,temp);
if(!strcmp(temp,BACK))
{
i=x-'A';
j=y-'A';
state[i][j]='*';
printState();
isBlack=!isBlack;-----------------“!”是“非”的意思,非1就是0,非0就是1,也就是说,如果是0,就赋值为1,反过来是一样的
continue;
}
if(!strcmp(temp,LOSE))-----------------strcmp函数是比较字符的意思,比较前面的和后面的是否相同,如果相同刚返回0,不同的不是0,有-1和1两种,想知道具体意义去百度一下这个函数就有了。这个就是判断是否胜利的,temp标识着是否胜利。
{
printf(\n\t%s输.,%s胜!\n\n,isBlack?black:white,isBlack?white:black);
return;
}
x=temp[0];
y=temp[1];
i=x-'A';
j=y-'A';
if(state[i][j]!='*')
{
printf(\t已经有子了请下到别的地方...);
continue;
}
c=isBlack?'1':'2';-----------------“?:”是唯一的一个三目运算符,isBlack如果为真,c='1',如果不为真c='2',相当于if(isBlack)c='1';elsec='2';
state[i][j]=c;
printState();
isBlack=!isBlack;-----------------上面有。。。
}
}
voidaboutThanks()
{
system(cls);
printf(\n\n\t1.MTV。);
printf(\n\t2.CCTV);
printf(\n\t3.everyone。\n\n);
}
不知道有没有胜利的判定方法,给你个思路。
每次下子之后判断这个子周围的5个,是否有连在一起的