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

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

?? chessmap.cpp

?? 一個用MFC做的象棋游戲,可以聯網雙人對下,
?? CPP
字號:

#include "stdafx.h"
#include "chessmap.h"
#include  <iostream>
#include<fstream>
#include "Array.h"

//加載DLL
#pragma comment(lib,"ArrayDll")
using namespace std;
extern CMyArr theArr;
void CChessMap::Create(CChessMan *initChessState[][9],int nRow,int nCol)
{
	m_nSteps=0;
	m_nRow=nRow;
	m_nCol=nCol;
	for(int i=0;i<m_nRow;i++)
	{
		for(int j=0;j<m_nCol;j++)
		{
			TheStateOfAllChess[i][j]=initChessState[i][j];
		}
	}
}
void CChessMap::Show()
{
	ofstream fOut(L"c:\\1.txt");
	for (int i=0;i<m_nRow;i++)
	{
		for (int j=0;j<m_nCol;j++)
		{
			if (TheStateOfAllChess[i][j])
			{
				fOut<<"<"<<i<<'\t'<<j<<'\t'<<TheStateOfAllChess[i][j]->m_uRoleID<<std::endl;
			}
		}
	}
}
void CChessMap::ResetStatePos(int i,int j,CChessMan* thisChess)
{
	TheStateOfAllChess[i][j]=thisChess;
}
CChessMan *CChessMap::FindStatePos(int i,int j)
{
	return TheStateOfAllChess[i][j];
}
CChessMan* CChessMap::FindStatePos(POINT thisPos,int &nPosX,int &nPosY)
{
	CChessMan *chessREF;
	bool bBreak=false;
	for (int i=0;i<m_nRow;i++)
	{
		for (int j=0;j<m_nCol;j++)
		{
			if (TheStateOfAllChess[i][j])
			{
                 chessREF=TheStateOfAllChess[i][j];
				 bBreak=true;
				 break;
			}
		}
		if (bBreak)
		{
			bBreak=false;
			break;
		}
	}
	UINT u_RefRow,u_RefCol;
	u_RefRow=chessREF->uRow;
	u_RefCol=chessREF->uCol;
	chessREF->ResetPos(thisPos);
	nPosX=chessREF->uCol;
	nPosY=chessREF->uRow;
	chessREF->ResetPos(u_RefCol,u_RefRow);
	for (int i=0;i<m_nRow;i++)
	{
		for(int j=0;j<m_nCol;j++)
		{
			if(TheStateOfAllChess[i][j]&&TheStateOfAllChess[i][j]->IfThisPosMe(thisPos))
			{
				return TheStateOfAllChess[i][j];
			}
		}
	}
	return NULL;
}

void CChessMap::Draw(CDC *pDC)
{
	
		//CDC *memDC=new CDC;
		//memDC->CreateCompatibleDC(pDC);
		//CBitmap memBitmap;
		//memBitmap.CreateCompatibleBitmap(pDC,900,680);
		//memDC->SelectObject(&memBitmap);
		//memDC->FillSolidRect(0,0,900,680,pDC->GetBkColor());
		//myPaper.Draw(pDC);
		//memDC.SelectObject(&myPaper.m_btMap);
	
		for (int i=0;i<m_nRow;i++)
		{
			for (int j=0;j<m_nCol;j++)
			{
				if(TheStateOfAllChess[i][j])
				{
					//TheStateOfAllChess[i][j]->Draw(pDC);
					TheStateOfAllChess[i][j]->Draw(pDC);
					if (CChessMan::m_stcChosenID==TheStateOfAllChess[i][j]->m_uRoleID)
					{
						//TheStateOfAllChess[i][j]->ShowIAmHere(pDC);
						TheStateOfAllChess[i][j]->ShowIAmHere(pDC);
					}
				}
			}
		}
		//pDC->SetBkColor(RGB(255,255,255));
		//pDC->BitBlt(0,0,900,680,memDC,0,0,SRCCOPY);
	
}
bool CChessMap::IfManInMidOfHead(int row,int col)
{
	bool bUpHead,bDownHead;
	bUpHead=bDownHead=false;
	int nIndex=row;
	if (row<0||row>9||col<0||col>8)
	{
		AfxMessageBox(_T("在計算棋子是否在將之間越界了"));
		return false;
	}
	while (nIndex)
	{
         nIndex--;
		 if (TheStateOfAllChess[nIndex][col])
		 {
			 if (TheStateOfAllChess[nIndex][col]->m_uRoleID==16)
			 {
				 bUpHead=true;
			 }
			 break;
		 }
	}
	nIndex=row;
	while (nIndex+1<=9)
	{
		nIndex++;
		if (TheStateOfAllChess[nIndex][col])
		{
			if (TheStateOfAllChess[nIndex][col]->m_uRoleID==32)
			{
				bDownHead=true;
			}
			break;
		}
	}
	if (bUpHead&&bDownHead)
	{
		return true;
	}
	return false;

}
CChessMap::~CChessMap()
{
	for(int i=0;i<m_nRow;i++)
	{
		for(int j=0;j<m_nCol;j++)
		{
			//delete TheStateOfAllChess[i][j];
		}
		//delete[]TheStateOfAllChess[i];
	}
	//delete[]TheStateOfAllChess;
}
void  CChessMap::ShowCurrentRole(int i,int j,CDC *pDC)
{
	TheStateOfAllChess[i][j]->ShowIAmHere(pDC);
}


