版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、void InitMap_show(); 初始化地图 本程序是基于API技术,用VC+ 6.0 MFC开发工具编写的,实现了数独小游戏。 数独游戏 区f 1 2 9 5 8 Fl:生成地图 F2:显示辅助数据 F4:自动求解 F5:重开本局 4 8 6 9 9 8 5 3 1 2 1 7 9 5 8 ry 3 9 1 9 3 2 rr 5 2 4 6 3 9 6 5 ( 1 8 4 以下为全部源程序代码。 /written by luweikang/ shudu.cpp : Defines the entry point for the application, /finished 2010-
2、06-20 #includc include Mstdafx.hM #include #includc define tPaint #dcfine tPaintTime #dcfine ROW #dcfine COL #define LEN #dcfine StartY #dcfine StartX int CurrentX=0: 2 重绘定时器的标识(编号) 50窗口重绘的时间间隔 9 方格的行数不列数 9 /方格的行数不列数 40 每个方格大小为40X40像素 3 / 3 绘制方格地图时的边界起始位置 int CurrentY=0: /当前操作位宜 int vaIueROWCOL; 记录每
3、个方格中的数字 void Initvalue(); 初始化方格中的数字为0 int judge(); 判断当前位置是否能输入用户想要输入的数字 void random(); 实现随机生成整张地图上的数字 int change99; 用于记录各个位巻的数字是否可改变,0丌可变,1可变 void Initchange(); 初始化change数组中的值 int IsSuccess(); 判断是否完成 int answer999; /用于保存每个方格可以填入的数字 void InitanswerO; 初始化answcr8199全部为0 void bauto(int n); 自动求解 void sho
4、whelpO; 求辅助数据 bool help=O; 是否显示辅助数据 bool f; 成功标志 int tmp=20; /记录当前地图是哪副 int easy2199= 用于存储初级地图 0,00.03,0208, 028Q4Q130, 0,09,&0.047, 0,3,1.020,5,9.0, 0.0539丄7,0.0, 09047,581,3, 6Q4O2, Q3Q6.0, 0,762,5,40&0 0.000Q4Q5,2, Q7.0丄4, 0,0 丄 0Q&3,0.6, 0J20Q6.439, 0,090416&
5、5, 0,060,3,527, 067.0丄 , 1,5.000,3,028, 020Q59060 0,7&4Q0.036, 4J.9.0Q820.0, 0Q6.0, 0,9.5.06407, l07,5Q0.00.0, 0,3,4.0 丄7,568, 0.&1.0Q9.624, 0.020Q0.0Q3, 040.020.0.&5 090.0Q&020, 080.097Q4.0, 0,7Q520,968, 0.07g0Q5,3, 02903,5.000, 03,527,1680, .&0.5Q0, 0.00,7
6、Q0.094, 048052136 0Q5.0Q067, 0A7A4A0,9.0h Q1.0Q0, 0,5 丄 0,3,0,0,0,0, 023.0丄&5Q0, 080,79,5,3,02, 136.0302&0, 05.0 J.&3Q5.6, 5,9. & 060.701 0 丄&0Q, 0,790,0,0,5,8,0, 0.060Q5Q1.0, 0,5,2,0,3,7,9,0,8, 001,5,284,7,3, 0,3,7096.00 , 74&3,2, 0O0.0JQ045, 080Q5Q0.9.6
7、 特殊 Q, 078.560.392, 0.09040J60, 0.230Q5,906, 097,3,020.0.0, 0.0Q9Q6.723, OAO J29Q7.O, 7J.0038049, O,&0.0.5Q030 第八种 0,20Q905,8, 040.0Q86.0.9, 9.0.8Q5Q3 丄 2, 0Q1,79580.0, O.7,3OQO.O9,1, 0.090320.0.7, 0.5,7024.063, 0.900Q0.000, 0.06571.0.&4 0,3,600,94&5, 9,4.00Q8Q70, 0/780Q6.0
8、Q9, 4.6.07&0.090, 0.07Q0,3Q40, 60,7,2, 0,5,3.090.064, 09400,0.1,5,0, 0Q26540Q7 0.0 丄&9,3,567, 08740,103.0, 0,3,9,7,500 0, 4,0.003,5Q00, 0Q&0Q4Q9 , 0,02,l.&, 020,5Q7.086, 0.6.0,320,0.0.0, 0,70.0Q&3,40 039.048025, 6.&2Q5Q0.0.0, 4,5,7Q2,0Q&0, 5,169,0,3,0,0,4, 9
9、,4,30Q050, 2.0.&4Q5J.0.9, 020.0Q0.063, OQO.OQO.O.9,2, 0Q42360.0.0 0Q&0Q0.020, 0,3204090.0, 5,74023,0.8, 26Q4.0, 0.065Q 127,3, 0,1.5.0Q00Q9, 021,780.035, 0,4,3 JQ0Q0.0, 7,5,003,4,8,1,0 0,80,3Q0.059, 0,4.00Q06,7, 0,5,701,9.038, 0,182Q0.0Q3, 020,0,7,3,8,0,4, 0.0.0.&9Q025, 0,3,2.04,5,
10、9,8,0, 3Q5O0, 765,9,8A0A0 O.O.O.O.&9Q5.6, 0.864Q5.029, 0,000Q7.008, 0,1,8642093, 063.&0,120.0, 0,0.5Q7,3,08 , 6.0.0 A3 AO AO, 94062, 0,9000037 0.0O2Q0.0Q9, 520Q094Q3, 0890Q00.00, 0.0.09760丄4, 094,52&3,70, 0.60,3Q0905, 0 丄 3,4,5,260,0, 002&0丄00.7, 0Q863,724.0 第16种 0,79.0
11、丄4.006, 0JQ027Q0.0, 0.0.6 A&9.0丄7, 9,500.3,2670, 0.6.749Q0Q8, 0,3丄 0,6,0,0,0,0, Q1,3,6.2, O,OQ&7,3,5,41, 0.0.0Q5Q089 0Q5.060O0.9, 0A0AL&2,4,5, &923Q0Q7.0, 0,5,70&9.00,3, 021006090, 0,6. &0320.0.1, 0.&0.021.060, 0J40Q0.037, 0.0.9,&4Q5,2 0,5.00921,3,6, 0000.54008
12、, 1.0008,3,059, 08392Q0 丄4, 7,00,5Q0082, 0200,3,0.060, 935208700, 0,6.741,5,&0.0, 0.0.0O0Q025 0372090Q4, 0890001,0.7, 0,6,7 丄&0Q0, 0.60,39,0000, 0,02075,048, 0,740Q2Q00, 640.&0 丄 7Q2, 7Q3,946.0.8, 0J.&0Q0.030 , 第20种 0,3,5009027, 02935,1.068, Q4Q0.9, 0,5Q560,0Q3, &7O5Q3Q0.2
13、, O4O.O02OQ5, 6.0.403,7200, 0,1,392,087,4, 0.0.0Q0,5.096 测试数据 7,12369.4,5.8, 3,4,52186,7,9, 9,6,&4,5亿3丄2, 4,2795,836, 5,73&4、629, 689,132547, 8,5,7,924,6,3, L9A6,&3,7,2,5, 2,36571。8.4 LRESULT CALLBACK WndProc( HWND. UINT, WPARAM. LPARAM ); int APIENTRY WinMain(HINSTANCE hlnstance, HINSTA
14、NCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow) / written by luweikang / TODO: Place code here. static TCHAR szAppName = TEXT (HRussionH); 窗口处理函数 HWND MSG WNDCLASS hwnd; msg; wndclass; =CS.HREDRAW I CS_VREDRAW; =WndProc; =0; wndclass.cbWndExtra = 0; wndclass.hlnstance wndclass.hlcon wndclass.hCurs
15、or =hlnstance: =Loadlcon( NULL, IDI_APPLICATION ); =LoadCursor( NULL, IDC_ARROW ); wndclass.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH ); wndcIass.lpszMenuName = NULL; wndclass JpszClassNamc = szAppName; if( !RegisterCIass( &wndclass ) MessageBox( NULL. TEXT (MProgram requires Windows N
16、T!”), szAppName. NIBCONERROR ); return 0; hwnd = CreateWindow( szAppName, TEXT (”数独游戏”), WS.OVERLAPPED I WS.SYSMENU I WS_BORDER, CW_USEDEFAUIX CW_USEDEFAULT. (COL + 4)* LEN+2, ROW * LEN + 40, 窗口宽度 窗口髙度 (包括标题栏部分29pix) NULL, NULL, hlnstance, NULL ); ShowWindow( hwnd, iCmdShow); UpdateWindow( hwnd); wh
17、ile( GetMessage( &msg NULL. 0,0 ) TranslateMessage( &msg ); DispatchMessage( &msg); return msg.wParam: void Initvalue() 初始化地图上的每一个值,使其为零 int y, x; for( y = O;y ROW; y+ ) for( x = 0; x COL; x+ ) valueyx = 0;wndclass.style wndclass.lpfnWndProc wndclass.cbClsExlra void InitchangeO int row2,
18、col2; for(row2=0;row29;row2+) for(col2=0;col29;co!2+) if(valuerow2co 12=0) changerow2co =1; else changerow2co 12=O; ) void Initanswer() int a.b,c; for(a=0;a9;a+) for(b=0;b9;b+) for(c=0;c9;c+) answerabc=O; int IsSuccessO int row4,col4; int count=8199,9,999.999; for(row4=0;row49;row4+) ( for(col4=0;co
19、l49;col4+) countvaluerow4col4-; ) if(countl=0& count2=0 &count3=0&count4=0&count5=0 &count6 =O& count7=0&count81=0 &count9=0) return 1; else return 0; int judge(int value row,int col) int down_rowdown_coLup_row,up_col; for(down_row=0;down_rowrow;up_row-) 判断方格向下的
20、格子 if(value 1 =valueup_rowcol) return 0; for(down_col=0:down_colcol;up_col) 判断方格向右的格子 if(valucl=valucrowup_col) return 0; int a_row=row/3,b_row=row%3,a_col=col/3,b_col=col%37/用于记录当前格子所在的小九 宫格的位置 int minLrowjninLcol; switch(a_row) case 0:/这个大九宫格在最上三行 switch(a_col) case 0:/这个大九宫格在最前三列 for(mini_row=0;m
21、ini_row3 ;mini_row+) for(mini_col=0:mini_colv3:mini_col+) if(valuel=valuemini_row|minLcol) return 0; break; case 1:/这个大九宫格在中间三列 for(mini_row=0;mini_row3:mini_row+) for(mini_col=3;mini_colv6:mini_col+) if(valuel=valuemini_row|minLcol) return 0; break; case 2:这个大九宫格在最后三列 for(minLrow=0;mini_row3:mini_r
22、ow+) ( for(mini_col=6;minLcol9;minLcol+) if(valuel=valuemini_rowminLcol) return 0; break; ) break; case 1:/这个大九宫格在中间三行 switch(a_col) case 0:/这个大九宫格在最前三列 for(minLrow=3;mini_row6;mini_row+) for(mini_col=0;minLcol3;minLcol+) if(valuel=value(mini_rowminLcol) return 0; break; case 1:/这个大九宫格在中间三列 for(minL
23、row=3;mini_row6;mini_row+) ( for(minLcoI=3:mini_col6;mini-col+) if(valuel=valuemini_rowminLcol) return 0; break; case 2:/这个大九宫格在最后三列 for(minLrow=3;mini_row6;minLrow+) for(mini_col=6;minLcol9;minLcol+) if(valuel=valuemini_rowminLcol) return 0; break; ) break; case 2:这个大九宫格在最下三行 switch(a_col) case 0:/
24、这个大九宫格在最前三列 for(minLrow=6;mini_row9;mini_row+) for(mini_col=0:mini_colv3;mini_col+) if(valuel=value(mini_rowminLcol) return 0; break; case 1:/这个大九宫格在中间三列 fdr(mini_row=6;mini_row9;minLrow+) for(minLcol=3;mini_col6;minLcol+) if(valuel=vaIueminLrow(minLcol) return 0; break; case 2:/这个大九宫格在最后三列 for(niin
25、Lrow=6;minLrow9;mini_row+) for(mini_col=6;mini_col9;mini_col+) if(value 1 =valuemini_rowmini_col) return 0; break; break; return 1; void showhelpO InitanswerO; int row8.col8jiumbe.i; for(row8=0;row89;row8+) for(col8=0;col89;col8+) if(valuerow8Hcol8=0 &changerow8col8) i=0; for(numbe= 1 ;numbe 10;
26、numbe+) if(judge(numbejow8xol8) ( answerrow8col8i+=numbe; void bauto(int n) int row7=n/9.col7=n%9.num; for(num= 1:num 10& changerow7col7 ;num+) if(n81 &judge(num,row7,col7)&changerow7col7) valuerow7col7=num; bauto(n+l); if(changerow7col7& !f) value row7 col7 =0; if(n0) CurrentX-=l; e
27、lse if(CurrentX=0) Current X=8; break; case VK.RIGHT: /”向右”方向键 if(CurrentX0) CurrentY-=l; else if(CurrentY=0) CurrentY=8; break; case VK_DOWN: /”向下”方向键:下移一个位置 if(CurrentY8) CurrentY+=l; else if(CurrentY=8) CurrentY=O; break; case 0 x30: 响应数字0键 valueCurrentYCurrentX=O; break: case 0 x31: if(!judge( 1
28、 .CurrentY,CurrentX) break; value! Current Y Current X =1; showhelpO; break; case 0 x32: if( !judge(2,CurrentY,CurrentX) break; valueCurrentYCurrentX=2; showhelpO; break: case 0 x33: if(!judge(3,CurrentYCurrentX) break; value|CurrentYCurrentX=3; showhelpO; break; case 0 x34: if( !judge(4,CurrentY.Cu
29、rrentX) break; valueCurrentYCurrentX=4; showhelpO; break; case 0 x35: if( !judge(5,CurrentY.CurrentX) break; valueCurrent Y CurrentX=5: showhelpO; break; case 0 x36: if( !judge(6.CurrcntY.CurrentX) break; value|CurrentYCurrcntX=6; showhelpO; break: case 0 x37: if( !judge(7.CurrentY.CurrentX) break;
30、valueCurrent Y CurrentX =7; showhelpO; break; case 0 x38: if( !judge(8,CurrentY,CurrentX) break; value|CurrentYCurrentX=8; showhelpO; break; case 0 x39: if( !judge(9.CurrentYCurrentX) break; valueCurrentYCurrentX=9; showhelpO; break: case VK_F1: f=O; hclp=O: mem_fuzhu= 10000: while( 1) mem=rand()%20
31、; if(mem_fuzhu !=mcm) break: ) tmp=mem: mem_fuzhu=mem; for(row3=0;row39;row3+) for(col3=0;col39;col3+) valiierow3col3=easyfincmrow3Hcol3; Initchange(); break; case VK_F2: Initanswer(); showhelpO; help=!help; break; case VK_F4: bauto(O); break; case VK_F5: hclp=O: for(row3=0;row39;row3+) for(col3=0;c
32、ol39;col3+) value! row3 co I3=easytmprow3col3; )/end of case WM_KEYDOWN break; case WM_PAINT: 重绘窗口工作区 hdc = BeginPaint( hwnd, &ps); hdcMem = CreateCompatibleDC( hdc ); hBitMap = CreateConipatibleBitmap( hdc, cxClient, cyClient); SelectObject( hdcMem, hBitMap ); 画地图最外而的白色矩形 Rcctangle( hdcMcm, Sta
33、rtX,StartYSlartX + LEN * COL, StartY + LEN ROW ); Rectangle( hdcMem. StartX + LEN * COL+ 3, StartY . StartX + LEN * COL+ 149, StartY + LEN * ROW); 画右边的白色文本区域 /* hPen = CreatePen( PS_SOLID. 1, RGB(180, 180, 180); SelectObject( hdcMeni hPen); hBrush = CreateSolidBmsh( RGB(250,250,250); SelectObject( h
34、dcMeni, hBrush); for( y = 0; y ROW : y+ ) 画地图中的每一格 ( for( x = 0; x COL; x+ ) Rectangle( hdcMeni, StartX + LEN * x, StartY + LEN * y, StartX + LEN * (x + 1), StartY + LEN * (y + 1); hPen = CreatePen( PS_SOLID 1, RGB(255. 0, 0); SelectObject( hdcMeni, hPen ); Rectangle( hdcMem, StartX + 119, StartY .S
35、tartX + 121, StartY + 360); 横竖各两 条画红线 Rectangle( hdcMem. StartX + 239、StartY .StartX + 241, StartY + 360); Rectanglef hdcMem. StartX , StartY + 119,StartX + 360. StartY +121); Rectanglef hdcMem. StartX , StartY + 239,StartX + 360, StartY + 241); DcleteObject( hPen); DeleteObject( hBrush ); 画能移动的当前活动
36、的蓝色方格 hPen = CreatePen( PS_SOLID. 1, RGB 0, 255); SelectObject( hdcMeni, hPen ); hBrush = CreateSoIidBrush( RGB(255, 255, 255); SelectObject(hdcMem, hBnish); Rectangle( hdcMeni StartX + LEN * CurrcntX. StartY + LEN * CurrentYStariX +LEN * (CurrentX + 1), StartY + LEN * (CurrentY + 1); Rectangle( hdc
37、Mem, StartX + LEN * CurrentX+L StartY + LEN * CurrentY+l,StartX +LEN * (CurrentX + 1)-1, StartY + LEN * (CurrentY + 1)-1 ); DeleteObject( hPen); DeleteObject( hBrush ); DeleteObject( hBitMap); hfont=CreateFont( 35, 0, 0, 0, FW_HEAV Y 0, 0, 0, GB2312.CHARSET OUT_DEFAULT_PRECIS. CLIP_DEFAULT_PRECIS, D
38、EFAULT_QUALITY, DEFAULT_PITCHIFF_DONTCARE. 粗体字” ); SelectObject(hdcMenihfont); for(int ro=0;rcx9:ro+) for(int co=0;ccx9;co+) if(changero (co=0) SetTextColor(hdcMem,RGB(0.0.0); 设置文本颜色为黑色 TextOut(hdcMeni,StartX+3+LEN*co,StartY+3+LEN*ro,textvaIueroco,strIen(textvalue roco); if(changero co=1) SetTextCol
39、or(hdcMem,RGB(255,0,0); /设置文本颜色为红色 TextOut(hdcMem,StartX+3+LEN*co,StartY+3+LEN*ro,textvalueroco,strlen(textvalue roco); if(help) hfont=CreateFont( 13, 0, 0, 0, FW_HEAV Y 0, 0, 0, GB2312 CHARSET OUT_DEFAUET_PRECIS. CLIP_DEFAULT_PRECIS. DEFAULT_QUALITY, DEFAULT_PITCHIFF_DONTCARE. ”粗体字“ ); SelectObject(hdcMem.hfont); SetTextColor(hdcMem,RGB( 128,128,128);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《电磁学电磁场》课件
- 《奥美品牌管理价值》课件
- 2024届山西省大同市云州区高三上学期期末考试历史试题(解析版)
- 单位管理制度集合大全人力资源管理十篇
- 单位管理制度集粹汇编【职员管理】十篇
- 单位管理制度汇编大合集【职员管理篇】
- 单位管理制度合并汇编【人力资源管理篇】
- 单位管理制度范例汇编人力资源管理篇
- 单位管理制度呈现汇编员工管理篇
- 单位管理制度呈现大全人力资源管理篇十篇
- 2022年部编版四年级道德与法治上册全册教案
- 厂房(钢结构框架)工程施工组织设计施工组织设计DOC
- 人教版新目标九年级英语全册教案
- 幼儿园教学课件——我是哥哥姐姐
- 国内异形盾构机分析课件
- 唤醒孩子内驱力家校共育家庭教育PPT课件(带内容)
- 合成气精脱硫催化剂的研究报告
- 滚装客船货物的积载绑扎系固分解课件
- 中控楼装饰装修方案
- 学校及周边环境集中整治工作台帐
- 江苏省城市设计编制导则
评论
0/150
提交评论