C语言人物复杂移动与异步输入
同样的,我也是采用EasyX库
先准备好素材(该素材是从RPG maker MV 中找的几张)
文章目录
- 一:人物复杂移动
- 背景图(background.png)
- 人物图(actor1.jpg)
- 人物遮罩图(actor2.jpg)
- 代码
- 代码可以将所有绘制操作放在一起,减少代码量,我这里为了更直接看的逻辑所有没改进
- 效果显示
- 二:异步输入实现同时操作两个小人
- 人物素材(girl1.jpg)
- 遮罩图(girl2.jpg)
- 利用windows API 中的GetAsyncKeyState函数
- 代码
- 效果显示
- 扩展
一:人物复杂移动
背景图(background.png)
人物图(actor1.jpg)
人物遮罩图(actor2.jpg)
代码
#include <graphics.h>
#include <conio.h>
//像素宽度
int width = 1000;
//像素高度
int high = 740;
//创建图片对象(背景)
IMAGE BG;
//创建图片对象(人物)
IMAGE AC1,AC2;
//动作编号
int id = 0;
//移动方向
char direction;
//人物坐标
int p_x = width/2;
int p_y = high/2;int main()
{ //设置窗口大小initgraph(width,high);//加载背景图片loadimage(&BG,"background.png");//绘制背景图片putimage(0,0,&BG);//加载人物图片loadimage(&AC1,"actor1.jpg");loadimage(&AC2,"actor2.jpg");//绘制人物图片putimage(p_x,p_y,50,50,&AC2,0,0,NOTSRCERASE);putimage(p_x,p_y,50,50,&AC1,0,0,SRCINVERT);direction = getch();BeginBatchDraw(); while(1){if (kbhit()){direction = getch();}else if(direction =='a'){p_x-=8;if (p_x<=0){p_x=0;}//清空绘制区域clearrectangle(0,0,width,high);//绘制背景图片putimage(0,0,&BG);//绘制人物图片putimage(p_x,p_y,50,50,&AC2,50*id,50,NOTSRCERASE);putimage(p_x,p_y,50,50,&AC1,50*id,50,SRCINVERT);id++;Sleep(30);if (id==3){id = 0;}}else if(direction =='d'){p_x+=8;if (p_x>=width-50){p_x = width-50;}//清空绘制区域clearrectangle(0,0,width,high);//绘制背景图片putimage(0,0,&BG);//绘制人物图片putimage(p_x,p_y,50,50,&AC2,50*id,100,NOTSRCERASE);putimage(p_x,p_y,50,50,&AC1,50*id,100,SRCINVERT);id++;Sleep(30);if(id==3){id = 0;}}else if(direction =='w'){p_y-=8;if (p_y<=0){p_y=0;}//清空绘制区域clearrectangle(0,0,width,high);//绘制背景图片putimage(0,0,&BG);//绘制人物图片putimage(p_x,p_y,50,50,&AC2,50*id,150,NOTSRCERASE);putimage(p_x,p_y,50,50,&AC1,50*id,150,SRCINVERT);id++;Sleep(30);if(id==3){id = 0;}}else if(direction =='s'){p_y+=8;if (p_y>=high-50){p_y=high-50;}//清空绘制区域clearrectangle(0,0,width,high);//绘制背景图片putimage(0,0,&BG);//绘制人物图片putimage(p_x,p_y,50,50,&AC2,50*id,0,NOTSRCERASE);putimage(p_x,p_y,50,50,&AC1,50*id,0,SRCINVERT);id++;Sleep(30);if(id==3){id = 0;}}FlushBatchDraw();}EndBatchDraw();//关闭窗口closegraph();return 0;
}
代码可以将所有绘制操作放在一起,减少代码量,我这里为了更直接看的逻辑所有没改进
效果显示
图有点大,可能人物摆臂动作看的不是很清楚
二:异步输入实现同时操作两个小人
人物素材(girl1.jpg)
遮罩图(girl2.jpg)
利用windows API 中的GetAsyncKeyState函数
代码
#include <graphics.h>
#include <conio.h>
#include <windows.h>
//像素宽度
int width = 1000;
//像素高度
int high = 740;
//创建图片对象(背景)
IMAGE BG;
//创建图片对象(人物)
IMAGE AC1,AC2,BC1,BC2;
//动作编号
int id = 0;
int id2 = 0;
//方向编号
int d_id;
int d_id2;
//人物坐标
int p_x = width/4;
int p_y = high/2;
//人物2坐标
int p2_x = width/4*3;
int p2_y = high/2;int main()
{ //设置窗口大小initgraph(width,high);//加载背景图片loadimage(&BG,"background.png");//绘制背景图片putimage(0,0,&BG);//加载人物图片loadimage(&AC1,"actor1.jpg");loadimage(&AC2,"actor2.jpg");//绘制人物图片putimage(p_x,p_y,50,50,&AC2,0,0,NOTSRCERASE);putimage(p_x,p_y,50,50,&AC1,0,0,SRCINVERT);//加载人物2图片loadimage(&BC1,"girl1.jpg");loadimage(&BC2,"girl2.jpg");//绘制人物2图片putimage(p2_x,p2_y,50,50,&BC2,0,0,NOTSRCERASE);putimage(p2_x,p2_y,50,50,&BC1,0,0,SRCINVERT);BeginBatchDraw(); while(1){ if(GetAsyncKeyState(0x41) & 0x8000) //a{d_id=1;p_x-=8;if (p_x<=0){p_x=0;}id++;if (id==3){id = 0;}}if(GetAsyncKeyState(0x44) & 0x8000) //d{d_id=2;p_x+=8;if (p_x>=width-50){p_x = width-50;}id++;if(id==3){id = 0;}}if(GetAsyncKeyState(0x57) & 0x8000) //w{d_id=3;p_y-=8;if (p_y<=0){p_y=0;}id++;if(id==3){id = 0;}}if(GetAsyncKeyState(0x53) & 0x8000) //s{d_id=0;p_y+=8;if (p_y>=high-50){p_y=high-50;}id++;if(id==3){id = 0;} }if(GetAsyncKeyState(VK_LEFT) & 0x8000) //左键{d_id2=1;p2_x-=8;if (p2_x<=0){p2_x=0;}id2++;if(id2==3){id2 = 0;} }if(GetAsyncKeyState(VK_RIGHT) & 0x8000) //右键{d_id2=2;p2_x+=8;if (p2_x>=width-50){p2_x=width-50;}id2++;if(id2==3){id2 = 0;} }if(GetAsyncKeyState(VK_UP) & 0x8000) //上键{d_id2=3;p2_y-=8;if (p2_y<=0){p2_y=0;}id2++;if(id2==3){id2 = 0;} }if(GetAsyncKeyState(VK_DOWN) & 0x8000) //下键{d_id2=0;p2_y+=8;if (p2_y>=high-50){p2_y=high-50;}id2++;if(id2==3){id2 = 0;} }//清空绘制区域clearrectangle(0,0,width,high);//绘制背景图片putimage(0,0,&BG);//绘制人物图片putimage(p_x,p_y,50,50,&AC2,50*id,50*d_id,NOTSRCERASE);putimage(p_x,p_y,50,50,&AC1,50*id,50*d_id,SRCINVERT);//绘制人物2图片putimage(p2_x,p2_y,50,50,&BC2,50*id2,50*d_id2,NOTSRCERASE);putimage(p2_x,p2_y,50,50,&BC1,50*id2,50*d_id2,SRCINVERT);Sleep(30);FlushBatchDraw();}EndBatchDraw();//关闭窗口closegraph();return 0;
}
效果显示
扩展
可以给两个人物加上冲突判断,使的人物不会叠加显示。
这些就交给大家增加了
C语言人物复杂移动与异步输入相关推荐
- java语言显示运算时间_JAVA语言之ACM日期计算:输入一个日期,格式如:2010 10 24 ,判断这一天是这一年中的第几天...
本文主要向大家介绍了JAVA语言之ACM日期计算:输入一个日期,格式如:2010 10 24 ,判断这一天是这一年中的第几天,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. ACM日期 ...
- c语言输入十个英文国名,c语言程式设计 在主函式输入10个字元,用子函式求出共输入几个英文字元,几个数字字元,几个符号%...
c语言程式设计 在主函式输入10个字元,用子函式求出共输入几个英文字元,几个数字字元,几个符号%以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我 ...
- 输入两个数、用python求他们的和_从键盘上输入俩个实型数,编程求它们的和差积商,要求输出时,保留两位小数C语言编程题:从键盘上输入两个...
从键盘上输入俩个实型数,编程求它们的和差积商,要求输出时,保留两位小数 C语言编程题:从键盘上输入两个 www.zhiqu.org 时间: 2020-11-23 参考代码: #includev ...
- c语言将一个四位正整数倒排,输入一个四位正整数,将其逆序输出.如:输入1234,输出4321...
编写一个函数fun(n),求任意4位正整数的逆序数. intfun(intn){inta=n,b=0;while(a>0){b=b*10;b=b+a%10;a=a/10;}printf(&quo ...
- python输入一个正整数、计算其各个位的数字之和_C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和。...
点击查看C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和.具体信息 答:#include /*包含头文件*/void main() /*主函数*/{ int n, ...
- c语言:(指针)实现输入三个整数从小到大排序
c语言:(指针)实现输入三个整数从小到大排序 #include<stdio.h> #include<stdlib.h> #include<string.h> #in ...
- C语言编程>第六周 ⑥ 输入一串字符,统计大大写字母的个数,并强调统计必须用函数。
例题:输入一串字符,统计大大写字母的个数,并强调统计必须用函数. 代码如下: #include <stdio.h> #include <string.h>//字符头文件 int ...
- c语言添加输入函数吗,C语言scanf()函数下支持中文输入吗?
C语言scanf()函数下支持中文输入吗? C语言scanf()函数下支持中文输入吗? 如果我编写一个程序,要求是先输入姓,再输入名,然后按照常姓名的方式排列出来,如果我需要输入中文该怎么办? 搜索更 ...
- c语言求三个数最值非函数,C语言编程:从键盘任意输入三个数,编写求其最大值、最小值的函数,用指针作函数参数实现。...
www.shufadashi.com防采集. C语言编程:从键盘任意输入三个数,编写求其最大值.最小值的函数,用指针作函数参数实现.. #includevoid maxfunction(int*);v ...
最新文章
- win7下搭建手动转码服务器的安装配置tomcat、java、ffmpeg、hy_changsha、FTP
- Nginx之rewrite使用
- 维密求变,“自救”还是“挖坟”?
- Linux Shell脚本编程--grep命令
- [html] 你知道什么是粘性布局吗?
- LeetCode 126. 单词接龙 II(图的BFS)
- 错误之data_insertt() takes 1 positional argument but 2 were given解决方法
- linux接收数据并保存到环形缓冲区,自定义print函数缓存打印数据到环形缓冲区...
- css中margin:0 auto没作用
- android 跨进程 android:process,Android跨进程通信技术-多进程模式的运行机制
- python 绘制并列条形图并添加数据标签
- ue4账号注册不了_UE4入门(一)软件安装教程
- 安卓仿苹果键盘输入法_iphone输入法安卓版下载
- 大学学习历程简单总结
- ffmpeg录制麦克风声音和pc内部声音(如播放歌曲)---混音--修正
- CentOS查找文件、文件夹、内容
- DOM操作简易年历案例
- 码栈开发手册(四)---编码方式开发(其他功能函数)
- 论文阅读-AKS_CoRR_2011
- 高德 infowindow 绑定点击事件_滴滴联合腾讯地图上线聚合打车,开战高德打车 subtitle...
热门文章
- java drm_Linux DRM那些事-RockPI DRM
- 整型与指针的相互转换(int-int*,long-long*)
- C++ 使用string的头文件和要求
- python可视化开发
- 考研数据结构之线性表(1.7)——练习题之分离单链表的奇数偶数(C表示)
- 【深度学习BookNote】多层感知器(multi-layer perceptron)
- 乐学python_乐学Python-中国大学mooc-试题题目及答案
- RSA密码的手动算法+快速幂算法
- Categories各种举例
- 挂件巡检机器人_最近DIY的室内巡检机器人