从锦囊妙计想到的30–让您程序输出动起来

  categories:儿童计算机  author:

前面程序在输出三角形, 今天我们说明一下程序如何运动起来,探究运动的原理是什么

为了达到程序运动起来, 我们首先要让程序能输出一个三角形, 否则没办法看清问题。

一。 创建新项目输出三角形

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");
这次屏幕依然有滚动出现, 但是闪闪的很快如下图
1
为什么有上面情况?
原因是输出一个三角形后 , 立即清理了屏幕, 然后输出下一个图形,这样程序输出闪烁太快了!

三。 延时输出控制屏幕显示速度

延时执行一个东西, 我们需要一个延时的功能, 最常用的延时功能是让你的程序休息一会,然后在执行。 
对于计算机休息一会是用sleep函数, 这个是睡眠的意思。
修改代码, 最后结果如下:
2

完整的参考代码如下:
#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");
}

总结一下, 为什么程序会有动的感觉?

先看一下动画的原理

什么是动画

动画,顾名思义,就是能“动”的画。
人的眼睛对图像有短暂的记忆效应,所以当眼睛看到多张图片连续快速的切换时,就会被认为是一段连续播放的动画了。

比如,中国古代的“走马灯”,就是用的这个原理。
有些人还会在一个本子每页上手绘一些漫画,当快速翻页的时候,也会看到动画的效果,比如:

666888

计算机动画的实现方式

动画是由一张张图片组成的,在计算机中,我们称每一张图片为 一帧画面 。

如果我们想实现这么一个动画:一个水杯放在桌子的左边,移动到右边,那么我们实际操作的,只是水杯。
所以动画的实现,只是对运动变化了的部分的处理。

总结一下, 我们程序会动, 是由于程序中每间隔1秒钟, 变化一下图形的显示, 这些显示的图形略不相同, 最后这些不太相同的, 但是相似的图片(显示的内容),最后在我们大脑的作用下形成了一个可以动的东西, 因此就是动画了。

下一个内容, 我们是要图形除了, 变大外还要 上下移动



快乐成长 每天进步一点点      京ICP备18032580号-1