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

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

?? shuductrl.cpp

?? CreateData.cpp 文件是產生9x9矩形的數字算法 ShuDu.java 文件只是為了更好的理解數獨一個文件
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	int l = GameRect.left;
	int t = GameRect.top;
	CRect drawRect;

	for(int i=0;i<9;i++)
	{
		for(int j=0;j<9;j++)
		{
			if(MarkData[i][j] == 1)
			{
				drawRect.left = l + j * w;
				drawRect.right = drawRect.left + w;
				drawRect.top = t + i * h;
				drawRect.bottom = drawRect.top + h;
				drawRect.DeflateRect(1,1,1,1);
				pDC->FillSolidRect(&drawRect,RGB(210,210,210));
			}
		}
	}
}
void CShuDuCtrl::DrawSelectNumber(CDC *pDC)
{
	if(!GameStarted)return;
	if(beDragging)return;

	int w = PIC_WIDTH+16;
	int h = PIC_HEIGHT+16;
	int l = GameRect.left;
	int t = GameRect.top;
	if(TargetRow>=0 && TargetRow <9 && TargetCol>=0 && TargetCol<9 && m_GameData[TargetRow][TargetCol]!=0)
	{
		int num = m_GameData[TargetRow][TargetCol];
		//搜索所有當前數字
		CRect rect;
		for(int i=0;i<9;i++)
		{
			for(int j=0;j<9;j++)
			{
				if(m_GameData[i][j] == num)
				{
					rect.left = l + j * w;
					rect.right = rect.left + w;
					rect.top = t + i * h;
					rect.bottom = rect.top + h;
					rect.DeflateRect(1,1,1,1);
					pDC->FillSolidRect(&rect,RGB(110,240,240));
				}
			}
		}
	}
	else if(TrackNumber >0)
	{
		COLORREF NumColor = RGB(235,0,0);
		COLORREF AreaColor = RGB(150,150,150);
		CRect rect; 
		for(int i=0;i<9;i++) 
		{
			for(int j=0;j<9;j++)
			{
				BOOL have = FALSE;
				rect.left = l + j * w;
				rect.right = rect.left + w;
				rect.top = t + i * h;
				rect.bottom = rect.top + h;
				rect.DeflateRect(1,1,1,1);
				if(m_GameData[i][j] == TrackNumber)
					pDC->FillSolidRect(&rect,NumColor);
				else if(m_GameData[i][j] > 0)
				{
					pDC->FillSolidRect(&rect,AreaColor);
				}
				else  //empty
				{
					for(int m=0;m<9;m++)
					{
						if(m_GameData[i][m] == TrackNumber)
						{
							have = TRUE;
						}
						if(m_GameData[m][j] == TrackNumber)
						{
							have = TRUE;
						}
					}
					int sx = (j/3)*3;
					int sy = (i/3)*3;
					//按九宮搜索
					for(m=sy;m<sy+3;m++)
					{
						for(int n=sx;n<sx+3;n++)
						{
							if(m_GameData[m][n] == TrackNumber)
							{
								have = TRUE;
							}
						}
					}
					if(have)
					{
						pDC->FillSolidRect(&rect,AreaColor);
					}
				}//else
			}//for
		}//for
				
	}//else if
}

