c语言中的简单动画(带有源码)

动画

1. 怎样实现动画

相信大家已经对动画的原理已经不陌生了。想要目标物体动起来,只需要逐个播放目标物体每一时刻位

置的图片。只要播放的速度足够快,人们就会在视觉上认为目标物体动起来了。一般来说电视每秒会播

放24帧静态画面,而游戏则更高60 120。

#include<stdio.h>
#include<easyx.h>
int main() {//初始化画布initgraph(800, 600);//设置原点setorigin(400,300);//调整坐标系setaspectratio(1, -1);//设置背景色setbkcolor(RGB(164, 225, 202));cleardevice();setfillcolor(WHITE);//绘制圆solidcircle(-400, 0, 70);//关闭拦截getchar();//关闭画布closegraph();
}

实现圆的移动

//实现圆的移动 就会不断的改变圆心位置 进行绘制
//实现圆的移动 就会不断的改变圆心位置 进行绘制for (int i = -400; i < 400; i+=25){solidcircle(i, 0, 70);getchar();cleardevice();}按一次回车 就会执行循环体
把圆心的x +25 清空画布在绘制

就实现动起来了

实现自动的动

使用sleep()

 for (int i = -400; i < 400; i+=5){solidcircle(i, 0, 70);Sleep(10);cleardevice();}

速度和帧数的计算

1000ms=1s  1000毫秒=1秒1000/10 =100 每秒100次执行 也就是100个帧x+=5  每一帧移动5  动画要想流畅  帧数需要提高60  就是每秒执行的次数
和移动的距离要适当 不可过大

移动的星星

#include<stdio.h>
#include<easyx.h>
#include<math.h>
#define PI 3.14
void fivePointedStarts() {//变化角度double delta = 2 * PI / 5;//起始角度double start = PI / 2;//90度//半径 int r = 90;//绘制五个点POINT points[5];for (int i = 0; i < 5; i++){points[i].x = cos(start + i * delta * 2) * r;points[i].y = sin(start + i * delta * 2) * r;}//链接 五个点polygon(points, 5);
}int main() {//初始化画布initgraph(800, 600);//设置原点setorigin(400,300);//调整坐标系setaspectratio(1, -1);//设置背景色setbkcolor(RGB(164, 225, 202));cleardevice();setfillcolor(WHITE);//绘制圆solidcircle(-400, 0, 70);//实现圆的移动 就会不断的改变圆心位置 进行绘制fivePointedStarts();//关闭拦截getchar();//关闭画布closegraph();
}

//参数抽离

void fivePointedStarts(int x, int y,int r, double start) {//x y 就是五角星的圆心//变化角度double delta = 2 * PI / 5;//起始角度 外部传递//double start = PI / 2;//90度//半径  外部传递//int r = 90;//绘制五个点POINT points[5];for (int i = 0; i < 5; i++){points[i].x = cos(start + i * delta * 2) * r + x;points[i].y = sin(start + i * delta * 2) * r + y;}//链接 五个点polygon(points, 5);
}

移动的五角星

#include<stdio.h>
#include<easyx.h>
#include<math.h>
#define PI 3.14
void fivePointedStarts(int x, int y,int r, double start) {//变化角度double delta = 2 * PI / 5;//起始角度 外部传递//double start = PI / 2;//90度//半径  外部传递//int r = 90;//绘制五个点POINT points[5];for (int i = 0; i < 5; i++){points[i].x = cos(start + i * delta * 2) * r + x;points[i].y = sin(start + i * delta * 2) * r + y;}//链接 五个点polygon(points, 5);
}int main() {//初始化画布initgraph(800, 600);//设置原点setorigin(400,300);//调整坐标系setaspectratio(1, -1);//设置背景色setbkcolor(RGB(164, 225, 202));cleardevice();setfillcolor(WHITE);//绘制圆solidcircle(-400, 0, 70);int x, y = 0;for (x = -400; x <= 400; x += 5) // // 每次移动5像素{cleardevice();// 绘制中心为(x, y),半径为50,起始角度为90°的五角星fivePointedStarts(x, y, 50, PI / 2);// 绘制一帧画面后,让画面停留40毫秒Sleep(40);}//关闭拦截getchar();//关闭画布closegraph();
}

实现往返运动

 //实现往返的运动int x, y;// 从(-400, 0)开始x = -400;y = 0;// 每次移动dx像素,初始为5int dx = 5;while (1){cleardevice();fivePointedStarts(x, y, 50, PI / 2);Sleep(40);x = x + dx;// 是否碰到转向点if (x == -400 || x == 400){// 向反方向移动dx = -dx;}}

矩形运动

int x, y;
// 从(-300, 200)开始
x = -300;
y = 200;
int dx, dy;
while (1)
{// 到达左上角(-300, 200)后,开始以5像素每帧向右运动。if (x == -300 && y == 200){dx = 5;dy = 0;}// 到达右上角(300, 200)后,以5像素每帧向下运动。else if (x == 300 && y == 200){dx = 0;dy = -5;}// 到达右下角(300, -200)后,以5像素每帧向左运动。else if (x == 300 && y == -200){dx = -5;dy = 0;}// 到达左下角(-300, -200)后,以5像素每帧向上运动。else if (x == -300 && y == -200){dx = 0;dy = 5;}cleardevice();//绘制路径POINT points[4] = { {-300,200},{300,200},{300,-200},{-300,-200} };polygon(points, 4);fivePointedStar(x, y, 50, PI / 2);Sleep(40);x = x + dx;y = y + dy;
}

圆周运动

让五角星围绕某一点圆周运动某一点 0,0//某一点 圆心
int x=0, y=0;
//角度变化
double del = 2 * PI / 360;//每秒一度//初始角度
double initdel = 0;while (1)
{cleardevice();//绘制轨迹circle(0, 0, 140);//变化x yx = cos(initdel + del) * 140;y = sin(initdel + del) * 140;fivePointedStarts(x, y, 50, PI / 2);Sleep(40);initdel += del;
}

完整代码

#include<stdio.h>
#include<easyx.h>
#include<math.h>
#define PI 3.14
void fivePointedStarts(int x, int y,int r, double start) {//变化角度double delta = 2 * PI / 5;//起始角度 外部传递//double start = PI / 2;//90度//半径  外部传递//int r = 90;//绘制五个点POINT points[5];for (int i = 0; i < 5; i++){points[i].x = cos(start + i * delta * 2) * r + x;points[i].y = sin(start + i * delta * 2) * r + y;}//链接 五个点polygon(points, 5);
}int main() {//初始化画布initgraph(800, 600);//设置原点setorigin(400,300);//调整坐标系setaspectratio(1, -1);//设置背景色setbkcolor(RGB(164, 225, 202));cleardevice();//圆心int x=0, y=0;//角度变化 double del = 2 * PI / 360;//每秒一度//初始角度double initdel = 0;while (1){cleardevice();//绘制轨迹circle(0, 0, 140);//变化x yx = cos(initdel + del) * 140;y = sin(initdel + del) * 140;fivePointedStarts(x, y, 50, PI / 2);Sleep(40);initdel += del;}//关闭拦截getchar();//关闭画布closegraph();
}

五星自转

改变初始角 一次加一
double startAngle = PI / 2;
double dStartAngle = 0.05;
while (1)
{cleardevice();fivePointedStar(0, 0, 50, startAngle);Sleep(40);startAngle = startAngle + dStartAngle;
}

结合起来 自转+周转

#include<stdio.h>
#include<easyx.h>
#include<math.h>
#define PI 3.14
void fivePointedStarts(int x, int y,int r, double start) {//变化角度double delta = 2 * PI / 5;//起始角度 外部传递//double start = PI / 2;//90度//半径  外部传递//int r = 90;//绘制五个点POINT points[5];for (int i = 0; i < 5; i++){points[i].x = cos(start + i * delta * 2) * r + x;points[i].y = sin(start + i * delta * 2) * r + y;}//链接 五个点polygon(points, 5);
}int main() {//初始化画布initgraph(800, 600);//设置原点setorigin(400,300);//调整坐标系setaspectratio(1, -1);//设置背景色setbkcolor(RGB(164, 225, 202));cleardevice();//圆心int x=0, y=0;//角度变化 double del = 2 * PI / 360;//每秒一度//初始角度double initdel = 0;//初始自传角度double initrote = PI / 2;//90度//自转角度变化 double rotedel = 2 * PI / 120;//每秒3度while (1){cleardevice();//绘制轨迹circle(0, 0, 140);//变化x yx = cos(initdel + del) * 140;y = sin(initdel + del) * 140;fivePointedStarts(x, y, 50, initrote);Sleep(40);initdel += del;initrote += rotedel;}//关闭拦截getchar();//关闭画布closegraph();
}

