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

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

?? tic_mfcdlg.cpp

?? 由MFC實現的一字棋
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	
    for (int i=0; i<9; i++) 
	{
        if (Chess[i] == PLAYER)
            DrawX (pDC, i);
        else if (Chess[i] == COMPUTER)
            DrawO (pDC, i);
    }
	
    pDC->SelectObject (pOldPen);
}

//********************************************************************************************************
//完成功能:初始化棋盤
//*********************************************************************************************************
void CTic_MFCDlg::Reset()
{
	for(int i=0; i<9; i++)
	{
		Chess[i] = EMPTY;
	}
	Invalidate ();

}

//********************************************************************************************************
//完成功能:計算機先走
//*********************************************************************************************************
void CTic_MFCDlg::OnStartCom() 
{

	Reset();
	turn = COMPUTER;
	UpdateData(true);
	SearchDepth = m_dept;
	CClientDC dc (this);
	int result;
	AlphaBeta(Chess,SearchDepth,COMPUTER,-100,100,&result);
	Chess[result] = turn;
	PutAChess(&dc,result);
	

}

//********************************************************************************************************
//完成功能:玩家先走
//*********************************************************************************************************
void CTic_MFCDlg::OnStartPly() 
{

	Reset();
	turn = PLAYER;
	UpdateData(true);
	SearchDepth = m_dept;
}


//********************************************************************************************************
//完成功能:根據輸入棋盤,判斷當前棋盤的結果,COMPUTER勝?PLAYER勝?平局?
//參數:    board:待評估棋盤
//返回:    -1表示:尚未結束
//			0 表示:平局
//			1 表示:PLAYER勝
//			2 表示:COMPUTER勝
//*********************************************************************************************************
int CTic_MFCDlg::isWin(int curPos)
{
	int link;
	int i;
	int j;
	
	
	//判斷左上右下斜線是否有三子連線
	link = 0;
	i = curPos/3;
	j = curPos - i*3;
	while (i>=0&&j>=0)
	{
		if( Chess[i*3+j] == Chess[curPos] )
		{
			link++;
			i--;
			j--;
		}
		else
			break;
	}
	i = curPos/3+1;
	j = curPos - (curPos/3)*3+1;
	while (i<3&&j<3)
	{
		if( Chess[i*3+j] == Chess[curPos] )
		{
			link++;
			i++;
			j++;
		}
		else
			break;
	}
	if (link >= 3)
		return Chess[curPos];
	
	//判斷右上左下斜線是否有三子連線
	link = 0;
	i = curPos/3;
	j = curPos - i*3;
	while (i<3&&j>=0)
	{
		if( Chess[i*3+j] == Chess[curPos] )
		{
			link++;
			i++;
			j--;
		}
		else
			break;
	}
	i = curPos/3-1;
	j = curPos - (curPos/3)*3+1;
	while (i>=0&&j<3)
	{
		if( Chess[i*3+j] == Chess[curPos] )
		{
			link++;
			i--;
			j++;
		}
		else
			break;
	}
	if (link >= 3)
		return Chess[curPos];
	
	//判斷橫向是否有三子連線
	link = 0;
	i = curPos/3;
	j = curPos - i*3;
	while (j>=0)
	{
		if( Chess[i*3+j] == Chess[curPos] )
		{
			link++;
			j--;
		}
		else
			break;
	}
	i = curPos/3;
	j = curPos - (curPos/3)*3+1;
	while (j<3)
	{
		if( Chess[i*3+j] == Chess[curPos] )
		{
			link++;
			j++;
		}
		else
			break;
	}
	if (link >= 3)
		return Chess[curPos];
	
	//判斷縱向是否有三子連線
	link = 0;
	i = curPos/3;
	j = curPos - i*3;
	while (i>=0)
	{
		if( Chess[i*3+j] == Chess[curPos] )
		{
			link++;
			i--;
		}
		else
			break;
	}
	i = curPos/3+1;
	j = curPos - (curPos/3)*3;
	while (i<3)
	{
		if( Chess[i*3+j] == Chess[curPos] )
		{
			link++;
			i++;
		}
		else
			break;
	}
	if (link >= 3)
		return Chess[curPos];
	
	//檢查是否是平局
	for(i = 0;i<9;i++)
	{
		if(Chess[i]==EMPTY)
			break;
	}
	if(i == 9)
		return 0;


	return -1;
	
}

