logo资料库

六子棋棋型研究c++源代码,很好的总结哦.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
棋形所有情况 1 代表字,0 代表空位,abcdefghi 代表位置,num1 代表 1 的个数, X?代表棋盘中棋形个数 X1 六连:111111 横向:for(num1=0,i=I,j=J;i<=I+6;i++) { if(c[i][j]=1) num1++;} if(num1=6) x1++; 纵向:for(num1=0,i=I,j=J;j<=J+6;j++) { if(c[i][j]=1) num1++;} if(num1=6) x1++; 斜向 1:for(num1=0,i=I,j=J;i<=I+6,j<=J+6;i++,j++) { if(c[i][j]=1) num1++;} if(num1=6) x1++; 斜向 2:for(num1=0,i=I,j=J;i<=I+6,j>=J-6;i++,j--) { if(c[i][j]=1) num1++;} if(num1=6) x1++; x2 七连:1111111 横向:for(num1=0,i=I,j=J;i<=I+7;i++) { if(c[i][j]=1) num1++;} if(num1=7) x2++; 纵向:for(num1=0,i=I,j=J;j<=J+7;j++) { if(c[i][j]=1) num1++;} if(num1=7)
x2++; 斜向 1:for(num1=0,i=I,j=J;i<=I+7,j<=J+7;i++,j++) { if(c[i][j]=1) num1++;} if(num1=7) x2++; 斜向 2:for(num1=0,i=I,j=J;i<=I+7,j>=J-7;i++,j--) { if(c[i][j]=1); num1++;} if(num1=7) x2++; x3 活五:(在同一直线上的 5 颗同色棋子,符合“对方必须用两 手棋才能挡住”的条件。挡住是指不让另一方形成六连或 长连。) 共 3 种情况: 0111110 横向:if(c[i][j]=0&& c[i][j+1]=1&& c[i][j+2]=1&& c[i][j+3]=1&& c[i][j+4]=1&& c[i][j+5]=1&& c[i][j+6]=0) 纵向:if(c[i][j]=0&& c[i+1][j]=1&& c[i+2][j]=1&& c[i+3][j]=1&& c[i+4][j]=1&& c[i+5][j]=1&& c[i+6][j]=0) 斜 向 1 : if(c[i][j]=0&& c[i+1][j+1]=1&& c[i+2][j+2]=1&& c[i+3][j+3]=1&& c[i+4][j+4]=1&& c[i+5][j+5]=1&& c[i+6][j+6]=0) 斜 向 2 : if(c[i][j]=0&& c[i+1][j-1]=1&& c[i+2][j-2]=1&& c[i+3][j-3]=1&& c[i+4][j-4]=1&& c[i+5][j-5]=1&& c[i+6][j-6]=0) x3++; x3++; x3++; x3++; x3++; x3++; 00111101 横向:if(c[i][j]=0&& c[i][j+1]=0&& c[i][j+2]=1&& c[i][j+3]=1&& c[i][j+4]=1&& c[i][j+5]=1&& c[i][j+6]=0&& c[i][j+7]=1) 纵向:if(c[i][j]=0&& c[i+1][j]=0&& c[i+2][j]=1&& c[i+3][j]=1&& c[i+4][j]=1&& c[i+5][j]=1&& c[i+6][j]=0&& c[i+7][j]=1)
斜 向 1 : if(c[i][j]=0&& c[i+1][j+1]=0&& c[i+2][j+2]=1&& c[i+3][j+3]=1&& c[i+4][j+4]=1&& c[i+5][j+5]=1&& c[i+6][j+6]=0&&c[i+7][j+7]=1) 斜 向 2 : if(c[i][j]=0&& c[i+1][j-1]=0&& c[i+2][j-2]=1&& c[i+3][j-3]=1&& c[i+4][j-4]=1&& c[i+5][j-5]=1&& c[i+6][j-6]=0&&c[i+7][j-7]=1) 10111100 x3++; x3++; x3++; x3++; x3++; x3++; 横向:if(c[i][j]=1&& c[i][j+1]=0&& c[i][j+2]=1&& c[i][j+3]=1&& c[i][j+4]=1&& c[i][j+5]=1&& c[i][j+6]=0&& c[i][j+7]=0) 纵向:if(c[i][j]=1&& c[i+1][j]=0&& c[i+2][j]=1&& c[i+3][j]=1&& c[i+4][j]=1&& c[i+5][j]=1&& c[i+6][j]=0&& c[i+7][j]=0) 斜 向 1 : if(c[i][j]=1&& c[i+1][j+1]=0&& c[i+2][j+2]=1&& c[i+3][j+3]=1&& c[i+4][j+4]=1&& c[i+5][j+5]=1&& c[i+6][j+6]=0&&c[i+7][j+7]=0) 斜 向 2 : if(c[i][j]=1&& c[i+1][j-1]=0&& c[i+2][j-2]=1&& c[i+3][j-3]=1&& c[i+4][j-4]=1&& c[i+5][j-5]=1&& c[i+6][j-6]=0&&c[i+7][j-7]=0) X4 眠五:(在同一直线上的 5 颗同色棋子,符合“对方用一手棋 就能挡住”的条件。) 共 4 种情况: -1111110 横 向 : if(c[i][j]=-1&& c[i][j+1]=1&& c[i][j+2]=1&& c[i][j+3]=1&& c[i][j+4]=1&& c[i][j+5]=1&& c[i][j+6]=0) 纵 向 : if(c[i][j]=-1&& c[i+1][j]=1&& c[i+2][j]=1&& c[i+3][j]=1&& c[i+4][j]=1&& c[i+5][j]=1&& c[i+6][j]=0) 斜 向 1 : if(c[i][j]=-1&& c[i+1][j+1]=1&& c[i+2][j+2]=1&& c[i+3][j+3]=1&& c[i+4][j+4]=1&& c[i+5][j+5]=1&& c[i+6][j+6]=0) 斜 向 2 : if(c[i][j]=-1&& c[i+1][j-1]=1&& c[i+2][j-2]=1&& c[i+3][j-3]=1&& c[i+4][j-4]=1&& c[i+5][j-5]=1&& c[i+6][j-6]=0) x4++; x4++; x4++; x4++;
横向:if(c[i][j]= 0&& c[i][j+1]=1&& c[i][j+2]=1&& c[i][j+3]=1&& c[i][j+4]=1&& c[i][j+5]=1&& c[i][j+6]=-1) 纵向:if(c[i][j]= 0&& c[i+1][j]=1&& c[i+2][j]=1&& c[i+3][j]=1&& c[i+4][j]=1&& c[i+5][j]=1&& c[i+6][j]=-1) 斜 向 1 : if(c[i][j]=0&& c[i+1][j+1]=1&& c[i+2][j+2]=1&& c[i+3][j+3]=1&& c[i+4][j+4]=1&& c[i+5][j+5]=1&& c[i+6][j+6]=-) 011111-1 x4++; x4++; x4++; x4++; 斜 向 2 : if(c[i][j]=0&& c[i+1][j-1]=1&& c[i+2][j-2]=1&& c[i+3][j-3]=1&& c[i+4][j-4]=1&& c[i+5][j-5]=1&& c[i+6][j-6]=-1) a、b 中至少有一个为-1 且 c~h 中有 5 个 1、1 个 0 横向: if(c[I][J]=-1&&c[I][J+1]=-1|| c[I][J]=-1&&c[I][J+1]=0|| c[I][J]=0&&c[I][J+1]=-1) { for(i=I,fact2=0,fact3=0,j=J+2;j<=J+7;j++) {if(c[i][j]=1) fact2++; else if(c[i][j]=0) fact3++; } } if(fact2=5&&fact3=1) x4++; g、h 中至少有一个为-1 且 a~f 中有 5 个 1、1 个 0 c[I][J+6]=-1&&c[I][J+7]=0|| 横向: if(c[I][J+6]=-1&&c[I][J+7]=-1|| c[I][J+6]=0&&c[I][J+7]=-1) { for(i=I,fact2=0,fact3=0,j=J;j<=J+5;j++) {if(c[i][j]=1) fact2++; else if(c[i][j]=0) fact3++; }
} if(fact2=5&&fact3=1) x4++; x5 活四:(在同一直线上的 4 颗同色棋子,符合“对方必须用两 手棋才能挡住”的条件。) 一种情况:00111100 横向:if(c[i][j]=0&& c[i][j+1]=0&& c[i][j+2]=1&& c[i][j+3]=1&& c[i][j+4]=1&& c[i][j+5]=1&& c[i][j+6]=0&& c[i][j+7]=0) 纵向:if(c[i][j]=0&& c[i+1][j]=0&& c[i+2][j]=1&& c[i+3][j]=1&& c[i+4][j]=1&& c[i+5][j]=1&& c[i+6][j]=0&& c[i+7][j]=0) 斜 向 1 : if(c[i][j]=0&& c[i+1][j+1]=0&& c[i+2][j+2]=1&& c[i+3][j+3]=1&& c[i+4][j+4]=1&& c[i+5][j+5]=1&& c[i+6][j+6]=0&&c[i+7][j+7]=0) x5++; x5++; x5++; 斜 向 2 : if(c[i][j]=0&& c[i+1][j-1]=0&& c[i+2][j-2]=1&& c[i+3][j-3]=1&& c[i+4][j-4]=1&& c[i+5][j-5]=1&& c[i+6][j-6]=0&&c[i+7][j-7]=0) x5++; X6 眠四:(在同一直线上的 4 颗同色棋子,符合“对方用一手棋 就能挡住”的条件。) 一种情况:a、h 中至少有一个是-1,b~g 中有 4 个 1、2 个 0 横向: if(c[I][J]=-1&&c[I][J+7]=-1|| c[I][J]=-1&&c[I][J+7]=0|| c[I][J]=0&&c[I][J+7]=-1) { for(i=I,fact2=0,fact3=0,j=J+1;j<=J+6;j++) {if(c[i][j]=1) fact2++; else if(c[i][j]=0) fact3++; } } if(fact2=4&&fact3=2) x6++;
X7 活三:(在同一直线上的 3 颗同色棋子,符合“再下一手棋就 能活四”的条件。) 共四种情况: 00111000 横向:if(c[i][j]=0&& c[i][j+1]=0&& c[i][j+2]=1&& c[i][j+3]=1&& c[i][j+4]=1&& c[i][j+5]=0&& c[i][j+6]=0&& c[i][j+7]=0) 纵向:if(c[i][j]=0&& c[i+1][j]=0&& c[i+2][j]=1&& c[i+3][j]=1&& c[i+4][j]=1&& c[i+5][j]=0&& c[i+6][j]=0&& c[i+7][j]=0) 斜 向 1 : if(c[i][j]=0&& c[i+1][j+1]=0&& c[i+2][j+2]=1&& c[i+3][j+3]=1&& c[i+4][j+4]=1&& c[i+5][j+5]=0&& c[i+6][j+6]=0&&c[i+7][j+7]=0) 斜 向 2 : if(c[i][j]=0&& c[i+1][j-1]=0&& c[i+2][j-2]=1&& c[i+3][j-3]=1&& c[i+4][j-4]=1&& c[i+5][j-5]=0&& c[i+6][j-6]=0&&c[i+7][j-7]=0) 横向:if(c[i][j]=0&& c[i][j+1]=0&& c[i][j+2]=1&& c[i][j+3]=1&& c[i][j+4]=0&& c[i][j+5]=1&& c[i][j+6]=0&& c[i][j+7]=0) 纵向:if(c[i][j]=0&& c[i+1][j]=0&& c[i+2][j]=1&& c[i+3][j]=1&& c[i+4][j]=0&& c[i+5][j]=1&& c[i+6][j]=0&& c[i+7][j]=0) 斜 向 1 : if(c[i][j]=0&& c[i+1][j+1]=0&& c[i+2][j+2]=1&& c[i+3][j+3]=1&& c[i+4][j+4]=0&& c[i+5][j+5]=1&& c[i+6][j+6]=0&&c[i+7][j+7]=0) 斜 向 2 : if(c[i][j]=0&& c[i+1][j-1]=0&& c[i+2][j-2]=1&& c[i+3][j-3]=1&& c[i+4][j-4]=0&& c[i+5][j-5]=1&& c[i+6][j-6]=0&&c[i+7][j-7]=0) x7++; 00110100 x7++; x7++; x7++; x7++; x7++; x7++; x7++; 00101100 x7++; x7++; 横向:if(c[i][j]=0&& c[i][j+1]=0&& c[i][j+2]=1&& c[i][j+3]=0&& c[i][j+4]=1&& c[i][j+5]=1&& c[i][j+6]=0&& c[i][j+7]=0) 纵向:if(c[i][j]=0&& c[i+1][j]=0&& c[i+2][j]=1&& c[i+3][j]=0&& c[i+4][j]=1&& c[i+5][j]=1&& c[i+6][j]=0&& c[i+7][j]=0) 斜 向 1 : if(c[i][j]=0&& c[i+1][j+1]=0&& c[i+2][j+2]=1&& c[i+3][j+3]=0&& c[i+4][j+4]=1&& c[i+5][j+5]=1&& c[i+6][j+6]=0&&c[i+7][j+7]=0)
斜 向 2 : if(c[i][j]=0&& c[i+1][j-1]=0&& c[i+2][j-2]=1&& c[i+3][j-3]=0&& c[i+4][j-4]=1&& c[i+5][j-5]=1&& c[i+6][j-6]=0&&c[i+7][j-7]=0) x7++; x7++; 00011100 横向:if(c[i][j]=0&& c[i][j+1]=0&& c[i][j+2]=0&& c[i][j+3]=1&& c[i][j+4]=1&& c[i][j+5]=1&& c[i][j+6]=0&& c[i][j+7]=0) 纵向:if(c[i][j]=0&& c[i+1][j]=0&& c[i+2][j]=0&& c[i+3][j]=1&& c[i+4][j]=1&& c[i+5][j]=1&& c[i+6][j]=0&& c[i+7][j]=0) 斜 向 1 : if(c[i][j]=0&& c[i+1][j+1]=0&& c[i+2][j+2]=0&& c[i+3][j+3]=1&& c[i+4][j+4]=1&& c[i+5][j+5]=1&& c[i+6][j+6]=0&&c[i+7][j+7]=0) x7++; x7++; x7++; x7++; 斜 向 2 : if(c[i][j]=0&& c[i+1][j-1]=0&& c[i+2][j-2]=0&& c[i+3][j-3]=1&& c[i+4][j-4]=1&& c[i+5][j-5]=1&& c[i+6][j-6]=0&&c[i+7][j-7]=0) X8 朦胧三:(在同一直线上的 3 颗同色棋子,符合“再下一手棋 只能形成眠四,但如果再下两手棋的话就能形成活五”的条件。) 共三种情况(分别对应 3 种活五的情况): a、h 中至少有一个为-1,b=g=0,c~f 中有 3 个 1、3 个 0 横向: if(c[I][J]=-1&&c[I][J+7]=-1|| c[I][J]=-1&&c[I][J+7]=0|| c[I][J]=0&&c[I][J+7]=-1) {if(c[I][J+3]=0&&c[I][J+6]=0) {for(i=I,fact2=0,fact3=0,j=J+2;j<=J+5;j++) {if(c[i][j]=1) fact2++; else if(c[i][j]=0) fact3++; } } } if(fact2=3&&fact3=3) x8++; a=-1,h=i=0,b~g 中有 3 个 1、3 个 0 横向:
if(c[I][J]=-1&&c[I][J+7]=0&&c[I][J+8]=0) {for(i=I,fact2=0,fact3=0,j=J+1;j<=J+6;j++) {if(c[i][j]=1) fact2++; else if(c[i][j]=0) fact3++; } } } if(fact2=3&&fact3=3) x8++; i=-1,a=b=0,c~h 中有 3 个 1、3 个 0 横向: if(c[I][J+8]=-1&&c[I][J]=0&&c[I][J+1]=0) {for(i=I,fact2=0,fact3=0,j=J+2;j<=J+7;j++) {if(c[i][j]=1) fact2++; else if(c[i][j]=0) fact3++; } } } if(fact2=3&&fact3=3) x8++; x9 眠三:(在同一直线上的 3 颗同色棋子,符合“再下两手 棋也只能形成眠五”的条件。) 共 2 种情况: a、b 中至少有一个为-1, c~h 中有 3 个 1、3 个 0 横向: if(c[I][J]=-1&&c[I][J+1]=-1|| c[I][J]=-1&&c[I][J+1]=0|| c[I][J]=0&&c[I][J+1]=-1) { for(i=I,fact2=0,fact3=0,j=J+2;j<=J+7;j++) {if(c[i][j]=1) fact2++; else if(c[i][j]=0)
分享到:
收藏