c语言中的简单动画(带有源码)相关推荐

  1. 三个球数求最大值c语言,C语言中一个简单的球3个数最大数的程序中,最后一步:printf(apos;apos;max=%d\napos;apos;,max);怎么理解...

    int main() { printf("Hello,world\n"); while(1); } #includeint main() { int i = 1, j =2; pr ...

  2. 如何写一个能被手机打开的C语言小程序,如何用C语言中一些简单的语句做一个小程序,能够输入一个字符就会弹出一句话...

    满意答案 lyj1260 2015.03.28 采纳率:43%    等级:11 已帮助:6408人 这个不难,是最基本的C语言程序了,我写个示例给你 #include //包含头 int main( ...

  3. C语言中的* 简单记忆方法

    在刚开始学C语言的时候,老师是这么教我的 :*是指针,**是指向指针的指针.int* p 的意思是p是一个指针,存放的内容是一个int类型--这些大概是书上对*的解释,最基本的例子是 int* p: ...

  4. jQuery 中的简单动画

    制作动画常用方法: show("速度")   显示元素    hide("速度")   隐藏元素    toggle()       切换效果 例如下jQuer ...

  5. c语言中读取电脑自带报警声音,关于电脑发出警报声的.

    不是机箱发出的声音,其实是BIOS故障而进行声音报错. BIOS全名为(Basic Input Output System)即基本输入/输出系统,是电脑中最基础的而又最重要的程序.我们把这一段程序存放 ...

  6. 人气比较高的gitee开源项目,都是带有源码介绍的!

    每日看一看的git开源项目! 1.git地址https://gitee.com/WanYueKeJi/wanyue_zhibo_ios 万岳科技可为商家快速搭建起一套属于自己的直播商城系统,有效避开商 ...

  7. 设计模式在C语言中的应用--读nginx源码

    市面上的"设计模式"书籍文章,皆针对Java/C++/C#等面向对象语言,似乎离开了面向对象的种种特性,设计模式就无法实现,没有用武之地了. 是这样吗?设计模式的概念是从建筑领域引 ...

  8. 从零开始用C语言实现图片解码播放器(有源码)

    1.项目描述 1.1.项目硬件平台介绍 (1)硬件平台:九鼎公司的X210开发板,S5PV210(Cortex-A8内核): (2)软件平台:linux2.6.35.7内核,直接基于linux API ...

  9. R语言-线性回归实例(包括所有源码)

    题目描述 目录 一.身高体重 1.身高和体重的散点图(先肉眼观察来判断使用什么模型) 2.画出拟合后的线性函数与散点图背景对比 3.对该模型的分析 4.置信区间分析和假设检验 5.多图像分析 二.不良 ...

最新文章

  1. 将ssm项目和普通java项目打包
  2. python-爬虫(1)
  3. 如何设置取消小票的二维码
  4. java sentence_Java Sentence類代碼示例
  5. Effective C++学习第一天
  6. 不允许输入特殊字符的正则表达式_JavaScript正则表达式常用技巧
  7. 返回表达式列表中最小值least(exp1,exp2,exp3,……,expn)
  8. [转载] java常量池-字符串常量池、class常量池和运行时常量池
  9. C# 数组增加元素_C语言数组——任意位置插入一个元素
  10. Linux环境下的LD_PRELOAD:库预加载
  11. 作用域、变量提升、函数提升、数据类型
  12. c语言如何答应出数所在数组的下标_零基础学C语言——数组
  13. Unity 官方教程 学习
  14. JS(JavaScript)的初了解8(更新中···)
  15. Cardhop for Mac(通讯录管理软件)
  16. coon's patch
  17. Prometheus+Grafana搭建Jmeter性能监控平台
  18. Scrum立会报告+燃尽图(十月二十五日总第十六次)
  19. JavaSE之面向对象
  20. 深入理解LightGBM

热门文章

  1. windows安装kali linux系统kali linux镜像安装。
  2. 计算机应用的程序,计算机应用程序
  3. [Linux系列]Chrony时间同步服务器
  4. 【Banner—闭组会议总结】
  5. C/C++编程:ACL_VSTREAM的写操作对比
  6. 如何卸载 SQL Server 2008实例
  7. VMware虚拟化项目中经常使用的三种磁盘置备模式 vmware- vsphere- datastore-disk
  8. java中short 范围减_均线粘连看到这5种拉升形态一定要买 炉架底战法
  9. 废品情况分析——报表接口开发
  10. 零中频接收机频率转换图_大神告诉你WCDMA之Tx Leakage对于零中频接收机之危害