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

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

?? movegenerator.cpp

?? 一個象棋AI的源代碼,帶游戲界面,其中可選擇多種AI引擎,從最基礎的深度跌代極大極小值搜索到使用開局庫,歷史啟發的極小窗搜索,具有很高的學習研究價值.
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// MoveGenerator.cpp: implementation of the CMoveGenerator class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "chess.h"
#include "MoveGenerator.h"

#ifdef _DEBUG
#undef THIS_FILE
static BYTE THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMoveGenerator::CMoveGenerator()
{
	
}

CMoveGenerator::~CMoveGenerator()
{
	
}

int CMoveGenerator::AddMove(int nFromX,int nFromY,int nToX,int nToY,int nPly,int nChessID)
{
	m_MoveList[nPly][m_nMoveCount].From.x=nFromX;
	m_MoveList[nPly][m_nMoveCount].From.y=nFromY;
	m_MoveList[nPly][m_nMoveCount].To.x=nToX;
	m_MoveList[nPly][m_nMoveCount].To.y=nToY;
	m_MoveList[nPly][m_nMoveCount].nChessID=nChessID;
	m_nMoveCount++;

	return m_nMoveCount;
}

//nPly指明當前搜索的層數,每層將走法存在不同的位置,以免覆蓋
//nSide指明產生哪一方的走法,TRUE為紅方,FALSE是黑方
int CMoveGenerator::CreatePossibleMove(BYTE position[][9],int nPly,int nSide,int nUserChessColor)
{
	int nChessID;
	int i,j;

	m_nMoveCount=0;
	m_nUserChessColor=nUserChessColor;

	for(j=0;j<9;j++)
		for(i=0;i<10;i++)
		{
			if(position[i][j]!=NOCHESS)
			{
				nChessID=position[i][j];

				if(nUserChessColor==REDCHESS)
				{
					if(!nSide && IsRed(nChessID))
						continue;//如要產生黑棋走法,跳過紅棋
					
					if(nSide && IsBlack(nChessID))
						continue;//如要產生紅棋走法,跳過黑棋
				}
				else
				{
					if(nSide && IsRed(nChessID))
						continue;//如要產生黑棋走法,跳過紅棋
					
					if(!nSide && IsBlack(nChessID))
						continue;//如要產生紅棋走法,跳過黑棋
				}

				switch(nChessID)
				{
				case R_KING://紅帥
				case B_KING://黑將
					Gen_KingMove(position,i,j,nPly);
					break;

				case R_BISHOP://紅士
					Gen_RBishopMove(position,i,j,nPly);
					break;
				
				case B_BISHOP://黑士
					Gen_BBishopMove(position,i,j,nPly);
					break;
				
				case R_ELEPHANT://紅相
				case B_ELEPHANT://黑象
					Gen_ElephantMove(position,i,j,nPly);
					break;
				
				case R_HORSE://紅馬
				case B_HORSE://黑馬
					Gen_HorseMove(position,i,j,nPly);
					break;
				
				case R_CAR://紅車
				case B_CAR://黑車
					Gen_CarMove(position,i,j,nPly);
					break;

				case R_PAWN://紅兵
					Gen_RPawnMove(position,i,j,nPly);
					break;
				
				case B_PAWN://黑卒
					Gen_BPawnMove(position,i,j,nPly);
					break;
				
				case B_CANON://黑炮
				case R_CANON://紅炮
					Gen_CanonMove(position,i,j,nPly);
					break;
				
				default:
					break;
				}
			}
		}

	return m_nMoveCount;
}

void CMoveGenerator::Gen_KingMove(BYTE position[10][9],int i,int j,int nPly)
{
	int x,y;
	
	for(y=0;y<3;y++)
		for(x=3;x<6;x++)
			if(IsValidMove(position,j,i,x,y,m_nUserChessColor))
				AddMove(j,i,x,y,nPly,position[i][j]);

	for(y=7;y<10;y++)
		for(x=3;x<6;x++)
			if(IsValidMove(position,j,i,x,y,m_nUserChessColor))
				AddMove(j,i,x,y,nPly,position[i][j]);
}

//紅士
void CMoveGenerator::Gen_RBishopMove(BYTE position[10][9],int i,int j,int nPly)
{
	int x,y;
	
	for(y=7;y<10;y++)
		for(x=3;x<6;x++)
			if(IsValidMove(position,j,i,x,y,m_nUserChessColor))
				AddMove(j,i,x,y,nPly,position[i][j]);
}

//黑士
void CMoveGenerator::Gen_BBishopMove(BYTE position[10][9],int i,int j,int nPly)
{
	int x,y;

	for(y=0;y<3;y++)
		for(x=3;x<6;x++)
			if(IsValidMove(position,j,i,x,y,m_nUserChessColor))
				AddMove(j,i,x,y,nPly,position[i][j]);
}

//象
void CMoveGenerator::Gen_ElephantMove(BYTE position[10][9],int i,int j,int nPly)
{
	int x,y;
	
	//插入右下方的有效走法
	x=j+2;
	y=i+2;
	if(x<9 && y<10 && IsValidMove(position,j,i,x,y,m_nUserChessColor))
		AddMove(j,i,x,y,nPly,position[i][j]);
	
	//插入右上方的有效走法
	x=j+2;
	y=i-2;
	if(x<9 && y>=0 && IsValidMove(position,j,i,x,y,m_nUserChessColor))
		AddMove(j,i,x,y,nPly,position[i][j]);
	
	//插入左下方的有效走法
	x=j-2;
	y=i+2;
	if(x>=0 && y<10 && IsValidMove(position,j,i,x,y,m_nUserChessColor))
		AddMove(j,i,x,y,nPly,position[i][j]);
	
	//插入左上方的有效走法
	x=j-2;
	y=i-2;
	if(x>=0 && y>=0 && IsValidMove(position,j,i,x,y,m_nUserChessColor))
		AddMove(j,i,x,y,nPly,position[i][j]);
}

//馬
void CMoveGenerator::Gen_HorseMove(BYTE position[10][9], int i, int j, int nPly)
{
	int x, y;
	
	//插入右下方的有效走法
	x=j+2;//右2
	y=i+1;//下1
	if((x<9 && y<10) && IsValidMove(position,j,i,x,y,m_nUserChessColor))
		AddMove(j,i,x,y,nPly,position[i][j]);
	
	//插入右上方的有效走法
	x=j+2;//右2
	y=i-1;//上1
	if((x<9 && y>=0) && IsValidMove(position,j,i,x,y,m_nUserChessColor))
		AddMove(j,i,x,y,nPly,position[i][j]);
	
	//插入左下方的有效走法
	x=j-2;//左2
	y=i+1;//下1
	if((x>=0 && y<10) && IsValidMove(position,j,i,x,y,m_nUserChessColor))
		AddMove(j,i,x,y,nPly,position[i][j]);

	//插入左上方的有效走法
	x=j-2;//左2
	y=i-1;//上1
	if((x>=0 && y>=0) && IsValidMove(position,j,i,x,y,m_nUserChessColor))
		AddMove(j,i,x,y,nPly,position[i][j]);
	
	//插入右下方的有效走法
	x=j+1;//右1
	y=i+2;//下2 
	if((x<9 && y<10) && IsValidMove(position,j,i,x,y,m_nUserChessColor))
		AddMove(j,i,x,y,nPly,position[i][j]);

	//插入左下方的有效走法
	x=j-1;//左1
	y=i+2;//下2
	if((x>=0 && y<10) && IsValidMove(position,j,i,x,y,m_nUserChessColor))
		AddMove(j,i,x,y,nPly,position[i][j]);    
	
	//插入右上方的有效走法
	x=j+1;//右1
	y=i-2;//上2
	if((x<9 && y >=0) && IsValidMove(position,j,i,x,y,m_nUserChessColor))
		AddMove(j,i,x,y,nPly,position[i][j]);

	//插入左上方的有效走法
	x=j-1;//左1
	y=i-2;//上2
	if((x>=0 && y>=0) && IsValidMove(position,j,i,x,y,m_nUserChessColor))
		AddMove(j,i,x,y,nPly,position[i][j]);
}

