前天博客中用C语言写了个没有贴图的打字母小游戏,提及到贴图技术,那么今天的主题就是贴图技术入门级。
今天就以坦克大战地图为例,开启游戏贴图之旅。。。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<graphics.h> //整个地图是由四个基本单元组成 //以四个图片为基本单位,确定行数和列数 const int rows=12;//将行和列定义为常整型,使其不可变 const int cols=13;
每张图片大小为50*50,且要将图片放到项目所在文件
在这里,每张图片的命名规则是map0/1/2/3.jpg,为了后面图片的循环加载、贴图和贴处出,以及四个地图的布局
//贴图函数 void InitInstance() { //用数字代表地图中的元素 //0大鸟,1银砖,2黑块,3红砖 int mapIndex[rows][cols] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2, 3, 3, 3, 2, 3, 1, 3, 2, 3, 3, 3, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 1, 2, 3, 2, 3, 2, 3, 3, 3, 2, 3, 2, 3, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 3, 2, 3, 2, 3, 3, 3, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 3, 0, 3, 2, 2, 2, 2, 2 }; char filename[10] = ""; //字符串:map%d.jpg IMAGE map[4];//保存图片的变量 int x, y;//图片坐标 //循环加载图片 for (int i = 0; i < 4; i++) { sprintf(filename,"map%d.jpg",i);//格式化写入map0/1/2/3.jpg loadimage(&map[i],filename);//加载图片的函数 } //循环贴图 for (int rowNum = 0; rowNum < rows; rowNum++) { for (int colNum = 0; colNum < cols; colNum++) { x = colNum * 50;//贴图所在横坐标 y = rowNum * 50;//贴图所在纵坐标 putimage(x,y,&map[mapIndex[rowNum][colNum]]);//贴图,前面数字地图在此处起作用 } } } int main() { initgraph(cols*50,rows*50);//初始画布大小 InitInstance();//函数调用 getchar();//防止闪屏 closegraph();//关闭画布 return 0; }
效果图: