📄 mycomputer.h
字号:
#define MAX_ROW_LINE 15
#define WIN_NUM 5
#define MAX_NUM 5
#define EMPTY 0
#define BLACK 1
#define WHITE 2
int GetMax(int one , int two);
int GetMaxFour(int one , int two ,int three ,int four);
int ScanDownRightDefence(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*left_right_defence)[MAX_ROW_LINE],int (*defence)[MAX_ROW_LINE]);
int ScanUpLeftDefence(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*left_right_defence)[MAX_ROW_LINE],int (*defence)[MAX_ROW_LINE]);
int ScanDownRightAttack(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*left_right_attack)[MAX_ROW_LINE],int (*attack)[MAX_ROW_LINE]);
int ScanUpLeftAttack(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*left_right_attack)[MAX_ROW_LINE],int (*attack)[MAX_ROW_LINE]);
int ScanDownLeftDefence(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*right_left_defence)[MAX_ROW_LINE],int (*defence)[MAX_ROW_LINE]);
int ScanUpRightDefence(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*right_left_defence)[MAX_ROW_LINE],int (*defence)[MAX_ROW_LINE]);
int ScanDownLeftAttack(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*right_left_attack)[MAX_ROW_LINE],int (*attack)[MAX_ROW_LINE]);
int ScanUpRightAttack(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*right_left_attack)[MAX_ROW_LINE],int (*attack)[MAX_ROW_LINE]);
int ScanUpDownDefence(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*up_down_defence)[MAX_ROW_LINE],int (*defence)[MAX_ROW_LINE]);
int ScanDownUpDefence(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*up_down_defence)[MAX_ROW_LINE],int (*defence)[MAX_ROW_LINE]);
int ScanUpDownAttack(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*up_down_attack)[MAX_ROW_LINE],int (*attack)[MAX_ROW_LINE]);
int ScanDownUpAttack(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*up_down_attack)[MAX_ROW_LINE],int (*attack)[MAX_ROW_LINE]);
int ScanRowLineDefence(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*row_line_defence)[MAX_ROW_LINE],int (*defence)[MAX_ROW_LINE]);
int ScanLineRowDefence(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*row_line_defence)[MAX_ROW_LINE],int (*defence)[MAX_ROW_LINE]);
int ScanRowLineAttack(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*row_line_attack)[MAX_ROW_LINE],int (*attack)[MAX_ROW_LINE]);
int ScanLineRowAttack(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*row_line_attack)[MAX_ROW_LINE],int (*attack)[MAX_ROW_LINE]);
void ComputerThink(int (*condition)[MAX_ROW_LINE])
{
int row = 0;
int line = 0;
int max1 = 0;
int max2 = 0;
int max_x ;
int max_y;
int temp1 =0;
int temp2 =0;
int left_right_attack[MAX_ROW_LINE][MAX_ROW_LINE] = {0};
int left_right_defence[MAX_ROW_LINE][MAX_ROW_LINE] = {0};
int left_right[MAX_ROW_LINE][MAX_ROW_LINE] = {0};
int right_left_attack[MAX_ROW_LINE][MAX_ROW_LINE] = {0};
int right_left_defence[MAX_ROW_LINE][MAX_ROW_LINE] = {0};
int right_left[MAX_ROW_LINE][MAX_ROW_LINE] = {0};
int up_down_attack[MAX_ROW_LINE][MAX_ROW_LINE] = {0};
int up_down_defence[MAX_ROW_LINE][MAX_ROW_LINE] = {0};
int up_down[MAX_ROW_LINE][MAX_ROW_LINE] = {0};
int row_line_attack[MAX_ROW_LINE][MAX_ROW_LINE] = {0};
int row_line_defence[MAX_ROW_LINE][MAX_ROW_LINE] = {0};
int row_line[MAX_ROW_LINE][MAX_ROW_LINE] = {0};
int defence[MAX_ROW_LINE][MAX_ROW_LINE] ={0};
int attack[MAX_ROW_LINE][MAX_ROW_LINE] ={0};
int attack_or_defence[MAX_ROW_LINE][MAX_ROW_LINE] ={0};
int temp_array[MAX_ROW_LINE][MAX_ROW_LINE] ={0};
for(row=0;row<MAX_ROW_LINE;row++)
for(line=0;line<MAX_ROW_LINE;line++)
{
temp1 = temp2 =0;
if(condition[row][line]==EMPTY)
{
temp1 = ScanDownRightDefence(row,line,condition,left_right_defence,defence);
temp2 = ScanUpLeftDefence(row,line,condition,left_right_defence,defence);
}
if(temp1+temp2<4)
left_right_defence[row][line] = 0;
temp1 = temp2 =0;
if(condition[row][line]==EMPTY)
{
temp1 = ScanDownRightAttack(row,line,condition,left_right_attack,attack);
temp2 = ScanUpLeftAttack(row,line,condition,left_right_attack,attack);
}
if(temp1+temp2<4)
left_right_attack[row][line] = 0;
left_right[row][line]= GetMax(left_right_defence[row][line],left_right_attack[row][line]);
temp1 = temp2 =0;
if(condition[row][line]==EMPTY)
{
temp1 = ScanDownLeftDefence(row,line,condition,right_left_defence,defence);
temp2 = ScanUpRightDefence(row,line,condition,right_left_defence,defence);
}
if(temp1+temp2<4)
right_left_defence[row][line] = 0;
temp1 = temp2 =0;
if(condition[row][line]==EMPTY)
{
temp1 = ScanDownLeftAttack(row,line,condition,right_left_attack,attack);
temp2 = ScanUpRightAttack(row,line,condition,right_left_attack,attack);
}
if(temp1+temp2<4)
right_left_attack[row][line] = 0;
right_left[row][line]= GetMax(right_left_defence[row][line],right_left_attack[row][line]);
temp1 = temp2 =0;
if(condition[row][line]==EMPTY)
{
temp1 = ScanUpDownDefence(row,line,condition,up_down_defence,defence);
temp2 = ScanDownUpDefence(row,line,condition,up_down_defence,defence);
}
if(temp1+temp2<4)
up_down_defence[row][line] = 0;
temp1 = temp2 =0;
if(condition[row][line]==EMPTY)
{
temp1 = ScanUpDownAttack(row,line,condition,up_down_attack,attack);
temp2 = ScanDownUpAttack(row,line,condition,up_down_attack,attack);
}
if(temp1+temp2<4)
up_down_attack[row][line] = 0;
up_down[row][line]= GetMax(up_down_defence[row][line],up_down_attack[row][line]);
temp1 = temp2 =0;
if(condition[row][line]==EMPTY)
{
temp1 = ScanRowLineDefence(row,line,condition,row_line_defence,defence);
temp2 = ScanLineRowDefence(row,line,condition,row_line_defence,defence);
}
if(temp1+temp2<4)
row_line_defence[row][line] = 0;
temp1 = temp2 =0;
if(condition[row][line]==EMPTY)
{
temp1 = ScanRowLineAttack(row,line,condition,row_line_attack,attack);
temp2 = ScanLineRowAttack(row,line,condition,row_line_attack,attack);
}
if(temp1+temp2<4)
row_line_attack[row][line] = 0;
row_line[row][line]= GetMax(row_line_defence[row][line],row_line_attack[row][line]);
temp_array[row][line]=GetMaxFour(left_right[row][line],right_left[row][line],up_down[row][line],row_line[row][line]);
if( GetMaxFour(left_right[row][line],right_left[row][line],up_down[row][line],row_line[row][line])>max1)
max1= GetMaxFour(left_right[row][line],right_left[row][line],up_down[row][line],row_line[row][line]);
attack_or_defence[row][line]= GetMax(defence[row][line],attack[row][line]);
}
for(row=0;row<MAX_ROW_LINE;row++)
{
for(line=0;line<MAX_ROW_LINE;line++)
if(temp_array[row][line]==max1&&attack_or_defence[row][line]>=max2)
{
max_x=row;
max_y=line;
}
}
condition[max_x][max_y]=WHITE;
}
int ScanRowLineAttack(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*row_line_attack)[MAX_ROW_LINE],int (*attack)[MAX_ROW_LINE])
{
int temp_row;
int temp_line;
int value = 0;
int isadded = 0;
for(temp_line = line + 1 ,temp_row = row , value=0;
temp_line <= line + WIN_NUM &&
temp_line < MAX_ROW_LINE &&
condition[temp_row][temp_line]==BLACK;
temp_line ++ ,value++)
{
row_line_attack[row][line]+=5;
attack[row][line]++;
}
while(temp_line<MAX_ROW_LINE&&condition[temp_row][temp_line]==EMPTY)
{
if(isadded==0)
{
row_line_attack[row][line]+=2;
isadded=1;
}
temp_line ++;
value++;
}
return value;
}
int ScanLineRowAttack(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*row_line_attack)[MAX_ROW_LINE],int (*attack)[MAX_ROW_LINE])
{
int temp_row;
int temp_line;
int value = 0;
int isadded = 0;
for(temp_line = line - 1 ,temp_row = row , value=0;
temp_line >=0 &&
temp_line >=line-WIN_NUM&&
condition[temp_row][temp_line]==WHITE;
temp_line --,value++)
{
row_line_attack[row][line]+=5;
attack[row][line]++;
}
while(temp_row <MAX_ROW_LINE&&temp_line>=0&&condition[temp_row][temp_line]==EMPTY)
{
if(isadded==0)
{
row_line_attack[row][line]+=2;
isadded=1;
}
temp_line --;
value++;
}
return value;
}
int ScanLineRowDefence(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*row_line_defence)[MAX_ROW_LINE],int (*defence)[MAX_ROW_LINE])
{
int temp_row;
int temp_line;
int value = 0;
int isadded = 0;
for(temp_line = line - 1 ,temp_row = row , value=0;
temp_line >=0 &&
temp_line >=line -WIN_NUM &&
condition[temp_row][temp_line]==BLACK;
temp_line --,value++)
{
row_line_defence[row][line]+=5;
defence[row][line]++;
}
while(temp_row <MAX_ROW_LINE&&temp_line>=0&&condition[temp_row][temp_line]==EMPTY)
{
if(isadded==0)
{
row_line_defence[row][line]+=2;
isadded=1;
}
temp_line --;
value++;
}
return value;
}
int ScanRowLineDefence(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*row_line_defence)[MAX_ROW_LINE],int (*defence)[MAX_ROW_LINE])
{
int temp_row;
int temp_line;
int value = 0;
int isadded = 0;
for(temp_line = line + 1 ,temp_row = row , value=0;
temp_line <=line+ WIN_NUM&&
temp_line < MAX_ROW_LINE &&
condition[temp_row][temp_line]==BLACK;
temp_line ++ ,value++)
{
row_line_defence[row][line]+=5;
defence[row][line]++;
}
while(temp_row <MAX_ROW_LINE&&temp_line<MAX_ROW_LINE&&condition[temp_row][temp_line]==EMPTY)
{
if(isadded==0)
{
row_line_defence[row][line]+=2;
isadded=1;
}
temp_line ++;
value++;
}
return value;
}
int ScanUpDownAttack(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*up_down_attack)[MAX_ROW_LINE],int (*attack)[MAX_ROW_LINE])
{
int temp_row;
int temp_line;
int value = 0;
int isadded = 0;
for(temp_line = line ,temp_row = row +1, value=0;
temp_row <= row + WIN_NUM &&
temp_row < MAX_ROW_LINE &&
condition[temp_row][temp_line]==WHITE;
temp_row++,value++)
{
up_down_attack[row][line]+=5;
attack[row][line]++;
}
while(temp_row <MAX_ROW_LINE&&temp_line<MAX_ROW_LINE&&condition[temp_row][temp_line]==EMPTY)
{
if(isadded==0)
{
up_down_attack[row][line]+=2;
isadded=1;
}
temp_row++;
value++;
}
return value;
}
int ScanDownUpAttack(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*up_down_attack)[MAX_ROW_LINE],int (*attack)[MAX_ROW_LINE])
{
int temp_row;
int temp_line;
int value = 0;
int isadded = 0;
for(temp_line = line ,temp_row = row -1, value=0;
temp_row >= row - WIN_NUM &&
temp_row >=0 &&
condition[temp_row][temp_line]==WHITE;
temp_row--,value++)
{
up_down_attack[row][line]+=5;
attack[row][line]++;
}
while(temp_row >=0&&condition[temp_row][temp_line]==EMPTY)
{
if(isadded==0)
{
up_down_attack[row][line]+=2;
isadded=1;
}
temp_row--;
value++;
}
return value;
}
int ScanDownUpDefence(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*up_down_defence)[MAX_ROW_LINE],int (*defence)[MAX_ROW_LINE])
{
int temp_row;
int temp_line;
int value = 0;
int isadded = 0;
for(temp_line = line ,temp_row = row - 1, value=0;
temp_row >=0 &&
temp_row >=row-WIN_NUM &&
condition[temp_row][temp_line]==BLACK;
temp_row -- ,value++)
{
up_down_defence[row][line]+=5;
defence[row][line]++;
}
while(temp_row >=0&&temp_line<MAX_ROW_LINE&&condition[temp_row][temp_line]==EMPTY)
{
if(isadded==0)
{
up_down_defence[row][line]+=2;
isadded=1;
}
temp_row --;
value++;
}
return value;
}
int ScanUpDownDefence(int row ,int line ,int (*condition)[MAX_ROW_LINE],int (*up_down_defence)[MAX_ROW_LINE],int (*defence)[MAX_ROW_LINE])
{
int temp_row;
int temp_line;
int value = 0;
int isadded = 0;
for(temp_line = line,temp_row = row + 1, value=0;
temp_row <= row + WIN_NUM &&
temp_row < MAX_ROW_LINE &&
condition[temp_row][temp_line]==BLACK;
temp_row++,value++)
{
up_down_defence[row][line]+=5;
defence[row][line]++;
}
while(temp_row <MAX_ROW_LINE&&condition[temp_row][temp_line]==EMPTY)
{
if(isadded==0)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -