win32编程 C++ 九格拼图游戏
#include <windows.h>
#include <string>
#include <ctime>
HDC windowDC = NULL;//窗口DC
RECT rect;
HDC memDC =NULL;//记忆DC
HWND hwnd ;
HFONT Font;//字体物件
HDC flowerDC=NULL;//鲜花图片DC
HBITMAP flower=NULL;
UINT width;//屏幕宽
UINT height;//屏幕高
int Role_Status;//运动方向
bool isWin = false;
//定义运动方向
#define Role_UP 0
#define Role_DOWN 1
#define Role_LEFT 2
#define Role_RIGHT 3
char * ch ="尤一炜是个傻冒。";
int character[3][3]={{3,2,0},
{4,8,1},
{5,6,7}};
//int character[3][3]={{0,1,2},
// {3,7,5},
// {6,4,8}};
//空白图片所在的位置
int focusX=1;
int focusY=1;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
void DoMain(void);//主循环
void Move(void);//移动主角
void ClearScr(void);//清屏
void ShowScr(void);//显示屏幕
void showFlower(void);//显示鲜花
void swap(int &a,int &b);
bool checkWin(void);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("尤一炜是个傻冒。") ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;//回调消息处理函数
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
//wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;//窗口图标
wndclass.hIcon = LoadIcon (hInstance, "QQ.ico") ;//窗口图标
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName= szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
width=GetSystemMetrics(SM_CXSCREEN);
height= GetSystemMetrics(SM_CYSCREEN);
hwnd = CreateWindow( szAppName, // window class name
TEXT ("尤一炜是个傻冒。"), // window caption
WS_OVERLAPPEDWINDOW, // window style
width/2-150,// initial x position
height/2-150,// initial y position
316,// initial x size
337,// initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
windowDC=GetDC(hwnd);
//创建字体
Font=CreateFont(100,
0,
0,
0,
400,
FALSE,
FALSE,
0,
GB2312_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS,
"黑体");
SelectObject(windowDC,Font);
SetBkMode(windowDC,TRANSPARENT);
SetTextColor(windowDC,RGB(0,0,255));
flowerDC=CreateCompatibleDC(windowDC);
flower=CreateCompatibleBitmap(windowDC,width,height);
flower=(HBITMAP)LoadImage(NULL,"flower.bmp",IMAGE_BITMAP,310,310,LR_LOADFROMFILE);
SelectObject(flowerDC,flower);
//启动前选让电脑随机走100步,打乱图片
srand((unsigned)time(0));
for(int i =0;i < 100;i++)
{
Role_Status = rand () % 4;
Move();
}
ShowScr();
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
if(false==isWin)
{
ClearScr();
DoMain();
ShowScr();
if(checkWin())
{
showFlower();//游戏结束,显示鲜花图片
}
}
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect (hwnd, &rect) ;
//DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,
// DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
EndPaint (hwnd, &ps) ;
//return 0 ;
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"确定结束游戏?","确定结束游戏?",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage (0) ;
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0 ;
}
void DoMain(void)
{
if(GetAsyncKeyState(VK_UP)<0)//获取按键状态:上
{
Role_Status=Role_UP;
Move();
}
if(GetAsyncKeyState(VK_DOWN)<0)//获取按键状态:下
{
Role_Status=Role_DOWN;
Move();
}
if(GetAsyncKeyState(VK_LEFT)<0)//获取按键状态:左
{
Role_Status=Role_LEFT;
Move();
}
if(GetAsyncKeyState(VK_RIGHT)<0)//获取按键状态:右
{
Role_Status=Role_RIGHT;
Move();
}
if(GetAsyncKeyState(VK_SPACE)<0)//获取按键状态:空格
{
}
}
void Move(void)
{
//ClearScr();
switch (Role_Status)
{
case Role_UP:
if(0==focusY||1==focusY)
{
swap(character[focusY][focusX],character[focusY+1][focusX]);
focusY+=1;
}
break;
case Role_DOWN:
if(1==focusY||2==focusY)
{
swap(character[focusY][focusX],character[focusY-1][focusX]);
focusY-=1;
}
break;
case Role_LEFT:
if(0==focusX||1==focusX)
{
swap(character[focusY][focusX],character[focusY][focusX+1]);
focusX+=1;
}
break;
case Role_RIGHT:
if(1==focusX||2==focusX)
{
swap(character[focusY][focusX],character[focusY][focusX-1]);
focusX-=1;
}
break;
}
//ShowScr();
//if(checkWin())
//{
// showFlower();
// //ClearScr();
// //TextOut(windowDC,0,100,"真聪明",strlen("真聪明"));
//}
}
void ClearScr(void)
{
HBRUSH hBrush ;
HDC hdc ;
rect.left =0;
rect.top =0;
rect.right =300;
rect.bottom = 300;
hBrush = CreateSolidBrush ( RGB (255,255,255)) ;
hdc = GetDC (hwnd) ;
FillRect(hdc, &rect, hBrush);
}
void ShowScr(void)
{
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
TextOut(windowDC,j*100,i*100,ch+character[i][j]*2,2);
}
}
//画4条直线,分成9格
MoveToEx (windowDC, 100, 0, NULL) ;
LineTo (windowDC, 100,300) ;
MoveToEx (windowDC, 200, 0, NULL) ;
LineTo (windowDC, 200,300) ;
MoveToEx (windowDC, 0, 100, NULL) ;
LineTo (windowDC, 300,100) ;
MoveToEx (windowDC, 0, 200, NULL) ;
LineTo (windowDC, 300,200) ;
}
void swap(int &a,int &b)
{
int temp =a;
a=b;
b=temp;
}
bool checkWin()
{
int k=0;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(k!=character[i][j])
{
return false;
}
k++;
}
}
isWin=true;
return true;
}
void showFlower(void)
{
BitBlt(windowDC,0,0,width,height,flowerDC,0,0,SRCCOPY);
}
求大神注释每一行代码啊?
win32编程 C++ 九格拼图游戏相关推荐
- 基于canvas+uniapp的9宫格拼图游戏组件
基于 canvas+uniapp 的 9 宫格拼图游戏 涉及到的 canvas 基础知识 创建画布 <canvas id="'c1'"></canvas> ...
- html九图拼图游戏代码,基于Vue.js实现数字拼图游戏
先来看看效果图: 功能分析 当然玩归玩,作为一名Vue爱好者,我们理应深入游戏内部,一探代码的实现.接下来我们就先来分析一下要完成这样的一个游戏,主要需要实现哪些功能.下面我就直接将此实例的功能点罗列 ...
- html九图拼图游戏代码,HTML5拼图游戏
拼图游戏介绍 拼图游戏将一幅图片分割成若干拼块并将它们随机打乱顺序.当将所有拼块都放回原位置时,就完成了拼图(游戏结束). 在"游戏"中,单击滑块选择游戏难易,"容易&q ...
- A*算法实现9宫格拼图游戏最优解
目标:用A*算法解决拼图的最优路径解 A*算法介绍 A* (A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是许多其他问题的常用启发式算法. 在计算机科学中,A*算法作为Dij ...
- windows编程笔记(win32编程)以及其在游戏开发中的作用
directX11 win32只是局限于windows平台,但是也是非常不错的api 1,windows系统的宏真的很多,但是这只是一种标识方式罢了 2,windows的消息循环机制: 我把这个称之为 ...
- 《Python游戏趣味编程》 第10章 拼图游戏
10 拼图游戏 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个拼图游戏,鼠标先后点击两个小拼图块,交换其坐标,直到全部达到正确位置,效果如图10-1 ...
- 上才艺——win32搞一个拼图游戏
今天有人说,天天拖控件好没意思啊,你能不能不用拖控件写一个小游戏,作为一名C/C++程序员话不多说,直接上才艺 这是游戏的效果图 搞错了,再来!!!!! 代码构思 先创建一个Windows桌面应用程序 ...
- linux编程拼图游戏,cocos2d-x制作拼图游戏
由于本人最近在学习cocos2d-x,一时手痒,写一个游戏练练手,也是对cocos2d-x进一步的巩固,于是敲了两天,就写了这个拼图游戏,还挺有成就感的,:-),先把我的成果展示如下: 由于cocos ...
- java编程如何算圆的面具,Java实现人物拼图游戏│附代码
拼图游戏指将一幅图片分割成若干拼块,并随机打乱顺序,当将所有拼块都放回原位置时就完成了拼图(游戏结束). 01 游戏介绍 在游戏中,拼块以随机顺序排列,网格上有一个位置是空的.完成拼图的方法是利用这个 ...
- Python拼图游戏源代码,可定制拼图图片,支持多种难度,可九宫格、十六宫格、二十五宫格
配置环境 安装pygame模块 pip install pygame 引入资源 将照片,添加到resources/pictures路径下 照片.jpg格式 主函数代码 pintu.py 一个配置文件c ...
最新文章
- js 对象的clone()函数
- 如何采用锂离子电池提高数据中心电源效率
- 最小错误率贝叶斯决策
- 中英翻译机c语言实验报告引言,课程设计--C语言关键字中英翻译机.doc
- ASP.NET Core 2.1:将VMD.RESTApiResponseWrapper.Core集成到REST API应用程序
- 于Linux下s、t、i、a权限
- Solidworks:Solidworks2016软件程序破解详细攻略说明(也适合长时间没使用SW2016再次破解)
- WPS专业版自带字体
- 基于周立功can卡+VS开发
- Cox模型中的时间依存协变量和时间依存系数(R语言)第二部分
- 2020年Gartner新兴技术成熟度曲线,AI持续增强
- directory opus使用教程
- 计算机软件硬件结构造图,个人计算机的存储器系统 说说内核与计算机硬件结构(3)...
- 把用户证书安装成系统证书
- 超硬核万字!web前端学霸笔记,学完就去找工作吧
- 基于CTP的国内期货程序化交易之行情获取讲解
- EXCEL设置下拉框,根据不同选项变换颜色
- 中文文件名一键批量转换成英文名称
- html后代选择器简单代码,css:not(),选择器和选择后代
- 身在异国的你,心目中是否有张“不可取代名单”?