打印

黑客帝国字母下坠模拟程序:酷!

[复制链接]
2319|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
457878|  楼主 | 2007-6-1 22:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/* ==========================================
file name:   matrix.c
create   :   2007.5.8
by toyasimple
============================================*/
#include <stdio.h>
#include <graphics.h>
#include <stdlib.h>
#include <time.h>

#define FONT_HEIGHT     13
#define FONT_WIDTH    11
#define MAX_DELAY    10
#define MIN_DELAY    1
#define DELAY_TIME    5000

typedef struct StringObj_tag
{
        int max_delay;
        int cur_delay;
        int head_x;
        int head_y;
        int length;
        char head_char;
} StringObj;

int charsInX;
int charsInY;
StringObj* ptStrObj;

void InitMatrix(void);
void Matrix(void);
void EndMatrix(void);
void InitStringObj(StringObj* obj, int i);
void DrawStringObj(StringObj* obj);
void InitGraph(void);

int main()
{
        InitMatrix();
        Matrix();
        EndMatrix();
        return 0;
}

void InitMatrix(void)
{
        int i;
        InitGraph();
        
        for (i = 0; i < charsInX; i++)
                InitStringObj(&ptStrObj, i);
}

void Matrix(void)
{
        int i;
        
        while (!kbhit())
        {
                for (i = 0; i < charsInX; i++)
                {
                        if ( ptStrObj.head_y > charsInY + ptStrObj.length)
                                InitStringObj(&ptStrObj, i);
                        else
                                DrawStringObj(&ptStrObj);
                }
                delay(DELAY_TIME);
        }
}

void EndMatrix(void)
{
        closegraph();
        free((void*)ptStrObj);
}

void InitGraph(void)
{
        int graph_mode;
        int graph_driver = DETECT;
        
        registerbgidriver(EGAVGA_driver);
        initgraph(&graph_driver, &graph_mode, "");
        
        charsInX = getmaxx()/FONT_WIDTH;
        charsInY = getmaxy()/FONT_HEIGHT;
        ptStrObj = (StringObj*)malloc(sizeof(StringObj)*charsInX);
}

void DrawStringObj(StringObj* obj)
{
        char chs[2] = {'\0', '\0'};
        int  rear_x = obj->head_x * FONT_WIDTH;
        int  rear_y = (obj->head_y - obj->length)*FONT_HEIGHT;
        int  color;
        
        if (obj->cur_delay > 0)
        {
                obj->cur_delay--;
                return ;
        }
        
        color = ( random(2) ? LIGHTGREEN : GREEN);
        setcolor(color);
        chs[0] = obj->head_char;
        outtextxy(obj->head_x * FONT_WIDTH, obj->head_y * FONT_HEIGHT, chs);
        
        obj->head_y += 1;
        setcolor(WHITE);
        obj->head_char = chs[0] = random(0x7e - 0x21) + 0x21;
        outtextxy(obj->head_x * FONT_WIDTH, obj->head_y * FONT_HEIGHT, chs);
        
        setfillstyle(EMPTY_FILL, BLACK); 
        bar(rear_x, rear_y, rear_x + FONT_WIDTH - 1, rear_y + FONT_HEIGHT - 1);
        
        obj->cur_delay = obj->max_delay;


void InitStringObj(StringObj* obj, int i)
{
        obj->max_delay = obj->cur_delay = random(MAX_DELAY-MIN_DELAY)+MIN_DELAY;
        obj->head_x = i;
        obj->head_y = 0;
        obj->head_char = random(0x7e-0x21) + 0x21;
        obj->length = random(charsInY-10)+3;
}


相关帖子

沙发
cnchip| | 2007-6-2 08:14 | 只看该作者

多谢了,收藏!

使用特权

评论回复
板凳
hqgboy| | 2007-6-2 12:43 | 只看该作者

好.谢...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

270

主题

885

帖子

3

粉丝