黑马程序员技术交流社区
标题: 如何让你的C语言编写的程序在控制台上产生动画效果 [打印本页]
作者: Answer.Zhao 时间: 2015-8-10 23:13
标题: 如何让你的C语言编写的程序在控制台上产生动画效果
可能大家也发现了,在我们使用C语言编写程序的时候,一般我们只能打印一个画面,那么,如何在不涉及ui的基础上,只用C语言在控制台上让你的代码动起来的,下面我将给大家介绍一个方法:
首先,在我讲代码实现之前, 我想先介绍一下原理,大家都知道动画片的原理,为什么能出现连续的动画呢?因为它在连续不断的播放画面,好了,那么基于这个,我们可以得出只要我们能够连续的让我们的打印函数不断的执行,那么我们就可以得到我们想要的效果.
明白了这些,肯定有好多人已经迫不及待的去尝试了,使用一个for循环或者while的一个循环开始不停的让打印函数调用,如果我没猜错的话,你肯定没有达到理想的效果,这是为什么呢?下面我们来分析一下.
对于现在的计算机来说,运行速度是非常快的,如果我们直接使用一个简单的循环,然后在循环里不停的执行打印函数,那么,计算机会飞速的进行运算执行,这个时间是非常短的,所以我们在控制台上得到的效果就会有一种卡顿的现象,也就是画面不流畅,那么如何解决这个问题呢?我们可以使用一个延时函数.
好了,延时函数,顾名思义,就是用来延长时间的,我们让电脑在执行这个函数的时候消耗一定的时间,这样我们就可以在两次打印之间进行延时,就可以很好的解决出现的卡顿现象.
函数如下:
void _delayTime(){
for(int i = 0;i < 300; i ++){
for(int j = 0;j < 1000;j++)
}
}
好了这个就是我们的延时函数了,很显然,我们套用了for循环,但是执行的是空语句,里面的参数我们可以根据我们需要的实际延时效果自行调整,很明显,这里,电脑执行了300*1000次的运算,这样会消耗一定的时间,大概有0.5s左右,这样的话我们把这个延时函数放在两次打印之间,那么我们就可以得到我们想要的效果
下面我给大家附上一个我自己写的小程序,实现的是让一个小球自己转动,大家可以把我的代码复制下来去运行一下,也可以自己敲一下,并且我希望大家能从这里延伸出一些其他好玩的程序出来,毕竟玩着学习更有乐趣.
#include <stdio.h>
int x=1,y=1;
char tem=' ';
char road='*';
char snake='o';
int flag=1;
int o=1,k=1;
char map[6][10]={
{'*','*','*','*','*','*','*','*','*','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*',' ',' ',' ',' ',' ',' ',' ',' ','*'},
{'*','*','*','*','*','*','*','*','*','*'}
};
void delay_Time(){
for(int i=0;i<200;i++){
for(int j=0;j<100000;j++);
}
}
void print_Map(char arr[6][10]){
for(int i=0;i<6;i++){
for(int j=0;j<10;j++){
printf("%c",arr[j]);
}
printf("\n");
}
}
void snake_Move(char arr[6][10],int x,int y){
while(flag){
void delay_Time();
x=o;
y=k;
if(x==1&&y+1!=9){
arr[o][k]=tem;
arr[o][++k]=snake;
delay_Time();
print_Map(map);
}else if(x!=4&&y==8){
arr[o][k]=tem;
arr[++o][k]=snake;
delay_Time();
print_Map(map);
}else if (x==4&&y!=1){
arr[o][k]=tem;
arr[o][--k]=snake;
delay_Time();
print_Map(map);
}else if (y==1&&x!=1){
arr[o][k]=tem;
arr[--o][k]=snake;
delay_Time();
print_Map(map);
}
}
}
int main(int argc, const char * argv[]) {
snake_Move(map, x, y);
}
后面我还会给大家写一个使用这个来编写的一个小游戏,希望大家能继续支持!
made by Answer.Zhao
作者: HuKare 时间: 2015-8-10 23:21
赞!
作者: tingyuyisheng 时间: 2015-8-10 23:36
翔哥膜拜啊。。。。。。
作者: hejunxin 时间: 2015-8-11 00:57
这是用C语言还是oc?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |