同样的,我也是采用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语言人物复杂移动与异步输入相关推荐

  1. java语言显示运算时间_JAVA语言之ACM日期计算:输入一个日期,格式如:2010 10 24 ,判断这一天是这一年中的第几天...

    本文主要向大家介绍了JAVA语言之ACM日期计算:输入一个日期,格式如:2010 10 24 ,判断这一天是这一年中的第几天,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. ACM日期 ...

  2. c语言输入十个英文国名,c语言程式设计 在主函式输入10个字元,用子函式求出共输入几个英文字元,几个数字字元,几个符号%...

    c语言程式设计 在主函式输入10个字元,用子函式求出共输入几个英文字元,几个数字字元,几个符号%以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我 ...

  3. 输入两个数、用python求他们的和_从键盘上输入俩个实型数,编程求它们的和差积商,要求输出时,保留两位小数C语言编程题:从键盘上输入两个...

    从键盘上输入俩个实型数,编程求它们的和差积商,要求输出时,保留两位小数 C语言编程题:从键盘上输入两个 www.zhiqu.org     时间: 2020-11-23 参考代码: #includev ...

  4. 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 ...

  5. python输入一个正整数、计算其各个位的数字之和_C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和。...

    点击查看C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和.具体信息 答:#include /*包含头文件*/void main() /*主函数*/{ int n, ...

  6. c语言:(指针)实现输入三个整数从小到大排序

    c语言:(指针)实现输入三个整数从小到大排序 #include<stdio.h> #include<stdlib.h> #include<string.h> #in ...

  7. C语言编程>第六周 ⑥ 输入一串字符,统计大大写字母的个数,并强调统计必须用函数。

    例题:输入一串字符,统计大大写字母的个数,并强调统计必须用函数. 代码如下: #include <stdio.h> #include <string.h>//字符头文件 int ...

  8. c语言添加输入函数吗,C语言scanf()函数下支持中文输入吗?

    C语言scanf()函数下支持中文输入吗? C语言scanf()函数下支持中文输入吗? 如果我编写一个程序,要求是先输入姓,再输入名,然后按照常姓名的方式排列出来,如果我需要输入中文该怎么办? 搜索更 ...

  9. c语言求三个数最值非函数,C语言编程:从键盘任意输入三个数,编写求其最大值、最小值的函数,用指针作函数参数实现。...

    www.shufadashi.com防采集. C语言编程:从键盘任意输入三个数,编写求其最大值.最小值的函数,用指针作函数参数实现.. #includevoid maxfunction(int*);v ...

最新文章

  1. win7下搭建手动转码服务器的安装配置tomcat、java、ffmpeg、hy_changsha、FTP
  2. Nginx之rewrite使用
  3. 维密求变,“自救”还是“挖坟”?
  4. Linux Shell脚本编程--grep命令
  5. [html] 你知道什么是粘性布局吗?
  6. LeetCode 126. 单词接龙 II(图的BFS)
  7. 错误之data_insertt() takes 1 positional argument but 2 were given解决方法
  8. linux接收数据并保存到环形缓冲区,自定义print函数缓存打印数据到环形缓冲区...
  9. css中margin:0 auto没作用
  10. android 跨进程 android:process,Android跨进程通信技术-多进程模式的运行机制
  11. python 绘制并列条形图并添加数据标签
  12. ue4账号注册不了_UE4入门(一)软件安装教程
  13. 安卓仿苹果键盘输入法_iphone输入法安卓版下载
  14. 大学学习历程简单总结
  15. ffmpeg录制麦克风声音和pc内部声音(如播放歌曲)---混音--修正
  16. CentOS查找文件、文件夹、内容
  17. DOM操作简易年历案例
  18. 码栈开发手册(四)---编码方式开发(其他功能函数)
  19. 论文阅读-AKS_CoRR_2011
  20. 高德 infowindow 绑定点击事件_滴滴联合腾讯地图上线聚合打车,开战高德打车 subtitle...

热门文章

  1. java drm_Linux DRM那些事-RockPI DRM
  2. 整型与指针的相互转换(int-int*,long-long*)
  3. C++ 使用string的头文件和要求
  4. python可视化开发
  5. 考研数据结构之线性表(1.7)——练习题之分离单链表的奇数偶数(C表示)
  6. 【深度学习BookNote】多层感知器(multi-layer perceptron)
  7. 乐学python_乐学Python-中国大学mooc-试题题目及答案
  8. RSA密码的手动算法+快速幂算法
  9. Categories各种举例
  10. 挂件巡检机器人_最近DIY的室内巡检机器人