//畫可用數字
void CShuDuCtrl::DrawAviNumbers(CDC* pDC)
{
	if(!GameStarted)return;

	int w = PIC_WIDTH+16;
	int h = PIC_HEIGHT+16;
	int l = GameRect.left;
	int t = GameRect.top;
	CRect drawRect;
	char TextBuffer[12];
	for(int i=0;i<9;i++)
	{
		for(int j=0;j<9;j++)
		{
			if(m_GameData[i][j] == 0)
			{
				drawRect.SetRect(l+j*w, t+i*h,l+(j+1)*w, t+(i+1)*h);
				strcpy(TextBuffer,"123456789");
				for(int  k=0;k<9;k++)
				{
					int y = m_GameData[k][j];
					int x = m_GameData[i][k];
					if(x!=0)TextBuffer[x-1] = ' ';
					if(y!=0)TextBuffer[y-1] = ' ';
				}
				int sx = (i/3)*3;
				int sy = (j/3)*3;
				for(k = sx; k < sx+3; k++)
				{
					for(int m = sy; m<sy+3; m++)
					{
						if(m_GameData[k][m] !=0)
						{
							TextBuffer[m_GameData[k][m] -1] = ' ';
						}
					}
				}
				for(k=0;k<9;k++)
				{
					if(TextBuffer[k] == ' ')
					{
						BOOL beFind = FALSE;
						for(int m=k+1;m<9;m++)
						{
							if(TextBuffer[m] != ' ')
							{
								beFind = TRUE;
								break;
							}
						}
						if(!beFind)
						{
							TextBuffer[k] = 0;
							break;
						}
						else 
						{
							TextBuffer[k] = TextBuffer[m];
							TextBuffer[m] = ' ';
						}
					}
				}//for(k
				//DrawTextResult
				pDC->DrawText(TextBuffer,k,&drawRect,DT_CENTER | DT_VCENTER | DT_WORDBREAK);
			}
		}//for(int j
	}//for(int i
}
//畫已經放置好的數字圖片
void CShuDuCtrl::DrawGameNumbers(CDC* pDC)
{
	if(!GameStarted)return;

	int w = PIC_WIDTH+16;
	int h = PIC_HEIGHT+16;
	int l = GameRect.left;
	int t = GameRect.top;
	
	for(int i=0;i<9;i++)
	{
		for(int j=0;j<9;j++)
		{
			int n = m_GameData[i][j];
			if(n != 0)
			{
				CPoint pp(l+j*w+8,t+i*h+8);
				GamePicList.Draw(pDC,n-1,pp,ILD_NORMAL);
			}
		}
	}

}
//畫托拽圖片和目標網格
void CShuDuCtrl::DrawDragNumber(CDC* pDC)
{
	int w = PIC_WIDTH+16;
	int h = PIC_HEIGHT+16;
	int l = GameRect.left;
	int t = GameRect.top;

	if(beDragging)
	{

		if(TargetRow>=0 && TargetRow <9 && TargetCol>=0 && TargetCol<9 && m_GameData[TargetRow][TargetCol]==0)
		{
			CPen pen(PS_SOLID,1,RGB(0,0,127));
			CPen* pOld = pDC->SelectObject(&pen);
			pDC->MoveTo(l + TargetCol*w+1,t+TargetRow*h+1);
			pDC->LineTo(l + TargetCol*w+1,t+TargetRow*h+h-1);
			pDC->LineTo(l + TargetCol*w+w-1,t+TargetRow*h+h-1);
			pDC->LineTo(l + TargetCol*w+w-1,t+TargetRow*h+1);
			pDC->LineTo(l + TargetCol*w+1,t+TargetRow*h+1);
			pDC->SelectObject(pOld);
		}
		CPoint pt( MousePos.x - ptDragHot.x, MousePos.y - ptDragHot.y);
		BOOL result = GamePicList.Draw(pDC,DragNumber-1, pt,ILD_NORMAL);
	}
}


void CShuDuCtrl::DeleteSomeNumbers()
{
	for(int i=0;i<9;i++) NumberLeft[i] = 0;
	srand( GetTickCount() );
	int SumDelete; 
	if(GameLevel == 0) SumDelete = EASYLEVEL_NUM;
	else if( GameLevel == 1)
		SumDelete = NORMALLEVEL_NUM;
	else
		SumDelete = HARDLEVEL_NUM;

	int sum = 0;
	for(;;)
	{
		int r = rand()%9;
		int c = rand()%9;
		int num = m_GameData[r][c];
		if(num != 0)
		{
			m_GameData[r][c] = 0;
			MarkData[r][c] = 0;
			NumberLeft[num-1]++;
			sum++;
		}
		if(sum>=SumDelete)break;
	}
}

BEGIN_MESSAGE_MAP(CShuDuCtrl, CStatic)
	//{{AFX_MSG_MAP(CShuDuCtrl)
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	ON_WM_ERASEBKGND()
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CShuDuCtrl message handlers

//只允許從剩余數字中向數獨矩陣托放,方向的用“撤銷”按鈕實現

void CShuDuCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
	POINT ptCursor;
	GetCursorPos(&ptCursor);
	ScreenToClient(&ptCursor);
	CRect picRect;
	for(int i=0;i<9;i++)
	{
		picRect.left = NumberLeftRect.left + 8;
		picRect.right = picRect.left + PIC_WIDTH;
		picRect.top = NumberLeftRect.top + i*(PIC_HEIGHT+16)+14;
		picRect.bottom = picRect.top + PIC_HEIGHT;
		if(picRect.PtInRect(ptCursor) && NumberLeft[i]>0)
		{

			CRect nr;
			nr.left = NumberLeftRect.left;
			nr.top  = NumberLeftRect.top+i*(PIC_HEIGHT+16);
			nr.right= NumberLeftRect.right;
			nr.bottom = nr.top + PIC_HEIGHT+16;

			NumberLeft[i]--;
			DragNumber = i+1;
			beDragging = TRUE;
			ptDragHot.x = ptCursor.x - picRect.left;
			ptDragHot.y = ptCursor.y - picRect.top;
			MousePos = ptCursor;

			Invalidate();
			break;
		}
	}
}

void CShuDuCtrl::OnLButtonUp(UINT nFlags, CPoint point) 
{
	if(beDragging)
	{
		if(TargetRow>=0 && TargetRow <9 && TargetCol>=0 && TargetCol<9 && m_GameData[TargetRow][TargetCol]==0)
		{
			m_GameData[TargetRow][TargetCol] = DragNumber;
			//保存操作
			Step[CurStep].row = TargetRow;
			Step[CurStep].col = TargetCol;
			Step[CurStep].number = DragNumber;
			CurStep++;

			//檢查是否游戲結束
			BOOL Finished = TRUE;
			for(int i=0;i<9;i++)
			{
				if(NumberLeft[i]>0) Finished = FALSE;
			}
			if(Finished && !CheckErrors(&memDC))
			{
				GameCompleted = TRUE; //FINISH THIS GAME
				CWnd* pParent = GetParent();
				if(pParent != NULL)
				{
					pParent->PostMessage(WM_GAMECOMPLETED);
				}
			}
			else
				NeedCheck = TRUE;
		}
		else
		{
			NumberLeft[DragNumber-1]++;
		}

		beDragging = FALSE;
		DragNumber = 0;
		Invalidate();
	}
	
}

void CShuDuCtrl::OnMouseMove(UINT nFlags, CPoint point) 
{
	int NewRow,NewCol;
	int NewTrackNum;
	if(GameStarted)
	{
		POINT ptCursor;
		GetCursorPos(&ptCursor);
		ScreenToClient(&ptCursor);
		
		//計算目標格坐標
		if(GameRect.PtInRect(ptCursor))
		{
			NewRow = (ptCursor.y - GameRect.top) / (PIC_HEIGHT+16);
			NewCol = (ptCursor.x - GameRect.left) / (PIC_WIDTH+16);
		}
		else
		{
			NewRow = -1; NewCol = -1;
		}
		if(NumberLeftRect.PtInRect(ptCursor))
		{
			NewTrackNum =  (ptCursor.y - NumberLeftRect.top) / (PIC_HEIGHT+16) + 1;
		}
		else NewTrackNum = -1;

		MousePos.x = ptCursor.x;
		MousePos.y = ptCursor.y;
		if(beDragging)
		{
			Invalidate();
		}
		if( NewRow!=TargetRow || NewCol!=TargetCol )
		{
			TargetRow = NewRow;
			TargetCol = NewCol;
			Invalidate();
		}
		if(NewTrackNum != TrackNumber)
		{
			TrackNumber = NewTrackNum;
			Invalidate();
		}
	}
}

BOOL CShuDuCtrl::OnEraseBkgnd(CDC* pDC) 
{
	return TRUE;
}