//********************************************************************************************************
//完成功能:放下一個棋子,將turn值在COMPUTER和PLAYER之間交替
//參數:    Pos:待放棋子的位置
//*********************************************************************************************************
void CTic_MFCDlg::PutAChess(CDC *pDC,int Pos)
{
	//改變turn && 打印棋盤
	if (turn == PLAYER)
	{
		turn = COMPUTER;
		DrawX(pDC,Pos);
	}
	else if (turn == COMPUTER)
	{
		turn = PLAYER;
		DrawO(pDC,Pos);
	}
	int result = isWin(Pos);
	if (result == 0)
	{
		MessageBox (_T ("     平局!       "), _T ("Game Over"),MB_ICONEXCLAMATION | MB_OK);
		turn = -1;
	}
	else if (result == PLAYER)
	{
		MessageBox (_T ("    玩家勝!       "), _T ("Game Over"),MB_ICONEXCLAMATION | MB_OK);
		turn = -1;
	}
	else if (result == COMPUTER)
	{
		MessageBox (_T ("    電腦勝!       "), _T ("Game Over"),MB_ICONEXCLAMATION | MB_OK);
		turn = -1;
	}
}

//********************************************************************************************************
//完成功能:根據輸入棋盤,判斷當前棋盤的估價值,估價函數為課本P129所講:
//			若是MAX的必勝局,則e = +INFINITY,這里為+60
//			若是MIN的必勝局,則e = -INFINITY,這里為-20,這樣賦值的原因是機器若贏了,則不考慮其它因素。
//			其它情況,棋盤上能使CUMPUTER成三子一線的數目為e1
//					  棋盤上能使PLAYER  成三子一線的數目為e2,
//					  e1-e2作為最終權值
//參數:    board:待評估棋盤
//返回:    評估結果
//*********************************************************************************************************
int CTic_MFCDlg::evaluate(int board[])
{
	int i,a,b,c;
	int result = 0;

	for( i=0; i<8; ++i ) 
	{
		a = winPattern[i][0];
		b = winPattern[i][1];
		c = winPattern[i][2];
		//機器現三子連珠,賦60作無窮大
		if(board[a]==COMPUTER&&board[b]==COMPUTER&&board[c]==COMPUTER)
			result+=60;
		//否則,權值加1
		else if((board[a]==COMPUTER||board[a]==EMPTY)&&(board[b]==COMPUTER||board[b]==EMPTY)&&(board[c]==COMPUTER||board[c]==EMPTY))
			result++;

		//玩家出現三子連珠,賦-20作無窮小
		if(board[a]==PLAYER&&board[b]==PLAYER&&board[c]==PLAYER)
			result-=20;
		//否則,權值減1
		else if((board[a]==PLAYER||board[a]==EMPTY)&&(board[b]==PLAYER||board[b]==EMPTY)&&(board[c]==PLAYER||board[c]==EMPTY))
			result--;
	}
	return result;
}

//********************************************************************************************************
//完成功能:根據輸入棋盤,搜索深度,及其他參數,給出一個相應的最優解,存入result中。
//參數:    board :待評估棋盤
//			Depth :搜索深度
//			turn  :當前是機器走(MAX結點)還是玩家走(MIN結點)
//			Alpha :alpha值,第一次調用默認-100
//			Beta  :beta值,第一次調用默認+100
//			result:輸出結果
//返回:    若當前點為MAX節點,則返回alpha值;
//			若當前點為MIN節點,則返回beta值
//*********************************************************************************************************
int CTic_MFCDlg::AlphaBeta(int Board[], int Depth, int turn, int Alpha, int Beta, int *result)
{
	int score;
	if (Depth == 0)
		return evaluate(Board); // 葉子節點返回估值
	if (turn == PLAYER) // 此句用于判斷當前節點是何種節點
	{ // turn=PLAYER表示極小值的節點
		for (int i=0;i<9;i++) // 對每一可能的走法m
		{
			// 生成新節點
			if(Board[i] == EMPTY)
			{
				Board[i] = turn; 
				score =AlphaBeta(Board, Depth-1, COMPUTER, Alpha, Beta, result); // 遞歸搜索子節點
				Board[i] = EMPTY; // 撤銷搜索過的節點
				if (score < Beta)
				{
					Beta = score ; // 取極小值
					if (Alpha >= Beta)
						return Alpha ; // 剪枝,拋棄后繼節點
				}
			}	
		}
		return Beta ; // 返回最小值
	}
	else
	{ // 取極大值的節點
		for (int i=0;i<9;i++) // 對每一可能的走法m
		{
			// 生成新節點
			if(Board[i] == EMPTY)
			{
				Board[i] = turn;
				score =AlphaBeta(Board, Depth-1, PLAYER, Alpha, Beta, result) ; // 遞歸搜索子節點
				Board[i] = EMPTY; // 撤銷搜索過的節點
				if (score > Alpha)
				{
					if (Depth == SearchDepth)
						*result = i;
					Alpha = score ; // 取極大值
					if (Alpha >= Beta)
						return Beta ; // 剪枝,拋棄后繼節點
				}
			}
		}
		return Alpha ; // 返回最大值
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av一二三不卡影片| 中文字幕久久午夜不卡| 久久久久国产免费免费| 亚洲国产精品一区二区www在线 | 国产成人一区在线| 欧美性生活久久| 国产精品沙发午睡系列990531| 亚洲高清久久久| 99在线热播精品免费| 精品卡一卡二卡三卡四在线| 亚洲福利国产精品| 91视频在线观看| 中文字幕在线观看一区二区| 韩国精品主播一区二区在线观看| 色婷婷激情久久| 亚洲欧美综合色| 成人污污视频在线观看| 欧美精品一区二区不卡| 美腿丝袜亚洲色图| 91精品婷婷国产综合久久性色| 一区二区在线观看av| 97精品久久久午夜一区二区三区| 国产日韩欧美精品综合| 国产在线精品一区二区| 日韩精品一区二区三区在线| 麻豆国产精品视频| 日韩欧美一级片| 久久99蜜桃精品| 精品国产乱码久久久久久蜜臀| 日本欧美一区二区| 日韩视频在线你懂得| 奇米精品一区二区三区在线观看一 | 欧美亚洲免费在线一区| 亚洲综合久久久久| 欧美日韩免费观看一区二区三区| 亚洲靠逼com| 欧美日韩一区中文字幕| 亚洲成人在线观看视频| 欧美精品1区2区| 久久66热偷产精品| 久久久91精品国产一区二区三区| 国产在线一区二区综合免费视频| 久久先锋资源网| 成人国产一区二区三区精品| 亚洲欧美国产三级| 欧美高清视频在线高清观看mv色露露十八 | 精品国产乱码久久久久久图片| 国产在线精品一区二区不卡了| 国产校园另类小说区| 99久久久免费精品国产一区二区| 亚洲免费视频成人| 欧美一区二区三区四区五区 | 国产一区二区主播在线| 日本一区二区免费在线观看视频| www.亚洲在线| 亚洲www啪成人一区二区麻豆| 91精品国产综合久久婷婷香蕉| 久久99精品国产91久久来源| 国产精品日韩成人| 欧美色欧美亚洲另类二区| 麻豆精品一区二区三区| 国产免费观看久久| 91成人免费在线视频| 精品制服美女丁香| 中文字幕中文字幕在线一区| 欧美日韩国产综合视频在线观看| 国产九色精品成人porny| 国产精品传媒在线| 日韩精品一区二区三区在线观看 | 亚洲一区中文日韩| 欧美va亚洲va在线观看蝴蝶网| 成人激情免费网站| 日本午夜一区二区| 亚洲精品大片www| 26uuu亚洲综合色| 欧美三区在线视频| 99久久免费精品高清特色大片| 人人狠狠综合久久亚洲| 亚洲欧美日韩国产另类专区| 欧美成人aa大片| 欧美在线免费视屏| 成人综合婷婷国产精品久久蜜臀| 午夜视频在线观看一区| 国产精品久久久久久久久果冻传媒| 欧美精品tushy高清| 91色乱码一区二区三区| 国产91精品一区二区麻豆亚洲| 日本少妇一区二区| 亚洲国产精品久久人人爱| 国产欧美精品国产国产专区| 欧美成人官网二区| 6080日韩午夜伦伦午夜伦| 一本久久精品一区二区| 国产成人精品一区二区三区四区 | 精品一区二区免费| 亚洲综合一区二区精品导航| 国产精品视频第一区| 久久久久久久久伊人| 日韩亚洲欧美一区二区三区| 欧美日韩免费高清一区色橹橹| 91女人视频在线观看| thepron国产精品| 国产成人免费视频| 国产电影精品久久禁18| 国产一区二区久久| 激情久久久久久久久久久久久久久久| 亚洲成人高清在线| 亚洲一二三四在线| 亚洲国产美国国产综合一区二区| 亚洲男人天堂一区| 亚洲综合激情网| 亚洲狠狠爱一区二区三区| 亚洲一区二区三区四区不卡| 亚洲国产精品久久人人爱 | 韩国一区二区三区| 国内成人精品2018免费看| 日本视频中文字幕一区二区三区| 天堂在线亚洲视频| 日本不卡一区二区三区高清视频| 亚洲成av人片在线观看| 日韩av在线发布| 国产在线播放一区| 国产成a人亚洲精| 99re这里只有精品6| 色哦色哦哦色天天综合| 欧美伊人精品成人久久综合97| 色美美综合视频| 7777精品伊人久久久大香线蕉 | 一区二区在线观看视频| 亚洲国产精品一区二区www在线| 日韩精品乱码免费| 老司机免费视频一区二区| 国产综合色视频| 99久久99久久免费精品蜜臀| 在线亚洲精品福利网址导航| 欧美精品丝袜久久久中文字幕| 欧美一区二区精美| 国产欧美一二三区| 一区二区三区成人| 麻豆91在线播放| 不卡视频一二三四| 在线观看欧美黄色| 欧美一区二区在线免费观看| 国产亚洲精品精华液| 亚洲精品日韩综合观看成人91| 午夜精品视频一区| 国产a区久久久| 欧美高清视频一二三区 | 天堂成人国产精品一区| 久久国产尿小便嘘嘘| a美女胸又www黄视频久久| 欧美日韩国产另类一区| 国产亚洲欧美一级| 亚洲免费观看高清完整版在线观看| 日本中文一区二区三区| 波多野结衣中文一区| 欧美蜜桃一区二区三区| 国产精品久久毛片| 欧美aa在线视频| 91极品视觉盛宴| 久久久精品蜜桃| 婷婷综合另类小说色区| 成人a级免费电影| 欧美不卡在线视频| 亚洲制服丝袜在线| 成人手机在线视频| 日韩免费观看2025年上映的电影| 综合婷婷亚洲小说| 国产不卡在线视频| 日韩一二在线观看| 婷婷综合五月天| 91福利视频久久久久| 国产精品久久国产精麻豆99网站| 美国十次了思思久久精品导航| 色天天综合色天天久久| 国产精品美日韩| 国产精品综合网| 日韩精品一区二区三区视频播放| 亚洲成av人片一区二区梦乃| 99久久婷婷国产精品综合| 久久久亚洲综合| 麻豆极品一区二区三区| 555夜色666亚洲国产免| 亚洲成人av中文| 欧美午夜电影一区| 亚洲精品视频在线观看免费| av动漫一区二区| 国产精品区一区二区三| 国产伦精一区二区三区| 欧美tk—视频vk| 日韩福利视频导航| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲不卡av一区二区三区| 91官网在线免费观看| 日韩美女视频一区| 99re6这里只有精品视频在线观看| 中文字幕在线观看一区二区| 972aa.com艺术欧美| 亚洲人成亚洲人成在线观看图片| 99在线热播精品免费|