/* ==========================================<br />file name: matrix.c<br />create : 2007.5.8<br />by toyasimple<br />============================================*/<br />#include <stdio.h><br />#include <graphics.h><br />#include <stdlib.h><br />#include <time.h><br /><br />#define FONT_HEIGHT 13<br />#define FONT_WIDTH 11<br />#define MAX_DELAY 10<br />#define MIN_DELAY 1<br />#define DELAY_TIME 5000<br /><br />typedef struct StringObj_tag<br />{<br /> int max_delay;<br /> int cur_delay;<br /> int head_x;<br /> int head_y;<br /> int length;<br /> char head_char;<br />} StringObj;<br /><br />int charsInX;<br />int charsInY;<br />StringObj* ptStrObj;<br /><br />void InitMatrix(void);<br />void Matrix(void);<br />void EndMatrix(void);<br />void InitStringObj(StringObj* obj, int i);<br />void DrawStringObj(StringObj* obj);<br />void InitGraph(void);<br /><br />int main()<br />{<br /> InitMatrix();<br /> Matrix();<br /> EndMatrix();<br /> return 0;<br />}<br /><br />void InitMatrix(void)<br />{<br /> int i;<br /> InitGraph();<br /> <br /> for (i = 0; i < charsInX; i++)<br /> InitStringObj(&ptStrObj, i);<br />}<br /><br />void Matrix(void)<br />{<br /> int i;<br /> <br /> while (!kbhit())<br /> {<br /> for (i = 0; i < charsInX; i++)<br /> {<br /> if ( ptStrObj.head_y > charsInY + ptStrObj.length)<br /> InitStringObj(&ptStrObj, i);<br /> else<br /> DrawStringObj(&ptStrObj);<br /> }<br /> delay(DELAY_TIME);<br /> }<br />}<br /><br />void EndMatrix(void)<br />{<br /> closegraph();<br /> free((void*)ptStrObj);<br />}<br /><br />void InitGraph(void)<br />{<br /> int graph_mode;<br /> int graph_driver = DETECT;<br /> <br /> registerbgidriver(EGAVGA_driver);<br /> initgraph(&graph_driver, &graph_mode, "");<br /> <br /> charsInX = getmaxx()/FONT_WIDTH;<br /> charsInY = getmaxy()/FONT_HEIGHT;<br /> ptStrObj = (StringObj*)malloc(sizeof(StringObj)*charsInX);<br />}<br /><br />void DrawStringObj(StringObj* obj)<br />{<br /> char chs[2] = {'\0', '\0'};<br /> int rear_x = obj->head_x * FONT_WIDTH;<br /> int rear_y = (obj->head_y - obj->length)*FONT_HEIGHT;<br /> int color;<br /> <br /> if (obj->cur_delay > 0)<br /> {<br /> obj->cur_delay--;<br /> return ;<br /> }<br /> <br /> color = ( random(2) ? LIGHTGREEN : GREEN);<br /> setcolor(color);<br /> chs[0] = obj->head_char;<br /> outtextxy(obj->head_x * FONT_WIDTH, obj->head_y * FONT_HEIGHT, chs);<br /> <br /> obj->head_y += 1;<br /> setcolor(WHITE);<br /> obj->head_char = chs[0] = random(0x7e - 0x21) + 0x21;<br /> outtextxy(obj->head_x * FONT_WIDTH, obj->head_y * FONT_HEIGHT, chs);<br /> <br /> setfillstyle(EMPTY_FILL, BLACK); <br /> bar(rear_x, rear_y, rear_x + FONT_WIDTH - 1, rear_y + FONT_HEIGHT - 1);<br /> <br /> obj->cur_delay = obj->max_delay;<br />} <br /><br />void InitStringObj(StringObj* obj, int i)<br />{<br /> obj->max_delay = obj->cur_delay = random(MAX_DELAY-MIN_DELAY)+MIN_DELAY;<br /> obj->head_x = i;<br /> obj->head_y = 0;<br /> obj->head_char = random(0x7e-0x21) + 0x21;<br /> obj->length = random(charsInY-10)+3;<br />}<br /><br /><br /> |
|