void CShuDuCtrl::OnPaint() 
{
	CPaintDC dc(this); 
	if(!beInitialized)
		Initialize();

	DrawGameBitmap();
	// Do not call CStatic::OnPaint() for painting messages
}
void CShuDuCtrl::DrawGameBitmap()
{
	//準備位圖
	PrepareBitmap();
	CDC *pDC = GetDC();
	pDC->BitBlt(0,0,rectClient.Width(),rectClient.Height(),&memDC,0,0,SRCCOPY);
	ReleaseDC(pDC);
}
void CShuDuCtrl::UnDo()
{
	if(CurStep<=0)return;
	if(!GameStarted || GameCompleted)return;
	int Row = Step[CurStep-1].row;
	int Col = Step[CurStep-1].col;
	ASSERT(Step[CurStep-1].number == m_GameData[Row][Col]);
	m_GameData[Row][Col] = 0;
	NumberLeft[Step[CurStep-1].number-1]++;
	CurStep--;
	Invalidate();
}
void CShuDuCtrl::SetGameLevel(int NewLevel)
{
	if(GameStarted)
	{
		GameStarted = FALSE;
	}
	InitGameData();
	GameLevel = NewLevel; 
	if(GameLevel <0)GameLevel =0;
	if(GameLevel >2)GameLevel =2;
	Invalidate();
}
void CShuDuCtrl::InitGameData()
{
	memset(m_GameData,0,sizeof(SHUDUMETRIX));
	memset(MarkData,0,sizeof(SHUDUMETRIX));
	for(int i=0;i<9;i++) NumberLeft[i] = 0;
	beDragging = FALSE;
	CurStep = 0; 
	NeedCheck = FALSE;
	GameStarted = FALSE;
	GameCompleted = FALSE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美综合另类在线卡通| 欧美日韩国产a| 亚洲激情图片一区| 日韩欧美一级精品久久| 免费av成人在线| 丝袜诱惑制服诱惑色一区在线观看| 亚洲欧洲国产日韩| 日韩成人一级片| 91麻豆精品国产91久久久久久久久 | 精品国产乱码久久久久久牛牛 | 91香蕉视频在线| 国产精品高潮呻吟久久| 色综合一个色综合亚洲| 亚洲特级片在线| 99久久er热在这里只有精品66| 日韩美女视频一区二区| 色国产综合视频| 美女视频黄免费的久久| 久久综合九色综合欧美就去吻| 国产一区二区福利| 亚洲美女视频在线| 欧美日韩一区二区三区在线| 亚洲成人激情社区| 久久亚洲捆绑美女| 欧美午夜理伦三级在线观看| 青青草精品视频| 国产亚洲一本大道中文在线| 国产高清精品网站| 亚洲视频香蕉人妖| 欧美在线观看你懂的| 三级不卡在线观看| 成人免费在线观看入口| 欧美日韩aaaaaa| 成人短视频下载| 日韩精品一级中文字幕精品视频免费观看| 青草av.久久免费一区| 国产精品国产三级国产普通话蜜臀 | 精品免费国产一区二区三区四区| 91麻豆精品国产91久久久久| 国产精品欧美一区二区三区| 婷婷一区二区三区| av网站一区二区三区| 欧美精品粉嫩高潮一区二区| 久久精品人人做人人综合 | 欧美日韩久久久| 亚洲国产日产av| 欧美性生交片4| 亚洲成人av中文| 国产精品欧美极品| 欧美日韩精品一区二区三区 | 色综合久久天天| 国产一区二区网址| 亚洲国产精品麻豆| 一本大道av一区二区在线播放| 国产精品成人免费| 欧美一区二区在线看| 成人免费视频免费观看| 亚洲国产另类精品专区| 亚洲欧美日韩国产一区二区三区| 日韩一区二区三区免费看 | 久久久噜噜噜久久人人看| 91精彩视频在线观看| 国产毛片精品视频| 亚洲国产一区二区a毛片| 国产精品久久久久毛片软件| 日韩精品一区二| 欧美日韩激情一区二区三区| 成人高清视频在线| 国产一区二区在线电影| 精品一区二区在线免费观看| 亚洲一区二区视频| 日韩精品一区二区三区在线播放| 在线一区二区三区四区| 粉嫩在线一区二区三区视频| 美腿丝袜在线亚洲一区| 亚洲国产精品一区二区www在线| 中文幕一区二区三区久久蜜桃| 精品日韩欧美在线| 欧美成人性战久久| 日韩欧美中文字幕制服| 777亚洲妇女| 欧美精品在欧美一区二区少妇| 色又黄又爽网站www久久| 国产美女精品人人做人人爽| 免费观看一级欧美片| 久久99国产乱子伦精品免费| 日本vs亚洲vs韩国一区三区| 自拍偷在线精品自拍偷无码专区| 欧美国产激情二区三区| 精品欧美一区二区三区精品久久| 欧美刺激午夜性久久久久久久| 国产成人在线网站| 欧美精品一区二区久久久| 国产一区二区三区四区在线观看| 国产欧美中文在线| 日韩视频免费观看高清在线视频| 91色视频在线| 国产精品一区二区久久不卡 | 国产乱码精品一区二区三区av| 亚洲一区免费视频| 亚洲另类色综合网站| 亚洲1区2区3区4区| 亚洲成在人线在线播放| 国产精品高清亚洲| 天天爽夜夜爽夜夜爽精品视频| 日日骚欧美日韩| 国产成人综合在线观看| av高清久久久| 国产一区美女在线| 高清在线不卡av| 色噜噜狠狠成人中文综合| 欧美日韩在线播放| 久久色视频免费观看| 中文字幕国产一区二区| 亚洲啪啪综合av一区二区三区| 午夜精品福利一区二区蜜股av| 午夜精品一区二区三区免费视频| 国产精品性做久久久久久| 99精品视频中文字幕| 欧美三级韩国三级日本三斤| 久久精品亚洲精品国产欧美kt∨ | 久久婷婷一区二区三区| 国产精品色在线| 亚洲成人av中文| 99视频精品免费视频| 欧日韩精品视频| 国产午夜精品一区二区三区视频| 亚洲免费在线视频| 蜜桃视频一区二区三区 | 中文字幕亚洲视频| 亚洲不卡一区二区三区| 国产一区二区三区四区五区入口 | 欧美精品一区二区在线观看| 亚洲欧美另类综合偷拍| 免费高清在线视频一区·| jiyouzz国产精品久久| 欧美一区二区三区男人的天堂| 亚洲男帅同性gay1069| 国产a视频精品免费观看| 91精品中文字幕一区二区三区| 国产日韩欧美精品电影三级在线 | 精油按摩中文字幕久久| 欧美亚洲日本国产| 久久精品男人天堂av| 免费一区二区视频| 99久久婷婷国产精品综合| 欧洲一区二区三区在线| 日韩欧美在线123| 国产精品理伦片| 高清不卡一二三区| 91精品国产麻豆国产自产在线 | 精品国产免费人成在线观看| 一区二区在线观看不卡| av亚洲精华国产精华精华| 日韩精品一区二| 欧美精品久久天天躁| 一区二区高清在线| 国产毛片精品视频| www日韩大片| 日韩激情中文字幕| av高清久久久| 中文字幕巨乱亚洲| 美女精品自拍一二三四| 日韩欧美亚洲另类制服综合在线| 亚洲精品国产高清久久伦理二区| 色综合 综合色| 国产女人18水真多18精品一级做| 日日噜噜夜夜狠狠视频欧美人| 一本一道久久a久久精品综合蜜臀| 国产欧美日本一区二区三区| 国产一区二区美女| 日韩视频一区二区在线观看| 久久99国产精品免费网站| 制服视频三区第一页精品| 五月天激情小说综合| 三级精品在线观看| 欧美成人午夜电影| 床上的激情91.| 亚洲乱码精品一二三四区日韩在线| 成人激情免费网站| 亚洲视频在线观看三级| 欧美亚日韩国产aⅴ精品中极品| 国产一区二区三区黄视频 | 欧美日本韩国一区| 男人的j进女人的j一区| 中国av一区二区三区| 国产麻豆精品在线观看| 一级特黄大欧美久久久| 日韩精品一区国产麻豆| 成人91在线观看| 青青草伊人久久| 一区二区三区高清| 91精品在线免费| 国产精品影视在线| 亚洲黄色小说网站| 日韩午夜av一区| 国产一区二区伦理片| 亚洲一区二区三区四区的| 97aⅴ精品视频一二三区| 日本女人一区二区三区|