亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? moves.cpp

?? EVC4.0開發的國際象棋的元代碼
?? CPP
字號:
/****************************************************
Author: S. Senthil kumar
File:			Moves.cpp
Purpose:    Implementation of Move Generator

******************************************************/

#include "Global.h"
#include "OneMove.h"
#include "Moves.h"
#include "TransTableEntry.h"
#include "TranspositionTable.h"


extern int WHITEBASE;
extern int BLACKBASE;
extern TranspositionTable table;
extern int movecount;




Moves::Moves()
{
	//Initialize pointers to linked lists.
	head=new OneMove();
	
	
	attackhead=new OneMove();
	normalhead=new OneMove();
	
	size=0;
	
	
	acurrent=attackhead;
	ncurrent=normalhead;
	attackhead->next=NULL;
	normalhead->next=NULL;
}


void Moves::add(int p,int source,int sourcey,int dx,int dy,int noa)
{
	//Create new node.	
	
	OneMove *newnode=new OneMove();
	newnode->sourcex=source;
	newnode->sourcey=sourcey;
	newnode->destx=dx;
	newnode->desty=dy;
	newnode->piece=p;
	
	newnode->next=NULL;
	
	//if move is attacking, add to attacklist.
	if (noa==1)
	{
		acurrent->next=newnode;
		acurrent=newnode;
		
		
	}
	else
	{
		//Add to normal list.
		ncurrent->next=newnode;
		ncurrent=newnode;
		
	}
	size++;
}

void Moves::combine()
{
	
	//Append normal head to attackhead and make head point to first element.
	if (attackhead->next!=NULL)
	{
		
		head=attackhead;
		acurrent->next=normalhead->next;
	}
	else
	{
		
		head=normalhead;
	}
}
//Loop and delete moves.	
void Moves::destroy()
{
	for (OneMove *temp=head;temp!=NULL;)
	{
		OneMove *tmp=temp->next;
		delete temp;
		temp=tmp;
		
	}
	
	if (attackhead->next==NULL) delete attackhead;
	if (head!=normalhead) delete normalhead;
	
}

//Macro to place correct condition according to color	
#define cond(color,check) (color==WHITE?(check>10 ):(check<10  && check!=0))

void Moves::GeneratePawnMoves(int board[8][8],int color)
{
	
	int piece;
	piece=(color==WHITE?WHITE_PAWN:BLACK_PAWN);
	if ((color==WHITE && WHITEBASE==0)	|| (color==BLACK && BLACKBASE==0))
	{
		
		for (int i=0;i<8;i++)
		{
			for (int j=0;j<8;j++)
			{
				
				
				if (board[i][j]==piece)
				{
					if (i<7 && j<7 && cond(color,board[i+1][j+1]))
					{
						add(piece,j,i,j+1,i+1,1);
					}
					if (i<7 && j>0 && cond(color,board[i+1][j-1]))
					{
						add(piece,j,i,j-1,i+1,1);
					}
					if (i<7 && board[i+1][j]==0)
					{
						add(piece,j,i,j,i+1,0);
					}
					
					
					if (i==1)
					{
						if (board[i+2][j]==0 && board[i+1][j]==0)
						{
							add(piece,j,i,j,i+2,0);
						}
					}
					
					
				}
			}
		}
	}
	else if( (color==WHITE && WHITEBASE==7) || (color==BLACK && BLACKBASE==7))
	{
		for (int i=0;i<8;i++)
		{
			for (int j=0;j<8;j++)
			{
				if (board[i][j]==piece)
				{
					if (i==6)
					{
						if (board[i-2][j]==0 && board[i-1][j]==0)
						{
							add(piece,j,i,j,i-2,0);
						}
					}
					if (i>0 && board[i-1][j]==0 )
					{
						add(piece,j,i,j,i-1,0);
					}
					if (i>0 && j>0 && cond(color,board[i-1][j-1]))
					{
						add(piece,j,i,j-1,i-1,1);
					}
					if (i>0 && j<7 && cond(color,board[i-1][j+1]))
					{
						add(piece,j,i,j+1,i-1,1);
					}
					
					
				}
			}
		}
		
	}
}
#define gencond(color,check) (color==WHITE?((check==0 || check>10)):(check < 10))

