📄 frame1.java
字号:
else if(maxNumber==2){ //到达2子共线
if(k+3<max&&preBoard[k+1][j]==0&&preBoard[k+2][j]==n&&preBoard[k+3][j]==n){ //是否为2-2棋型
label[2]++;
}
if((k-4>=min&&k+1<max&&preBoard[k-2][j]==0&&preBoard[k-3][j]==n&&preBoard[k-4][j]==0&&preBoard[k+1][j]==0)
||(k-2>=min&&k+3<max&&preBoard[k-2][j]==0&&preBoard[k+1][j]==0&&preBoard[k+2][j]==n&&preBoard[k+3][j]==0)){ //是否为-1-2-棋型或-2-1-棋型
label[3]++;
}
if((k+3<max&&preBoard[k+1][j]==0&&preBoard[k+2][j]==n&&preBoard[k+3][j]==0)
||(k-4>=min&&preBoard[k-4][j]==0&&preBoard[k-3][j]==n&&preBoard[k-2][j]==0)){ //是否为2-1-棋型或-1-2棋型
label[4]++;
}
if((k+3<max&&preBoard[k+1][j]==0&&preBoard[k+2][j]==0&&preBoard[k+3][j]==n)
||(k-4>=min&&preBoard[k-4][j]==n&&preBoard[k-3][j]==0&&preBoard[k-2][j]==0)){ //是否为2--1棋型或1--2棋型
label[4]++;
}
if((k-2>=min&&k+2<max&&preBoard[k-2][j]==0&&preBoard[k+1][j]==0&&preBoard[k+2][j]==n)
||(k-3>=min&&k+1<max&&preBoard[k-3][j]==n&&preBoard[k-2][j]==0&&preBoard[k+1][j]==0)){ //是否为-2-1棋型或1-2-棋型
label[4]++;
}
if((k-3>=min&&k+1<max&&preBoard[k-3][j]==0&&preBoard[k-2][j]==0&&preBoard[k+1][j]==0)
||(k-2>=min&&k+2<max&&preBoard[k-2][j]==0&&preBoard[k+1][j]==0&&preBoard[k+2][j]==0)){ //是否为--2-棋型或-2--棋型
label[5]++;
}
if((k-4>=min&&preBoard[k-4][j]==0&&preBoard[k-3][j]==0&&preBoard[k-2][j]==0)
||(k+3<max&&preBoard[k+1][j]==0&&preBoard[k+2][j]==0&&preBoard[k+3][j]==0)){ //是否为---2棋型或2---棋型
label[6]++;
}
}
else if(maxNumber==3){ //到达3子共线
if((k-4>=min&&preBoard[k-3][j]==0&&preBoard[k-4][j]==n)
||(k+2<max&&preBoard[k+1][j]==0&&preBoard[k+2][j]==n)){ //是否为1-3棋型或3-1棋型
label[2]++;
}
if((k-4>=min&&k+1<max&&preBoard[k-4][j]==0&&preBoard[k-3][j]==0&&preBoard[k+1][j]==0)
||(k-3>=min&&k+2<max&&preBoard[k-3][j]==0&&preBoard[k+1][j]==0&&preBoard[k+2][j]==0)){ //是否为--3-棋型或-3--棋型
label[3]++;
}
if((k-4>=min&&preBoard[k-4][j]==0&&preBoard[k-3][j]==0)
||(k+2<max&&preBoard[k+1][j]==0&&preBoard[k+2][j]==0)){ //是否为--3棋型或3--棋型
label[4]++;
}
if(k-3>=min&&k+1<max&&preBoard[k-3][j]==0&&preBoard[k+1][j]==0){ //是否为-3-棋型
label[4]++;
}
}
else if(maxNumber==4){ //到达4子共线
if(k-4>=min&&k+1<size&&preBoard[k-4][j]==0&&preBoard[k+1][j]==0){ //是否为-4-棋型
label[1]++;
}
if((k-4>=min&&preBoard[k-4][j]==0)||(k+1<max&&preBoard[k+1][j]==0)){ //是否为-4棋型或4-棋型
label[2]++;
}
}
else if(maxNumber>=5){ //到达5子共线
label[0]++;
}
}
//恢复数据
maxNumber=0;
for(int k=0; k<7; k++){
if(label[k]>0){
result[k]++;
label[k]=0;
}
}
//检查左斜线
for(int k=4; k>=0; k--){
if(i-k>=0&&j-k>=0){
min=k;
break;
}
}
for(int k=4; k>=0; k--){
if(i+k<size&&j+k<size){
max=k+1;
break;
}
}
for(int k=-min; k<max; k++){
if(preBoard[i+k][j+k]==n){ //棋子计数
maxNumber++;
}
else{
maxNumber=0;
}
if(maxNumber==1){ //到达1子共线
if(i+k+4<i+max&&j+k+4<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n&&preBoard[i+k+3][j+k+3]==0&&preBoard[i+k+4][j+k+4]==n){ //是否为1-1-1棋型
label[4]++;
}
if(i+k-1>=i-min&&j+k-1>=j-min&&i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k-1][j+k-1]==0&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n&&preBoard[i+k+3][j+k+3]==0){ //是否为-1-1-棋型
label[6]++;
}
if((i+k-1>=i-min&&j+k-1>=j-min&&i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k-1][j+k-1]==0&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0&&preBoard[i+k+3][j+k+3]==n)
||(i+k+4<i+max&&j+k+4<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0&&preBoard[i+k+3][j+k+3]==n&&preBoard[i+k+4][j+k+4]==0)){ //是否为-1--1棋型或1--1-棋型
label[6]++;
}
if((i+k+4<i+max&&j+k+4<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n&&preBoard[i+k+3][j+k+3]==0&&preBoard[i+k+4][j+k+4]==0)
||(i+k-2>=i-min&&j+k-2>=j-min&&i+k+2<i+max&&j+k+2<j+max&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k-1][j+k-1]==0&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n)){ //是否为1-1--棋型或--1-1棋型
label[6]++;
}
if(i+k+4<i+max&&j+k+4<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0&&preBoard[i+k+3][j+k+3]==0&&preBoard[i+k+4][j+k+4]==n){ //是否为1---1棋型
label[6]++;
}
}
else if(maxNumber==2){ //到达2子共线
if(i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n&&preBoard[i+k+3][j+k+3]==n){ //是否为2-2棋型
label[2]++;
}
if((i+k-4>=i-min&&j+k-4>=j-min&&i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k-4][j+k-4]==0&&preBoard[i+k-3][j+k-3]==n&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k+1][j+k+1]==0)
||(i+k-2>=i-min&&j+k-2>=j-min&&i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k+2][j+k+2]==n&&preBoard[i+k+3][j+k+3]==0&&preBoard[i+k+1][j+k+1]==0)){ //是否为-1-2-棋型或-2-1-棋型
label[3]++;
}
if((i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n&&preBoard[i+k+3][j+k+3]==0)
||(i+k-4>=i-min&&j+k-4>=j-min&&preBoard[i+k-4][j+k-4]==0&&preBoard[i+k-3][j+k-3]==n&&preBoard[i+k-2][j+k-2]==0)){ //是否为2-1-棋型或-1-2棋型
label[4]++;
}
if((i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0&&preBoard[i+k+3][j+k+3]==n)
||(i+k-4>=i-min&&j+k-4>=j-min&&preBoard[i+k-4][j+k-4]==n&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k-2][j+k-2]==0)){ //是否为2--1棋型或1--2棋型
label[4]++;
}
if((i+k-2>=i-min&&j+k-2>=j-min&&i+k+2<i+max&&j+k+2<j+max&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n)
||(i+k-3>=i-min&&j+k-3>=j-min&&i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k-3][j+k-3]==n&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k+1][j+k+1]==0)){ //是否为-2-1棋型或1-2-棋型
label[4]++;
}
if((i+k-3>=i-min&&j+k-3>=j-min&&i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k+1][j+k+1]==0)
||(i+k-2>=i-min&&j+k-2>=j-min&&i+k+2<i+max&&j+k+2<j+max&&preBoard[i+k-2][j+k-2]==0&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0)){ //是否为--2-棋型或-2--棋型
label[5]++;
}
if((i+k-4>=i-min&&j+k-4>=j-min&&preBoard[i+k-4][j+k-4]==0&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k-2][j+k-2]==0)
||(i+k+3<i+max&&j+k+3<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0&&preBoard[i+k+3][j+k+3]==0)){ //是否为---2棋型或2---棋型
label[6]++;
}
}
else if(maxNumber==3){ //到达3子共线
if((i+k-4>=i-min&&j+k-4>=j-min&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k-4][j+k-4]==n)
||(i+k+2<i+max&&j+k+2<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==n)){ //是否为1-3棋型或3-1棋型
label[2]++;
}
if((i+k-4>=i-min&&j+k-4>=j-min&&i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k-4][j+k-4]==0&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k+1][j+k+1]==0)
||(i+k-3>=i-min&&j+k-3>=j-min&&i+k+2<i+max&&j+k+2<j+max&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0)){ //是否为--3-棋型或-3--棋型
label[3]++;
}
if((i+k-4>=i-min&&j+k-4>=j-min&&preBoard[i+k-4][j+k-4]==0&&preBoard[i+k-3][j+k-3]==0)
||(i+k+2<i+max&&j+k+2<j+max&&preBoard[i+k+1][j+k+1]==0&&preBoard[i+k+2][j+k+2]==0)){ //是否为--3棋型或3--棋型
label[4]++;
}
if(i+k-3>=i-min&&j+k-3>=j-min&&i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k-3][j+k-3]==0&&preBoard[i+k+1][j+k+1]==0){ //是否为-3-棋型
label[4]++;
}
}
else if(maxNumber==4){ //到达4子共线
if(i+k-4>=i-min&&j+k-4>=j-min&&i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k-4][j+k-4]==0&&preBoard[i+k+1][j+k+1]==0){ //是否为-4-棋型
label[1]++;
}
if((i+k-4>=i-min&&j+k-4>=j-min&&preBoard[i+k-4][j+k-4]==0)||(i+k+1<i+max&&j+k+1<j+max&&preBoard[i+k+1][j+k+1]==0)){ //是否为-4棋型或4-棋型
label[2]++;
}
}
else if(maxNumber>=5){ //到达5子共线
label[0]++;
}
}
//恢复数据
maxNumber=0;
for(int k=0; k<7; k++){
if(label[k]>0){
result[k]++;
label[k]=0;
}
}
//检查右斜线
for(int k=4; k>=0; k--){
if(i-k>=0&&j+k<size){
min=k;
break;
}
}
for(int k=4; k>=0; k--){
if(i+k<size&&j-k>=0){
max=k+1;
break;
}
}
for(int k=-min; k<max; k++){
if(preBoard[i+k][j-k]==n){ //棋子计数
maxNumber++;
}
else{
maxNumber=0;
}
if(maxNumber==1){ //到达1子共线
if(i+k+4<i+max&&j-k-4>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n&&preBoard[i+k+3][j-k-3]==0&&preBoard[i+k+4][j-k-4]==n){ //是否为1-1-1棋型
label[4]++;
}
if(i+k-1>=i-min&&j-k-3>=j-max+1&&i+k+3<i+max&&j-k+1<j+min+1&&preBoard[i+k-1][j-k+1]==0&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n&&preBoard[i+k+3][j-k-3]==0){ //是否为-1-1-棋型
label[6]++;
}
if((i+k-1>=i-min&&j-k-3>=j-max+1&&i+k+1<i+max&&j-k+3<j+min+1&&preBoard[i+k-1][j-k+1]==0&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0&&preBoard[i+k+3][j-k-3]==n)
||(i+k+4<i+max&&j-k-4>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0&&preBoard[i+k+3][j-k-3]==n&&preBoard[i+k+4][j-k-4]==0)){ //是否为-1--1棋型或1--1-棋型
label[6]++;
}
if((i+k+4<i+max&&j-k-4>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n&&preBoard[i+k+3][j-k-3]==0&&preBoard[i+k+4][j-k-4]==0)
||(i+k-2>=i-min&&j-k-2>=j-max+1&&i+k+2<i+max&&j-k+2<j+min+1&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k-1][j-k+1]==0&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n)){ //是否为1-1--棋型或--1-1棋型
label[6]++;
}
if(i+k+4<i+max&&j-k-4>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0&&preBoard[i+k+3][j-k-3]==0&&preBoard[i+k+4][j-k-4]==n){ //是否为1---1棋型
label[6]++;
}
}
else if(maxNumber==2){ //到达2子共线
if(i+k+3<i-min&&j-k-3>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n&&preBoard[i+k+3][j-k-3]==n){ //是否为2-2棋型
label[2]++;
}
if((i+k-4>=i-min&&j-k+4<j+min+1&&i+k+1<i+max&&j-k-1>=j-max+1&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k-3][j-k+3]==n&&preBoard[i+k-4][j-k+4]==0&&preBoard[i+k+1][j-k-1]==0)
||(i+k-2>=i-min&&j-k-3>=j-max+1&&i+k+2<i+max&&j-k+2<j+min+1&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k+2][j-k-2]==n&&preBoard[i+k+3][j-k-3]==0&&preBoard[i+k+1][j-k-1]==0)){ //是否为-1-2-棋型或-2-1-棋型
label[3]++;
}
if((i+k+3<i+max&&j-k-3>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n&&preBoard[i+k+3][j-k-3]==0)
||(i+k-4>=i-min&&j-k+4<j+min+1&&preBoard[i+k-4][j-k+4]==0&&preBoard[i+k-3][j-k+3]==n&&preBoard[i+k-2][j-k+2]==0)){ //是否为2-1-棋型或-1-2棋型
label[4]++;
}
if((i+k+3<i+max&&j-k-3>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0&&preBoard[i+k+3][j-k-3]==n)
||(i+k-4>=i-min&&j-k+4<j+min+1&&preBoard[i+k-4][j-k+4]==n&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k-2][j-k+2]==0)){ //是否为2--1棋型或1--2棋型
label[4]++;
}
if((i+k-2>=i-min&&j-k+2<j+min+1&&i+k+2<i+max&&j-k-2>=j-max+1&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n)
||(i+k-3>=i-min&&j-k+3<j+min+1&&i+k+1<i+max&&j-k-1>=j-max+1&&preBoard[i+k-3][j-k+3]==n&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k+1][j-k-1]==0)){ //是否为-2-1棋型或1-2-棋型
label[4]++;
}
if((i+k-3>=i-min&&j-k+3<j+min+1&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k-1][j-k+1]==0)
||(i+k-2>=i-min&&j-k-2>=j-max+1&&i+k+2<i+max&&j-k+2<j+min+1&&preBoard[i+k-2][j-k+2]==0&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0)){ //是否为--2-棋型或-2--棋型
label[5]++;
}
if((i+k-4>=i-min&&j-k+4<j+min+1&&preBoard[i+k-4][j-k+4]==0&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k-2][j-k+2]==0)
||(i+k+3<i+max&&j-k-3>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0&&preBoard[i+k+3][j-k-3]==0)){ //是否为---2棋型或2---棋型
label[6]++;
}
}
else if(maxNumber==3){ //到达3子共线
if((i+k-4>=i-min&&j-k+4<j+min+1&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k-4][j-k+4]==n)
||(i+k+2<i+max&&j-k-2>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==n)){ //是否为1-3棋型或3-1棋型
label[2]++;
}
if((i+k-4>=i-min&&j-k-1>=j-max+1&&i+k+1<i+max&&j-k+4<j+min+1&&preBoard[i+k-4][j-k+4]==0&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k+1][j-k-1]==0)
||(i+k-3>=i-min&&j-k-2>=j-max+1&&i+k+2<i+max&&j-k+3<j+min+1&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0)){ //是否为--3-棋型或-3--棋型
label[3]++;
}
if((i+k-4>=i-min&&j-k+4<j+min+1&&preBoard[i+k-4][j-k+4]==0&&preBoard[i+k-3][j-k+3]==0)
||(i+k+2<i+max&&j-k-2>=j-max+1&&preBoard[i+k+1][j-k-1]==0&&preBoard[i+k+2][j-k-2]==0)){ //是否为--3棋型或3--棋型
label[4]++;
}
if(i+k-3>=i-min&&j-k-1>=j-max+1&&i+k+1<i+max&&j-k+3<j+min+1&&preBoard[i+k-3][j-k+3]==0&&preBoard[i+k+1][j-k-1]==0){ //是否为-3-棋型
label[4]++;
}
}
else if(maxNumber==4){ //到达4子共线
if(i+k-4>=i-min&&j-k+4<j+min+1&&i+k+1<i+max&&j-k-1>=j-max+1&&preBoard[i+k-4][j-k+4]==0&&preBoard[i+k+1][j-k-1]==0){ //是否为-4-棋型
label[1]++;
}
if((i+k-4>=i-min&&j-k+4<j+min+1&&preBoard[i+k-4][j-k+4]==0)||(i+k+1<i+max&&j-k-1>=j-max+1&&preBoard[i+k+1][j-k-1]==0)){ //是否为-4棋型或4-棋型
label[2]++;
}
}
else if(maxNumber>=5){ //到达5子共线
label[0]++;
}
}
//恢复数据
maxNumber=0;
for(int k=0; k<7; k++){
if(label[k]>0){
result[k]++;
label[k]=0;
}
}
return result;
}
/**
* <p>Description: 直线扫描</p>
* @return 游戏结束标记
*/
public boolean checkLine(){
int state=0; //当前状态
int maxNumber=0; //最多相连棋子数
//检查竖线
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
if(maxNumber>4){ //到达5子共线
winner=state;
//设置直线提示
if(j==0){
canvas.setLine(i-1,size-5,i-1,size-1);
}
else{
canvas.setLine(i,j-5,i,j-1);
}
return true;
}
if(board[i][j]==state&&state!=0){
maxNumber++;
}
if(board[i][j]!=state){
if(board[i][j]==0){
maxNumber=0;
}
else{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -