C语言C++编程基础入门新手学习打造——游戏场景里面的人物行走

今天带来一个游戏场景的人物行走。用的是C语言写的,用到的编译器是vs2015,2013或者(vc)也行的,自然要记得安装图形库文件。

涉及到的知识点不多:

图形库 鼠标和键盘操作 图片 贴图

C语言 if swicth分支 函数 循环for while do while

星城下面就把代码发出来一下,代码如下:

#include//图形库头文件

#include

#include//getch 获取键盘消息 kbhit 判断是否有键盘消息

//#include"resource.h"

#include//加音乐 mcisendstring playsound

#pragma comment(lib,"WINMM.LIB")//多媒体的库 winmm.lib 可以小写

/*

1.实现 打包图片 涉及到资源文件

//如果是添加资源的话 资源文件 改下代码

2.音乐 wav-->playsound

*/

/*

关于 贴图 图形库

创建一个窗口 initgraph

图片 -->IMAGE 变量 loadimage 加载一张图片

putimage 贴图

*/

/*

人物移动

1.贴图 素材 基本动作 上 下 左 右 左上 左下 右上 右下 8个方向

2. 人物走路 四个动作 //动作越多人物效果越好

人物 透明贴图

1.贴图 人物图片 遮挡的图片 -->素材

loadimage 贴图 遮挡的图片 AND SRCPAINT

人物图片 OR SRCAND

贴图 需要坐标 人物坐标 目的坐标 人物的移动方向 人物动作

传递参数会很麻烦

没什么区别 但是结构体好看一点 结构体 变量名字 取名字比较简单

1.全局变量

2.定义全局结构体

*/

struct//结构体可以没有名字

{

int x, y;//人物当前坐标 像素

int _x,_y;//目的地坐标

int move;//人物的移动方向

/*

0表示往下 1左 2往右 3往上 4左下 5右下 6左上 7右上

*/

int num;//人物动作 0 1 2 3

}person = {100,100,250,250,2,1};//初始化状态

IMAGE people[3];//图片 背景图 人物图片 掩码图

void init()//初始化

{//创建窗口 图片加载部分

mciSendString(L"open 1.mp3 alias bgm", 0, 0, 0);

mciSendString(L" play bgm", 0, 0, 0);

initgraph(640, 480);//窗口大小 像素

loadimage(&people[0], L"背景.jpg",640,480); //缩放 jpg bmp L多字节

loadimage(&people[1], L"人物图.bmp");//以图片像素加载

loadimage(&people[2], L"掩码图.bmp");

//IDR_JPG1 JPG "背景.jpg"

//IDB_BITMAP1 BITMAP "人物图.bmp"

//IDB_BITMAP2 BITMAP "掩码图.bmp"

//loadimage(&people[0], L"JPG",MAKEINTRESOURCE(IDR_JPG1), 640, 480); //缩放 jpg bmp L多字节

//loadimage(&people[1], L"BITMAP", MAKEINTRESOURCE(IDB_BITMAP1),280,992);//以图片像素加载

//loadimage(&people[2], L"BITMAP", MAKEINTRESOURCE(IDB_BITMAP2),280,992);

}

void draw()//绘图

{

//1.重新绘制背景图

//2.人物图

//双缓冲绘图

BeginBatchDraw();//开始绘图

//写绘图部分

putimage(0, 0, &people[0]);//背景图片

//人物图片

putimage(person.x-30, person.y-80, 70, 124, &people[2], 70 * person.num, 124 * person.move, SRCAND);//掩码图

putimage(person.x-30, person.y-80, 70, 124, &people[1],70*person.num,124*person.move,SRCPAINT);//贴人物图 AND 方式贴图

EndBatchDraw();//结束绘图

if (person.num == 3)

{

person.num = 0;

}

else

{

person.num++;

}

Sleep(10);

}

//实现行走

void walk()

{

//如果目的坐标 和人物坐标不一样 就需要走动

//先判断哪个方向 可能没办法走到这个区域 给他一个范围 4 x-=5 x=x-5

if (person.x > person._x&&person.y > person._y) { person.x -=1, person.y -= 1, person.move = 6; return; }//人物在目的地的右下方 左上方走

if (person.x < person._x&&person.y > person._y) { person.x += 1, person.y -= 1, person.move = 7; return; }//往右上方走

if (person.x > person._x&&person.y < person._y) { person.x -= 1, person.y += 1, person.move = 4; return; }//左下方走

if (person.x < person._x&&person.y < person._y) { person.x += 1, person.y += 1, person.move = 5; return; }//右下

if (person.x > person._x) { person.x -= 1, person.move = 1; return; }//往左走

if (person.x < person._x) { person.x += 1, person.move = 2; return; }//往右走

if (person.y > person._y) { person.y -= 1, person.move = 3; return; }//往上走

if (person.y < person._y) { person.y += 1, person.move = 0; return; }//往下走

/*

单位像素 一个像素一个像素 角度 三角函数 出现小数(舍弃) 跑偏的 刚刚好是整数情况非常小

*/

}

void change()//用鼠标/键盘实现改目标位置

{

//键盘实现的部分 有没有键盘输入

if (kbhit())

{

switch (getch())//获取键盘消息

{

case 'W':

case'w':

//两种方案

//目标位置 当前位置的上方 或目标点的上方

person._y = person.y - 15;//一次移动 15个单位

person._x = person.x;

break;

case 'A':

case'a':

person._y = person.y;

person._x = person.x-15;

break;

case'S':

case's':

person._y = person.y + 15;

person._x = person.x;

break;

case'D':

case 'd':

person._y = person.y;

person._x = person.x+15;

break;

}

}

else if(MouseHit())//有没鼠标信息的

{

MOUSEMSG msg = GetMouseMsg();//获取鼠标信息 等待

switch(msg.uMsg)

{

case WM_LBUTTONDOWN://左键按下

person._x = msg.x;

person._y = msg.y;

break;

//case WM_RBUTTONDOWN://右键按下

}

}

}

int main()

{

init();

draw();

while (1)

{

change();

walk();

draw();

}

getchar();

closegraph();//关闭窗口

return 0;

}

/*

IMAGE img;//装图片的容器

loadimage(&img,L"背景.jpg",640,480);//jpg bmp L多字节

putimage(0, 0, &img);//把这张图片贴出来 0,0坐标

IMAGE img2;

loadimage(&img2, L"boy.bmp");//jpg bmp L多字节

putimage(0, 0, &img2);//把这张图片贴出来 0,0坐标*/

学习编程(C语言/C++)并不难各位可以加下群315732400(资料和视频),一起交流提升,编程不要觉得很难,虽说也有难度,但是学好了对以后的帮助是非常大。

最终的效果图:


星城就差不多把效果图,代码都已经发出来了,可以借鉴一下我的思路,图形库记得安装好,别忘了,这个鼠标可以控制人物的移动,素材的话自己都可以去找一下,可以不一样的,小编就暂时说到这,素材,图片命名,路径都是要统一别乱了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容