📄 mychess.cpp
字号:
break;
case 1://vertical
if(State[chaintab[i].FirstP.x-1][chaintab[i].FirstP.y+chaintab[i].ChainLenth-1]==1){//black
if(chaintab[i].BorW==1)chaintab[i].EnaAdd=0;
}
else{//white
if(State[chaintab[i].FirstP.x-1][chaintab[i].FirstP.y+chaintab[i].ChainLenth-1]==2){
if(chaintab[i].BorW==0)chaintab[i].EnaAdd=0;
}
}
break;
case 2://lu-rd
if(State[chaintab[i].FirstP.x+chaintab[i].ChainLenth-1][chaintab[i].FirstP.y+chaintab[i].ChainLenth-1]==1){//black
if(chaintab[i].BorW==1)chaintab[i].EnaAdd=0;
}
else{//white
if(State[chaintab[i].FirstP.x+chaintab[i].ChainLenth-1][chaintab[i].FirstP.y+chaintab[i].ChainLenth-1]==2){
if(chaintab[i].BorW==0)chaintab[i].EnaAdd=0;
}
}
break;
case 3://rd-lu
if(State[chaintab[i].FirstP.x+chaintab[i].ChainLenth-1][chaintab[i].FirstP.y-chaintab[i].ChainLenth-1]==1){
if(chaintab[i].BorW==1)chaintab[i].EnaAdd=0;
}
else{
if(State[chaintab[i].FirstP.x+chaintab[i].ChainLenth-1][chaintab[i].FirstP.y-chaintab[i].ChainLenth-1]==2){
if(chaintab[i].BorW==0)chaintab[i].EnaAdd=0;
}
}
break;
}
break;
case 3://both sides addable
switch(chaintab[i].VHState){
case 0://horizen
//lu
if(State[chaintab[i].FirstP.x-2][chaintab[i].FirstP.y-1]==1){//black
if(chaintab[i].BorW==1)chaintab[i].EnaAdd=2;
}
else{//white
if(State[chaintab[i].FirstP.x-2][chaintab[i].FirstP.y-1]==2){
if(chaintab[i].BorW==0)chaintab[i].EnaAdd=2;
}
}
//rd
if(State[chaintab[i].FirstP.x+chaintab[i].ChainLenth-1][chaintab[i].FirstP.y-1]==1){//black
if(chaintab[i].BorW==1)chaintab[i].EnaAdd=1;
}
else{//white
if(State[chaintab[i].FirstP.x+chaintab[i].ChainLenth-1][chaintab[i].FirstP.y-1]==2){
if(chaintab[i].BorW==0)chaintab[i].EnaAdd=1;
}
}
break;
case 1://vertical
//lu
if(State[chaintab[i].FirstP.x-1][chaintab[i].FirstP.y-2]==1){//black
if(chaintab[i].BorW==1)chaintab[i].EnaAdd=2;
}
else{//white
if(State[chaintab[i].FirstP.x-1][chaintab[i].FirstP.y-2]==2){
if(chaintab[i].BorW==0)chaintab[i].EnaAdd=2;
}
}
//rd
if(State[chaintab[i].FirstP.x-1][chaintab[i].FirstP.y+chaintab[i].ChainLenth-1]==1){//black
if(chaintab[i].BorW==1)chaintab[i].EnaAdd=1;
}
else{//white
if(State[chaintab[i].FirstP.x-1][chaintab[i].FirstP.y+chaintab[i].ChainLenth-1]==2){
if(chaintab[i].BorW==0)chaintab[i].EnaAdd=1;
}
}
break;
case 2://lu-rd
//lu
if(State[chaintab[i].FirstP.x-2][chaintab[i].FirstP.y-2]==1){//black
if(chaintab[i].BorW==1)chaintab[i].EnaAdd=2;
}
else{//white
if(State[chaintab[i].FirstP.x-2][chaintab[i].FirstP.y-2]==2){
if(chaintab[i].BorW==0)chaintab[i].EnaAdd=2;
}
}
//rd
if(State[chaintab[i].FirstP.x+chaintab[i].ChainLenth-1][chaintab[i].FirstP.y+chaintab[i].ChainLenth-1]==1){//black
if(chaintab[i].BorW==1)chaintab[i].EnaAdd=1;
}
else{//white
if(State[chaintab[i].FirstP.x+chaintab[i].ChainLenth-1][chaintab[i].FirstP.y+chaintab[i].ChainLenth-1]==2){
if(chaintab[i].BorW==0)chaintab[i].EnaAdd=1;
}
}
break;
case 3://ld-ru
//ld
if(State[chaintab[i].FirstP.x-2][chaintab[i].FirstP.y]==1){//black
if(chaintab[i].BorW==1)chaintab[i].EnaAdd=2;
}
else{//white
if(State[chaintab[i].FirstP.x-2][chaintab[i].FirstP.y]==2){
if(chaintab[i].BorW==0)chaintab[i].EnaAdd=2;
}
}
//ru
if(State[chaintab[i].FirstP.x+chaintab[i].ChainLenth-1][chaintab[i].FirstP.y-chaintab[i].ChainLenth-1]==1){
if(chaintab[i].BorW==1)chaintab[i].EnaAdd=1;
}
else{
if(State[chaintab[i].FirstP.x+chaintab[i].ChainLenth-1][chaintab[i].FirstP.y-chaintab[i].ChainLenth-1]==2){
if(chaintab[i].BorW==0)chaintab[i].EnaAdd=1;
}
}
break;
}
}
}
}
void MyChess::DelChain(int ID)
{
int i;
if(ChainCount!=0){
for(i=0;i<ChainCount-1;i++){
if(chaintab[i].ChainID==ID)exchange(i,ChainCount-1);
}
ChainCount--;
}
}
int MyChess::WhoWin()
{
int i,j;
for(i=0;i<ChainCount;i++){
j=0;
if(chaintab[i].ChainLenth==5){
chaintab[i].BorW;
return(chaintab[i].BorW);
break;
}
}
return(2);
}
//DEL void MyChess::fileout()
//DEL {
//DEL FILE *fp;
//DEL fp=fopen("out.txt","w");
//DEL fprintf(fp,"ID,BW,Len,P.x,P.y,Add,VH\n");
//DEL for(int i=0;i<ChainCount;i++){
//DEL if(chaintab[i].ChainLenth>0){
//DEL fprintf(fp,"%i,%i,%i,%i-%i,%i,%i\n",i,
//DEL chaintab[i].BorW,chaintab[i].ChainLenth,
//DEL chaintab[i].FirstP.x,chaintab[i].FirstP.y,
//DEL chaintab[i].EnaAdd,chaintab[i].VHState);
//DEL
//DEL }
//DEL }
//DEL fprintf(fp,"%i\n",ChainCount);
//DEL fclose(fp);
//DEL }
void MyChess::exchange(int i, int j)
{
//i and j are the index;
//i exchange from j;
int t;CPoint p;
t=chaintab[i].BorW;chaintab[i].BorW=chaintab[j].BorW;
chaintab[j].BorW=t;
t=chaintab[i].ChainID;chaintab[i].ChainID=chaintab[j].ChainID;
chaintab[j].ChainID=t;
t=chaintab[i].ChainLenth;chaintab[i].ChainLenth=chaintab[j].ChainLenth;
chaintab[j].ChainLenth=t;
t=chaintab[i].EnaAdd;chaintab[i].EnaAdd=chaintab[j].EnaAdd;
chaintab[j].EnaAdd=t;
p=chaintab[i].FirstP;chaintab[i].FirstP=chaintab[j].FirstP;
chaintab[j].FirstP=p;
t=chaintab[i].VHState;chaintab[i].VHState=chaintab[j].VHState;
chaintab[j].VHState=t;
}
void MyChess::checkme()
{
int t,t1;
int pos;
for(int i=ChainCount-1;i>=0;i--){
pos=i;t=chaintab[i].ChainLenth*10+chaintab[i].EnaAdd;
if(chaintab[i].EnaAdd==0&&chaintab[i].ChainLenth<5)t=0;
for(int j=i;j>=0;j--){
t1=chaintab[j].ChainLenth*10+chaintab[j].EnaAdd;
if(chaintab[j].EnaAdd==0&&chaintab[j].ChainLenth<5)t1=0;
if(t1<t){pos=j;t=t1;}
}
if(pos!=i)exchange(pos,i);
}
i=ChainCount-1;
while(chaintab[i].EnaAdd==0&&i>=0){
ChainCount--;
i--;
}
}
void MyChess::chiefchess()
{
int i,j,temp;
BOOL t;
CPoint tempp;
for(i=1;i<ChainCount;i++){
for(j=0;j<i;j++){
t=FALSE;
if(chaintab[i].BorW!=chaintab[j].BorW||chaintab[i].VHState!=chaintab[j].VHState)continue;
switch(chaintab[i].VHState){
case 0:
if(chaintab[i].FirstP.y==chaintab[j].FirstP.y)t=TRUE;
break;
case 1:
if(chaintab[i].FirstP.x==chaintab[j].FirstP.x)t=TRUE;
break;
case 2:
if(chaintab[i].FirstP.x-chaintab[j].FirstP.x
==chaintab[i].FirstP.y-chaintab[j].FirstP.y)
t=TRUE;
break;
case 3:
if(chaintab[i].FirstP.x-chaintab[j].FirstP.x
==chaintab[j].FirstP.y-chaintab[i].FirstP.y)
t=TRUE;
}
if(t){
t=FALSE;
switch(chaintab[i].EnaAdd){
case 1:
if(chaintab[j].EnaAdd==2||chaintab[j].EnaAdd==3){
if(chaintab[i].FirstP.x!=chaintab[j].FirstP.x){
temp=chaintab[i].FirstP.x-chaintab[j].FirstP.x;
if(temp==chaintab[j].ChainLenth+1)
t=TRUE;
}
else{
temp=chaintab[i].FirstP.y-chaintab[j].FirstP.y;
if(temp==chaintab[j].ChainLenth+1)
t=TRUE;
}
}
break;
case 2:
if(chaintab[j].EnaAdd==1||chaintab[j].EnaAdd==3){
if(chaintab[i].FirstP.x!=chaintab[j].FirstP.x){
temp=chaintab[j].FirstP.x-chaintab[i].FirstP.x;
if(temp==chaintab[i].ChainLenth+1)
t=TRUE;
}
else{
temp=chaintab[j].FirstP.y-chaintab[i].FirstP.y;
if(temp==chaintab[i].ChainLenth+1)
t=TRUE;
}
}
break;
case 3:
if(chaintab[j].EnaAdd==2||chaintab[j].EnaAdd==3){
if(chaintab[i].FirstP.x!=chaintab[j].FirstP.x){
temp=chaintab[i].FirstP.x-chaintab[j].FirstP.x;
if(temp==chaintab[j].ChainLenth+1)
t=TRUE;
}
else{
temp=chaintab[i].FirstP.y-chaintab[j].FirstP.y;
if(temp==chaintab[j].ChainLenth+1)
t=TRUE;
}
}
if(t)break;
if(chaintab[j].EnaAdd==1||chaintab[j].EnaAdd==3){
if(chaintab[i].FirstP.x!=chaintab[j].FirstP.x){
temp=chaintab[j].FirstP.x-chaintab[i].FirstP.x;
if(temp==chaintab[i].ChainLenth+1)
t=TRUE;
}
else{
temp=chaintab[j].FirstP.y-chaintab[i].FirstP.y;
if(temp==chaintab[i].ChainLenth+1)
t=TRUE;
}
}
}
}
if(t){
if(((chaintab[i].ChainLenth==2||chaintab[j].ChainLenth==2)&&
chaintab[i].ChainLenth+chaintab[j].ChainLenth<5)||
chaintab[i].ChainLenth+chaintab[j].ChainLenth==4){
chaintab[i].ChainLenth+=chaintab[j].ChainLenth;
if((chaintab[i].EnaAdd==2&&chaintab[j].EnaAdd==1)||
(chaintab[i].EnaAdd==1&&chaintab[j].EnaAdd==2)){
if(chaintab[i].ChainLenth+chaintab[j].ChainLenth==3)
DelChain(chaintab[i].ChainID);
else chaintab[i].EnaAdd=11;
}
if(chaintab[i].EnaAdd==3)
chaintab[i].EnaAdd=chaintab[j].EnaAdd+10;
DelChain(chaintab[j].ChainID);
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -