#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++ 九格拼图游戏相关推荐

  1. 基于canvas+uniapp的9宫格拼图游戏组件

    基于 canvas+uniapp 的 9 宫格拼图游戏 涉及到的 canvas 基础知识 创建画布 <canvas id="'c1'"></canvas> ...

  2. html九图拼图游戏代码,基于Vue.js实现数字拼图游戏

    先来看看效果图: 功能分析 当然玩归玩,作为一名Vue爱好者,我们理应深入游戏内部,一探代码的实现.接下来我们就先来分析一下要完成这样的一个游戏,主要需要实现哪些功能.下面我就直接将此实例的功能点罗列 ...

  3. html九图拼图游戏代码,HTML5拼图游戏

    拼图游戏介绍 拼图游戏将一幅图片分割成若干拼块并将它们随机打乱顺序.当将所有拼块都放回原位置时,就完成了拼图(游戏结束). 在"游戏"中,单击滑块选择游戏难易,"容易&q ...

  4. A*算法实现9宫格拼图游戏最优解

    目标:用A*算法解决拼图的最优路径解 A*算法介绍 ​A* (A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是许多其他问题的常用启发式算法. 在计算机科学中,A*算法作为Dij ...

  5. windows编程笔记(win32编程)以及其在游戏开发中的作用

    directX11 win32只是局限于windows平台,但是也是非常不错的api 1,windows系统的宏真的很多,但是这只是一种标识方式罢了 2,windows的消息循环机制: 我把这个称之为 ...

  6. 《Python游戏趣味编程》 第10章 拼图游戏

    10 拼图游戏 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个拼图游戏,鼠标先后点击两个小拼图块,交换其坐标,直到全部达到正确位置,效果如图10-1 ...

  7. 上才艺——win32搞一个拼图游戏

    今天有人说,天天拖控件好没意思啊,你能不能不用拖控件写一个小游戏,作为一名C/C++程序员话不多说,直接上才艺 这是游戏的效果图 搞错了,再来!!!!! 代码构思 先创建一个Windows桌面应用程序 ...

  8. linux编程拼图游戏,cocos2d-x制作拼图游戏

    由于本人最近在学习cocos2d-x,一时手痒,写一个游戏练练手,也是对cocos2d-x进一步的巩固,于是敲了两天,就写了这个拼图游戏,还挺有成就感的,:-),先把我的成果展示如下: 由于cocos ...

  9. java编程如何算圆的面具,Java实现人物拼图游戏│附代码

    拼图游戏指将一幅图片分割成若干拼块,并随机打乱顺序,当将所有拼块都放回原位置时就完成了拼图(游戏结束). 01 游戏介绍 在游戏中,拼块以随机顺序排列,网格上有一个位置是空的.完成拼图的方法是利用这个 ...

  10. Python拼图游戏源代码,可定制拼图图片,支持多种难度,可九宫格、十六宫格、二十五宫格

    配置环境 安装pygame模块 pip install pygame 引入资源 将照片,添加到resources/pictures路径下 照片.jpg格式 主函数代码 pintu.py 一个配置文件c ...

最新文章

  1. js 对象的clone()函数
  2. 如何采用锂离子电池提高数据中心电源效率
  3. 最小错误率贝叶斯决策
  4. 中英翻译机c语言实验报告引言,课程设计--C语言关键字中英翻译机.doc
  5. ASP.NET Core 2.1:将VMD.RESTApiResponseWrapper.Core集成到REST API应用程序
  6. 于Linux下s、t、i、a权限
  7. Solidworks:Solidworks2016软件程序破解详细攻略说明(也适合长时间没使用SW2016再次破解)
  8. WPS专业版自带字体
  9. 基于周立功can卡+VS开发
  10. Cox模型中的时间依存协变量和时间依存系数(R语言)第二部分
  11. 2020年Gartner新兴技术成熟度曲线,AI持续增强
  12. directory opus使用教程
  13. 计算机软件硬件结构造图,个人计算机的存储器系统 说说内核与计算机硬件结构(3)...
  14. 把用户证书安装成系统证书
  15. 超硬核万字!web前端学霸笔记,学完就去找工作吧
  16. 基于CTP的国内期货程序化交易之行情获取讲解
  17. EXCEL设置下拉框,根据不同选项变换颜色
  18. 中文文件名一键批量转换成英文名称
  19. html后代选择器简单代码,css:not(),选择器和选择后代
  20. 身在异国的你,心目中是否有张“不可取代名单”?

热门文章

  1. python元组定义_python定义元组
  2. 广州大学机器学习与数据挖掘实验一
  3. 计算机win10搜不到wifi,Windows10笔记本找不到无线网络如何处理
  4. 网站云服务器 网络拓扑,云服务器网络结构拓扑图
  5. FYI-django数据库操作-外键
  6. html表格中加背景,css表格怎么添加背景颜色?
  7. ps软件与计算机不兼容怎么办,ps版本不兼容怎么办,ps怎么解决版本兼容问题
  8. win10 应用商店打不开解决
  9. 东京中文离线地图App上线
  10. Linux命令怎么查找IP,在Linux中,如何查找您的IP地址