void CChessMap::Clear()
{
	for(int i=0;i<10;i++)
	{
		for (int j=0;j<9;j++)
		{
			if (TheStateOfAllChess[i][j])
			{
				delete TheStateOfAllChess[i][j];
				TheStateOfAllChess[i][j]=NULL;
			}
		}
	}
}
bool CChessMap::IfHeadCanGo(CChessMan *pOldChess,POINT nextPos,int nFlag)
{
	UINT uOldRow,uOldCol;
	uOldRow=pOldChess->uRow;///保存原先的位置
	uOldCol=pOldChess->uCol;
	pOldChess->ResetPos(nextPos);//先假定到了新位置
	UINT uNewRow,uNewCol;
	uNewRow=pOldChess->uRow;
	uNewCol=pOldChess->uCol;//保存新的位置
	pOldChess->ResetPos(uOldCol,uOldRow);//再恢復到原先的位置
	int nOldState=theArr.Find(uNewRow,uNewCol);//查找新的位置的情況,這里肯定是返回0
	CChessMan *pNewChess=TheStateOfAllChess[uNewRow][uNewCol];
	TheStateOfAllChess[uNewRow][uNewCol]=pOldChess;
	if (1==nFlag)//表示是A方的
	{
		////處理兩個老將面對面的時候也是不允許的
		bool bMid=false;
		bMid=IfManInMidOfHead(uNewRow+1,uNewCol);
		if (!theArr.Find(uNewRow+1,uNewCol)&&bMid)
		{
			TheStateOfAllChess[uNewRow][uNewCol]=pNewChess;
			return false;
		}
		return true;
	}
	else if (2==nFlag)//表示是B方的
	{
		bool bMid=false;
		bMid=IfManInMidOfHead(uNewRow-1,uNewCol);
		if (!theArr.Find(uNewRow-1,uNewCol)&&bMid)
		{
			TheStateOfAllChess[uNewRow][uNewCol]=pNewChess;
			return false;
		}
		return true;
	}
	TheStateOfAllChess[uNewRow][uNewCol]=pNewChess;
	return true;
}
/*
bool CChessMap::IfHeadCanGo(CChessMan *pOldChess,POINT nextPos,int nFlag)
{
	bool bLegal=false;
	UINT uOldRow,uOldCol;
	uOldRow=pOldChess->uRow;///保存原先的位置
	uOldCol=pOldChess->uCol;
    pOldChess->ResetPos(nextPos);//先假定到了新位置
	UINT uNewRow,uNewCol;
	uNewRow=pOldChess->uRow;
	uNewCol=pOldChess->uCol;//保存新的位置
	pOldChess->ResetPos(uOldCol,uOldRow);//再恢復到原先的位置
	int nOldState=theArr.Find(uNewRow,uNewCol);//查找新的位置的情況,這里肯定是返回0
	CChessMan *pNewChess=TheStateOfAllChess[uNewRow][uNewCol];
	TheStateOfAllChess[uNewRow][uNewCol]=pOldChess;
	if (1==nFlag)//表示是A方的
	{
		////處理兩個老將面對面的時候也是不允許的
		bool bMid=false;
		bMid=IfManInMidOfHead(uNewRow+1,uNewCol);
		if (!theArr.Find(uNewRow+1,uNewCol)&&bMid)
		{
			TheStateOfAllChess[uNewRow][uNewCol]=pNewChess;
			return false;
		}

		theArr.Set(uNewRow,uNewCol,1);//因為是A方的將的,所以這里要先設置成1表示現在這里虛擬一個A方的棋子
		theArr.Set(uOldRow,uOldCol,0);//把原先自己的位置設置成虛擬的沒有了
		for (int i=0;i<m_nRow;i++)
		{
			for (int j=0;j<m_nCol;j++)
			{
				if (TheStateOfAllChess[i][j]&&TheStateOfAllChess[i][j]->m_uRoleID>=17)///尋找B方非空的
				{
					bLegal=TheStateOfAllChess[i][j]->IfNextPosLegal(nextPos);
					if (bLegal)
					{
						theArr.Set(uNewRow,uNewCol,nOldState);//恢復原來的零
						theArr.Set(uOldRow,uOldCol,1);
						TheStateOfAllChess[uNewRow][uNewCol]=pNewChess;
						return  false;
					}
				}
			}
		}
		theArr.Set(uNewRow,uNewCol,nOldState);
		theArr.Set(uOldRow,uOldCol,1);
		TheStateOfAllChess[uNewRow][uNewCol]=pNewChess;
		return true;
	}
	else if (2==nFlag)//表示是B方的
	{
		bool bMid=false;
		bMid=IfManInMidOfHead(uNewRow-1,uNewCol);
		if (!theArr.Find(uNewRow-1,uNewCol)&&bMid)
		{
			TheStateOfAllChess[uNewRow][uNewCol]=pNewChess;
			return false;
		}
		theArr.Set(uNewRow,uNewCol,2);
		theArr.Set(uOldRow,uOldCol,0);
		for (int i=0;i<m_nRow;i++)
		{
			for (int j=0;j<m_nCol;j++)
			{
				if (TheStateOfAllChess[i][j]&&TheStateOfAllChess[i][j]->m_uRoleID<=16)///尋找A方非空的
				{
					if (TheStateOfAllChess[i][j]->IfNextPosLegal(nextPos))
					{
						theArr.Set(uNewRow,uNewCol,nOldState);
						theArr.Set(uOldRow,uOldCol,2);
						TheStateOfAllChess[uNewRow][uNewCol]=pNewChess;
						return  false;
					}
				}
			}
		}
		theArr.Set(uNewRow,uNewCol,nOldState);
		theArr.Set(uOldRow,uOldCol,2);
		TheStateOfAllChess[uNewRow][uNewCol]=pNewChess;
		return true;
	}
	theArr.Set(uNewRow,uNewCol,nOldState);
	TheStateOfAllChess[uNewRow][uNewCol]=pNewChess;
	return true;
}*/


