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

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

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

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

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秒钟, 变化一下图形的显示, 这些显示的图形略不相同, 最后这些不太相同的, 但是相似的图片(显示的内容),最后在我们大脑的作用下形成了一个可以动的东西, 因此就是动画了。

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

相关文章

计算机介绍                                  从锦囊妙计想到的01

流程图(分支结构)介绍          从锦囊妙计想到的02

线程介绍                                     从锦囊妙计想到的03

循环结构介绍                             从锦囊妙计想到的05

流程线程总结                             从锦囊妙计想到的06

cpu和线程定义、开始               从锦囊妙计想到的07

分布式计算                                  从锦囊妙计想到的08

分布式中事件和计数                 从锦囊妙计想到的09

内容总结                                     从锦囊妙计想到的10

数据类型,变量简介                从锦囊妙计想到的11

函数和参数                                从锦囊妙计想到的12

用户交互与数据输入输出       从锦囊妙计想到的13

人机交互界面                            从锦囊妙计想到的15 

过程与对象                                从锦囊妙计想到的16

同步和异步                                从锦囊妙计想到的17

顺序打印                                    从锦囊妙计想到的18

数据输入输出                            从锦囊妙计想到的19

屏幕坐标和打印                        从锦囊妙计想到的20

java函数控制输出                     从锦囊妙计想到的21

逐步细化解决复杂问题           从锦囊妙计想到的22

java入门                                    从锦囊妙计想到的23

java复杂过程分析                   从锦囊妙计想到的25

中间辅助功能解决问题          从锦囊妙计想到的26

叠加操作输出复杂图形          从锦囊妙计想到的27

时间和空间                               从锦囊妙计想到的28

编写边测解决问题                  从锦囊妙计想到的29

让程序动起来                          从锦囊妙计想到的30

程序往复运动                           从锦囊妙计想到的31