<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>太阳是黑色的 &#187; 编程</title>
	<atom:link href="http://www.hongliangjie.com/blog/tag/%e7%bc%96%e7%a8%8b/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hongliangjie.com/blog</link>
	<description>少年听雨歌楼上,红烛昏罗帐.壮年听雨客舟中,江阔云低断雁叫西风. 而今听雨僧庐下,鬓已星星也! 悲欢离合总无情,一任阶前点滴到天明.</description>
	<lastBuildDate>Wed, 05 Oct 2011 22:19:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>今天终于完成了语法分析器</title>
		<link>http://www.hongliangjie.com/blog/2005/12/08/parser/</link>
		<comments>http://www.hongliangjie.com/blog/2005/12/08/parser/#comments</comments>
		<pubDate>Thu, 08 Dec 2005 18:58:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[在键盘上冥想]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.hongliangjie.com/blog/?p=31</guid>
		<description><![CDATA[今天终于完成了SLR（1）语法分析器生成器的程序。应该说这个程序我写得还算比较顺利，不过也将近800行代码，如果加上分析器估计还是要有1000行代码左右。尽管最开始的时候，我不太赞同用编写生成器的方式来进行编译原理的课程学习的实践环节，不过，经过编写了词法分析程序生成器和语法分析程序的生成器以后，我觉得还是有很大的实用价值的。比如，在很多语言中支持正则表达式，而要动态的进行正则表达式的分析，无疑需要生成器程序的支持。所以，这半个学期以来，我觉得还是很有收获的。]]></description>
			<content:encoded><![CDATA[<p>今天终于完成了SLR（1）语法分析器生成器的程序。应该说这个程序我写得还算比较顺利，不过也将近800行代码，如果加上分析器估计还是要有1000行代码左右。尽管最开始的时候，我不太赞同用编写生成器的方式来进行编译原理的课程学习的实践环节，不过，经过编写了词法分析程序生成器和语法分析程序的生成器以后，我觉得还是有很大的实用价值的。比如，在很多语言中支持正则表达式，而要动态的进行正则表达式的分析，无疑需要生成器程序的支持。所以，这半个学期以来，我觉得还是很有收获的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hongliangjie.com/blog/2005/12/08/parser/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>终于完成了词法分析的生成器</title>
		<link>http://www.hongliangjie.com/blog/2005/11/27/parser-2/</link>
		<comments>http://www.hongliangjie.com/blog/2005/11/27/parser-2/#comments</comments>
		<pubDate>Sun, 27 Nov 2005 15:23:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[在键盘上冥想]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.hongliangjie.com/blog/?p=32</guid>
		<description><![CDATA[今天终于完成了词法分析程序的生成器。1000多行代码。应该说，还是离我自己预先期望有一些距离。因为这个是“编译原理”课程作业的一部分，所以时间比较紧。我开始打算用纯粹的C语言编写，可是后来发现代码量还要增加不少，于是就加入了一些C++的特性。这一点，如果以后有时间会改成C语言。 详细的技术细节，会慢慢公布。]]></description>
			<content:encoded><![CDATA[<p>今天终于完成了词法分析程序的生成器。1000多行代码。应该说，还是离我自己预先期望有一些距离。因为这个是“编译原理”课程作业的一部分，所以时间比较紧。我开始打算用纯粹的C语言编写，可是后来发现代码量还要增加不少，于是就加入了一些C++的特性。这一点，如果以后有时间会改成C语言。</p>
<p>详细的技术细节，会慢慢公布。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hongliangjie.com/blog/2005/11/27/parser-2/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>关于编译器</title>
		<link>http://www.hongliangjie.com/blog/2005/09/24/compiler/</link>
		<comments>http://www.hongliangjie.com/blog/2005/09/24/compiler/#comments</comments>
		<pubDate>Sun, 25 Sep 2005 01:04:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[在键盘上冥想]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.hongliangjie.com/blog/?p=33</guid>
		<description><![CDATA[因为一些众所周知的原因，我还没有开始编写我的编译器。最大一个问题就在于老师给我们的要求是在是太模糊，以至于很难实现。 老师说，要我们写一个通用的编译器。这个要求本身就有一些问题。首先，我接触编译器也有一些时间了，就从来没有听说过通用编译器。当然，你可能要说，有Lex和Yacc这样的生成编译器中间程序的程序。不过这也仅此而已，我们老师说，如果输入C语言的文法就能识别C语言，输入Pascal就能识别Pascal的程序，这一点让我怎么也不得要领。 当然这也不是不能做，只是这样做的意义并不大，其实编译器最重要的还有就是效率问题，谁都不想编译器编译自己的程序花费几个小时的时间。 对于编译器的编写，我还是严格使用C语言。虽然我知道用C++可以简化很多工作，但是效率又一次促使我选择了C语言。 可能再过几天，我就可以开工了。]]></description>
			<content:encoded><![CDATA[<p>因为一些众所周知的原因，我还没有开始编写我的编译器。最大一个问题就在于老师给我们的要求是在是太模糊，以至于很难实现。</p>
<p>老师说，要我们写一个通用的编译器。这个要求本身就有一些问题。首先，我接触编译器也有一些时间了，就从来没有听说过通用编译器。当然，你可能要说，有Lex和Yacc这样的生成编译器中间程序的程序。不过这也仅此而已，我们老师说，如果输入C语言的文法就能识别C语言，输入Pascal就能识别Pascal的程序，这一点让我怎么也不得要领。</p>
<p>当然这也不是不能做，只是这样做的意义并不大，其实编译器最重要的还有就是效率问题，谁都不想编译器编译自己的程序花费几个小时的时间。</p>
<p>对于编译器的编写，我还是严格使用C语言。虽然我知道用C++可以简化很多工作，但是效率又一次促使我选择了C语言。</p>
<p>可能再过几天，我就可以开工了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hongliangjie.com/blog/2005/09/24/compiler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>贪吃蛇进度（1）</title>
		<link>http://www.hongliangjie.com/blog/2004/07/27/helping-yuting-1/</link>
		<comments>http://www.hongliangjie.com/blog/2004/07/27/helping-yuting-1/#comments</comments>
		<pubDate>Tue, 27 Jul 2004 04:32:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[在键盘上冥想]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.hongliangjie.com/blog/?p=10</guid>
		<description><![CDATA[现在实现了计时器机制和事件机制。下一步是怎么去实现贪吃蛇的走动。 现在分为两个文件：snake.h和snake.c 如下：snake.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 [...]]]></description>
			<content:encoded><![CDATA[<p>现在实现了计时器机制和事件机制。下一步是怎么去实现贪吃蛇的走动。</p>
<p>现在分为两个文件：snake.h和snake.c</p>
<p>如下：snake.h</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define NEWEVENT (EventLink)malloc(sizeof(event))</span>
<span style="color: #339933;">#define MAXSNAKELEN 30 /* Max length of the snake */</span>
<span style="color: #339933;">#define DEFAULTSNAKECOLOR WHITE /* The default snake color */</span>
<span style="color: #339933;">#define DEFAULTSPEED 100000 /* The start speed of the snake */</span>
<span style="color: #339933;">#define DEFAULTSTARTX 100 /* The start x of the snake */</span>
<span style="color: #339933;">#define DEFAULTSTARTY 100 /* The start y of the snake */</span>
<span style="color: #339933;">#define MAXEVENT 1 /* The startup event number */</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Keyboard definition */</span>
&nbsp;
<span style="color: #339933;">#define ENTER 13</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* The prototype of bool type */</span>
&nbsp;
<span style="color: #993333;">typedef</span> <span style="color: #000000; font-weight: bold;">enum</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">,</span>
    <span style="color: #000000; font-weight: bold;">false</span>
<span style="color: #009900;">&#125;</span> bool<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* The prototype of directions */</span>
&nbsp;
<span style="color: #993333;">typedef</span> <span style="color: #000000; font-weight: bold;">enum</span> <span style="color: #009900;">&#123;</span>
    up<span style="color: #339933;">,</span>
    right<span style="color: #339933;">,</span>
    down<span style="color: #339933;">,</span>
    left
<span style="color: #009900;">&#125;</span> direction<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* The prototype of a point of the snake */</span>
&nbsp;
<span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> posx<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> posy<span style="color: #339933;">;</span>
    direction dir<span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* The current direction of this point */</span>
<span style="color: #009900;">&#125;</span> point<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* The prototype of the snake */</span>
&nbsp;
<span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span> <span style="color: #009900;">&#123;</span>
    point dots<span style="color: #009900;">&#91;</span>MAXSNAKELEN<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> snake<span style="color: #339933;">;</span>
&nbsp;
&nbsp;
&nbsp;
<span style="color: #339933;">#ifndef __SNAKE</span>
&nbsp;
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;">/* prevent multiple includes */</span>
&nbsp;
<span style="color: #339933;">#define __SNAKE</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* The prototype of the event */</span>
&nbsp;
<span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">long</span> interval<span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* The interval of the event occurs */</span>
    <span style="color: #993333;">long</span> timer<span style="color: #339933;">;</span>
    <span style="color: #993333;">void</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>invoke<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* The function pointer to the invoke action */</span>
&nbsp;
<span style="color: #009900;">&#125;</span> event<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* The prototype of the eventlist */</span>
&nbsp;
<span style="color: #993333;">struct</span> eventlist <span style="color: #009900;">&#123;</span>
    event <span style="color: #339933;">*</span>eventnow<span style="color: #339933;">;</span>
    <span style="color: #993333;">struct</span> eventlist <span style="color: #339933;">*</span>next<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span> eventlist Node<span style="color: #339933;">;</span>
<span style="color: #993333;">typedef</span> Node <span style="color: #339933;">*</span>Link<span style="color: #339933;">;</span>
<span style="color: #993333;">typedef</span> event <span style="color: #339933;">*</span>EventLink<span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #993333;">int</span> screenx <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> screeny <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
&nbsp;
<span style="color: #993333;">void</span> Init<span style="color: #009900;">&#40;</span>snake <span style="color: #339933;">*</span>s<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> EventHandler<span style="color: #009900;">&#40;</span>Link<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> EventInsert<span style="color: #009900;">&#40;</span>Link<span style="color: #339933;">,</span> EventLink<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Link EventCreater<span style="color: #009900;">&#40;</span>Link<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> EventFree<span style="color: #009900;">&#40;</span>Link<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;">/* Registry Events */</span>
&nbsp;
<span style="color: #993333;">void</span> Controler<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* The main keyboard controler */</span>
<span style="color: #993333;">void</span> DrawPoint<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> DrawLine<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> DrawSnake<span style="color: #009900;">&#40;</span>snake <span style="color: #339933;">*</span>s<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> EventInsert<span style="color: #009900;">&#40;</span>Link eventhead<span style="color: #339933;">,</span> EventLink newevent<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    Link pointer<span style="color: #339933;">;</span>
    Link newlist<span style="color: #339933;">;</span>
    pointer <span style="color: #339933;">=</span> eventhead<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>pointer<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            newlist <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Link<span style="color: #009900;">&#41;</span> malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span> <span style="color: #009900;">&#40;</span>Node<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            newlist<span style="color: #339933;">-&gt;</span>eventnow <span style="color: #339933;">=</span> newevent<span style="color: #339933;">;</span>
            newlist<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
            pointer<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">=</span> newlist<span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span>
&nbsp;
        pointer <span style="color: #339933;">=</span> pointer<span style="color: #339933;">-&gt;</span>next<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
Link EventCreater<span style="color: #009900;">&#40;</span>Link eventhead<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    Link newevent<span style="color: #339933;">;</span>
    EventLink tempevent<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
    eventhead <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Link<span style="color: #009900;">&#41;</span> malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span> <span style="color: #009900;">&#40;</span>Node<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #808080; font-style: italic;">/* Create event list */</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>eventhead <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Memory allocate Failure!!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        tempevent <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>EventLink<span style="color: #009900;">&#41;</span> malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span> <span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        tempevent<span style="color: #339933;">-&gt;</span>interval <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
        tempevent<span style="color: #339933;">-&gt;</span>timer <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        tempevent<span style="color: #339933;">-&gt;</span>invoke <span style="color: #339933;">=</span> Controler<span style="color: #339933;">;</span>
        eventhead<span style="color: #339933;">-&gt;</span>eventnow <span style="color: #339933;">=</span> tempevent<span style="color: #339933;">;</span>
        eventhead<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">return</span> eventhead<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> EventFree<span style="color: #009900;">&#40;</span>Link eventhead<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    Link pointer<span style="color: #339933;">;</span>
    EventLink tempevent<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>eventhead <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
        pointer <span style="color: #339933;">=</span> eventhead<span style="color: #339933;">;</span>
        eventhead <span style="color: #339933;">=</span> eventhead<span style="color: #339933;">-&gt;</span>next<span style="color: #339933;">;</span>
        tempevent <span style="color: #339933;">=</span> eventhead<span style="color: #339933;">-&gt;</span>eventnow<span style="color: #339933;">;</span>
        free<span style="color: #009900;">&#40;</span>pointer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        free<span style="color: #009900;">&#40;</span>tempevent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">#endif</span></pre></td></tr></table></div>

<p>Snake.c</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339933;">#include &lt;time.h&gt;</span>
<span style="color: #339933;">#include &lt;conio.h&gt;</span>
<span style="color: #339933;">#include &lt;graphics.h&gt;</span>
<span style="color: #339933;">#include &lt;dos.h&gt;</span>
<span style="color: #339933;">#include &lt;snake.h&gt;</span>
<span style="color: #808080; font-style: italic;">/* To return the head pointer of the eventlist */</span>
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    snake me<span style="color: #339933;">;</span>
    Link head<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> gdriver <span style="color: #339933;">=</span> DETECT<span style="color: #339933;">,</span> gmode<span style="color: #339933;">;</span>
    EventLink tempevent<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* Init graphic mode */</span>
    initgraph<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>gdriver<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>gmode<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Init<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>me<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    head <span style="color: #339933;">=</span> EventCreater<span style="color: #009900;">&#40;</span>head<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    tempevent <span style="color: #339933;">=</span> NEWEVENT<span style="color: #339933;">;</span>
    tempevent<span style="color: #339933;">-&gt;</span>interval <span style="color: #339933;">=</span> <span style="color: #0000dd;">10000</span><span style="color: #339933;">;</span>
    tempevent<span style="color: #339933;">-&gt;</span>timer <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    tempevent<span style="color: #339933;">-&gt;</span>invoke <span style="color: #339933;">=</span> DrawPoint<span style="color: #339933;">;</span>
    EventInsert<span style="color: #009900;">&#40;</span>head<span style="color: #339933;">,</span> tempevent<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    EventHandler<span style="color: #009900;">&#40;</span>head<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    EventFree<span style="color: #009900;">&#40;</span>head<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    closegraph<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    clrscr<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> DrawLine<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #993333;">int</span> x<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> y<span style="color: #339933;">;</span>
    x <span style="color: #339933;">=</span> random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    y <span style="color: #339933;">=</span> random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    circle<span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> <span style="color: #0000dd;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> DrawPoint<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #993333;">int</span> x1<span style="color: #339933;">,</span> x2<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> y1<span style="color: #339933;">,</span> y2<span style="color: #339933;">;</span>
    x1 <span style="color: #339933;">=</span> random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    x2 <span style="color: #339933;">=</span> random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    y1 <span style="color: #339933;">=</span> random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    y2 <span style="color: #339933;">=</span> random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    line<span style="color: #009900;">&#40;</span>x1<span style="color: #339933;">,</span> y1<span style="color: #339933;">,</span> x2<span style="color: #339933;">,</span> y2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> Controler<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> Init<span style="color: #009900;">&#40;</span>snake <span style="color: #339933;">*</span>s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #993333;">int</span> i<span style="color: #339933;">,</span> j<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> sx <span style="color: #339933;">=</span> DEFAULTSTARTX<span style="color: #339933;">,</span> sy <span style="color: #339933;">=</span> DEFAULTSTARTY<span style="color: #339933;">;</span>
    randomize<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> MAXSNAKELEN<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        s<span style="color: #339933;">-&gt;</span>dots<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">posx</span> <span style="color: #339933;">=</span> sx<span style="color: #339933;">;</span>
        s<span style="color: #339933;">-&gt;</span>dots<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">posy</span> <span style="color: #339933;">=</span> sy<span style="color: #339933;">;</span>
        s<span style="color: #339933;">-&gt;</span>dots<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">dir</span> <span style="color: #339933;">=</span> up<span style="color: #339933;">;</span>
        sy<span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    screenx <span style="color: #339933;">=</span> getmaxx<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    screeny <span style="color: #339933;">=</span> getmaxy<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Draw snake */</span>
&nbsp;
<span style="color: #993333;">void</span> DrawSnake<span style="color: #009900;">&#40;</span>snake <span style="color: #339933;">*</span>s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> MAXSNAKELEN<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        putpixel<span style="color: #009900;">&#40;</span>s<span style="color: #339933;">-&gt;</span>dots<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">posx</span><span style="color: #339933;">,</span> s<span style="color: #339933;">-&gt;</span>dots<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">posy</span><span style="color: #339933;">,</span> DEFAULTSNAKECOLOR<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> EventHandler<span style="color: #009900;">&#40;</span>Link eventhead<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
    Link pointer<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        pointer <span style="color: #339933;">=</span> eventhead<span style="color: #339933;">;</span>
        <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>pointer <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            pointer<span style="color: #339933;">-&gt;</span>eventnow<span style="color: #339933;">-&gt;</span>timer<span style="color: #339933;">++;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>pointer<span style="color: #339933;">-&gt;</span>eventnow<span style="color: #339933;">-&gt;</span>timer<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span>pointer<span style="color: #339933;">-&gt;</span>eventnow<span style="color: #339933;">-&gt;</span>interval<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #808080; font-style: italic;">/* Invoke current event */</span>
                pointer<span style="color: #339933;">-&gt;</span>eventnow<span style="color: #339933;">-&gt;</span>invoke<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pointer<span style="color: #339933;">-&gt;</span>eventnow<span style="color: #339933;">-&gt;</span>timer <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            pointer <span style="color: #339933;">=</span> pointer<span style="color: #339933;">-&gt;</span>next<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>kbhit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>getch<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> ENTER<span style="color: #009900;">&#41;</span>
                <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.hongliangjie.com/blog/2004/07/27/helping-yuting-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>解决了动态加载的问题</title>
		<link>http://www.hongliangjie.com/blog/2004/07/21/dynamic-loadin/</link>
		<comments>http://www.hongliangjie.com/blog/2004/07/21/dynamic-loadin/#comments</comments>
		<pubDate>Thu, 22 Jul 2004 03:04:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[在键盘上冥想]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.hongliangjie.com/blog/?p=9</guid>
		<description><![CDATA[果然，在网上查了一些资料以后，终于动态加载了dll并且调用了里面的方法。其实搞懂了以后还是很简单的。具体实现的代码如下： 1 2 3 4 5 6 7 8 9 Assembly ass; ass=Assembly.LoadFrom&#40;Server.MapPath&#40;&#34;&#34;&#41;+&#34;\\bin\\kernel.dll&#34;&#41;; Type myType=ass.GetType&#40;&#34;Kernel.DbControl&#34;&#41;; MethodInfo mi=myType.GetMethod&#40;&#34;ViewAllData&#34;&#41;; Object&#91;&#93; arg=new object&#91;1&#93;; arg&#91;0&#93;=Server.MapPath&#40;&#34;&#34;&#41;; Object obj = Activator.CreateInstance&#40;myType,arg&#41;; Test.DataSource=&#40;DataSet&#41;mi.Invoke&#40;obj,null&#41;; Test.DataBind&#40;&#41;; 首先要把dll加载进来。然后得到特定的类名。再就是得到这个类里里面某个方法。最重要的一句就是：Object obj = Activator.CreateInstance(myType,arg); 这句的作用就是使这个类实例化。注意，实例化可以带上参数（这要看构造函数是什么样子的）。实例化了类以后就是调用方法，也和实例化类一样，要有参数的传递。当然，最好强制转换一下类型。]]></description>
			<content:encoded><![CDATA[<p>果然，在网上查了一些资料以后，终于动态加载了dll并且调用了里面的方法。其实搞懂了以后还是很简单的。具体实现的代码如下：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">Assembly ass<span style="color: #008000;">;</span>
ass<span style="color: #008000;">=</span>Assembly<span style="color: #008000;">.</span><span style="color: #0000FF;">LoadFrom</span><span style="color: #008000;">&#40;</span>Server<span style="color: #008000;">.</span><span style="color: #0000FF;">MapPath</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">+</span><span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\\</span>bin<span style="color: #008080; font-weight: bold;">\\</span>kernel.dll&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
Type myType<span style="color: #008000;">=</span>ass<span style="color: #008000;">.</span><span style="color: #0000FF;">GetType</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Kernel.DbControl&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
MethodInfo mi<span style="color: #008000;">=</span>myType<span style="color: #008000;">.</span><span style="color: #0000FF;">GetMethod</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;ViewAllData&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #6666cc; font-weight: bold;">Object</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> arg<span style="color: #008000;">=</span><span style="color: #008000;">new</span> <span style="color: #6666cc; font-weight: bold;">object</span><span style="color: #008000;">&#91;</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span>
arg<span style="color: #008000;">&#91;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">=</span>Server<span style="color: #008000;">.</span><span style="color: #0000FF;">MapPath</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #6666cc; font-weight: bold;">Object</span> obj <span style="color: #008000;">=</span> Activator<span style="color: #008000;">.</span><span style="color: #0000FF;">CreateInstance</span><span style="color: #008000;">&#40;</span>myType,arg<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
Test<span style="color: #008000;">.</span><span style="color: #0000FF;">DataSource</span><span style="color: #008000;">=</span><span style="color: #008000;">&#40;</span>DataSet<span style="color: #008000;">&#41;</span>mi<span style="color: #008000;">.</span><span style="color: #0000FF;">Invoke</span><span style="color: #008000;">&#40;</span>obj,<span style="color: #0600FF; font-weight: bold;">null</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
Test<span style="color: #008000;">.</span><span style="color: #0000FF;">DataBind</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span></pre></td></tr></table></div>

<p>首先要把dll加载进来。然后得到特定的类名。再就是得到这个类里里面某个方法。最重要的一句就是：Object obj = Activator.CreateInstance(myType,arg); 这句的作用就是使这个类实例化。注意，实例化可以带上参数（这要看构造函数是什么样子的）。实例化了类以后就是调用方法，也和实例化类一样，要有参数的传递。当然，最好强制转换一下类型。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hongliangjie.com/blog/2004/07/21/dynamic-loadin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>开始工作</title>
		<link>http://www.hongliangjie.com/blog/2004/07/21/begin-working/</link>
		<comments>http://www.hongliangjie.com/blog/2004/07/21/begin-working/#comments</comments>
		<pubDate>Wed, 21 Jul 2004 17:01:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[在键盘上冥想]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.hongliangjie.com/blog/?p=8</guid>
		<description><![CDATA[今天正式开始工作了。应该说，两个人在一起的效率的确很高，至少要比一个人要高很多。第一天还是有一些收获的。比如先是做了一个dll，然后把数据库操作封装到了这个dll里面。再在一个web application里面调用这个dll。这个做的还是很成功的。中间有一个小问题就是，在dll里面，如何得到当前的工作路径。没有解决！只有从web application里面把这个路径传过去。当然这也是一种折中的方法。然后开始试验动态载入程序集。应该说，动态载入本身是没有难度的，关键是如何运行类里面的方法。这个就不是那么容易了。试验了很多，都不行。在网上查了一下，发现有很多类似的问题被大家都讨论过了。看看明天能不能解决这个问题。]]></description>
			<content:encoded><![CDATA[<p>今天正式开始工作了。应该说，两个人在一起的效率的确很高，至少要比一个人要高很多。第一天还是有一些收获的。比如先是做了一个dll，然后把数据库操作封装到了这个dll里面。再在一个web application里面调用这个dll。这个做的还是很成功的。中间有一个小问题就是，在dll里面，如何得到当前的工作路径。没有解决！只有从web application里面把这个路径传过去。当然这也是一种折中的方法。然后开始试验动态载入程序集。应该说，动态载入本身是没有难度的，关键是如何运行类里面的方法。这个就不是那么容易了。试验了很多，都不行。在网上查了一下，发现有很多类似的问题被大家都讨论过了。看看明天能不能解决这个问题。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hongliangjie.com/blog/2004/07/21/begin-working/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>C语言的问题</title>
		<link>http://www.hongliangjie.com/blog/2004/07/01/c-problem/</link>
		<comments>http://www.hongliangjie.com/blog/2004/07/01/c-problem/#comments</comments>
		<pubDate>Thu, 01 Jul 2004 15:17:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[在键盘上冥想]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.hongliangjie.com/blog/?p=7</guid>
		<description><![CDATA[昨天把下雨的题终于编完了。对Graphics.h里面的一些函数有了一个初步的了解。我觉得我设计的这个程序是一种多线程的程序的雏形，因为两个雨滴是相互独立的，互不影响。这是放在一个数组里面实现的。目前的问题是如果把间隔时间设置的相对短些的话，动画要光滑些，但是有闪烁的感觉。这也是所有编程语言的擦坪函数所带来的，怎么解决，确实是一个问题。]]></description>
			<content:encoded><![CDATA[<p>昨天把下雨的题终于编完了。对Graphics.h里面的一些函数有了一个初步的了解。我觉得我设计的这个程序是一种多线程的程序的雏形，因为两个雨滴是相互独立的，互不影响。这是放在一个数组里面实现的。目前的问题是如果把间隔时间设置的相对短些的话，动画要光滑些，但是有闪烁的感觉。这也是所有编程语言的擦坪函数所带来的，怎么解决，确实是一个问题。</p>
<p>附上源程序:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;math.h&gt;</span>
<span style="color: #339933;">#include &lt;graphics.h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339933;">#include &lt;time.h&gt;</span>
<span style="color: #339933;">#include &lt;dos.h&gt;</span>
<span style="color: #339933;">#include &lt;conio.h&gt;</span>
&nbsp;
<span style="color: #339933;">#define PI 3.1415926</span>
&nbsp;
<span style="color: #339933;">#define RAINDROPLEN 15 /*  The length of a raindrop */</span>
<span style="color: #339933;">#define RAINTANGLE 0 /*  The tangle of each raindrop */</span>
<span style="color: #339933;">#define RAINDROPZ 0  /* The internal of each raindrop */</span>
<span style="color: #339933;">#define RAINCOLOR white /* The color of each raindrop */</span>
<span style="color: #339933;">#define RAINWAVELEVEL 40 /* The level of each wave */</span>
<span style="color: #339933;">#define DELAYTIME 2000 /* The internal of each flash of the screen */</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Calculate the next X,Y of a raindrop */</span>
<span style="color: #339933;">#define RAINDROPNEXTX(n,m) (int)((RAINDROPLEN/m+n)*sin(RAINTANGLE*(PI/180)))</span>
<span style="color: #339933;">#define RAINDROPNEXTY(n,m) (int)((RAINDROPLEN/m+n)*cos(RAINTANGLE*(PI/180)))</span>
&nbsp;
<span style="color: #339933;">#define RAINDROPS 100 /*  The total numbers of raindrops */</span>
&nbsp;
&nbsp;
&nbsp;
<span style="color: #993333;">struct</span> raindrop
<span style="color: #009900;">&#123;</span>
 <span style="color: #993333;">int</span> posx<span style="color: #339933;">;</span>
 <span style="color: #993333;">int</span> posy<span style="color: #339933;">;</span>
 <span style="color: #993333;">int</span> state<span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* The current state of raindrop. 1 for raindrop. 2 for wave. */</span>
 <span style="color: #993333;">int</span> wavelevel<span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* The current wave level */</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> Init<span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> raindrop <span style="color: #339933;">*</span>drops<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> DrawDrops<span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> raindrop <span style="color: #339933;">*</span>drops<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* Draw all the raindrops */</span>
<span style="color: #993333;">void</span> CalDrops<span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> raindrop <span style="color: #339933;">*</span>drops<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* Calculate the next raindrops position */</span>
&nbsp;
&nbsp;
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 <span style="color: #993333;">struct</span> raindrop drops<span style="color: #009900;">&#91;</span>RAINDROPS<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
 <span style="color: #993333;">int</span> gdriver<span style="color: #339933;">=</span>DETECT<span style="color: #339933;">,</span>gmode<span style="color: #339933;">,</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
 initgraph<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>gdriver<span style="color: #339933;">,&amp;</span>gmode<span style="color: #339933;">,</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* Init graphic mode */</span>
 Init<span style="color: #009900;">&#40;</span>drops<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 setbkcolor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>kbhit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
  cleardevice<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  DrawDrops<span style="color: #009900;">&#40;</span>drops<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  delay<span style="color: #009900;">&#40;</span>DELAYTIME<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  CalDrops<span style="color: #009900;">&#40;</span>drops<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #993333;">void</span> Init<span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> raindrop <span style="color: #339933;">*</span>drops<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
 randomize<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span>RAINDROPS<span style="color: #339933;">;</span>i<span style="color: #339933;">++,</span>drops<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
  drops<span style="color: #339933;">-&gt;</span>posx<span style="color: #339933;">=</span>random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  drops<span style="color: #339933;">-&gt;</span>posy<span style="color: #339933;">=</span>random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  drops<span style="color: #339933;">-&gt;</span>state<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  drops<span style="color: #339933;">-&gt;</span>wavelevel<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> DrawDrops<span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> raindrop <span style="color: #339933;">*</span>drops<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
 <span style="color: #993333;">int</span> endx<span style="color: #339933;">,</span>endy<span style="color: #339933;">;</span>
 setcolor<span style="color: #009900;">&#40;</span>WHITE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span>RAINDROPS<span style="color: #339933;">;</span>i<span style="color: #339933;">++,</span>drops<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>drops<span style="color: #339933;">-&gt;</span>state<span style="color: #339933;">==</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
   endx<span style="color: #339933;">=</span>RAINDROPNEXTX<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   endy<span style="color: #339933;">=</span>RAINDROPNEXTY<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   line<span style="color: #009900;">&#40;</span>drops<span style="color: #339933;">-&gt;</span>posx<span style="color: #339933;">,</span>drops<span style="color: #339933;">-&gt;</span>posy<span style="color: #339933;">,</span>drops<span style="color: #339933;">-&gt;</span>posx<span style="color: #339933;">+</span>endx<span style="color: #339933;">,</span>drops<span style="color: #339933;">-&gt;</span>posy<span style="color: #339933;">+</span>endy<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">else</span>
  <span style="color: #009900;">&#123;</span>
&nbsp;
    ellipse<span style="color: #009900;">&#40;</span>drops<span style="color: #339933;">-&gt;</span>posx<span style="color: #339933;">,</span>drops<span style="color: #339933;">-&gt;</span>posy<span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">360</span><span style="color: #339933;">,</span><span style="color: #0000dd;">1</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>drops<span style="color: #339933;">-&gt;</span>wavelevel<span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color:#800080;">0.75</span><span style="color: #339933;">,</span><span style="color:#800080;">0.05</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>drops<span style="color: #339933;">-&gt;</span>wavelevel<span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color:#800080;">0.15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> CalDrops<span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> raindrop <span style="color: #339933;">*</span>drops<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
 <span style="color: #993333;">int</span> endx<span style="color: #339933;">,</span>endy<span style="color: #339933;">;</span>
 <span style="color: #993333;">int</span> temp<span style="color: #339933;">;</span>
 <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span>RAINDROPS<span style="color: #339933;">;</span>i<span style="color: #339933;">++,</span>drops<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
 <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>drops<span style="color: #339933;">-&gt;</span>state<span style="color: #339933;">==</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
   endx<span style="color: #339933;">=</span>RAINDROPNEXTX<span style="color: #009900;">&#40;</span>RAINDROPZ<span style="color: #339933;">,</span><span style="color: #0000dd;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   endy<span style="color: #339933;">=</span>RAINDROPNEXTY<span style="color: #009900;">&#40;</span>RAINDROPZ<span style="color: #339933;">,</span><span style="color: #0000dd;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>endx<span style="color: #339933;">+</span>drops<span style="color: #339933;">-&gt;</span>posx<span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;=</span><span style="color: #0000dd;">640</span><span style="color: #339933;">||</span><span style="color: #009900;">&#40;</span>endy<span style="color: #339933;">+</span>drops<span style="color: #339933;">-&gt;</span>posy<span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;=</span><span style="color: #0000dd;">400</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
    temp<span style="color: #339933;">=</span>random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>temp<span style="color: #339933;">%</span><span style="color:#800080;">2</span><span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #339933;">||</span><span style="color: #009900;">&#40;</span>endx<span style="color: #339933;">+</span>drops<span style="color: #339933;">-&gt;</span>posx<span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;=</span><span style="color: #0000dd;">680</span><span style="color: #339933;">||</span><span style="color: #009900;">&#40;</span>endy<span style="color: #339933;">+</span>drops<span style="color: #339933;">-&gt;</span>posy<span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;=</span><span style="color: #0000dd;">550</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
     drops<span style="color: #339933;">-&gt;</span>state<span style="color: #339933;">=</span><span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
     drops<span style="color: #339933;">-&gt;</span>wavelevel<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span>
    <span style="color: #009900;">&#123;</span>
     drops<span style="color: #339933;">-&gt;</span>posx<span style="color: #339933;">=</span>drops<span style="color: #339933;">-&gt;</span>posx<span style="color: #339933;">+</span>endx<span style="color: #339933;">;</span>
     drops<span style="color: #339933;">-&gt;</span>posy<span style="color: #339933;">=</span>drops<span style="color: #339933;">-&gt;</span>posy<span style="color: #339933;">+</span>endy<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
   <span style="color: #009900;">&#125;</span>
   <span style="color: #b1b100;">else</span>
   <span style="color: #009900;">&#123;</span>
    drops<span style="color: #339933;">-&gt;</span>posx<span style="color: #339933;">=</span>drops<span style="color: #339933;">-&gt;</span>posx<span style="color: #339933;">+</span>endx<span style="color: #339933;">;</span>
    drops<span style="color: #339933;">-&gt;</span>posy<span style="color: #339933;">=</span>drops<span style="color: #339933;">-&gt;</span>posy<span style="color: #339933;">+</span>endy<span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">else</span>
  <span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>drops<span style="color: #339933;">-&gt;</span>wavelevel<span style="color: #009900;">&#41;</span><span style="color: #339933;">&lt;</span>RAINWAVELEVEL<span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
&nbsp;
     drops<span style="color: #339933;">-&gt;</span>wavelevel<span style="color: #339933;">++;</span>
   <span style="color: #009900;">&#125;</span>
   <span style="color: #b1b100;">else</span>
   <span style="color: #009900;">&#123;</span>
    drops<span style="color: #339933;">-&gt;</span>posx<span style="color: #339933;">=</span>random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    drops<span style="color: #339933;">-&gt;</span>posy<span style="color: #339933;">=</span>random<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    drops<span style="color: #339933;">-&gt;</span>wavelevel<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    drops<span style="color: #339933;">-&gt;</span>state<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.hongliangjie.com/blog/2004/07/01/c-problem/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