bool CChessMap::IfHeadSafe(CChessMan *pChess,UINT uNextRow,UINT uNextCol)//判斷任走一步棋子自己的將是不是會處于危險之中
{
	CChessMan *pHead=NULL;
	bool bBreak=false;
	UINT uOldRow,uOldCol;
	uOldRow=pChess->uRow;
	uOldCol=pChess->uCol;
	int nOldState=theArr.Find(uOldRow,uOldCol);
	int nNextState=theArr.Find(uNextRow,uNextCol);
	if (pChess->m_uRoleID<=16)//表示改動的是A方的棋子
	{
		theArr.Set(uOldRow,uOldCol,0);
		theArr.Set(uNextRow,uNextCol,1);//要重新設置位置的變化這些改變都是虛擬的后面要變回來的

		for (int i=0;i<m_nRow;i++)
		{
			for (int j=0;j<m_nCol;j++)
			{
				if (TheStateOfAllChess[i][j]&&TheStateOfAllChess[i][j]->m_uRoleID==16)
				{
					pHead=TheStateOfAllChess[i][j];
					if (pChess==pHead)
					{
						return true;
					}
					bBreak=true;
					break;
				}
			}
			if (bBreak==true)
			{
				break;
			}
		}
		for (int i=0;i<m_nRow;i++)
		{
			for(int j=0;j<m_nCol;j++)
			{
                if (TheStateOfAllChess[i][j]&&TheStateOfAllChess[i][j]->m_uRoleID>=17)
                {
					bool bIfSave=false;
					bIfSave=TheStateOfAllChess[i][j]->IfNextPosLegal(pHead->m_ptNowPos);
					if (bIfSave)
					{

						theArr.Set(uOldRow,uOldCol,nOldState);
						theArr.Set(uNextRow,uNextCol,nNextState);
						return false;///如果有一個對方的棋子在下一步可以吃到你的將那么這一步就是不安全的
					}
                }
			}
		}
		theArr.Set(uOldRow,uOldCol,nOldState);
		theArr.Set(uNextRow,uNextCol,nNextState);
		return true;
	}
	else if (pChess->m_uRoleID>=17)
	{
		theArr.Set(uOldRow,uOldCol,0);
		theArr.Set(uNextRow,uNextCol,2);
		for (int i=0;i<m_nRow;i++)
		{
			for (int j=0;j<m_nCol;j++)
			{
				if (TheStateOfAllChess[i][j]&&TheStateOfAllChess[i][j]->m_uRoleID==32)
				{
					pHead=TheStateOfAllChess[i][j];
					if (pChess==pHead)
					{
						return true;
					}
					bBreak=true;
					break;
				}
			}
			if (bBreak==true)
			{
				break;
			}
		}
		for (int i=0;i<m_nRow;i++)
		{
			for(int j=0;j<m_nCol;j++)
			{
				if (TheStateOfAllChess[i][j]&&TheStateOfAllChess[i][j]->m_uRoleID<=16)
				{
					bool bIfSave=false;
					bIfSave=TheStateOfAllChess[i][j]->IfNextPosLegal(pHead->m_ptNowPos);
					if (bIfSave)
					{
						theArr.Set(uOldRow,uOldCol,nOldState);
						theArr.Set(uNextRow,uNextCol,nNextState);
						return false;///如果有一個對方的棋子在下一步可以吃到你的將那么這一步就是不安全的
					}
				}
			}
		}
		theArr.Set(uOldRow,uOldCol,nOldState);
		theArr.Set(uNextRow,uNextCol,nNextState);
		return true;
	}
	theArr.Set(uOldRow,uOldCol,nOldState);
	theArr.Set(uNextRow,uNextCol,nNextState);
	return true;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产毛片精品视频| 欧美一级二级三级蜜桃| 欧美一区二区三区四区视频| 亚洲电影中文字幕在线观看| 91久久国产综合久久| 丝袜亚洲精品中文字幕一区| 日韩欧美国产午夜精品| www.亚洲色图| 一区二区三区国产豹纹内裤在线| 91麻豆精品国产91久久久久| 成人ar影院免费观看视频| 91蜜桃视频在线| 日韩av电影天堂| 久久久精品影视| av在线播放不卡| www.欧美日韩| 欧美性做爰猛烈叫床潮| 国产乱人伦偷精品视频不卡| 亚洲男女一区二区三区| 日韩欧美在线一区二区三区| 精品88久久久久88久久久| 97久久精品人人爽人人爽蜜臀| 日本大胆欧美人术艺术动态| 激情伊人五月天久久综合| 成人欧美一区二区三区视频网页| 欧美天堂亚洲电影院在线播放| 色老汉一区二区三区| 日韩欧美一级二级三级久久久| 2024国产精品| 日韩精品一区二区三区在线观看 | 91久久精品日日躁夜夜躁欧美| 99久久婷婷国产精品综合| 国产精品毛片无遮挡高清| 色诱视频网站一区| 蜜桃久久久久久| 中文字幕亚洲欧美在线不卡| 亚洲午夜久久久久| 狠狠色综合日日| 91一区二区在线| 日韩免费成人网| 亚洲婷婷综合久久一本伊一区 | 欧美一区二区二区| 国产欧美精品国产国产专区| 91麻豆精品国产91久久久更新时间| 精品国产百合女同互慰| 一区二区三区精品在线| 国内外精品视频| 欧美一a一片一级一片| 欧美经典一区二区三区| 欧美色大人视频| 欧美日韩三级一区二区| 国产精品天天摸av网| 日日噜噜夜夜狠狠视频欧美人| 成熟亚洲日本毛茸茸凸凹| 国产东北露脸精品视频| 国产69精品久久99不卡| 97精品电影院| 日本一区二区三区久久久久久久久不 | 日韩国产欧美视频| 国产成人综合在线播放| 91麻豆精品国产91久久久久久久久 | 久久综合精品国产一区二区三区| 亚洲精品视频在线观看免费| 综合久久综合久久| 国产精品一级在线| 日韩欧美一二区| 日韩福利视频网| 欧洲色大大久久| 欧美一区二区三区播放老司机 | 欧美日韩精品一区二区在线播放| 欧美日韩dvd在线观看| 中文字幕日韩一区| 不卡的电影网站| 国产精品欧美极品| 成人18精品视频| 亚洲欧美在线视频观看| 99久久精品情趣| 亚洲视频免费观看| 日本道精品一区二区三区| 中文字幕中文乱码欧美一区二区| 午夜婷婷国产麻豆精品| 国产精品一级黄| 欧美国产日韩精品免费观看| 成人免费看片app下载| 国产精品全国免费观看高清| 99久久免费精品| 一区二区三区四区中文字幕| 欧美网站大全在线观看| 麻豆精品一区二区| 久久中文娱乐网| 99v久久综合狠狠综合久久| 日本亚洲三级在线| 精品久久免费看| 亚洲国产美女搞黄色| 欧美欧美午夜aⅴ在线观看| 五月天中文字幕一区二区| 日韩免费电影一区| 色综合一个色综合亚洲| 精品久久久久久久一区二区蜜臀| 国产精品18久久久久久vr| 欧美激情资源网| 欧美在线免费视屏| 国模娜娜一区二区三区| 中文字幕一区二区三区蜜月| 欧美午夜宅男影院| 国产综合久久久久影院| 亚洲激情网站免费观看| 日韩视频在线观看一区二区| 成人午夜精品一区二区三区| 一区二区在线观看视频在线观看| 日韩女优毛片在线| 99精品欧美一区二区三区小说 | 久久影音资源网| 日本精品视频一区二区三区| 免费在线看成人av| 欧美高清你懂得| 亚洲一区二区三区视频在线 | 亚洲欧美日韩系列| 日韩一级在线观看| 91亚洲精华国产精华精华液| 久久精品国产精品青草| 欧美精品 日韩| 北条麻妃国产九九精品视频| 免费一区二区视频| 亚洲国产日产av| 中文字幕一区二区三区在线不卡| 日韩一区二区中文字幕| 91蝌蚪porny九色| 成人午夜视频在线观看| 久久99国产精品成人| 91精品欧美综合在线观看最新| 大尺度一区二区| 国产一区二区日韩精品| 日本午夜精品一区二区三区电影 | 国产精品欧美经典| 精品人在线二区三区| 欧美图区在线视频| 色狠狠一区二区三区香蕉| 国产不卡视频一区二区三区| 久久精品国产网站| 免费观看一级特黄欧美大片| 一区二区欧美视频| 一区二区三区在线观看动漫| 国产精品国产三级国产普通话三级| 精品国产麻豆免费人成网站| 欧美一级生活片| 日韩欧美一二区| 精品国产乱码久久久久久夜甘婷婷| 91精品国产综合久久久蜜臀粉嫩 | 亚洲欧洲一区二区在线播放| 久久天天做天天爱综合色| 日韩欧美久久久| 精品国产一二三| 久久久噜噜噜久久中文字幕色伊伊| 日韩免费视频一区二区| 久久久久久久久久久久电影| 国产亚洲欧美日韩俺去了| 粉嫩aⅴ一区二区三区四区五区| 狠狠色丁香九九婷婷综合五月| 裸体健美xxxx欧美裸体表演| 九九视频精品免费| 国产不卡视频在线播放| 91免费在线看| 精品视频一区二区不卡| 日韩一卡二卡三卡四卡| 久久美女艺术照精彩视频福利播放| 久久这里只精品最新地址| 国产欧美精品一区二区色综合 | 日日噜噜夜夜狠狠视频欧美人| 日韩和欧美一区二区三区| 激情综合色播五月| 成人午夜激情在线| 欧美日韩免费视频| 精品久久久久久亚洲综合网| 国产精品久久久久久久裸模 | 国产精品一区二区在线播放| 不卡一卡二卡三乱码免费网站| 91色婷婷久久久久合中文| 色八戒一区二区三区| 日韩免费视频一区二区| 国产精品乱码人人做人人爱| 亚洲综合一区在线| 国产一区二区不卡| 在线免费观看不卡av| 亚洲人成网站在线| 奇米四色…亚洲| 成人激情小说网站| 91精品国产乱码| 国产精品视频在线看| 肉色丝袜一区二区| 99久久99久久久精品齐齐| 欧美一级日韩免费不卡| 日韩一区欧美小说| 国产一区二区按摩在线观看| 欧美影院一区二区| 国产精品久久久久久久久免费桃花| 日日摸夜夜添夜夜添国产精品| 成人精品国产免费网站| 日韩欧美的一区| 香蕉乱码成人久久天堂爱免费|