前面程序在输出三角形, 今天我们说明一下程序如何运动起来,探究运动的原理是什么
为了达到程序运动起来, 我们首先要让程序能输出一个三角形, 否则没办法看清问题。
一。 创建新项目输出三角形
1. 如下图启动一个codeblocks集成开发环境, 参照如下创建项目, 默认输出hello world
2. 在上面项目的基础上添加代码输出三角形,输出结果如下
参考代码如下
#include <stdio.h>
#include <stdlib.h>
// 定义一个输出三角形的函数, lineCount为三角形具有的行数
int shuSanJiaoXing(int lineCount);
// 输出一行的星号
int shuChuHang(int xingCount);
// 系统默认项目, 输出一个字符串
int main()
{
printf("Hello world!\n");
shuSanJiaoXing(5);
return 0;
}
// 定义一个输出三角形的函数, lineCount为三角形具有的行数
int shuSanJiaoXing(int lineCount)
{
for(int i = 0; i < lineCount; i++){
shuChuHang(i);
}
}
// 输出一行的星号
int shuChuHang(int xingCount)
{
for(int i = 0; i < xingCount; i++)
{
printf("*");
}
printf("\n");
}
3. 再次修改一下函数输出一个倒三角形, 如下图
完整的参考例子如下
#include <stdio.h>
#include <stdlib.h>
// 定义一个输出三角形的函数, lineCount为三角形具有的行数
int shuSanJiaoXing(int lineCount);
// 输出一行的星号
int shuChuHang(int xingCount);
// 系统默认项目, 输出一个字符串
int main()
{
printf("Hello world!\n");
shuSanJiaoXing(5);
return 0;
}
// 定义一个输出三角形的函数, lineCount为三角形具有的行数
int shuSanJiaoXing(int lineCount)
{
for(int i = 0; i < lineCount; i++){
shuChuHang(i);
}
// 输出倒三角形的部分代码
for(int i = 1; i < lineCount; i++)
{
shuChuHang(lineCount - i - 1);
}
}
// 输出一行的星号
int shuChuHang(int xingCount)
{
for(int i = 0; i < xingCount; i++)
{
printf("*");
}
printf("\n");
}
二。 让三角形动起来
1. 让图形动起来,其实就是定期输出多份相似的图片, 然后通过人眼睛的视觉特性就形成了连续的动画效果
部分代码如下:
int main()
{
printf("Hello world!\n");
// 循环输出多个三角形
for(int i = 5; i < 15; i++){
shuSanJiaoXing(i);
}
return 0;
}
其实仔细观察一下, 滚动窗口向回, 会发现很多三角形如下:
原来我们在输出时, 后一次输出, 仅仅是在前一次输出的基础上,追加了新的三角形, 然后屏幕滚动,修后形成这个结果
2. 添加清屏的指令,让每次仅仅输出一个三角形
最简单的清屏指令是:
system("cls");
这次屏幕依然有滚动出现, 但是闪闪的很快如下图
为什么有上面情况?
原因是输出一个三角形后 , 立即清理了屏幕, 然后输出下一个图形,这样程序输出闪烁太快了!
三。 延时输出控制屏幕显示速度
延时执行一个东西, 我们需要一个延时的功能, 最常用的延时功能是让你的程序休息一会,然后在执行。 对于计算机休息一会是用sleep函数, 这个是睡眠的意思。 修改代码, 最后结果如下: 完整的参考代码如下: #include <stdio.h> #include <stdlib.h> #include <windows.h> // 定义一个输出三角形的函数, lineCount为三角形具有的行数 int shuSanJiaoXing(int lineCount); // 输出一行的星号 int shuChuHang(int xingCount); // 系统默认项目, 输出一个字符串 int main() { printf("Hello world!\n"); // 循环输出多个三角形 for(int i = 5; i < 15; i++){ system("cls"); shuSanJiaoXing(i); Sleep(1000); } return 0; } // 定义一个输出三角形的函数, lineCount为三角形具有的行数 int shuSanJiaoXing(int lineCount) { for(int i = 0; i < lineCount; i++){ shuChuHang(i); } // 输出倒三角形的部分代码 for(int i = 1; i < lineCount; i++) { shuChuHang(lineCount - i - 1); } } // 输出一行的星号 int shuChuHang(int xingCount) { for(int i = 0; i < xingCount; i++) { printf("*"); } printf("\n"); }
总结一下, 为什么程序会有动的感觉?
先看一下动画的原理
什么是动画
动画,顾名思义,就是能“动”的画。
人的眼睛对图像有短暂的记忆效应,所以当眼睛看到多张图片连续快速的切换时,就会被认为是一段连续播放的动画了。
比如,中国古代的“走马灯”,就是用的这个原理。
有些人还会在一个本子每页上手绘一些漫画,当快速翻页的时候,也会看到动画的效果,比如:
计算机动画的实现方式
动画是由一张张图片组成的,在计算机中,我们称每一张图片为 一帧画面 。
如果我们想实现这么一个动画:一个水杯放在桌子的左边,移动到右边,那么我们实际操作的,只是水杯。
所以动画的实现,只是对运动变化了的部分的处理。
总结一下, 我们程序会动, 是由于程序中每间隔1秒钟, 变化一下图形的显示, 这些显示的图形略不相同, 最后这些不太相同的, 但是相似的图片(显示的内容),最后在我们大脑的作用下形成了一个可以动的东西, 因此就是动画了。
下一个内容, 我们是要图形除了, 变大外还要 上下移动
相关文章