基于C++象棋五子棋.docx
《基于C++象棋五子棋.docx》由会员分享,可在线阅读,更多相关《基于C++象棋五子棋.docx(29页珍藏版)》请在冰豆网上搜索。
基于C++象棋五子棋
#include"DarkGDK.h"
intqizi[32][24],turn=1,winner=0,num1=0,num2=0,num=0,huiyuannum=1,ii=5,game=0;
floatfufen1=0,fufen2=0,fufen=0,f1,f2;
charhuiyuan1[100],huiyuan2[100],mima1[200],mima2[200],huiyuan[100],mima[200];
intok=0,qigo=0,linshix,linshiy,linshix0,linshiy0,qi[9][10],bmp[33],ownner=0,m=0;
DWORDblack=dbRGB(0,0,0);
DWORDwhite=dbRGB(255,255,255);
DWORDred=dbRGB(255,0,0);
DWORDgreen=dbRGB(0,255,0);
DWORDblue=dbRGB(0,0,255);
voidrestart()
{
dbLoadSound("guitar.wav",1);
dbLoadSound("MagicTree.wav",2);
dbSetImageColorKey(0,255,0);
dbLoadImage("1.bmp",1);
dbLoadImage("2.bmp",2);
dbLoadImage("3.bmp",3);
dbLoadImage("4.bmp",4);
dbLoadImage("5.bmp",5);
dbLoadImage("6.bmp",6);
dbLoadImage("7.bmp",7);
dbLoadImage("11.bmp",11);
dbLoadImage("12.bmp",12);
dbLoadImage("13.bmp",13);
dbLoadImage("14.bmp",14);
dbLoadImage("15.bmp",15);
dbLoadImage("16.bmp",16);
dbLoadImage("17.bmp",17);
dbLoadImage("棋盘.bmp",10);
dbLoadImage("denglu.bmp",9);
inti,j,m=1;
for(i=0;i<9;i++)
for(j=0;j<10;j++)
qi[i][j]=0;
qi[0][0]=1;
qi[1][0]=2;
qi[2][0]=3;
qi[3][0]=4;
qi[4][0]=5;
qi[5][0]=6;
qi[6][0]=7;
qi[7][0]=8;
qi[8][0]=9;
qi[1][2]=10;
qi[7][2]=11;
qi[0][3]=12;
qi[2][3]=13;
qi[4][3]=14;
qi[6][3]=15;
qi[8][3]=16;
qi[0][6]=17;
qi[2][6]=18;
qi[4][6]=19;
qi[6][6]=20;
qi[8][6]=21;
qi[1][7]=22;
qi[7][7]=23;
qi[0][9]=24;
qi[1][9]=25;
qi[2][9]=26;
qi[3][9]=27;
qi[4][9]=28;
qi[5][9]=29;
qi[6][9]=30;
qi[7][9]=31;
qi[8][9]=32;
bmp[0]=0;
bmp[1]=1;
bmp[2]=2;
bmp[3]=3;
bmp[4]=4;
bmp[5]=5;
bmp[6]=4;
bmp[7]=3;
bmp[8]=2;
bmp[9]=1;
bmp[10]=6;
bmp[11]=6;
bmp[12]=7;
bmp[13]=7;
bmp[14]=7;
bmp[15]=7;
bmp[16]=7;
bmp[17]=17;
bmp[18]=17;
bmp[19]=17;
bmp[20]=17;
bmp[21]=17;
bmp[22]=16;
bmp[23]=16;
bmp[24]=11;
bmp[25]=12;
bmp[26]=13;
bmp[27]=14;
bmp[28]=15;
bmp[29]=14;
bmp[30]=13;
bmp[31]=12;
bmp[32]=11;
}
intmax(intx,inty)
{
if(x>y)returnx;
elsereturny;
}
intmin(intx,inty)
{
if(x>y)returny;
elsereturnx;
}
intrule3()/////////////符合规则落子并判断是否吃对方棋子
{
if(ok==3)///////////////////////////黑棋到最后一步
{
intn,m,bx=0,by=0,rx=0,ry=0,bh=0,rh=0;
qi[linshiy][linshix]=qi[linshiy0][linshix0];
qi[linshiy0][linshix0]=0;
ok=0;
if(turn==1)turn=2;
elseturn=1;
for(n=3;n<6;n++)///////////判断帅还在不
for(m=0;m<3;m++)
if(qi[n][m]==5)
{bh=1;bx=m;by=n;break;}
for(n=3;n<6;n++)///////////判断帅还在不
for(m=7;m<10;m++)
if(qi[n][m]==28)
{rh=1;rx=m;ry=n;break;}
if(!
bh){ownner=2;return0;}
if(!
rh){ownner=1;return0;}
if(by==ry)
{
for(n=bx+1;nif(qi[by][n]){ownner=0;return0;}
ownner=turn;
}
}
return0;
}
intrule2()//////////////////////////选择路线是否符合规则
{
if(ok==2)
{inti,m;
if(qi[linshiy0][linshix0])
switch(bmp[qi[linshiy0][linshix0]])
{
case1:
/////////////////////////////////////黑车
if(linshix==linshix0)////////////////同一列上
if(min(linshiy,linshiy0)+1for(i=min(linshiy,linshiy0)+1;iif(qi[i][linshix]){ok=0;return0;}
else{ok=3;return0;}
elseif(min(linshiy,linshiy0)+1==max(linshiy,linshiy0))
{ok=3;return0;}
else{ok=0;return0;}
if(linshiy==linshiy0)////////////////同一列上
if(min(linshix,linshix0)+1for(i=min(linshix,linshix0)+1;iif(qi[linshiy][i]){ok=0;return0;}
else{ok=3;return0;}
elseif(min(linshix,linshix0)+1==max(linshix,linshix0))
{ok=3;return0;}
else{ok=0;return0;}
ok=0;return0;
case2:
/////////////////////马
if(linshix==(linshix0-2)&&linshiy==(linshiy0-1))if(!
qi[linshiy0][linshix0-1]){ok=3;return0;}
if(linshix==(linshix0-1)&&linshiy==(linshiy0-2))if(!
qi[linshiy0-1][linshix0-1]){ok=3;return0;}
if(linshix==(linshix0+1)&&linshiy==(linshiy0-2))if(!
qi[linshiy0-1][linshix0-1]){ok=3;return0;}
if(linshix==(linshix0+2)&&linshiy==(linshiy0-1))if(!
qi[linshiy0][linshix0+1]){ok=3;return0;}
if(linshix==(linshix0+2)&&linshiy==(linshiy0+1))if(!
qi[linshiy0][linshix0+1]){ok=3;return0;}
if(linshix==(linshix0+1)&&linshiy==(linshiy0+2))if(!
qi[linshiy0+1][linshix0]){ok=3;return0;}
if(linshix==(linshix0-1)&&linshiy==(linshiy0+2))if(!
qi[linshiy0+2][linshix0-1]){ok=3;return0;}
if(linshix==(linshix0-2)&&linshiy==(linshiy0+1))if(!
qi[linshiy0][linshix0-1]){ok=3;return0;}
ok=0;return0;
case3:
//////////////象
if(turn==1&&linshix<5||turn==2&&linshix>4)
{if(linshix==linshix0+2&&linshiy==linshiy0+2){ok=3;return0;}
if(linshix==linshix0+2&&linshiy==linshiy0-2){ok=3;return0;}
if(linshix==linshix0-2&&linshiy==linshiy0+2){ok=3;return0;}
if(linshix==linshix0-2&&linshiy==linshiy0-2){ok=3;return0;}
}
ok=0;return0;
case4:
///////////////士
if(turn==1&&linshiy>2&&linshiy<6&&linshix<3||turn==2&&linshiy>2&&linshiy<6&&linshix>6)
{
if(linshix==linshix0+1&&linshiy==linshiy0+1){ok=3;return0;}
if(linshix==linshix0+1&&linshiy==linshiy0-1){ok=3;return0;}
if(linshix==linshix0-1&&linshiy==linshiy0+1){ok=3;return0;}
if(linshix==linshix0-1&&linshiy==linshiy0-1){ok=3;return0;}
}
ok=0;return0;
case5:
///////////////将帅
if(turn==1&&linshiy>2&&linshiy<6&&linshix<3||turn==2&&linshiy>2&&linshiy<6&&linshix>6)
{
if(linshix==linshix0&&linshiy==linshiy0+1){ok=3;return0;}
if(linshix==linshix0&&linshiy==linshiy0-1){ok=3;return0;}
if(linshix==linshix0-1&&linshiy==linshiy0){ok=3;return0;}
if(linshix==linshix0+1&&linshiy==linshiy0){ok=3;return0;}
}
ok=0;return0;
case6:
///////////////炮
m=0;
if(linshix==linshix0)////////////////同一列上
{if(min(linshiy,linshiy0)+1{for(i=min(linshiy,linshiy0)+1;iif(qi[i][linshix]){m++;}
if(m==0&&qi[linshiy][linshix]==0){ok=3;return0;}
if(m==1&&qi[linshiy][linshix]>16&&turn==1){ok=3;return0;}
if(m==1&&qi[linshiy][linshix]<17&&turn==2){ok=3;return0;}
}
elseif(min(linshiy,linshiy0)+1==max(linshiy,linshiy0))////x|x0
{if(qi[linshiy][linshix]==0){ok=3;return0;}}
}
if(linshiy==linshiy0)////////////////同一行上
{if(min(linshix,linshix0)+1{for(i=min(linshix,linshix0)+1;iif(qi[linshiy][i]){m++;}
if(m==0&&qi[linshiy][linshix]==0){ok=3;return0;}
if(m==1&&qi[linshiy][linshix]>16&&turn==1){ok=3;return0;}
if(m==1&&qi[linshiy][linshix]<17&&turn==2){ok=3;return0;}
}
elseif(min(linshix,linshix0)+1==max(linshix,linshix0))////x|x0
{if(qi[linshiy][linshix]==0){ok=3;return0;}}
}
ok=0;return0;
case7:
/////////////兵
if(turn==1&&linshix0<5)
if(linshix==linshix0+1&&linshiy==linshiy0){ok=3;return0;}
if(turn==1&&linshix0>4)
if(linshix==linshix0+1&&linshiy==linshiy0||linshix==linshix0&&linshiy==linshiy0+1||linshix==linshix0&&linshiy==linshiy0-1){ok=3;return0;}
if(turn==2&&linshix0>4)
if(linshix==linshix0-1&&linshiy==linshiy0){ok=3;return0;}
if(turn==2&&linshix0<5)
if(linshix==linshix0-1&&linshiy==linshiy0||linshix==linshix0&&linshiy==linshiy0+1||linshix==linshix0&&linshiy==linshiy0-1){ok=3;return0;}
ok=0;return0;
case11:
///////////////////////////////////////////////////红车
if(linshix==linshix0)////////////////同一列上
if(min(linshiy,linshiy0)+1for(i=min(linshiy,linshiy0)+1;iif(qi[i][linshix]){ok=0;return0;}
else{ok=3;return0;}
elseif(min(linshiy,linshiy0)+1==max(linshiy,linshiy0))
{ok=3;return0;}
else{ok=0;return0;}
if(linshiy==linshiy0)////////////////同一列上
if(min(linshix,linshix0)+1for(i=min(linshix,linshix0)+1;iif(qi[linshiy][i]){ok=0;return0;}
else{ok=3;return0;}
elseif(min(linshix,linshix0)+1==max(linshix,linshix0))
{ok=3;return0;}
else{ok=0;return0;}
ok=0;return0;
/////////////////////////////
case12:
if(linshix==(linshix0-2)&&linshiy==(linshiy0-1))if(!
qi[linshiy0][linshix0-1]){ok=3;return0;}
if(linshix==(linshix0-1)&&linshiy==(linshiy0-2))if(!
qi[linshiy0-1][linshix0-1]){ok=3;return0;}
if(linshix==(linshix0+1)&&linshiy==(linshiy0-2))if(!
qi[linshiy0-1][linshix0-1]){ok=3;return0;}
if(linshix==(linshix0+2)&&linshiy==(linshiy0-1))if(!
qi[linshiy0][linshix0+1]){ok=3;return0;}
if(linshix==(linshix0+2)&&linshiy==(linshiy0+1))if(!
qi[linshiy0][linshix0+1]){ok=3;return0;}
if(linshix==(linshix0+1)&&linshiy==(linshiy0+2))if(!
qi[linshiy0+1][linshix0]){ok=3;return0;}
if(linshix==(linshix0-1)&&linshiy==(linshiy0+2))if(!
qi[linshiy0+2][linshix0-1]){ok=3;return0;}
if(linshix==(linshix0-2)&&linshiy==(linshiy0+1))if(!
qi[linshiy0][linshix0-1]){ok=3;return0;}
ok=0;return0;
////////////////////
case13:
if(turn==1&&linshix<5||turn==2&&linshix>4)
{if(linshix==linshix0+2&&linshiy==linshiy0+2){ok=3;return0;}
if(linshix==linshix0+2&&linshiy==linshiy0-2