亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美日韩一区二区三区不卡| 免费成人美女在线观看.| 国产精品18久久久久| 337p亚洲精品色噜噜噜| 日韩av电影免费观看高清完整版在线观看| 欧美日韩国产色站一区二区三区| 欧美韩日一区二区三区四区| av电影在线不卡| 国产精品国产精品国产专区不蜜 | 在线日韩一区二区| 一区二区三区波多野结衣在线观看 | 精品国产人成亚洲区| 免费成人在线视频观看| 日韩一区二区精品葵司在线| 加勒比av一区二区| 久久五月婷婷丁香社区| 午夜欧美2019年伦理| 亚洲精品在线观看网站| 国产高清亚洲一区| 国产精品全国免费观看高清 | 日韩电影在线免费看| 日韩一级黄色大片| 韩国v欧美v日本v亚洲v| 久久久一区二区| av中文字幕在线不卡| 亚洲欧美激情视频在线观看一区二区三区| 韩国理伦片一区二区三区在线播放 | 丝袜美腿亚洲综合| 日韩精品专区在线影院重磅| 成人在线综合网站| 亚洲精品老司机| 欧美久久一二区| 成人午夜在线视频| 一区二区三区中文字幕电影| 91网上在线视频| 日本不卡123| 欧美极品美女视频| 欧美日韩午夜在线视频| 精品一区二区三区影院在线午夜| 国产欧美日韩另类视频免费观看| 欧美日韩成人综合在线一区二区| 精品一区免费av| 日韩美女啊v在线免费观看| 日韩久久久久久| 国产河南妇女毛片精品久久久| 国产精品久久久久aaaa樱花| 国产精品传媒视频| 7777精品伊人久久久大香线蕉完整版 | 色婷婷av一区二区三区gif| 午夜精品久久久久久久蜜桃app| 国产日韩欧美电影| 欧美日韩午夜在线| 国产成人免费高清| 麻豆国产精品777777在线| 国产精品视频在线看| 色婷婷激情久久| 成人性生交大合| 青草av.久久免费一区| 国产精品色婷婷| 欧美一区二区三区性视频| 午夜激情一区二区三区| 中文字幕精品—区二区四季| 欧美色区777第一页| 91麻豆国产香蕉久久精品| 久久精品国产99久久6| 综合久久给合久久狠狠狠97色| 久久精品视频一区| 在线不卡中文字幕| 92精品国产成人观看免费| 国产精品系列在线播放| 日韩国产在线观看| 精品国产乱码久久久久久1区2区| 欧美日韩激情一区二区| 91丝袜美腿高跟国产极品老师 | 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲三级在线看| 国产日韩欧美精品电影三级在线| 日韩欧美视频一区| 制服丝袜亚洲网站| 欧美性感一区二区三区| 欧美性生交片4| 99国产精品国产精品毛片| 青青草国产精品97视觉盛宴| 日本欧美一区二区三区乱码| 亚洲国产cao| 亚洲欧美福利一区二区| 综合激情网...| 国产精品不卡在线观看| 国产精品初高中害羞小美女文| 精品国产乱码久久| 日韩免费福利电影在线观看| 2023国产精品自拍| 欧美电影精品一区二区| 成人免费高清在线| 91浏览器打开| 色综合欧美在线视频区| 91麻豆国产在线观看| 色偷偷久久人人79超碰人人澡| 成人av免费在线播放| 在线亚洲免费视频| 欧美亚一区二区| 亚洲精品日韩一| 亚洲成人久久影院| 亚洲一二三级电影| 青青草原综合久久大伊人精品 | 日韩三级电影网址| 日韩免费观看高清完整版| 国产视频一区二区在线| 国产欧美视频在线观看| 国产精品福利一区| 亚洲成人一二三| 日韩高清在线电影| 午夜精品视频一区| 国产成人免费在线视频| yourporn久久国产精品| 在线免费不卡视频| 日韩欧美的一区| 国产午夜亚洲精品理论片色戒| 亚洲欧美日韩一区二区三区在线观看| 伊人开心综合网| 日本美女一区二区三区视频| 丁香啪啪综合成人亚洲小说| 不卡视频一二三四| 99精品久久99久久久久| 日韩一区二区在线观看视频播放| 欧美精品一区男女天堂| 国产性天天综合网| 午夜精品一区在线观看| 国产精品一区在线观看乱码| 成人精品高清在线| 精品日产卡一卡二卡麻豆| 欧美激情一区二区三区全黄| 奇米一区二区三区| 成人午夜视频网站| 亚洲女人****多毛耸耸8| 日韩不卡在线观看日韩不卡视频| 国产精品羞羞答答xxdd| 欧美性感一区二区三区| 久久精品无码一区二区三区| 亚洲在线免费播放| 国产麻豆成人精品| 欧美一区二区在线看| 国产精品电影一区二区三区| 日本中文在线一区| 色呦呦日韩精品| 欧美成人猛片aaaaaaa| 亚洲精品久久7777| 国产一区二区三区在线观看免费 | 国产精品传媒视频| 日日夜夜精品免费视频| 国产自产v一区二区三区c| 正在播放一区二区| 国产精品久久久久久久久免费相片 | 亚洲乱码国产乱码精品精的特点| 丝瓜av网站精品一区二区| 在线精品观看国产| 国产欧美日本一区视频| 亚洲影视在线播放| 色婷婷亚洲婷婷| 亚洲国产电影在线观看| 国产乱妇无码大片在线观看| 欧美日韩1区2区| 亚洲欧美一区二区视频| 99re这里只有精品首页| 久久久亚洲国产美女国产盗摄| 亚洲国产日韩精品| 色94色欧美sute亚洲线路一久| 日本一区二区免费在线观看视频| 国产精品69久久久久水密桃| 日韩午夜激情免费电影| 樱桃国产成人精品视频| 一本到不卡精品视频在线观看| 日本一区二区综合亚洲| 粉嫩aⅴ一区二区三区四区五区| 欧美一级在线免费| 午夜视频久久久久久| 777奇米成人网| 午夜激情久久久| 在线观看日韩毛片| 一区二区三区中文免费| 99r国产精品| 亚洲国产一区二区a毛片| av电影在线观看一区| 日韩欧美一区在线| 裸体一区二区三区| 欧美一二三四区在线| 久久99国产精品尤物| 日韩精品专区在线影院观看| 性做久久久久久免费观看| 91精品国产免费| 蜜臀精品一区二区三区在线观看 | 国产乱码精品一区二区三区忘忧草 | 亚洲电影激情视频网站| 欧美日韩大陆一区二区| 日韩黄色免费网站| 色综合色狠狠天天综合色| 国产精品区一区二区三区| 91蝌蚪porny| 国产不卡视频一区| 久久色在线视频|