求C++编写的简易五子棋源程序

/************************************************************************************

五子棋双人对战,界面简易,主要函数是判断胜负函数

************************************************************************************/

#include

//#includedata.h

#defineN10//棋盘规格

usingnamespacestd;

staticintchessboard[N][N];//棋盘

structchess{//棋子

intx,y;

intcolor;//0为无子,1为白,-1为黑

};

voidinit_chessboard()//初始化棋盘函数;

{

inti,j;

for(i=0;i<N;i++)

for(j=0;j<N;j++)

{

chessboard[i][j]=0;

}

}

boolis_win(structchessche)//判断胜负函数,ture未分出胜负,可以继续下棋;false分出胜负

{

intx,y,num;

intxmin,xmax,ymin,ymax,min,max;

//begin判断左右方向

num=0;

xmin=(che.y-4>0)?che.y-4:0;//左边界

xmax=(che.y+4<N-1)?che.y+4:N-1;//右边界

//cout<<xmin<<左右<<xmax<<endl;

for(y=xmin;y<=xmax;y++)

{

if(chessboard[che.x][y]==che.color&&num<5)

{

num++;

//cout<<num<<endl;

if(num==5)

returnfalse;

}

else

num=0;

}

//end判断左右方向

//begin判断上下方向

num=0;

ymin=(che.x-4>0)?che.x-4:0;//上边界

ymax=(che.x+4<N-1)?che.x+4:N-1;//下边界

//cout<<ymin<<上下<<ymax<<endl;

for(x=ymin;x<=ymax;x++)

{

if(chessboard[x][che.y]==che.color&&num<5)

{

num++;

//cout<<num<<endl;

if(num==5)

returnfalse;

}

else

num=0;

}

//end判断上下方向

//begin判断135度方向

num=0;

xmin=(che.y<4)?che.y:4;//左边界到点的距离

xmax=(N-1-che.y<4)?N-1-che.y:4;//右边界到点的距离

ymin=(che.x<4)?che.x:4;//上边界到点的距离

ymax=(N-1-che.x<4)?N-1-che.x:4;//下边界到点的距离

min=xmin<ymin?xmin:ymin;//左上方边界到点的距离

max=xmax<ymax?xmax:ymax;//右下放边界到点的距离

//cout<<左上边界距离<<min<<endl;

//cout<<右下边界距离<<max<<endl;

for(x=che.x-min,y=che.y-min;x<=che.x+max;x++,y++)//左上到右下遍历

{

if(chessboard[x][y]==che.color&&num<5)

{

num++;

// cout<<num<<endl;

if(num==5)

returnfalse;

}

else

num=0;

}

//end判断135度方向

//begin判断45度方向

num=0;

min=ymin<xmax?ymin:xmax;//右上距离

max=xmin<ymax?xmin:ymax;//左下距离

//cout<<右上距离<<min<<endl;

//cout<<左下距离<<max<<endl;

for(x=che.x-min,y=che.y+min;x<=che.x+max;x++,y--)//由右上到左下判断

{

if(chessboard[x][y]==che.color&&num<5)

{

num++;

// cout<<num<<endl;

if(num==5)

returnfalse;

}

else

num=0;

}

//end45度方向

returntrue;

}

boolis_right_chess(structchessche)

{

if(che.x>=0&&che.x=0&&che.y<N&&chessboard[che.x][che.y]==0){

chessboard[che.x][che.y]=che.color;

returntrue;

}

else

{

cout<<落子不合法,重新下子!<<endl;

returnfalse;

}

}

voidshow_chessboard()

{

inti,j;

cout<<0123456789<<endl;

for(i=0;i<N;i++)

{

cout<<i<<;

for(j=0;j<N;j++)

{

//cout<<chessboard[i][j]<<;

if(chessboard[i][j]==-1)

cout<<*<<;

elseif(chessboard[i][j]==1)

cout<<o<<;

else

cout<<-<<;

}

cout<<endl;

}

}

structchessput_chess(intcolo)

{

if(colo==1)

cout<<白方下子<<endl;

elseif(colo==-1)

cout<<黑方下子<<endl;

structchessche;

cin>>che.x;

cin>>che.y;

che.color=colo;

returnche;

}

intrenrenModle()

{

init_chessboard();

structchesspre;

//intcolo;

while(1)

{

show_chessboard();

do{//黑方下棋

pre=put_chess(-1);

}while(!is_right_chess(pre));//下子不合法,重下

show_chessboard();

if(!is_win(pre))//黑方胜,胜时返回0,未分胜负返回1;

{

cout<<黑方胜<<endl;

return-1;

}

do{//白方下棋

pre=put_chess(1);

}while(!is_right_chess(pre));//下子不合法,重下

show_chessboard();

if(!is_win(pre))//白方胜

{

cout<<白方胜<<endl;

return1;

}

}

}

intmain()

{

renrenModle();

return0;

}

免责声明:本站发布的游戏攻略(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!