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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? movegenerator.cpp

?? VC寫的象棋游戲源代碼
?? CPP
字號(hào):
// COPYRIGHT NOTES
// ---------------
// This source code is a part of chess which is an example of <Game Programing guide>.
// You may use, compile or redistribute it as part of your application 
// for free. 
// You cannot redistribute sources without the official agreement of the author. 
// If distribution of you application which contents code below was occured, place 
// e-mail <hidebug@hotmail.com> on it is to be appreciated.
// This code can be used WITHOUT ANY WARRANTIES on your own risk.
// 
// Spring Wang <hidebug@hotmail.com>

// ---------------
// 版權(quán)聲明
// ---------------
// 本文件所含之代碼是《人機(jī)博弈程序設(shè)計(jì)指南》的范例程序中國(guó)象棋的一部分
// 您可以免費(fèi)的使用, 編譯 或者作為您應(yīng)用程序的一部分。 
// 但,您不能在未經(jīng)作者書面許可的情況下分發(fā)此源代碼。 
// 如果您的應(yīng)用程序使用了這些代碼,在您的應(yīng)用程序界面上 
// 放入 e-mail <hidebug@hotmail.com> 是令人欣賞的做法。
// 此代碼并不含有任何保證,使用者當(dāng)自承風(fēng)險(xiǎn)。
// 
// 王小春 <hidebug@hotmail.com>

// 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)
{
	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_nMoveCount++;
	return m_nMoveCount;
}

int CMoveGenerator::CreatePossibleMove(BYTE position[10][9], int nPly, int nSide)
{
	int     nChessID;
	int		i,j;
	
	m_nMoveCount = 0;
	for (i = 0; i < 10; i++)
		for (j = 0; j < 9; j++)
		{
			if (position[i][j] != NOCHESS)
			{
				nChessID = position[i][j];
				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))
				AddMove(j, i, x, y, nPly);

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

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))
				AddMove(j, i, x, y, nPly);
}

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))
				AddMove(j, i, x, y, nPly);
}

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))
		AddMove(j, i, x, y, nPly);
	
	x=j+2;
	y=i-2;
	if(x < 9 && y>=0  &&  IsValidMove(position, j, i, x, y))
		AddMove(j, i, x, y, nPly);
	
	x=j-2;
	y=i+2;
	if(x>=0 && y < 10  && IsValidMove(position, j, i, x, y))
		AddMove(j, i, x, y, nPly);
	
	x=j-2;
	y=i-2;
	if(x>=0 && y>=0  && IsValidMove(position, j, i, x, y))
		AddMove(j, i, x, y, nPly);
	
}

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

	x=j+2;
	y=i+1;
	if((x < 9 && y < 10) &&IsValidMove(position, j, i, x, y))
		AddMove(j, i, x, y, nPly);
	
	x=j+2;
	y=i-1;
	if((x < 9 && y >= 0) &&IsValidMove(position, j, i, x, y))
		AddMove(j, i, x, y, nPly);
	
	x=j-2;
	y=i+1;
	if((x >= 0 && y < 10) &&IsValidMove(position, j, i, x, y))
		AddMove(j, i, x, y, nPly);
	
	x=j-2;
	y=i-1;
	if((x >= 0 && y >= 0) &&IsValidMove(position, j, i, x, y))
		AddMove(j, i, x, y, nPly);
	
	x=j+1;
	y=i+2;
	if((x < 9 && y < 10) &&IsValidMove(position, j, i, x, y))
		AddMove(j, i, x, y, nPly);
	x=j-1;
	y=i+2;
	if((x >= 0 && y < 10) &&IsValidMove(position, j, i, x, y))
		AddMove(j, i, x, y, nPly);
	x=j+1;
	y=i-2;
	if((x < 9 && y >= 0) &&IsValidMove(position, j, i, x, y))
		AddMove(j, i, x, y, nPly);
	x=j-1;
	y=i-2;
	if((x >= 0 && y >= 0) &&IsValidMove(position, j, i, x, y))
		AddMove(j, i, x, y, nPly);
	
}

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

	nChessID = position[i][j];

	y = i - 1;
	x = j;
	
	if(y > 0 && !IsSameSide(nChessID, position[y][x]))
		AddMove(j, i, x, y, nPly);
	
	if(i < 5)
	{
		y=i;
		x=j+1;
		if(x < 9 && !IsSameSide(nChessID, position[y][x]))
			AddMove(j, i, x, y, nPly);
		x=j-1;
		if(x >= 0 && !IsSameSide(nChessID, position[y][x]))
			AddMove(j, i, x, y, nPly);
	}
}


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

	nChessID = position[i][j];

	y = i + 1;
	x = j;
	
	if(y < 10 && !IsSameSide(nChessID, position[y][x]))
		AddMove(j, i, x, y, nPly);
	
	if(i > 4)
	{
		y=i;
		x=j+1;
		if(x < 9 && !IsSameSide(nChessID, position[y][x]))
			AddMove(j, i, x, y, nPly);
		x=j-1;
		if(x >= 0 && !IsSameSide(nChessID, position[y][x]))
			AddMove(j, i, x, y, nPly);
	}
	
}

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);
		else
		{
			if(!IsSameSide(nChessID, position[y][x]))
				AddMove(j, i, x, y, nPly);
			break;
		}
		x++;
	}
	
	x = j-1;
	y = i;
	while(x >= 0)
	{
		if( NOCHESS == position[y][x] )
			AddMove(j, i, x, y, nPly);
		else
		{
			if(!IsSameSide(nChessID, position[y][x]))
				AddMove(j, i, x, y, nPly);
			break;
		}
		x--;
	}
	
	x=j;
	y=i+1;//
	while(y < 10)
	{
		if( NOCHESS == position[y][x])
			AddMove(j, i, x, y, nPly);
		else
		{
			if(!IsSameSide(nChessID, position[y][x]))
				AddMove(j, i, x, y, nPly);
			break;
		}
		y++;
	}
	
	x = j;
	y = i-1;//
	while(y>=0)
	{
		if( NOCHESS == position[y][x])
			AddMove(j, i, x, y, nPly);
		else
		{
			if(!IsSameSide(nChessID, position[y][x]))
				AddMove(j, i, x, y, nPly);
			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;		//

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久黄色级2电影| 激情六月婷婷久久| 欧美mv和日韩mv的网站| 高清视频一区二区| 天天色天天爱天天射综合| 久久精品亚洲一区二区三区浴池 | 色综合久久久久综合体桃花网| 亚洲精品你懂的| 国产女同互慰高潮91漫画| 91精品国产综合久久久久久漫画| 成人白浆超碰人人人人| 国内外成人在线| 亚洲123区在线观看| 亚洲欧美另类综合偷拍| 国产午夜精品在线观看| 欧美一区二区视频在线观看2020 | 色狠狠综合天天综合综合| 国产精品影音先锋| 蜜桃av一区二区在线观看 | 国产一区二区女| 亚洲成a人v欧美综合天堂下载| 中文字幕乱码亚洲精品一区| 日韩一级大片在线观看| 欧美日韩亚洲另类| 色综合久久久久久久| 丁香六月综合激情| 国产在线精品免费av| 青青青爽久久午夜综合久久午夜| 一区二区三区在线免费视频| 国产精品久久久久影院亚瑟| 国产日韩亚洲欧美综合| 久久这里只有精品首页| 日韩一本二本av| 91精品国产一区二区三区蜜臀 | 国产丝袜美腿一区二区三区| www日韩大片| 精品国产伦理网| 日韩欧美不卡在线观看视频| 欧美一个色资源| 7777女厕盗摄久久久| 91精品久久久久久久99蜜桃| 欧美日韩精品一区二区天天拍小说 | 91精品福利在线一区二区三区| 欧美在线一区二区三区| 色婷婷综合久久久中文一区二区| av亚洲精华国产精华| youjizz国产精品| av一二三不卡影片| 色噜噜夜夜夜综合网| 色狠狠一区二区三区香蕉| 欧美在线观看视频一区二区| 欧美性色综合网| 91精品国产综合久久久久久漫画| 日韩色视频在线观看| 精品国产亚洲在线| 国产女人aaa级久久久级| 国产精品欧美一区喷水| 亚洲欧美日韩一区二区| 亚洲国产毛片aaaaa无费看 | 在线欧美小视频| 欧美午夜电影在线播放| 欧美情侣在线播放| 日韩精品在线看片z| 久久精品人人做| 亚洲日本电影在线| 午夜久久久久久久久久一区二区| 蜜臀av一区二区| 国产精品小仙女| 91片黄在线观看| 欧美久久婷婷综合色| 精品福利av导航| 国产精品久久久久婷婷| 亚洲高清免费一级二级三级| 成人动漫一区二区| 色婷婷av久久久久久久| 欧美一区二区视频观看视频 | 亚洲国产美女搞黄色| 久久精品999| 成人久久18免费网站麻豆| 欧美怡红院视频| 久久综合中文字幕| 亚洲精品视频免费观看| 久久99精品一区二区三区三区| 成人h精品动漫一区二区三区| 欧美网站大全在线观看| www成人在线观看| 亚洲精品免费在线| 激情久久五月天| 欧美视频中文一区二区三区在线观看| 欧美xxxx老人做受| 亚洲最大成人综合| 激情丁香综合五月| 91福利在线导航| 国产欧美一区二区精品性色| 午夜精品视频在线观看| caoporen国产精品视频| 日韩欧美亚洲一区二区| 亚洲日本在线天堂| 国产精品1区二区.| 欧美一区二区在线播放| 亚洲欧美区自拍先锋| 国产精品77777| 欧美一区二区三区在线观看 | 亚洲精品福利视频网站| 国产主播一区二区| 678五月天丁香亚洲综合网| 亚洲欧美日韩中文播放 | 国产一区二区网址| 欧美精品视频www在线观看| 国产精品久久久久一区二区三区共| 免费观看在线综合色| 欧美性猛片xxxx免费看久爱| 国产精品久久久久影院亚瑟 | 久久精品国产精品亚洲红杏| 在线影视一区二区三区| 中文字幕一区二区日韩精品绯色| 青青草国产精品亚洲专区无| 在线免费av一区| 亚洲天堂福利av| 国产999精品久久久久久| 精品毛片乱码1区2区3区| 天天综合色天天综合| 欧美在线视频日韩| 亚洲美女视频在线观看| 成人性生交大片免费看在线播放| 26uuu久久综合| 捆绑调教一区二区三区| 欧美一级午夜免费电影| 日本欧美加勒比视频| 欧美一区二区三区视频| 香蕉成人啪国产精品视频综合网| 在线观看免费视频综合| 亚洲激情第一区| 91在线观看污| 综合激情网...| 色婷婷综合久久久久中文一区二区 | 欧美日韩成人综合| 亚洲国产精品一区二区久久恐怖片 | 国产一区二区三区视频在线播放 | 依依成人综合视频| 91女人视频在线观看| 亚洲视频免费看| 色噜噜狠狠色综合中国| 一区二区高清视频在线观看| 日本乱码高清不卡字幕| 亚洲国产色一区| 欧美丰满嫩嫩电影| 久久精品久久久精品美女| 欧美sm极限捆绑bd| 精品一区二区三区日韩| 久久久久久久久一| 懂色av中文一区二区三区 | 欧美激情一区在线观看| 播五月开心婷婷综合| 久久99精品网久久| 久久久蜜桃精品| 成a人片国产精品| 亚洲九九爱视频| 欧美日韩电影在线| 国内精品免费在线观看| 欧美国产视频在线| 色哟哟一区二区三区| 亚洲成人福利片| 精品乱码亚洲一区二区不卡| 高清av一区二区| 亚洲最新视频在线观看| 欧美久久久久久久久| 国产一区二区三区av电影| 亚洲视频在线一区观看| 欧美精品aⅴ在线视频| 国内欧美视频一区二区| 国产精品高清亚洲| 欧美高清视频一二三区| 韩国v欧美v亚洲v日本v| 亚洲欧美日韩中文字幕一区二区三区| 欧美性受xxxx| 国产精品99久久久久久似苏梦涵| 亚洲精品一二三区| 欧美精品一区二区三| 91美女视频网站| 美腿丝袜亚洲三区| 国产精品白丝在线| 日韩一区二区三区在线观看| 成人av免费网站| 奇米色一区二区| 亚洲免费色视频| 日韩欧美一级二级三级| 色悠久久久久综合欧美99| 极品少妇xxxx精品少妇| 亚洲精品欧美二区三区中文字幕| 精品国产一区二区三区不卡| 色综合一区二区三区| 久久 天天综合| 亚洲成人免费观看| 中文字幕欧美日韩一区| 91精品国产色综合久久不卡电影 | 99久久精品国产观看| 热久久免费视频| 亚洲人成电影网站色mp4| 精品蜜桃在线看|