⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mycomputer.h

📁 嵌入式arm机开发的五子棋游戏
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -