先准备好地图的小图片:

//全局变量
HDC mdc;
HBITMAP fullmap;
const int rows = 8, cols = 8;

//--------------------------------------------InitInstance() 函数----------------------------------------------
//加载资源
//-------------------------------------------------------------------------------------------------------------
BOOL InitInstance(HINSTANCE hInstance, int nShowCmd)
{
HWND hwnd;
HDC hdc, tmpdc;

//创建窗口第三步:正式创建窗口
//创建窗口函数
hwnd = CreateWindow("GameClass", WINDOW_TITLE, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hwnd)
{
return FALSE;
}
//创建窗口第四步:窗口的移动,显示和更新
MoveWindow(hwnd, 250, 80, WINDOW_WIDTH, WINDOW_HEIGHT, true);//调整窗口显示时的位置及窗口的大小
ShowWindow(hwnd, nShowCmd);//设定显示窗口时的状态
UpdateWindow(hwnd);//将窗口绘制于显示设备上

int mapIndex[rows * cols] =
{
0, 1, 2, 2, 0, 1, 0, 1,
0, 1, 2, 0, 0, 0, 1, 1,
2, 0, 0, 0, 0, 0, 0, 1,
2, 0, 0, 1, 1, 0, 2, 2,
2, 2, 0, 0, 2, 2, 0, 0,
0, 2, 2, 2, 2, 0, 0, 1,
0, 2, 2, 2, 2, 2, 1, 1
};
//DC
hdc = GetDC(hwnd);
mdc = CreateCompatibleDC(hdc);
tmpdc = CreateCompatibleDC(hdc);
//建立一空白的位图,其宽与高分别为"行数*图块宽" 与 "列数*图块高"
fullmap = CreateCompatibleBitmap(hdc, cols * 50, rows * 50);
//将fullmap存入mdc中
SelectObject(mdc, fullmap);

HBITMAP map[3];
char mapname[20] = "";

//加载各图块图像
for (int i = 0; i < 3; i++)
{
wsprintf(mapname, "map%d.bmp", i);
map[i] = (HBITMAP)LoadImage(NULL, mapname, IMAGE_BITMAP, 50, 50, LR_LOADFROMFILE);
}

//按照mapIndex数组的定义取出对应的图块,进行地图拼接
for (int i = 0; i < rows * cols; i++)
{
int x, y;
SelectObject(tmpdc, map[mapIndex[i]]);
//i / cols;//求列编号
//i % cols;//求行编号
x = i % cols * 50;//求贴图x坐标
y = i / cols * 50;//求贴图y坐标

BitBlt(mdc, x, y, 50, 50, tmpdc, 0, 0, SRCCOPY);
}

MyPaint(hdc);

ReleaseDC(hwnd, hdc);
DeleteDC(tmpdc);

return TRUE;
}

//--------------------------------------------MyPaint() 函数---------------------------------------------------
//绘制图形
//-------------------------------------------------------------------------------------------------------------
void MyPaint(HDC hdc)
{
SelectObject(mdc, fullmap);
BitBlt(hdc, 10, 10, cols * 50, rows * 50, mdc, 0, 0, SRCCOPY);
}

//--------------------------------------------Game_CleanUp() 函数----------------------------------------------
//资源清理函数,在此函数中进行退出前的资源的清理工作
//-------------------------------------------------------------------------------------------------------------
BOOL Game_CleanUp(HWND hwnd)
{
DeleteDC(mdc);
DeleteObject(fullmap);
return TRUE;
}

如需整体运行框架,请点击: 游戏框架

游戏开发的梦想

梦开始的地方

最新文章

  1. java web学习总结(二十五) -------------------JSP中的九个内置对象
  2. 总结/PSP初体验—排球计分程序1.0
  3. redis 学习笔记(5)-Spring与Jedis的集成
  4. IOS基础库
  5. [转]Linux中设置服务自启动的三种方式
  6. Linux 守护进程和超级守护进程(xinetd)
  7. C#:代表(delegate)和事件(event)
  8. ARM开发板挂载U盘
  9. phpMyAdmin import.php 跨站脚本漏洞
  10. VMCloud云平台 系列博文
  11. maven/eclipse搭建ssm(spring+spring mvc+mybatis)
  12. TCP/IP传输层,你懂多少?
  13. Linux入门(10)——Ubuntu16.04使用pip3和pip安装numpy,scipy,matplotlib等第三方库
  14. VS配置Halcon(一次配置,永久使用)
  15. 洛谷P1357 花园(状态压缩 + 矩阵快速幂加速递推)
  16. ReactiveCocoa(I)
  17. urllib — URL handling modules
  18. js中去除字符串两边的空格
  19. 从零开始一个http服务器(三)-返回response 构造
  20. 182. Duplicate Emails

热门文章

  1. Windows Socket网络编程-2016.01.07
  2. json对象与字符串互转
  3. 用代码打开FORM里面用到的数据源
  4. 对apply和call的理解
  5. Java 单测 回滚
  6. 在javascript中如何取消事件冒泡
  7. Windows和Linux下Mysql 重置root 密码
  8. php输出utf-8格式
  9. Yii整合ZF2及soap实例
  10. Linux服务器的初步配置流程