Chinaunix首页 | 论坛 | 博客
  • 博客访问: 323617
  • 博文数量: 83
  • 博客积分: 3193
  • 博客等级: 中校
  • 技术积分: 1679
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-03 12:04
文章分类

全部博文(83)

文章存档

2013年(2)

2012年(6)

2011年(72)

2010年(2)

2009年(1)

分类: C/C++

2011-01-16 21:26:35

     记得上高中的时候,我们学习的是basic语言。当时最吸引我的地方就是可以利用其中的随机函数来作画图
游戏,我也因为能自己编写一个这样的小程序并且被同学使用而对编程产生了极大的热情和兴趣。虽然没有机会
走上程序员这条路,但是当年对编程的憧憬和热情依然深印在我的脑海中久久不能忘记。所以在后来的编程语言
的学习中,总是希望能把编程跟游戏或者能图像化联系起来,学习C语言也不例外。虽然C不是面向对象的语言,
而且C的图像库使用起来也不是一天半天能掌握的。但是我发现,想实现当年我在basic上的随机绘画游戏,并
不需要太多的图像库的使用,就用一个随机函数和一些条件和循环语句,就可以在我的Linux平台上实现(当然
还需要借助system()这个强大的函数了):

#include
#include
#include

#define Y_MAX 30
#define X_MAX Y_MAX*3

#define MAX_TIME Y_MAX*6

main(void)
        {

        char sheet[X_MAX][Y_MAX];
        int chosen_x = 0;
        int chosen_y = 0;
        int x_direction = 0;
        int y_direction = 0;

        int old_x =X_MAX/2;
        int old_y =0;

        int x,y,z;
        for(y=0;y                for(x=0;x                        sheet[x][y]='#';
        system("clear");
        /*chosen for x
                srand(time(NULL));
                int chosen = 0;
                chosen_x = rand() %MAX;
        */

        for(z=1;z<=MAX_TIME;++z)
        {
/*chosen for x */
                srand(time(NULL));
                int chosen = 0;
                x_direction = rand() %3;

/*chosen for y */
                system("sleep 1");
                srand(time(NULL));
                y_direction = rand() %3;

/*clear screen*/
                system("clear");

/* direction set */
                if( x_direction == 2)
                        x_direction = -1;
                if( y_direction == 0 || y_direction == 2)
                        y_direction = -1;

                chosen_y=old_y+y_direction;
                chosen_x=old_x+x_direction;

                if(chosen_y<0)
                        chosen_y=Y_MAX;
                else if(chosen_y>Y_MAX)
                        chosen_y=0;
                else if(chosen_x<0)
                        chosen_x=X_MAX;
                else if(chosen_x>X_MAX)
                        chosen_x=0;

                old_y=chosen_y;
                old_x=chosen_x;

                sheet[chosen_x][chosen_y]=' ';

        for(y=0;y                {
                for(x=0;x                        printf("%c",sheet[x][y]);
                printf("\n");
                }
        printf("Time=%d\n",z);
        }
}

       先调整了一下长度(X_MAX)和宽度(Y_MAX)以及“沾墨点“( MAX_TIME)的次数。编译完后执行了一下,哈哈
,居然还真像那麽回事儿,有点抽象艺术画的感觉了。

      测试了几次,发现沾墨点总是集中在X轴中央一带,所以小改了一下,让它尽可能的覆盖四周的地方:

#include
#include
#include

#define Y_MAX 30
#define X_MAX Y_MAX*4

#define MAX_TIME X_MAX

main(void)
        {

        char sheet[X_MAX][Y_MAX];
        int chosen_x = 0;
        int chosen_y = 0;
        int x_direction = 0;
        int y_direction = 0;

        int old_x =0;
        int old_y =0;

        int x,y,z,w;
        for(y=0;y                for(x=0;x                        sheet[x][y]='#';
        system("clear");

        for(w=Y_MAX;w        {
        old_x=w;
        for(z=1;z<=MAX_TIME;++z)
                {
/*chosen for x */
                srand(time(NULL));
                int chosen = 0;
                x_direction = rand() %3;

/*chosen for y */
                system("sleep 1");
                srand(time(NULL));
                y_direction = rand() %3;

/*clear screen*/
                system("clear");
/* direction set */
                if( x_direction == 2)
                        x_direction = -1;
                if( y_direction == 0 || y_direction == 2)
                        y_direction = -1;

                chosen_y=old_y+y_direction;
                chosen_x=old_x+x_direction;
     if(chosen_y<0)
                        chosen_y=Y_MAX;
                else if(chosen_y>Y_MAX)
                        chosen_y=0;
                else if(chosen_x<0)
                        chosen_x=X_MAX;
                else if(chosen_x>X_MAX)
                        chosen_x=0;

                old_y=chosen_y;
                old_x=chosen_x;

                sheet[chosen_x][chosen_y]=' ';

                for(y=0;y                        {
                        for(x=0;x                                printf("%c",sheet[x][y]);
                        printf("\n");
                        }
                printf("Time=%d\n",z);
                printf("old_x=%d\n",old_x);
                }
        }
}

                                          
阅读(4413) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

jiayanfu2011-08-11 23:05:50

实力派人物。。。。求学习。。。

ffee092011-01-17 10:46:26

年底将近推荐个数码网站http://clic.gs/1IJk想入手的摄友可以去看看,我刚入手了部无敌兔的。