//紅兵
void CMoveGenerator::Gen_RPawnMove(BYTE position[10][9], int i, int j, int nPly)
{
	int x,y;
	int nChessID;
	
	nChessID=position[i][j];

	if(m_nUserChessColor==REDCHESS)
	{
		y=i-1;//向前
		x=j;
		if(y>0 && !IsSameSide(nChessID,position[y][x]))
			AddMove(j,i,x,y,nPly,position[i][j]);//前方無阻礙
		
		if(i<5)//是否已過河
		{
			y=i;
			
			x=j+1;//右邊
			if(x<9 && !IsSameSide(nChessID,position[y][x]))
				AddMove(j,i,x,y,nPly,position[i][j]);
			
			x=j-1;//左邊
			if(x>=0 && !IsSameSide(nChessID,position[y][x]))
				AddMove(j,i,x,y,nPly,position[i][j]);
		}
	}
	else
	{
		y=i+1;//向前
		x=j;
		if(y>0 && !IsSameSide(nChessID,position[y][x]))
			AddMove(j,i,x,y,nPly,position[i][j]);//前方無阻礙
		
		if(i>4)//是否已過河
		{
			y=i;
			
			x=j+1;//右邊
			if(x<9 && !IsSameSide(nChessID,position[y][x]))
				AddMove(j,i,x,y,nPly,position[i][j]);
			
			x=j-1;//左邊
			if(x>=0 && !IsSameSide(nChessID,position[y][x]))
				AddMove(j,i,x,y,nPly,position[i][j]);
		}
	}
}

//黑卒
void CMoveGenerator::Gen_BPawnMove(BYTE position[10][9],int i,int j,int nPly)
{
	int x,y;
	int nChessID;
	
	nChessID=position[i][j];

	if(m_nUserChessColor==REDCHESS)
	{
		y=i+1;//向前
		x=j;
		if(y<10 && !IsSameSide(nChessID,position[y][x]))
			AddMove(j,i,x,y,nPly,position[i][j]);//前方無阻礙
		
		if(i>4)//是否已過河
		{
			y=i;
			
			x=j+1;//右邊
			if(x<9 && !IsSameSide(nChessID,position[y][x]))
				AddMove(j,i,x,y,nPly,position[i][j]);
			
			x=j-1;//左邊
			if(x>=0 && !IsSameSide(nChessID,position[y][x]))
				AddMove(j,i,x,y,nPly,position[i][j]);
		}
	}
	else
	{
		y=i-1;//向前
		x=j;
		if(y<10 && !IsSameSide(nChessID,position[y][x]))
			AddMove(j,i,x,y,nPly,position[i][j]);//前方無阻礙
		
		if(i<5)//是否已過河
		{
			y=i;
			
			x=j+1;//右邊
			if(x<9 && !IsSameSide(nChessID,position[y][x]))
				AddMove(j,i,x,y,nPly,position[i][j]);
			
			x=j-1;//左邊
			if(x>=0 && !IsSameSide(nChessID,position[y][x]))
				AddMove(j,i,x,y,nPly,position[i][j]);
		}
	}
}

//車
void CMoveGenerator::Gen_CarMove(BYTE position[10][9], int i, int j, int nPly)
{
	int x,y;
	int nChessID;
	
	nChessID=position[i][j];

	//插入向右的有效的走法
	x=j+1;
	y=i;
	while(x<9)
	{
		if(NOCHESS==position[y][x])
			AddMove(j,i,x,y,nPly,position[i][j]);
		else
		{
			if(!IsSameSide(nChessID,position[y][x]))
				AddMove(j,i,x,y,nPly,position[i][j]);

			break;
		}
		x++;
	}

	//插入向左的有效的走法
	x=j-1;
	y=i;
	while(x>=0)
	{
		if(NOCHESS==position[y][x])
			AddMove(j,i,x,y,nPly,position[i][j]);
		else
		{
			if(!IsSameSide(nChessID,position[y][x]))
				AddMove(j,i,x,y,nPly,position[i][j]);

			break;
		}
		x--;
	}

	//插入向下的有效的走法
	x=j;
	y=i+1;
	while(y<10)
	{
		if(NOCHESS==position[y][x])
			AddMove(j,i,x,y,nPly,position[i][j]);
		else
		{
			if(!IsSameSide(nChessID,position[y][x]))
				AddMove(j,i,x,y,nPly,position[i][j]);

			break;
		}
		y++;
	}

	//插入向上的有效的走法
	x=j;
	y=i-1;
	while(y>=0)
	{
		if(NOCHESS==position[y][x])
			AddMove(j,i,x,y,nPly,position[i][j]);
		else
		{
			if(!IsSameSide(nChessID,position[y][x]))
				AddMove(j,i,x,y,nPly,position[i][j]);

			break;
		}
		y--;
	}
}

