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

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

?? shuductrl.cpp

?? CreateData.cpp 文件是產生9x9矩形的數字算法 ShuDu.java 文件只是為了更好的理解數獨一個文件
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// ShuDuCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "ShuDu.h"
#include "ShuDuCtrl.h"

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

/////////////////////////////////////////////////////////////////////////////
// CShuDuCtrl

CShuDuCtrl::CShuDuCtrl()
{
	beInitialized = FALSE;
	GameStarted = FALSE;

	//游戲位置
	GameRect.SetRect(5,5,5+9*(PIC_WIDTH+16),5+9*(PIC_HEIGHT+16));
	NumberLeftRect.SetRect(GameRect.right+10,GameRect.top,
		GameRect.right+10+PIC_WIDTH+16,GameRect.top + 9*(PIC_HEIGHT+16));

	//options
	GameLevel = 1; //NORMAL
	beShowAvNumbers = FALSE;
	beShowDragbAreas = TRUE;
	beShowSelectNum = TRUE;

	InitGameData();
}

CShuDuCtrl::~CShuDuCtrl()
{
	memDC.SelectObject(pOldSave);
	SaveScrBitmap.DeleteObject();
	SmallFont.DeleteObject();
}
//功能函數

void CShuDuCtrl::Initialize()
{
	if(beInitialized) return;

	//生成位圖列表
	GamePicList.Create(32,32,ILC_COLOR16|ILC_MASK,9,1);
	CBitmap bmp;
	for(UINT id = IDB_1; id<=IDB_9; id++)
	{
		bmp.DeleteObject();
		if(bmp.LoadBitmap(id))	GamePicList.Add(&bmp,RGB(0,0,0));
	}
	//創建字體
	SmallFont.CreateFont(12,0,0,0,FW_NORMAL,0,0,0,1,
			OUT_CHARACTER_PRECIS,CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"Arial");

	//生成游戲位圖
	CDC* pDC = GetDC();
	memDC.CreateCompatibleDC(pDC);
	GetClientRect(&rectClient);
	SaveScrBitmap.CreateCompatibleBitmap(pDC,rectClient.Width(),rectClient.Height());
				
	pOldSave = memDC.SelectObject(&SaveScrBitmap);
	ReleaseDC(pDC);

	PrepareBitmap();
	beInitialized = TRUE;

}
void CShuDuCtrl::EnableNumbers(BOOL active)
{
	if(beShowAvNumbers == active) return;
	else
	{
		beShowAvNumbers = active;
		Invalidate();
	}
}
void CShuDuCtrl::EnableAreas(BOOL active)
{
	if(beShowDragbAreas == active)return;
	else
	{
		beShowDragbAreas = active;
		Invalidate();
	}
}
void CShuDuCtrl::EnableSelectNum(BOOL active)
{
	if(beShowSelectNum == active)return;
	else
	{
		beShowSelectNum = active;
		Invalidate();
	}
}


void CShuDuCtrl::StartGame(int Data[9][9])
{
	if(!beInitialized)
		Initialize();

	InitGameData();


	//復制數據
	for(int  i=0;i<9;i++)
	{
		for(int j=0;j<9;j++)
		{
			m_GameData[i][j] = Data[i][j];
			MarkData[i][j] = 1;
		}
	}
	//剪除去部分數字
	DeleteSomeNumbers();
	GameStarted = TRUE;
	GameCompleted = FALSE;
	//顯示游戲位圖
	DrawGameBitmap();

}

void CShuDuCtrl::PrepareBitmap()
{
	CRect rect = rectClient;
	memDC.Rectangle(&rect);
	rect.DeflateRect(1,1,1,1);
	memDC.FillSolidRect(&rect,RGB(192,192,192));

	//畫網格以及剩余數字
	DrawGameMetrix(&memDC);
	//畫托放跟蹤區域
	if(beShowDragbAreas)
	{
		DrawDragAreas(&memDC);
	}
	//畫可用數字
	if(beShowAvNumbers)
	{
		DrawAviNumbers(&memDC);
	}

	if(beShowSelectNum)
	{
		DrawSelectNumber(&memDC);
	}
//	DrawStartPos(&memDC);
	//畫已經放置好的數字圖片
	DrawGameNumbers(&memDC);
	//畫托拽圖片和目標網格
	DrawDragNumber(&memDC);
}

//畫網格以及剩余數字
void CShuDuCtrl::DrawGameMetrix(CDC *pDC)
{
	int w = PIC_WIDTH+16;
	int h = PIC_HEIGHT+16;
	int l = GameRect.left;
	int t = GameRect.top;

	COLORREF clr = RGB(230,230,230);
	pDC->FillSolidRect(&GameRect,RGB(255,255,255));

	CRect rect;
	rect.left = l + 3*w;
	rect.right = rect.left + 3*w;
	rect.top = t ;
	rect.bottom = rect.top+3*h;
	pDC->FillSolidRect(&rect,clr);
	rect.left = l;
	rect.right = rect.left + 3*w;
	rect.top = t + 3*h;
	rect.bottom = rect.top+3*h;
	pDC->FillSolidRect(&rect,clr);
	rect.left = l+6*w;
	rect.right = rect.left + 3*w;
	rect.top = t + 3*h;
	rect.bottom = rect.top+3*h;
	pDC->FillSolidRect(&rect,clr);
	rect.left = l + 3*w;
	rect.right = rect.left + 3*w;
	rect.top = t + 6*h;
	rect.bottom = rect.top+3*h;
	pDC->FillSolidRect(&rect,clr);
	for(int i=0;i<=9;i++)
	{
		pDC->MoveTo(l, t + i*h);
		pDC->LineTo(GameRect.right, t + i*h);
		pDC->MoveTo(l+ i*w, t);
		pDC->LineTo(l+ i*w, GameRect.bottom);
	}

	//檢查沖突數字,標記為紅色
	if( NeedCheck)
	{
		if(! CheckErrors(pDC))
			NeedCheck = FALSE; //沒有錯誤,下次不再檢查
	}

	//left
	pDC->FillSolidRect(&NumberLeftRect,RGB(255,255,255));

	CFont* pOld = pDC->SelectObject(&SmallFont);
	pDC->SetBkMode(TRANSPARENT);

	pDC->MoveTo(NumberLeftRect.left , NumberLeftRect.top);
	pDC->LineTo(NumberLeftRect.left , NumberLeftRect.bottom);
	pDC->LineTo(NumberLeftRect.right, NumberLeftRect.bottom);
	pDC->LineTo(NumberLeftRect.right, NumberLeftRect.top);
	for(i=0;i<9;i++)
	{
		pDC->MoveTo(NumberLeftRect.left, NumberLeftRect.top+i*h);
		pDC->LineTo(NumberLeftRect.left + w, NumberLeftRect.top+ i*h);
		pDC->MoveTo(NumberLeftRect.left + w -12, NumberLeftRect.top+ i*h);
		pDC->LineTo(NumberLeftRect.left + w -12, NumberLeftRect.top+ i*h + 12);
		pDC->LineTo(NumberLeftRect.left + w , NumberLeftRect.top+ i*h + 12);
		if(NumberLeft[i]>0)
		{
			GamePicList.Draw(pDC,i,CPoint(NumberLeftRect.left + 8, NumberLeftRect.top + i*h + 14),ILD_NORMAL);
			CString str;
			str.Format("%d",NumberLeft[i]);
			pDC->TextOut(NumberLeftRect.right -9, NumberLeftRect.top + i*h +1 ,str);
		}
	}
	pDC->SelectObject(pOld);

}