void Moves::GenerateKnightMoves(int board[8][8],int color)
{
	int dummy;
	
	int piece;
	piece=(color==WHITE?WHITE_KNIGHT:BLACK_KNIGHT);
	
	for (int i=0;i<8 ;i++)
	{
		for (int j=0;j<8;j++)
		{
			if (board[i][j]==piece)
			{
				
				if (i<6 && j<7 && gencond(color,board[i+2][j+1]))
				{
					if (board[i+2][j+1]==0)
					{
						dummy=0;
					}
					else
					{
						dummy=1;
					}
					
					add(piece,j,i,j+1,i+2,dummy);
				}
				if (i<6 && j>0 && gencond(color,board[i+2][j-1]))
				{
					if (board[i+2][j-1]==0)
					{
						dummy=0;
					}
					else
					{
						dummy=1;
					}
					
					add(piece,j,i,j-1,i+2,dummy);
				}
				if (i>1 && j<7 && gencond(color,board[i-2][j+1]))
				{
					if (board[i-2][j+1]==0)
					{
						dummy=0;
					}
					else
					{
						dummy=1;
					}
					
					add(piece,j,i,j+1,i-2,dummy);
				}
				if (i>1 && j>0 && gencond(color,board[i-2][j-1]))
				{
					if (board[i-2][j-1]==0)
					{
						dummy=0;
					}
					else
					{
						dummy=1;
					}
					
					add(piece,j,i,j-1,i-2,dummy);
				}
				//
				if (i<7 && j<6 && gencond(color,board[i+1][j+2]))
				{
					if (board[i+1][j+2]==0)
					{
						dummy=0;
					}
					else
					{
						dummy=1;
					}
					
					add(piece,j,i,j+2,i+1,dummy);
				}
				if (i<7 && j>1 && gencond(color,board[i+1][j-2]))
				{
					if (board[i+1][j-2]==0)
					{
						dummy=0;
					}
					else
					{
						dummy=1;
					}
					
					add(piece,j,i,j-2,i+1,dummy);
				}
				if (i>0 && j<6 && gencond(color,board[i-1][j+2]))
				{
					if (board[i-1][j+2]==0)
					{
						dummy=0;
					}
					else
					{
						dummy=1;
					}
					
					add(piece,j,i,j+2,i-1,dummy);
				}
				if (i>0 && j>1 && gencond(color,board[i-1][j-2]))
				{
					if (board[i-1][j-2]==0)
					{
						dummy=0;
					}
					else
					{
						dummy=1;
					}
					
					add(piece,j,i,j-2,i-1,dummy);
				}
				
				}
			}
		}
		
	}
	
#define cond2(color,check) (color==WHITE?(check > 10):(check < 10))
	void Moves::GenerateBishopMoves(int board[8][8],int color)
	{
		
		int piece;int k,m;
		piece=(color==WHITE?WHITE_BISHOP:BLACK_BISHOP);
		
		for (int i=0;i<8;i++)
		{
			for (int j=0;j<8;j++)
			{
				if (board[i][j]==piece)
				{
					
					for (k=i-1,m=j-1;k>=0 && m>=0;k--,m--)
					{
						if (board[k][m]==0)
						{
							add(piece,j,i,m,k,0);
						}
						else
						{
							if (cond2(color,board[k][m]))
							{
								add(piece,j,i,m,k,1);
							}
							break;
						}
					}
					for (k=i-1,m=j+1;k>=0 && m<8;k--,m++)
					{
						if (board[k][m]==0)
						{
							add(piece,j,i,m,k,0);
						}
						else
						{
							if (cond2(color,board[k][m]))
							{
								add(piece,j,i,m,k,1);
							}
							
							break;
						}
					}
					for (k=i+1,m=j+1;k<8 && m<8;k++,m++)
					{
						if (board[k][m]==0)
						{
							add(piece,j,i,m,k,0);
						}
						else
						{
							if (cond2(color,board[k][m]))
							{
								add(piece,j,i,m,k,1);
							}
							
							break;	
						}
					}
					for (k=i+1,m=j-1;k<8  && m>=0;k++,m--)
					{
						if (board[k][m]==0)
						{
							add(piece,j,i,m,k,0);
						}
						else
						{
							if (cond2(color,board[k][m]))
							{
								add(piece,j,i,m,k,1);
							}
							break;
						}
					}
				}
			}
		}
		
	}
	
	void Moves::GenerateRookMoves(int board[8][8],int color)
	{
		
		int piece;int k;
		piece=(color==WHITE?WHITE_ROOK:BLACK_ROOK);
		
		for (int i=0;i<8 ;i++)
		{
			for (int j=0;j<8;j++)
			{
				if (board[i][j]==piece)
				{
					for (k=i-1;k>=0;k--)
					{
						if (board[k][j]==0)
						{
							add(piece,j,i,j,k,0);
						}
						else 
						{
							if ( cond2(color,board[k][j]))
							{
								add(piece,j,i,j,k,1);
								
							}
							break;
						}
					}
					for (k=i+1;k<8;k++)
					{
						if (board[k][j]==0)
						{
							add(piece,j,i,j,k,0);
							
						}
						else
						{
							if (cond2(color,board[k][j]))
							{
								add(piece,j,i,j,k,1);
								
							}
							break;
						}
					}
					for (k=j+1;k<8;k++)
					{
						if (board[i][k]==0)
						{
							add(piece,j,i,k,i,0);
							
						}
						else
						{
							if (cond2(color,board[i][k]))
							{
								add(piece,j,i,k,i,1);
								break;
							}
							break;
						}
					}
					for (k=j-1;k>=0;k--)
					{
						if (board[i][k]==0 )
						{
							add(piece,j,i,k,i,0);
							
						}
						else
						{
							if (cond2(color,board[i][k]))
							{
								add(piece,j,i,k,i,1);
								
							}
							break;
						}
					}
				}
			}
			
		}
		
		
	}
	
	void Moves::GenerateQueenMoves(int board[8][8],int color)
	{
		int piece; int k;
		piece=(color==WHITE?WHITE_QUEEN:BLACK_QUEEN);
		for (int i=0;i<8;i++)  
		{
			for (int j=0;j<8;j++)
			{
				if (board[i][j]==piece)
				{
					
					//Search moves straight, up,left,right and down
					for (k=i-1;k>=0;k--)
					{
						if (board[k][j]==0 )
						{
							add(piece,j,i,j,k,0);
							
						}
						else
						{
							if ( cond2(color,board[k][j]))
							{
								add(piece,j,i,j,k,1);
								
							}
							
							break;
						}
						
						
					}
					for (k=i+1;k<8;k++)
					{
						if (board[k][j]==0)
						{
							add(piece,j,i,j,k,0);
							
						}
						else
						{
							if (cond2(color,board[k][j]))
							{
								add(piece,j,i,j,k,1);
								
							}
							break;
						}
					}
					for (k=j+1;k<8;k++)
					{
						if (board[i][k]==0 )
						{
							add(piece,j,i,k,i,0);
							
						}
						else
						{
							if ( cond2(color,board[i][k]))
							{
								add(piece,j,i,k,i,1);
								
							}
							break;
						}
					}
					for (k=j-1;k>=0;k--)
					{
						if (board[i][k]==0)
						{
							add(piece,j,i,k,i,0);
							
						}
						else
						{
							if (cond2(color,board[i][k]))
							{
								add(piece,j,i,k,i,1);
								
							}
							break;
						}
						
					}
					
					int m;
					//Now search diagnols.
					for (k=i-1,m=j-1;k>=0 && m>=0;k--,m--)
					{
						if (board[k][m]==0 )
						{
							add(piece,j,i,m,k,0);
						}
						else
						{
							if (cond2(color,board[k][m]))
							{
								add(piece,j,i,m,k,1);
								
							}
							break;
						}
					}
					for (k=i-1,m=j+1;k>=0 && m<8;k--,m++)
					{
						if (board[k][m]==0 )
						{
							add(piece,j,i,m,k,0);
						}
						else
						{
							if (cond2(color,board[k][m]))
							{
								add(piece,j,i,m,k,1);
								
							}
							break;
						}
					}
					for (k=i+1,m=j+1;k<8 && m<8;k++,m++)
					{
						if (board[k][m]==0)
						{
							add(piece,j,i,m,k,0);
						}
						else
						{
							if (cond2(color,board[k][m]))
							{
								add(piece,j,i,m,k,1);
								
							}
							break;
						}
						
					}
					for (k=i+1,m=j-1;k<8 && m>=0;k++,m--)
					{
						if (board[k][m]==0)
						{
							add(piece,j,i,m,k,0);
						}
						else
						{
							if (cond2(color,board[k][m]))
							{
								add(piece,j,i,m,k,1);
								break;
							}
							break;
						}
					}
				}
				
			}
			
		}
		
	}
	
	void Moves::GenerateKingMoves(int board[8][8],int color)
	{
		int i,j;
		int found=0;
		int piece;
		piece=(color==WHITE?WHITE_KING:BLACK_KING);
		for (i=0;i<8 && !found;i++)
		{
			for (j=0;j<8;j++)
			{
				if (board[i][j]==piece)
				{
					found=1;
					break;
				}
			}
		}
		i--;
		
		if (found)
		{
			
			if (i<7 && (gencond(color,board[i+1][j])))
			{
				
				
				add(piece,j,i,j,i+1,0);
			}
			if (i>0 && (gencond(color,board[i-1][j])))
			{
				
				add(piece,j,i,j,i-1,0);
				
			}
			if (j<7 && (gencond(color,board[i][j+1])))
			{
				add(piece,j,i,j+1,i,0);
				
			}
			if (j>0 && (gencond(color,board[i][j-1])))
			{
				
				add(piece,j,i,j-1,i,0);
				
			}
			if (i<7 && j<7 && (gencond(color,board[i+1][j+1])))
			{
				add(piece,j,i,j+1,i+1,0);
				
			}
			if (i<7 && j>0 && (gencond(color,board[i+1][j-1])))
			{
				add(piece,j,i,j-1,i+1,0);
				
			}
			if (i>0 && j<7 && (gencond(color,board[i-1][j+1])))
			{
				add(piece,j,i,j+1,i-1,0);
				
			}
			if (i>0 && j>0 && (gencond(color,board[i-1][j-1])))
			{
				add(piece,j,i,j-1,i-1,0);
				
			}
			
		}
		
		
	}
	
	int Moves::GenerateAllMoves(int board[8][8],int color,int depth,int check_for_mate)
	{
		
		if (movecount<80)
		{
			
			GenerateKnightMoves(board,color);
			
			GenerateBishopMoves(board,color);
			
			GeneratePawnMoves(board,color);
			GenerateRookMoves(board,color);
			
			GenerateQueenMoves(board,color);
			
			GenerateKingMoves(board,color);
		}
		else
		{
			GeneratePawnMoves(board,color);
			GenerateRookMoves(board,color);
			
			GenerateQueenMoves(board,color);
			
			
			GenerateKnightMoves(board,color);
			
			GenerateBishopMoves(board,color);
			
			
			GenerateKingMoves(board,color);
		}
		
		
		
		
		combine();
		return 1;	
	}
	
	
	
	
	
	
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩成人高清| 欧美少妇一区二区| 樱桃视频在线观看一区| 日韩一级成人av| jlzzjlzz亚洲日本少妇| 日产欧产美韩系列久久99| 国产精品女主播av| 精品久久久久久久久久久久久久久久久| av电影天堂一区二区在线观看| 免费观看91视频大全| 亚洲免费在线视频| 国产性天天综合网| 欧美一区二区视频免费观看| 99r精品视频| 国产丶欧美丶日本不卡视频| 欧美丝袜丝nylons| 亚洲制服丝袜av| 欧美精品一区二区三区一线天视频| 国产91在线观看丝袜| 免费在线观看视频一区| 一区二区在线免费| 国产精品护士白丝一区av| 精品少妇一区二区三区视频免付费 | 日韩欧美一级在线播放| 91福利在线导航| av激情亚洲男人天堂| 丰满少妇久久久久久久| 国产精品原创巨作av| 久草这里只有精品视频| 日本免费在线视频不卡一不卡二 | 国产在线观看免费一区| 男人的j进女人的j一区| 日韩中文字幕麻豆| 午夜精品成人在线视频| 亚洲综合无码一区二区| 一区二区在线观看不卡| 亚洲欧美日韩中文字幕一区二区三区| 中文字幕精品一区二区精品绿巨人| 日韩欧美国产高清| 欧美一区二区三区四区久久| 91精品国产入口| 欧美一区二区视频在线观看2022 | 麻豆精品久久精品色综合| 日韩中文字幕1| 日本不卡高清视频| 久久精品国产秦先生| 国内成人免费视频| 国产成人免费视频网站| 波多野结衣在线一区| 丰满白嫩尤物一区二区| 91在线高清观看| 色香蕉成人二区免费| 91福利区一区二区三区| 51精品久久久久久久蜜臀| 日韩亚洲欧美一区| 久久久91精品国产一区二区三区| 国产日产欧美一区二区视频| 国产精品久久久久久妇女6080| 国产精品全国免费观看高清| 亚洲色欲色欲www| 亚洲国产成人porn| 精彩视频一区二区三区| 国产精品一区二区黑丝| 97久久久精品综合88久久| 91女厕偷拍女厕偷拍高清| 99久久99久久精品免费观看| youjizz国产精品| 91久久精品午夜一区二区| 欧美另类久久久品| 欧美第一区第二区| 久久精品视频网| 亚洲免费伊人电影| 日韩精品电影在线| 国产成人午夜精品影院观看视频| 日本乱人伦一区| 日韩午夜小视频| 国产精品高潮呻吟| 婷婷六月综合网| 粉嫩欧美一区二区三区高清影视| 色婷婷激情综合| 日韩免费观看2025年上映的电影| 欧美国产日韩精品免费观看| 亚洲国产中文字幕在线视频综合| 美脚の诱脚舐め脚责91 | 亚洲va欧美va国产va天堂影院| 亚洲国产欧美在线人成| 蜜桃av噜噜一区| 91美女片黄在线| 日韩欧美另类在线| 亚洲美女淫视频| 国产在线精品一区二区夜色| 91浏览器打开| 久久免费偷拍视频| 亚洲午夜日本在线观看| 国产一区二区免费看| 欧美性色黄大片| 中文字幕高清一区| 久久99国产精品久久99| 91福利资源站| 国产三级精品视频| 天堂影院一区二区| 91天堂素人约啪| 久久嫩草精品久久久精品一| 亚洲永久精品大片| av动漫一区二区| 国产视频一区在线观看| 美女视频网站久久| 欧美日韩在线直播| 最新热久久免费视频| 国产一区 二区| 欧美一区二区视频免费观看| 中文字幕一区二区三中文字幕| 狂野欧美性猛交blacked| 欧美日韩成人综合| 一区二区三区高清不卡| 97久久精品人人澡人人爽| 26uuu久久天堂性欧美| 污片在线观看一区二区| 欧美在线免费观看亚洲| 亚洲免费大片在线观看| 成人免费视频视频| 国产三级精品三级在线专区| 韩国精品免费视频| 欧美成人video| 青青青爽久久午夜综合久久午夜| 色国产精品一区在线观看| 欧美国产日韩a欧美在线观看| 精品在线视频一区| 久久这里只精品最新地址| 激情成人午夜视频| 日韩欧美国产一二三区| 青青青爽久久午夜综合久久午夜 | 亚洲欧美中日韩| va亚洲va日韩不卡在线观看| 国产日韩欧美精品一区| 国产乱子轮精品视频| 久久久久国产精品麻豆ai换脸 | 亚洲欧美激情小说另类| 99久久久国产精品免费蜜臀| 欧美激情在线一区二区三区| 国产精品一区三区| 欧美国产日本视频| 99国产精品99久久久久久| 亚洲精品亚洲人成人网在线播放| www.成人网.com| 亚洲激情在线播放| 欧美日韩黄色一区二区| 午夜成人免费视频| 日韩欧美亚洲国产精品字幕久久久| 麻豆精品一区二区| 久久久国产精品麻豆| 成人黄色电影在线| 亚洲狠狠丁香婷婷综合久久久| 欧美三级乱人伦电影| 奇米精品一区二区三区在线观看一 | 欧美高清视频在线高清观看mv色露露十八| 亚洲综合色成人| 欧美高清一级片在线| 国产一区二区三区综合| 国产精品美女一区二区三区 | 一本久久精品一区二区| 亚洲成人免费看| 精品理论电影在线观看 | 91亚洲精品久久久蜜桃网站 | 麻豆91精品视频| 中文字幕不卡在线播放| 色综合中文字幕| 天堂影院一区二区| 久久精品免费在线观看| 色丁香久综合在线久综合在线观看| 亚洲mv大片欧洲mv大片精品| 精品欧美久久久| 99r国产精品| 老司机精品视频线观看86| 国产亚洲精品精华液| 欧美午夜不卡在线观看免费| 九九视频精品免费| 中文字幕日韩一区| 成人黄动漫网站免费app| 亚洲6080在线| 欧美偷拍一区二区| 国产成人丝袜美腿| 亚洲国产成人高清精品| 久久一留热品黄| 欧美日韩国产小视频| 国产suv一区二区三区88区| 亚洲婷婷国产精品电影人久久| 欧美一二三四在线| 一本到不卡精品视频在线观看 | 亚洲第一主播视频| 久久婷婷色综合| 91久久久免费一区二区| 国产精品亚洲一区二区三区在线 | 国产精品久久国产精麻豆99网站| 欧美日韩视频一区二区| 成人av第一页| 久久精品国产成人一区二区三区| 亚洲美女电影在线| 久久久久国产精品人| 日韩欧美高清dvd碟片|