A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  可能大家也发现了,在我们使用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

点评

我运行了一下,挺有意思的。为楼主点赞!  发表于 2015-8-11 09:11

评分

参与人数 3技术分 +1 黑马币 +15 收起 理由
耀阳圣尊 + 1
落水的兔子 + 10 很给力!
Northcity + 5 赞一个!

查看全部评分

5 个回复

倒序浏览
HuKare 来自手机 中级黑马 2015-8-10 23:21:57
沙发
赞!
回复 使用道具 举报
翔哥膜拜啊。。。。。。
回复 使用道具 举报
这是用C语言还是oc?

点评

C语言实现的  发表于 2015-8-11 01:12
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马