//檢查是否有錯誤
BOOL CShuDuCtrl::CheckErrors(CDC *pDC)
{
	if(!GameStarted)return 0;

	int w = PIC_WIDTH+16;
	int h = PIC_HEIGHT+16;
	int l = GameRect.left;
	int t = GameRect.top;

	CRect rect;

	COLORREF ErrorColor = RGB(255,50,50);
	//檢查行
	int Pos1,Pos2,Pos3;
	BOOL FindError = FALSE;
	BOOL ReturnVal = FALSE;
	for(int i=0;i<9;i++)
	{
		for(int j=0;j<9;j++)
		{
			if(m_GameData[i][j] != 0)
			{
				for(int k=j+1;k<9;k++)
				{
					if(m_GameData[i][k] == m_GameData[i][j])
					{
						FindError = TRUE;
						ReturnVal = TRUE;
						Pos1 = i; //行
						Pos2 = j; Pos3 = k;
						break;
					}
				}
			}
			if(FindError)break;
		}
		if(FindError)break;
	}
	if(FindError)
	{
		rect.left = l + Pos2*w;
		rect.right = rect.left + w;
		rect.top = t + Pos1*h;
		rect.bottom = rect.top+h;
		rect.DeflateRect(2,2,2,2);
		pDC->FillSolidRect(&rect,ErrorColor);

		rect.left = l + Pos3*w;
		rect.right = rect.left + w;
		rect.top = t + Pos1*h;
		rect.bottom = rect.top+h;
		rect.DeflateRect(2,2,2,2);
		pDC->FillSolidRect(&rect,ErrorColor);
	}

	//檢查列
	FindError = FALSE;
	for(i=0;i<9;i++)
	{
		for(int j=0;j<9;j++)
		{
			if(m_GameData[j][i] != 0)
			{
				for(int k=j+1;k<9;k++)
				{
					if(m_GameData[k][i] == m_GameData[j][i])
					{
						FindError = TRUE;
						ReturnVal = TRUE;
						Pos1 = i; //列
						Pos2 = j; Pos3 = k;
						break;
					}
				}
			}
			if(FindError)break;
		}
		if(FindError)break;
	}
	if(FindError)
	{
		rect.left = l + Pos1*w;
		rect.right = rect.left + w;
		rect.top = t + Pos2*h;
		rect.bottom = rect.top+h;
		rect.DeflateRect(2,2,2,2);
		pDC->FillSolidRect(&rect,ErrorColor);

		rect.left = l + Pos1*w;
		rect.right = rect.left + w;
		rect.top = t + Pos3*h;
		rect.bottom = rect.top+h;
		rect.DeflateRect(2,2,2,2);
		pDC->FillSolidRect(&rect,ErrorColor);
	}
	//檢查九宮格
	FindError = FALSE;
	POINT position1, position2;
	int XPos[9], YPos[9];
	for(i=0;i<3;i++)
	{
		for(int j=0;j<3;j++)
		{
			//3*3的九宮格
			for(int k=0;k<9;k++)
			{
				XPos[k] = -1; //unused
				YPos[k] = -1; //unused
			}
			for(int m=i*3; m<i*3+3; m++)
			{
				for( int n=j*3; n<j*3+3; n++)
				{
					int num = m_GameData[m][n];
					if(num > 0 && num <=9)
					{
						if(XPos[num-1]>=0 || YPos[num-1]>=0) //Find Error
						{
							position1.x = XPos[num-1];
							position1.y = YPos[num-1];
							position2.x = n;
							position2.y = m;
							FindError = TRUE;
							ReturnVal = TRUE;
							break;
						}
						else
						{
							XPos[num-1] = n;
							YPos[num-1] = m;
						}
					}//if
				}//for

				if(FindError)break;
			}
			//Draw it
			if(FindError)
			{
				rect.left = l + position1.x*w;
				rect.right = rect.left + w;
				rect.top = t + position1.y*h;
				rect.bottom = rect.top+h;
				rect.DeflateRect(2,2,2,2);
				pDC->FillSolidRect(&rect,ErrorColor);

				rect.left = l + position2.x*w;
				rect.right = rect.left + w;
				rect.top = t + position2.y*h;
				rect.bottom = rect.top+h;
				rect.DeflateRect(2,2,2,2);
				pDC->FillSolidRect(&rect,ErrorColor);
			}
		}//for
	}//for

	return 	ReturnVal;
}

//畫托放的區域
void CShuDuCtrl::DrawDragAreas(CDC* pDC)
{
	if(!GameStarted)return;
	int w = PIC_WIDTH+16;
	int h = PIC_HEIGHT+16;
	int l = GameRect.left;
	int t = GameRect.top;

	if(!beDragging) return;
	if(DragNumber < 1 || DragNumber>9)return;
	if(TargetCol<0 || TargetRow < 0 || 	TargetCol >= 9 || TargetRow >= 9)return;

	COLORREF RowColor = RGB(250,230,250); //淺色
	COLORREF GridColor = RGB(250,250,200);  //黃色
	COLORREF SameColor = RGB(255,0,0);

	CRect drawRect;
	//行,列
	for(int i=0;i<9;i++)
	{
		drawRect.left = l + i * w;
		drawRect.right = drawRect.left + w;
		drawRect.top = t + TargetRow * h;
		drawRect.bottom = drawRect.top + h;
		drawRect.DeflateRect(1,1,1,1);
		pDC->FillSolidRect(&drawRect,RowColor);

		drawRect.left = l + TargetCol * 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,RowColor);
	}

	//九宮格
	int sx = (TargetCol/3)*3;
	int sy = (TargetRow/3)*3;
	for(i=sy;i<sy+3;i++)
	{
		for(int j=sx; j<sx+3;j++)
		{
			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,GridColor);
		}
	}
}

//畫原始數據的位置
void CShuDuCtrl::DrawStartPos(CDC *pDC)
{
	int w = PIC_WIDTH+16;
	int h = PIC_HEIGHT+16;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色噜噜狠狠一区二区三区果冻| 国产精品亚洲综合一区在线观看| 欧美日韩亚洲另类| 午夜精品久久久久久不卡8050| 欧美va亚洲va香蕉在线| 国内成人精品2018免费看| 国产精品美女久久久久av爽李琼| 久久国产精品99精品国产| 国产日韩综合av| 成人听书哪个软件好| 亚洲黄色性网站| 欧美成人video| 99久久精品99国产精品| 男女性色大片免费观看一区二区| 成人av影院在线| 26uuu欧美日本| www.日韩在线| 精品国产亚洲一区二区三区在线观看| 国产精品国产成人国产三级 | 欧美va天堂va视频va在线| 亚洲国产电影在线观看| 精品一区二区免费视频| 日韩欧美成人激情| 蜜臀av在线播放一区二区三区| 久久99久久久久久久久久久| 国产欧美日韩另类一区| 欧美日韩国产另类一区| 国产综合色视频| 午夜视频一区在线观看| 久久你懂得1024| 国产一区999| 亚洲成av人片在线| 日韩欧美一级二级| 国产精品一区二区三区网站| 国产欧美日韩中文久久| 91网上在线视频| 亚洲国产成人高清精品| 日韩精品中文字幕一区二区三区 | 欧美一区二区性放荡片| 亚洲成人手机在线| 欧美日韩国产小视频| 国产一区二区中文字幕| 亚洲一线二线三线视频| 色婷婷亚洲婷婷| 欧美大肚乱孕交hd孕妇| 久久99热99| 亚洲色图在线播放| 久久伊人中文字幕| 亚洲免费av高清| 在线亚洲精品福利网址导航| 亚洲色图在线看| 国产精品乱码一区二三区小蝌蚪| xfplay精品久久| 中文字幕精品一区二区三区精品 | 国产成人免费视频网站| 精品在线观看免费| 欧美日韩一区二区在线视频| 国内久久精品视频| 国产精品白丝在线| 中文久久乱码一区二区| 欧美日韩国产一级| 精品一区二区三区久久| 免费人成精品欧美精品| 国产精品久久久久久久裸模| 精品国产一区a| 国产精品情趣视频| 日韩毛片一二三区| 欧美精品一区二区精品网| 欧美日韩一区视频| 91精品国产一区二区| 欧美一区二区三区视频免费播放 | 亚洲电影一级片| 亚洲老司机在线| 久久久久久一二三区| 久久精品人人做人人综合| 51精品国自产在线| 国产精品影视在线| 91免费版在线| 亚洲成人av电影| 亚洲成人午夜影院| 日本亚洲三级在线| 粉嫩13p一区二区三区| 成人av电影在线| 欧美亚洲国产一卡| 91精品国产高清一区二区三区蜜臀| 久久综合一区二区| 中文字幕在线免费不卡| 夜夜嗨av一区二区三区网页| 日韩va欧美va亚洲va久久| 国产一二精品视频| 欧美在线你懂的| 26uuu色噜噜精品一区| 国产精品久久久久aaaa| 日本成人中文字幕在线视频| 成人黄动漫网站免费app| 日韩免费电影一区| 亚洲精选免费视频| 福利一区二区在线观看| 欧美一区二区三区思思人| 亚洲精品国产一区二区三区四区在线| 日韩高清在线不卡| 日本丶国产丶欧美色综合| 欧美激情一二三区| 精彩视频一区二区三区| 欧美日韩国产在线观看| 欧美日韩在线播放三区| 18成人在线观看| 极品少妇xxxx偷拍精品少妇| 日韩视频免费直播| 亚洲成人在线免费| 欧美网站大全在线观看| 一区二区三区中文在线| 91久久精品日日躁夜夜躁欧美| 中文无字幕一区二区三区| 国产乱国产乱300精品| 亚洲精品在线观看网站| 国内精品久久久久影院薰衣草 | 欧美变态凌虐bdsm| 中文字幕中文在线不卡住| 国产精品99久久久久久久vr| 国产日韩成人精品| 97se亚洲国产综合自在线| 亚洲女同一区二区| 欧美精品一区视频| av不卡一区二区三区| 国产精品色在线观看| 蜜桃久久精品一区二区| 欧美高清视频不卡网| 婷婷综合久久一区二区三区| 亚洲自拍偷拍av| 免费成人在线视频观看| 亚洲高清免费观看高清完整版在线观看| 国产精品久久久久三级| 大陆成人av片| 国产清纯在线一区二区www| 国产裸体歌舞团一区二区| 久久夜色精品国产欧美乱极品| 精品一区二区久久久| 久久综合99re88久久爱| 国产精品白丝av| 国产精品免费网站在线观看| 91网页版在线| 亚洲国产欧美另类丝袜| 欧美三级一区二区| 麻豆一区二区99久久久久| 国产精品黄色在线观看| 欧美高清视频在线高清观看mv色露露十八| 精品夜夜嗨av一区二区三区| 国产精品乱码一区二区三区软件| 91久久精品国产91性色tv| 国产成人在线视频网站| 亚洲第一综合色| 国产精品乱码人人做人人爱| 日韩色在线观看| 亚洲一区二区av电影| 美女网站色91| 国产成人精品免费视频网站| 欧美成人一级视频| 国产福利一区在线| **网站欧美大片在线观看| 色噜噜狠狠成人中文综合| 日韩中文字幕不卡| 久久久久久免费毛片精品| 成人国产精品免费网站| 亚洲一区影音先锋| 日韩欧美在线影院| 国产成a人亚洲| 亚洲国产aⅴ成人精品无吗| 欧美一二区视频| 粉嫩av一区二区三区在线播放| 一区二区三区日韩精品视频| 欧美一区二区三区人| 成人午夜短视频| 亚洲电影一区二区| 久久综合久久鬼色| 91福利社在线观看| 国产在线精品一区二区| 亚洲女人****多毛耸耸8| 欧美一区二区三区视频在线| 成人a级免费电影| 美国欧美日韩国产在线播放| 中文字幕亚洲不卡| 777奇米四色成人影色区| 成人精品视频一区二区三区 | 2021中文字幕一区亚洲| 色综合久久六月婷婷中文字幕| 美美哒免费高清在线观看视频一区二区 | 欧美成人aa大片| 91免费国产视频网站| 久久精品国产第一区二区三区| 日韩毛片视频在线看| 久久综合色综合88| 欧美日韩黄色一区二区| 成人激情图片网| 久久se精品一区二区| 一区二区三区欧美视频| 中文字幕国产一区| 日韩西西人体444www| 欧美在线啊v一区| www.av精品|