少年听雨歌楼上,红烛昏罗帐.壮年听雨客舟中,江阔云低断雁叫西风. 而今听雨僧庐下,鬓已星星也! 悲欢离合总无情,一任阶前点滴到天明。
2004年7月31日星期六
贝多芬的《第一钢琴协奏曲》
2004年7月30日星期五
贪吃蛇进度(2)
/* Keyboard definition */
#define ENTER 13
/* Macro for quick control */
#define NEWEVENT (EventLink)malloc(sizeof(event))
#define REGISTER(name,in) tempevent=NEWEVENT;\
tempevent->interval=in;\
tempevent->timer=0;\
tempevent->invoke=name;
/* The prototype of bool type */
typedef enum
{
true,
false
}bool;
/* The prototype of directions */
typedef enum
{
up,
right,
down,
left
}direction;
/* The prototype of a point of the snake */
typedef struct
{
int posx;
int posy;
direction dir; /* The current direction of this point */
}point;
/* The prototype of the snake */
typedef struct
{
point dots[MAXSNAKELEN];
}snake;
#ifndef __SNAKE
/* prevent multiple includes */
#define __SNAKE
/* The prototype of the event */
typedef struct
{
long interval;/* The interval of the event occurs */
long timer;
void (*invoke)(); /* The function pointer to the invoke action */
}event;
/* The prototype of the eventlist */
struct eventlist
{
event *eventnow;
struct eventlist *next;
};
typedef struct eventlist Node;
typedef Node *Link;
typedef event *EventLink;
int screenx=0;
int screeny=0;
void Init();
void EventHandler(Link);
void EventInsert(Link,EventLink);
Link EventCreater(Link);
void EventFree(Link);
void Kernel();
/******************************************************/
void Kernel()
{
}
void EventInsert(Link eventhead,EventLink newevent)
{
Link pointer;
Link newlist;
pointer=eventhead;
while(1)
{
if (pointer->next==NULL)
{
newlist=(Link)malloc(sizeof(Node));
newlist->eventnow=newevent;
newlist->next=NULL;
pointer->next=newlist;
break;
}
pointer=pointer->next;
}
}
Link EventCreater(Link eventhead)
{
Link newevent;
EventLink tempevent;
int i;
eventhead=(Link)malloc(sizeof(Node));
/* Create event list */
if (eventhead==NULL)
{
printf("Memory allocate Failure!!\n");
}
else
{
tempevent=(EventLink)malloc(sizeof(event));
tempevent->interval=1;
tempevent->timer=0;
tempevent->invoke=Kernel;
eventhead->eventnow=tempevent;
eventhead->next=NULL;
}
return eventhead;
}
void EventFree(Link eventhead)
{
Link pointer;
EventLink tempevent;
while(eventhead !=NULL)
{
pointer=eventhead;
eventhead=eventhead->next;
tempevent=eventhead->eventnow;
free(pointer);
free(tempevent);
}
}
#endif
这里面没有什么解释的。Link EventCreater(Link)就是建立一个链表存放所有的事件。void EventInsert(Link,EventLink)是一个添加事件的函数。void EventFree(Link)是最后释放链表的函数。
下面是主程序snake.c
#include
#include
#include
#include
#include
#include
#include
/* Standard macro for quick caculation */
#define SNAKEUP if (me.dots[i].posy==0)\
me.dots[i].posy=getmaxy();\
else\
me.dots[i].posy--;\
#define SNAKEDOWN if (me.dots[i].posy==getmaxy())\
me.dots[i].posy=0;\
else\
me.dots[i].posy++;\
#define SNAKERIGHT if (me.dots[i].posx==getmaxx())\
me.dots[i].posx=0;\
else\
me.dots[i].posx++;\
#define SNAKELEFT if (me.dots[i].posx==0)\
me.dots[i].posx=getmaxx();\
else\
me.dots[i].posx--;\
/* The definition of keyboard */
#define KBUP 72
#define KBDOWN 80
#define KBRIGHT 77
#define KBLEFT 75
snake me;
/* Registry Events */
void Controler(); /* The main keyboard controler */
void DrawSnake();
void Calculate();
/* Registry Method */
void RegisterEvents(Link);
int main(void)
{
Link head;
int gdriver=DETECT,gmode;
/* Init graphic mode */
initgraph(&gdriver,&gmode,"");
Init();
head=EventCreater(head);
RegisterEvents(head);
EventHandler(head);
EventFree(head);
closegraph();
clrscr();
return 0;
}
void Controler()
{
char controlchar;
if (kbhit())
{
controlchar=getch();
switch (controlchar)
{
case ENTER:exit(0);break;
case KBUP:me.dots[0].dir=up;break;
case KBDOWN:me.dots[0].dir=down;break;
case KBRIGHT:me.dots[0].dir=right;break;
case KBLEFT:me.dots[0].dir=left;break;
}
}
}
void Calculate()
{
int i,j;
for (i=0;i<>
{
if (i==0)
{
j=0;
}
else
{
j=i-1;
}
switch(me.dots[j].dir)
{
case up:SNAKEUP;break;
case down:SNAKEDOWN;break;
case right:SNAKERIGHT;break;
case left:SNAKELEFT;break;
}
me.dots[i].dir=me.dots[j].dir;
}
}
void Init()
{
int i,j;
int sx=DEFAULTSTARTX,sy=DEFAULTSTARTY;
randomize();
for (i=0;i<>
{
me.dots[i].posx=sx;
me.dots[i].posy=sy;
me.dots[i].dir=up;
sy++;
}
screenx=getmaxx();
screeny=getmaxy();
}
/* Draw snake */
void DrawSnake()
{
int i;
cleardevice();
for (i=0;i<>
{
putpixel(me.dots[i].posx,me.dots[i].posy,DEFAULTSNAKECOLOR);
}
}
void RegisterEvents(Link head)
{
EventLink tempevent;
REGISTER(Controler,1);
EventInsert(head,tempevent);
REGISTER(Calculate,1000);
EventInsert(head,tempevent);
REGISTER(DrawSnake,1000);
EventInsert(head,tempevent);
}
void EventHandler(Link eventhead)
{
int i;
Link pointer;
while(1)
{
delay(1);
pointer=eventhead;
while (pointer!=NULL)
{
pointer->eventnow->timer++;
if ((pointer->eventnow->timer)>=(pointer->eventnow->interval))
{
/* Invoke current event */
pointer->eventnow->invoke();
pointer->eventnow->timer=0;
}
pointer=pointer->next;
}
/*if(kbhit())
{
if (getch()==KBUP)
break;
}*/
}
}
解释:void RegisterEvents(Link)是想注册事件的函数。这个函数是对void EventInsert(Link,EventLink)的更高级的封装。void Controler()是控制键盘的函数。void DrawSnake()是控制绘制蛇的函数.void Calculate()是计算蛇当前位置的函数。
下一步的任务就是使蛇准确按照键盘的输入移动。目前的移动有问题。
2004年7月28日星期三
灵山游(二)
早上六点过起床,一点都没有疲劳的感觉。早上吃的东西还是很不错的。山上的早上笼罩着一层雾。很遗憾,天气似乎不是很好。要是照相的话,也许就没办法了。吃了早餐,刚刚七点过,我们就上路了。一条很不起眼的小路,开始了上山的过程。北方的山再险峻也比不过南方的,特别是四川的。走了很短一段路,我和她就开始犹豫要不要做缆车。因为我们的时间不是那么的宽裕,所以,传说中的四个小时的山路我们不太可能都走完,而我们又特别想爬到最高点,毕竟好不容易来一趟。120元的缆车费,带着我们在雾气的绿草上慢慢地前进。因为是早上,还不是很多人上山。周围很是安静,其实景色还是很美的。关键是这份闲适很难得。是的,这份自由经常不可求。说实话,在缆车上我是感到不太安全。可是,悬在半空的感觉却是很好的,特别是和她在一起在空中的那种拥抱,真的让人觉得很虚幻。来到了半山腰,雾气更大了,伴随着的是寒冷。开始还有租军大衣的想法,不过我们一听价格还是觉得既然在爬山,运动着肯定不会太冷的。我倒是买了一个拐杖,走起来似乎要轻松些。能见度非常低,走在通向云中的山路上很有仙境的意象。五米之外就是一片白。只有这样的山路才让人感觉是一种享受,至少没有一种公园的感觉。走了不久,就遇到了山民卖烤包谷和烤羊肉,买了来吃,很有味道。越往上走,伴随着雾气和寒冷的还有风,那种刺骨的寒风,很难想象七月的北京会有这种地方。灵山不是单纯的高山草甸,而是在草甸上会突然出现很多嶙峋怪石。还有就是漫山遍野的各种野花,很纯洁的颜色。这种野花让我想起了四川的四姑娘山上的野花,四川的花还要更艳丽一些,北方的花则相对朴实很多。其实也没有走多久就来到了最高峰,2303米,北京的最高峰。很奇怪,这个灵山有很多喇嘛教的东西,很多西藏的东西,连最高峰上也有一个很西藏的石头堆,就是扔一个石头上去就会有一个梦想得到实现。我和她都扔了好多石头上去。随后我们来到石头堆后面坐下,石头堆后面的风小得多了。两个人坐在一起享受单独的时光实在是很美的事情。下山的路走得就更自由了,我们离开石板路,到周围的草地上,怪石中照相,乱跑。的确,以前这种放松的状态是我想都不敢想的,是她让我能这么自在。可是时间又是过得那么快。下山还是坐缆车,不过却有一点找不到上山来的感觉了。到了山脚,还是做一两小面的,来到了坐公共汽车的地方。灵山之行算是到了尾声。
需要补充的是,我们回去的路上遇到了北京突降暴雨,很费了一番周折才回到学校。连地铁都堵了一个多小时,不过因为我们都很高兴,所以这些都根本不值得一提了。
2004年7月10-11日
2004年7月27日星期二
广安之旅
广安是邓小平的故里,确切的说,邓小平从他十多岁离开那里就再也没有回去过了。我妈大学的一个同学在广安当市委副书记。所以,一到广安就是最高档次的接待,让人觉得很不自在。广安市在渠江边上,现在新县城修得很好,好得很多地方都比成都漂亮。当然,中央肯定投了很多钱,比如有中国最大的主题广场--思源广场,吉尼斯世界纪录的什么千年鼎。这个我等会儿再来评论。中午是在一个五星级宾馆吃的。都是我这种穷人没见过的菜肴,没吃饱也没吃好。我觉得这样出来玩儿很别扭。大人们自然很高兴,市委书记亲自给他们敬酒。最好笑也最让我深思的就是,市委书记手下的好多人也忙里忙外,我们几个小孩也被伺候得让我们自己都觉得不习惯。吃了饭,就由市委书记和手下一群什么什么书记局长带着我们去了才开发出来一个旅游景点--华蓥山大盆景风景区。华蓥山距离广安二十多公里,是四川东部最高山。如果你看过《红岩》,你就可能很熟悉华蓥山游击队,什么双枪老太婆,什么江姐都是华蓥山游击队的。我外婆的一个好朋友(现在还在,我还经常去)就是华蓥山游击队的。当然,开发这个旅游景点让我觉得很不伦不类。因为按理说,这个旅游景点不是很好,风景一般,就是喀斯特地貌,不过和云南、桂林的差远了,也就是有一些奇怪的石头和天然的树林而已。恩,还是可以啦,至少比较凉快。倒是有一个景点还可以,就是一个大天坑。所谓天坑就是一个山之间的坑,但是却不积水,因为水可以渗下去,很奇怪。其他的就没什么了,两个多小时,就当锻炼了身体吧。总之,这个景点我觉得就是因为要配合邓小平故里这个主题,硬着开发的一个景点,所谓配套的。玩儿了华蓥山,就到了一个农家山庄去吃饭,都是野味,还可以,就是觉得东西很杂。当然,农家院的东西要比中午的那些吃不来的山珍海味要好得多了。
吃了东西又返回广安县城,到思源广场观看所谓中国最大的水幕电影。水幕电影就是类似音乐喷泉,不过除了音乐还有就是把电影投影到水上看。我们去的时候已经演完了。当然,由于有领导在,所以破例又给我们演了一次,然后我们做在广场中间贵宾席坐下。真的很让人不自在,因为周围的老百姓只能在远处站着看,就我们二十多个人坐着看,然后还有保安,更可笑的是广播里面放音:“欢迎领导观看”。我当时感到十分的羞愧。不过,这个水幕电影确实很不错。气势和精彩程度相当让人激动。这套设备是几千万引进的。看了这个,晚上又返回华蓥住在一个当地最好的宾馆里,包了一层楼。市委底下跑腿的累得够呛,还让我们几个小孩去洗桑拿,被我们坚决拒绝了,当然本来我们几个小孩都在看你推荐的《海上钢琴师》。今天早上八点起来,广安的气候很像重庆,早上一起来就很热了,坐车从宾馆出来到了邓小平故居。在我想象中,故居肯定是在一个小城镇里面,结果让我大吃一惊的是故居居然都是一个公园了!也就是说就那么孤零零的一座房子,周围都重新修成很现代化的公园了。我旁边的人都说难道邓小平家是地主庄园? 还是特殊化,别人游人都是走路,我们坐着电瓶车。理所当然,公园修建得很政治化。首先,公园绿化很好,周围的树林都是中央各部门捐建的,然后每个部门捐建的树林前面有一个石碑,刻着某某部门。我细细看了一下,总之好像大家还争先在这个地方捐建树林。可以想象,这也是一种政治荣誉。其实这个公园里面没什么东西,就是一个邓小平雕像,现在还没有安放好,要等八月22日一百周年诞辰的时候由中央领导揭开。然后就是一个邓小平纪念馆,也没有开馆,还在布置。当然我们又因为特殊的原因,所以进去参观了。就是邓小平的生平展览。很现代化的纪念馆,我看比北京任何一个展览馆都要好得多。特别说一下的还有就是纪念馆这个建筑修的还不错。是一种很抽象的建筑,不像北京那些四四方方的建筑。纪念馆以后就是正题:故居。故居自然经过翻修,不过里面的东西却没有动过,还是那些破破旧旧的东西,这个出乎我的意料。看完了故居也都中午了,又拉到邓小平的那个村子--牌坊村(就在这个公园旁边)吃饭。整个牌坊村都经过完全设计并且修建。都是那种很假的古建筑,一排一排的,所有的农民都住里面。看上去很不自然。又是在一家类似农家乐的地方吃饭。还凑合,大人们就是喝酒。很快就踏上了返回成都的路。我也混混沉沉的睡去了。 下面说一说我的感想。我的第一个感想就是,如果邓小平在世,那么他的家乡绝对不会这么搞。首先,他肯定不会同意。这完全是和他的精神相违背的。整个广安打的就是“邓小平牌”,就是所谓的“伟人游”。邓小平成了一个发财致富的品牌。显然,这个肯定是务实的邓小平所不能接受的。这也是一种造神,一种扭曲的个人崇拜,包括华蓥山旅游区的开发也是所谓“伟人游”的一部分,让人觉得很多余,很浪费资源。第二个感想就是,为什么广安不好好搞建设,而要去搞很多的政绩工程,很多面子活儿。
乍一看广安,比成都,甚至比北京都要好,现代化程度都要高。城市里面的交警都是女警察,非常好看。可是,我们所见到的仅仅是新城,也就是拿出来顾面子的城区,老城区在新城区的旁边,我想肯定更多的老百姓是住在老城区里,那么老城区的生活是什么样子呢?还是新城区这样的花天酒地吗?不可能吧。广安是四川的穷地方,这个根本不容质疑。问题是,那么多的钱都去弄各种政绩了,真正的发展在哪里?到处都是邓小平的语录“发展才是硬道理”。我却对广安的发展深表怀疑。
第三个感想就是,我终于领会到了腐败旅游,终于知道了什么是特权化。同时我也知道了,当官或者说是走仕途有多么多的应酬是怎么回事了。本来,就是一群大学同学聚会。可是弄成了招待首长的级别,很多与这个根本没有关系的人参与进来,比如我说过的什么什么局长,什么什么区委书记。然后吃饭就变成了政治化的聚餐。这些什么什么长还给我们小孩敬酒(我当然没喝),我都不知道这是哪儿跟哪儿。一个市委书记的大学同学聚会要搞成这样,地下的干部不去工作,而是陪玩儿,陪吃,这个建设怎么搞得好,好几个干部还很自豪的说,每天都要陪人,习惯了,甚至最近好些天都是一天陪几个团体。天!这就是我们基层干部!最后走了,还送我们很贵重的礼物--邓小平纪念邮票一本(是非卖品,我估计好几百)。这些让我觉得很恶心了。整个广安,借邓小平致富的办法令我很悲哀。这就是我们对待我们伟人的方法。
贪吃蛇进度(1)
现在分为两个文件:snake.h和snake.c
如下:snake.h
#define NEWEVENT (EventLink)malloc(sizeof(event))
#define MAXSNAKELEN 30 /* Max length of the snake */
#define DEFAULTSNAKECOLOR WHITE /* The default snake color */
#define DEFAULTSPEED 100000 /* The start speed of the snake */
#define DEFAULTSTARTX 100 /* The start x of the snake */
#define DEFAULTSTARTY 100 /* The start y of the snake */
#define MAXEVENT 1 /* The startup event number */
/* Keyboard definition */
#define ENTER 13
/* The prototype of bool type */
typedef enum
{
true,
false
}bool;
/* The prototype of directions */
typedef enum
{
up,
right,
down,
left
}direction;
/* The prototype of a point of the snake */
typedef struct
{
int posx;
int posy;
direction dir; /* The current direction of this point */
}point;
/* The prototype of the snake */
typedef struct
{
point dots[MAXSNAKELEN];
}snake;
#ifndef __SNAKE
/* prevent multiple includes */
#define __SNAKE
/* The prototype of the event */
typedef struct
{
long interval;/* The interval of the event occurs */
long timer;
void (*invoke)(); /* The function pointer to the invoke action */
}event;
/* The prototype of the eventlist */
struct eventlist
{
event *eventnow;
struct eventlist *next;
};
typedef struct eventlist Node;
typedef Node *Link;
typedef event *EventLink;
int screenx=0;
int screeny=0;
void Init(snake *s);
void EventHandler(Link);
void EventInsert(Link,EventLink);
Link EventCreater(Link);
void EventFree(Link);
/* Registry Events */
void Controler(); /* The main keyboard controler */
void DrawPoint();
void DrawLine();
void DrawSnake(snake *s);
void EventInsert(Link eventhead,EventLink newevent)
{
Link pointer;
Link newlist;
pointer=eventhead;
while(1)
{
if (pointer->next==NULL)
{
newlist=(Link)malloc(sizeof(Node));
newlist->eventnow=newevent;
newlist->next=NULL;
pointer->next=newlist;
break;
}
pointer=pointer->next;
}
}
Link EventCreater(Link eventhead)
{
Link newevent;
EventLink tempevent;
int i;
eventhead=(Link)malloc(sizeof(Node));
/* Create event list */
if (eventhead==NULL)
{
printf("Memory allocate Failure!!\n");
}
else
{
tempevent=(EventLink)malloc(sizeof(event));
tempevent->interval=1;
tempevent->timer=0;
tempevent->invoke=Controler;
eventhead->eventnow=tempevent;
eventhead->next=NULL;
}
return eventhead;
}
void EventFree(Link eventhead)
{
Link pointer;
EventLink tempevent;
while(eventhead !=NULL)
{
pointer=eventhead;
eventhead=eventhead->next;
tempevent=eventhead->eventnow;
free(pointer);
free(tempevent);
}
}
#endif
Snake.c
#include
#include
#include
#include
#include
#include
#include
/* To return the head pointer of the eventlist */
int main(void)
{
snake me;
Link head;
int gdriver=DETECT,gmode;
EventLink tempevent;
/* Init graphic mode */
initgraph(&gdriver,&gmode,"");
Init(&me);
head=EventCreater(head);
tempevent=NEWEVENT;
tempevent->interval=10000;
tempevent->timer=0;
tempevent->invoke=DrawPoint;
EventInsert(head,tempevent);
EventHandler(head);
EventFree(head);
closegraph();
clrscr();
return 0;
}
void DrawLine()
{
int x;
int y;
x=random(500);
y=random(500);
circle(x,y,20);
}
void DrawPoint()
{
int x1,x2;
int y1,y2;
x1=random(200);x2=random(100);
y1=random(200);y2=random(100);
line(x1,y1,x2,y2);
}
void Controler()
{
}
void Init(snake *s)
{
int i,j;
int sx=DEFAULTSTARTX,sy=DEFAULTSTARTY;
randomize();
for (i=0;i<>
{
s->dots[i].posx=sx;
s->dots[i].posy=sy;
s->dots[i].dir=up;
sy++;
}
screenx=getmaxx();
screeny=getmaxy();
}
/* Draw snake */
void DrawSnake(snake *s)
{
int i;
for (i=0;i<>
{
putpixel(s->dots[i].posx,s->dots[i].posy,DEFAULTSNAKECOLOR);
}
}
void EventHandler(Link eventhead)
{
int i;
Link pointer;
while(1)
{
delay(1);
pointer=eventhead;
while (pointer!=NULL)
{
pointer->eventnow->timer++;
if ((pointer->eventnow->timer)>=(pointer->eventnow->interval))
{
/* Invoke current event */
pointer->eventnow->invoke();
pointer->eventnow->timer=0;
}
pointer=pointer->next;
}
if(kbhit())
{
if (getch()==ENTER)
break;
}
}
}
2004年7月21日星期三
解决了动态加载的问题
Assembly ass;
ass=Assembly.LoadFrom(Server.MapPath("")+"\\bin\\kernel.dll");
Type myType=ass.GetType("Kernel.DbControl");
MethodInfo mi=myType.GetMethod("ViewAllData");
Object[] arg=new object[1];
arg[0]=Server.MapPath("");
Object obj = Activator.CreateInstance(myType,arg);
Test.DataSource=(DataSet)mi.Invoke(obj,null);
Test.DataBind();
首先要把dll加载进来。然后得到特定的类名。再就是得到这个类里里面某个方法。最重要的一句就是:Object obj = Activator.CreateInstance(myType,arg); 这句的作用就是使这个类实例化。注意,实例化可以带上参数(这要看构造函数是什么样子的)。实例化了类以后就是调用方法,也和实例化类一样,要有参数的传递。当然,最好强制转换一下类型。
开始工作
2004年7月19日星期一
吉列尔斯的格里格
鲁宾斯坦给涅高思说,一定要把这个年轻人弄到彼得堡来。吉列尔斯的天赋不是里赫特那样的狂放,也不是基辛那样的锋芒毕露,而是一种智慧般的内敛。以前通过布拉姆斯的钢琴协奏曲和贝多芬的奏鸣曲就已经认识了吉列尔斯的伟大。但是,很多大师可以通过小品的演奏来得以检验。Pletnev的格里格是色彩飞扬的,是一种很造型化的美。吉列尔斯的格里格来得就自然得多。没有了太多做作,只有不经意间的微笑和叹息。其实,像格里格这种曲子,每个人似乎都可以去尝试,但是并不是每个人都能把这些曲子激发出火花。吉列尔斯做到了,通过一个个小曲子来,窥视宇宙。这种充满灵性的演奏很让人陶醉。吉列尔斯,果然就是奇迹。
灵山游(一)
不过,这次去旅游真的给我很多以前从没有的感触。我突然觉得城市的生活非常的灰暗。不是说城市的生活是没有乐趣的,只是在钢筋混泥土的世界里生活太久也就像这些灰色的楼房一样刻板而没有活力。哦,对,灵山,北京的最高峰。启程很普通,可以说就像去哪个博物馆,抑或是逛街。前面的一切都是未知的。自己出行就是要去操心很多很多。行车确实是一个问题。当然,北京的交通已经是算方便的了。不过对于灵山这种景点来说,是不是应该有专门的旅游线路呢?最大的问题可能就是,除了夏季这几天可以是一个旅游的旺季,平时灵山根本没人问津。当然,也就没有必要去专门开设一个旅游专线。门头沟的山很有四川的味道。让我想起了都江堰往西走的那种山谷之美。不过,四川的山水更加灵秀些,更加隽永。北方的山水更加粗犷,豪放。拥挤在类似于八十年代的公交车里,在蜿蜒的山路中行驶,身体前前后后,左左右右的摇晃着,似乎要摇晃掉那都市的晦气。
三个小时的路途到达了一个小山村,双塘涧,很秀丽的名字,却没有想象中的溪流和凉爽。十九公里的山路带着我和她来到了灵山脚下。其实,灵山很普通,也可以说就是一座没有什么特点的山。这种山放在南方,会很不起眼,根本就没有人问津。但是,这里是北方,是首都。所以,灵山就像它的名字一样有着南方般的身段。住宿,花了很一段时间才安顿下来。山民其实很纯朴,纯朴得把那种赚钱心切的心情暴露的那么明显,让人觉得可恨,可怜。最终,在一个类似住家般的招待所住下了。老实说,我还是很满意的,至少有热水,有电视。而且感觉几个管理人员的态度都很不错。柳开始很担心那关不好的窗子,不过我却少有的没那么害怕。因为,一种说不清楚的感觉告诉我,旅游嘛,并不是绝对的都很安全的。不过这些小插曲的确很有意思,恩,一种很生活化的意味。晚上的菜很贵,但是很家常。柳责怪我花了太多的钱,是的,要是我们在外面吃,或者是自己来得时候多带一些东西,可能花费要小一些。但是呢,我还是觉得这个吃的开销是值得的。这可能就是柳说我的过好日子过惯了吧。是啊,我这种在都市生活了十九年的人,走在哪里都是带着都市的味道。本来在灵山这种地方看见满天的星星应该是不足为奇的,但是当看到满天繁星的时候,还是有一种的激动。我忽然觉得贝多芬的《第九交响曲》就在天上。黑黑的画布上镶嵌着深浅不一的星星,也许我也是其中的一员。尘世的很多东西都忘却了。当然,最重要的还是和她在一起。在星空下,两个人的世界真的是那么美妙而短暂。是啊,往往美丽的东西,也是短暂的。在旅店的平台上,很冷的空气,却让我觉得有一种爱的灼烧。是的,我感到压抑了很久的爱终于可以去释放,给能够接受它的人。这种良辰美景真的是很让人觉得不现实。不过幸福是肯定的。我从没有和一个人单独出去过,她也肯定是。很难说这样的情景以后还会不会有,但是我觉得,有过就已经说明了爱的伟大。灵山,但愿给我和她的爱带来灵性。
2004年7月11日星期日
Wand的布鲁克纳第七
乌戈尔斯基的穆索尔斯基
2004年7月1日星期四
C语言的问题
昨天把下雨的题终于编完了。对Graphics.h里面的一些函数有了一个初步的了解。我觉得我设计的这个程序是一种多线程的程序的雏形,因为两个雨滴是相互独立的,互不影响。这是放在一个数组里面实现的。目前的问题是如果把间隔时间设置的相对短些的话,动画要光滑些,但是有闪烁的感觉。这也是所有编程语言的擦坪函数所带来的,怎么解决,确实是一个问题。
附上源程序:
#include <stdio.h>
#include <math.h>
#include <graphics.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
#include <conio.h>
#define PI 3.1415926
#define RAINDROPLEN 15 /* The length of a raindrop */
#define RAINTANGLE 0 /* The tangle of each raindrop */
#define RAINDROPZ 0 /* The internal of each raindrop */
#define RAINCOLOR white /* The color of each raindrop */
#define RAINWAVELEVEL 40 /* The level of each wave */
#define DELAYTIME 2000 /* The internal of each flash of the screen */
/* Calculate the next X,Y of a raindrop */
#define RAINDROPNEXTX(n,m) (int)((RAINDROPLEN/m+n)*sin(RAINTANGLE*(PI/180)))
#define RAINDROPNEXTY(n,m) (int)((RAINDROPLEN/m+n)*cos(RAINTANGLE*(PI/180)))
#define RAINDROPS 100 /* The total numbers of raindrops */
struct raindrop
{
int posx;
int posy;
int state; /* The current state of raindrop. 1 for raindrop. 2 for wave. */
int wavelevel; /* The current wave level */
};
void Init(struct raindrop *drops);
void DrawDrops(struct raindrop *drops); /* Draw all the raindrops */
void CalDrops(struct raindrop *drops); /* Calculate the next raindrops position */
int main(void)
{
struct raindrop drops[RAINDROPS];
int gdriver=DETECT,gmode,i=0;
initgraph(&gdriver,&gmode,""); /* Init graphic mode */
Init(drops);
setbkcolor(0);
while(!kbhit())
{
cleardevice();
DrawDrops(drops);
delay(DELAYTIME);
CalDrops(drops);
}
return 0;
}
void Init(struct raindrop *drops)
{
int i;
randomize();
for(i=0;i<RAINDROPS;i++,drops++)
{
drops->posx=random(600);
drops->posy=random(300);
drops->state=1;
drops->wavelevel=0;
}
}
void DrawDrops(struct raindrop *drops)
{
int i;
int endx,endy;
setcolor(WHITE);
for(i=0;i<RAINDROPS;i++,drops++)
{
if (drops->state==1)
{
endx=RAINDROPNEXTX(0,1);
endy=RAINDROPNEXTY(0,1);
line(drops->posx,drops->posy,drops->posx+endx,drops->posy+endy);
}
else
{
ellipse(drops->posx,drops->posy,0,360,1+(drops->wavelevel)*0.75,0.05+(drops->wavelevel)*0.15);
}
}
}
void CalDrops(struct raindrop *drops)
{
int i;
int endx,endy;
int temp;
for(i=0;i<RAINDROPS;i++,drops++)
{
if (drops->state==1)
{
endx=RAINDROPNEXTX(RAINDROPZ,10);
endy=RAINDROPNEXTY(RAINDROPZ,10);
if ((endx+drops->posx)>=640(endy+drops->posy)>=400)
{
temp=random(100);
if (temp%2==0(endx+drops->posx)>=680(endy+drops->posy)>=550)
{
drops->state=2;
drops->wavelevel=1;
}
else
{
drops->posx=drops->posx+endx;
drops->posy=drops->posy+endy;
}
}
else
{
drops->posx=drops->posx+endx;
drops->posy=drops->posy+endy;
}
}
else
{
if ((drops->wavelevel)<RAINWAVELEVEL)
{
drops->wavelevel++;
}
else
{
drops->posx=random(600);
drops->posy=random(100);
drops->wavelevel=0;
drops->state=1;
}
}
}