//炮
void CMoveGenerator::Gen_CanonMove(BYTE position[10][9], int i, int j, int nPly)
{
	int x,y;
	BOOL flag;
	int nChessID;
	
	nChessID=position[i][j];

	//插入向右的有效的走法
	x=j+1;
	y=i;
	flag=FALSE;
	while(x<9)
	{
		if(NOCHESS==position[y][x])
		{
			if(!flag)//隔有棋子
				AddMove(j,i,x,y,nPly,position[i][j]);
		}
		else
		{
			if(!flag)//沒有隔棋子,此棋子是第一個障礙,設置標志
				flag=TRUE;
			else     //隔有棋子,此處如為敵方棋子,則可走
			{
				if(!IsSameSide(nChessID,position[y][x]))
					AddMove(j,i,x,y,nPly,position[i][j]);
				break;
			}
		}
		x++;//繼續下一個位置
	}

	//插入向左的有效的走法
	x=j-1;
	y=i;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合狠狠综合久久激情| 日本中文字幕一区| 青娱乐精品视频| 懂色av一区二区三区免费观看 | 制服.丝袜.亚洲.中文.综合| 精品88久久久久88久久久| 亚洲一线二线三线久久久| 国产成人午夜片在线观看高清观看| 欧美日韩久久一区| 亚洲女与黑人做爰| av电影在线观看不卡| 久久久久久久久一| 美国十次了思思久久精品导航| av中文字幕不卡| 中文字幕免费不卡| 国产福利精品导航| 久久久精品国产免大香伊| 美女一区二区久久| 日韩欧美一级二级| 捆绑变态av一区二区三区| 欧美色老头old∨ideo| 亚洲日本丝袜连裤袜办公室| 国产成人综合在线播放| 久久先锋影音av鲁色资源| 麻豆精品一二三| 欧美tickling挠脚心丨vk| 亚洲成人免费电影| 欧美日韩国产综合一区二区三区| 日韩毛片视频在线看| 成人免费看的视频| 亚洲欧美一区二区视频| 成年人午夜久久久| 亚洲蜜臀av乱码久久精品| 99国产精品久| 亚洲卡通欧美制服中文| 色老综合老女人久久久| 一区二区三区在线免费观看| 色噜噜狠狠一区二区三区果冻| 亚洲男人的天堂av| 在线观看视频一区| 午夜精品久久久久久久久久| 欧美三级在线看| 亚洲123区在线观看| 555夜色666亚洲国产免| 日本成人中文字幕在线视频| 精品久久久久一区二区国产| 国产中文字幕精品| 国产精品你懂的在线| 91啪九色porn原创视频在线观看| 洋洋成人永久网站入口| 91精品国产综合久久久蜜臀粉嫩 | 国内不卡的二区三区中文字幕 | 欧美本精品男人aⅴ天堂| 国产在线视频一区二区| 久久久久久久久99精品| voyeur盗摄精品| 亚洲一区二区三区爽爽爽爽爽| 欧美精品第一页| 国产在线视视频有精品| 亚洲欧美日韩久久| 日韩无一区二区| jlzzjlzz亚洲日本少妇| 天天亚洲美女在线视频| 久久九九影视网| 欧美曰成人黄网| 国产一区二区剧情av在线| 亚洲人成影院在线观看| 在线播放欧美女士性生活| 成人综合婷婷国产精品久久蜜臀 | 精品日韩在线观看| 色综合中文字幕| 久久精品国产精品亚洲红杏| 亚洲少妇最新在线视频| 精品久久久久久久久久久久久久久久久 | 欧美成人免费网站| 91视频免费播放| 国精品**一区二区三区在线蜜桃| 亚洲欧洲成人自拍| 欧美电影免费观看高清完整版在线 | 国产精品原创巨作av| 18成人在线观看| 日韩视频免费观看高清完整版| www.在线欧美| 激情综合网av| 亚洲aⅴ怡春院| 亚洲乱码中文字幕综合| 久久久蜜桃精品| 欧美一区二区在线免费播放| 91麻豆国产香蕉久久精品| 国产美女视频91| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲情趣在线观看| 国产欧美日韩麻豆91| 精品久久久久av影院| 欧美日韩中文字幕一区二区| av中文字幕在线不卡| 久久99精品久久久久| 亚洲国产精品黑人久久久| 国产综合久久久久影院| 中文字幕一区二区日韩精品绯色| 日韩视频免费观看高清完整版| 欧美探花视频资源| 91视频在线看| 91丨porny丨中文| 99精品国产99久久久久久白柏| 国产美女在线观看一区| 激情综合五月婷婷| 久久99国产精品麻豆| 美国毛片一区二区三区| 毛片av一区二区| 麻豆精品精品国产自在97香蕉| 五月婷婷久久丁香| 午夜久久久久久电影| 亚洲bt欧美bt精品777| 首页综合国产亚洲丝袜| 日日夜夜免费精品视频| 免费欧美日韩国产三级电影| 天天操天天干天天综合网| 天天色天天操综合| 九九**精品视频免费播放| 久草精品在线观看| 国产在线精品一区二区不卡了 | 亚洲视频在线一区观看| 最新日韩在线视频| 伊人婷婷欧美激情| 亚洲国产综合人成综合网站| 亚洲成精国产精品女| 日韩在线卡一卡二| 免费在线观看日韩欧美| 国产精品亚洲视频| av在线一区二区三区| 欧美亚洲动漫制服丝袜| 欧美日韩黄色一区二区| 欧美mv日韩mv亚洲| 中文字幕日韩av资源站| 一二三区精品视频| 免费在线观看一区| 成人国产电影网| 在线观看免费一区| 欧美哺乳videos| 亚洲色图丝袜美腿| 蜜桃视频在线观看一区| 国产.欧美.日韩| 欧美视频在线一区| 精品国产髙清在线看国产毛片| 久久久99精品免费观看不卡| 最好看的中文字幕久久| 蜜桃精品在线观看| 成人国产电影网| 欧美一区二区三区在线观看视频| 国产亚洲va综合人人澡精品| 亚洲人成人一区二区在线观看| 爽好多水快深点欧美视频| 国产91清纯白嫩初高中在线观看| 91浏览器打开| 精品av久久707| 亚洲一区二区在线播放相泽| 国模娜娜一区二区三区| 欧美亚一区二区| 中文字幕不卡三区| 六月婷婷色综合| 色婷婷亚洲一区二区三区| 精品国产成人系列| 亚洲成人动漫精品| 成人伦理片在线| 2020国产精品| 日韩av中文字幕一区二区三区 | 欧美日韩精品一区二区在线播放| 2021国产精品久久精品| 亚洲成av人片在线| 91在线视频在线| 国产婷婷精品av在线| 蜜臀va亚洲va欧美va天堂| 欧美亚洲综合久久| 亚洲日本乱码在线观看| 国产麻豆一精品一av一免费| 5566中文字幕一区二区电影| 亚洲欧美日韩一区二区| 丁香婷婷综合激情五月色| 日韩一区二区在线看| 亚洲成av人片在www色猫咪| 一本大道久久a久久精品综合| 国产女同互慰高潮91漫画| 激情综合网天天干| 日韩欧美的一区| 日韩—二三区免费观看av| 欧美私模裸体表演在线观看| 亚洲乱码日产精品bd| 99国产精品久久久| 中文字幕永久在线不卡| 成人午夜在线播放| 久久久91精品国产一区二区精品| 日韩av一级电影| 88在线观看91蜜桃国自产| 亚瑟在线精品视频| 欧美色成人综合| 亚洲成人av电影| 欧美一区二区黄色| 久久国产精品第一页| 精品国产一区二区三区av性色|