2005年04月19日

      前日,看好友之QQ个人介绍,有一君,介绍甚奇。“叶子的离开,究竟是风的多情呼唤,还是树的无心留恋”

    读之感慨甚深。

   叶子的离开是季节的使然,然则亦是风之呼唤,也是树的无情。

      季节是内之动力,风不过是个邮差。“树欲静而风不止”,就算树之留恋万千,又奈风之如何?如若无风之呼喊,叶子亦会离开,是季节之使然,故而,叶子之离开,并非风之呼唤,亦非树之无情。

      诚然,白马非马之理论之在爱情之港湾并非是一无是处,然则,谁会去分辨孰是孰非呢?

 爱一个人困难,而爱之未呼出声之更难,前者难于物质,后者难于心智。

      进攻是防守的最佳方式?疑惑之!

    古书云:兵者,凶也!不得已而为之!

2005年04月15日

      学了那么多OOP原理,在Delphi中开始试着写一些代码。尽管我的UML设计还是不太懂,对MM的使用也不会,但还是凭着自己的构思,写了一个小模块,感觉很爽!呵呵。

      用上OOP思想后,发现代码的复用性很大,当然这也跟设计有关。比如,我设计的模块中就有面转换为点和折线转换为点这两个功能,其实,这两个功能在实现上是相似的,因为,面要转为点,中间需要经过面转为折线这一步骤,所以,这两个功能的代码可以复用。当然,我设计的时候,为了能够将各个功能组合到一起,定义了一个虚的基类,从而将所有功能继承于此。当我写好面转换为点的功能后,发现折线转换为点的功能可以直接继承自它,只需重新构造一下,设置一些参数就可以了,呵呵。一个子类里面就只有一个构造函数就搞定了,这种现象在以前面向过程式的编程中重来没遇见过。

   今天,虽然累了点,但还是有所领悟,有所收获。莫非,这就是传说中的“顿悟”?^_^

2005年03月27日

                前天,表哥发了一个短信来,问我近况如何。我答复说还好。他那头说,好好干,别象他那样,有好的女孩子不要错过。我默然。

           表哥比我大2岁,在乡下这个年龄应该是抱儿子的了,可他还是单身。中间是发生过很多事情,追溯起来,只能说他没有好好把握。

于是,过来人警惕我。可是,属于我的在哪呢?

       没有梦,就没有追求。可我的梦在哪?

     年轻是人生的最大财富,的确是应该好好珍惜。“人生得一知己,足矣!红粉甚之!”,终于明白范蠡偕西施之心态了。

    

2005年03月23日

Delphi面向对象编程的20条规则
 前言
   大多数Delphi程序员都像使用Visual Basic 那样使用他们手头上开发工具,而丝毫没有意识到Delphi的强大功能,更谈不上使用这些功能了。(写到这里,编辑惶恐的举起了手,怎么可能呢?)Delphi和Visual Basic不同,Delphi完全建立在面向对象结构上,这不仅影响到VCL的结构,而且影响到使用Delphi开发的每一个程序。在本文中,我不想涉及到面向对象编程(OOP)的所有理论,只是提出一些简单的经验规则。希望这些规则能够帮助改善你的程序结构。无论你开发的是何种类型的程序,这些经验规则都是适用的。你应当把他们当作一些建议,记住他们并把他们应用到你开发的程序中去。关于面向对象编程,我想强调的一个关键原理是封装。我们都希望创建一些灵活而且强健的类,因为这样的类允许我们以后修改他们的实现方法而不影响到程序中的其他部分,这正是封装给我们带来的好处。虽然封装不是创建一个好的面向对象程序的唯一标准,但是它构成了面相对象编程的基础,所以在本文中我也许会过多的强调封装性,请不要感到奇怪,我有足够充分的理由这么做。最后,我想说明这样一个事实:本文将主要集中说明窗体(Forms)的开发(虽然其中的一些规则对于组件的开发同样适用),因此这些规则对于所有的Delphi程序员都是适用的。那些编写组件的程序员必须把面相对象编程和类(Class)作为核心的元素,但是对于那些使用组件编程的程序员,他们时常会忘记面向对象。对于他们,本文可以当作一个提示,提醒他们始终记住面向对象编程
    第一部分:窗体是类(A Form is A Class)(rule 1-rule 15) 程序员常常将窗体看作是对象,而事实上窗体是类。两者的差别在于你创建基于相同的窗体类的多个窗体对象。令人感到疑惑的是Delphi为你定义的每一个窗体类创建了一个默认的全局对象。这对于新手来说是相当方便的,但是这同样会使他们形成坏习惯。
    第二部分:继承(Inheritance)(rule 15-rule 20) 在讲述了一系列关于类特别是关于窗体类的规则后,第二部分将是一些关于类的继承性以及可视化窗体继承的建议和技巧。 关于代码本文中所有的代码段都可以在本期杂志(《The Delphi Magazine》 Issue 47)附带的磁盘中的OopDemo工程中找到。你特别应该查看例程中的frm2 单元(unit)和inher单元。如果你想使用这些代码,请注意构造器必要的初始化设置以及私有组件参照,同时有必要设置好窗体的OldCreateOrder属性。否则,带有组件的窗体构造器的初始化代码将在窗体的OnCreate事件之前得到执行。在这张磁盘上你还可以找到OOP 窗体向导的第一版的编译包,不过我更希望你访问我的网站获得该程序的更完整的版本。
   规则一:为每一个类创建一个单元(One Class,One Unit)请始终牢记这一点:类的私有(private)和保护(protected)的部分只对于其他单元中的类和过程(procedure)才是隐藏的.因此,如果你想得到有效的封装性,你应该为每一个类使用一个不同的单元。对于一些简单的类,比如那些继承其他类的类,你可以使用一个共享的单元。不过共享同一个单元的类的数目是受到限制的:不要在一个简单的单元里放置超过20个复杂的类,虽然Borland公司的VCL代码曾经这样做过。如果你使用窗体的时候,Delphi会默认的遵循“一个类使用一个单元”的规则,这对于程序员来说也是十分方便的。当你向你的项目中添加一个没有窗体的类时,Delphi也会创建一个新的独立的单元。
   规则二:为组件命名(Name Components)为每一个窗体和单元给出一个有意义的名字是十分重要的。窗体和单元的名字必须是不同的,不过我趋向于为他们两者使用相似的名字,如对于关于窗体和单元可以为他们使用AboutForm 和About.pas. 为组件使用带有描述性的名字同样十分重要。最常见的命名方式是使用类的小写字母开头,再加上组件的功能,如BtnAdd 或者editName。采用这样的命名方式为组件命名可能会有很多相似的名字,而且也没有一个最好的名字,到底应该选择那一个应该依据你的个人爱好而定。
    规则三:为事件命名(Name Events)对于事件处理方法给出合适的名字更加重要。如果你对于组件给出了一个合适的名字,那么系统默认的名字ButtonClick将变成BtnAddClick。虽然从这个名字中我们可以猜到这个事件处理程序的功能,但是我认为使用一个能够描述该方法的作用的名字,而不是采用Delphi附加的名字是一种更好的方式。例如,BtnAdd按钮的onClick事件可以命名成AddToList。这会使得你的程序可读性更强,特别是当你在这个类的其他方法中调用这个事件处理程序时,而且这会帮助程序员为类似的事件或是不同的组件选用相同的方法。不过我必须声明,使用动作(Actions)是目前开发重要的程序时我最喜欢的方法。
    规则四:使用窗体方法(Use Form Methods)窗体都是一些类,因此窗体的代码是以方法组织的。你可以向窗体中添加事件处理程序,这些处理程序完成一些特别的功能,而且他们能被其他方法调用。除了事件处理方法外,你还可以向窗体添加完成动作的特别定义的方法以及访问窗体状态的方法。在窗体中添加一些公共的(Public)方法供其他窗体调用要比其他窗体直接操作他的组件要好。
    规则5:添加窗体构造器(Add Form Constructors)在运行时创建的第二个窗体除了一个默认的构造器(从Tcomponent 类继承而来)外还会提供其他特殊的构造器。如果你不需要考虑和Delphi4以前的版本的兼容性问题,我建议你重载(Overload)Create方法,添加必要的初始化参数。具体代码可参见下面的代码: Public Constructor Create(Text:string): reintroduce ; overload; Constructor TformDialog.Create(Text:string); Begin Inherited Create(Application); Edit1.Text:=Text; End; 
   规则6:避免全局变量(Avoid Global Variables)应该避免使用全局变量(就是那些在单元的interface 部分定义的变量)。下面将会有一些建议帮助你如何去做。如果你需要为窗体存储额外的数据,你可以向窗体类中添加一些私有数据。这种情况下,每一个窗体实例都会有自己的数据副本。你可以使用单元变量(在单元的implementation部分定义的变量)声明那些供窗体类的多个实例共享的数据。如果你需要在不同类型的窗体之间共享数据,你可以把他们定义在主窗体里来实现共享,或者使用一个全局变量,使用方法或者是属性来获得数据。
   规则7:永远不要在Tform1类中使用Form1(Never Use Form1 in Tform1) 你应该避免在类的方法中使用一个特定的对象名称,换句话说,你不应该在TForm1类的方法中直接使用Form1.如果你确实需要使用当前的对象,你可以使用Self关键字。请牢记:大多数时候你都没有必要直接使用当前对象的方法和数据。如果你不遵循这条规则,当你为一个窗体类创建多个实例的时候,你会陷入麻烦当中。
   规则8:尽量避免在其他的窗体中使用Form1(Seldom Use Form1 In Other Forms ) 即使在其他窗体的代码中,你也应该尽量避免直接使用全局变量,如Form1.定义一些局部变量或者私有域供其他窗体使用会比直接调用全局变量要好。例如,程序的主窗体能够为对话框定义一个私有域。很显然,如果你计划为一个派生窗体创建多个实例,这条规则将是十分有用。你可以在主窗体的代码范围内保持一份清单,也可以更简单地使用全局Sreen对象的窗体数组。
   规则9:移除Form1(Remove Form1) 事实上,我的建议是在你的程序中移除Delphi自动创建的全局窗体对象。即使你禁止了窗体的自动添加功能,这也有可能是必要的,因为在Delphi随后仍然可能添加这样的窗体。我给你的建议是应该尽量避免使用全局窗体对象。我认为对于Delphi新手而言,移除全局窗体对象是十分有用的,这样他们不至于对类和全局对象两者的关系感到疑惑。事实上,在全局窗体对象被移除后,所有与它有关的代码都会产生错误。
    规则10:添加窗体属性(Add Form Properties)正如我已经提到过的,当你需要为你的窗体添加数据时,请添加一个私有域。如果你需要访问其他类的数据,可以为你的窗体添加属性。使用这种方法你就能够改变当前窗体的代码和数据(包含在它的用户界面中)而不必改变其他窗体或类的代码。你还应该使用属性或是方法来初始化派生窗体或是对话框,或是访问他们的最终状态。正如我前文所说的,你应该使用构造器来完成初始化工作
   规则11:显示组件属性(Expose Components Properties)当你需要访问其他窗体的状态时,你不应该直接访问它的组件。因为这样会将其他窗体或其它类的代码和用户界面结合在一起,而用户界面往往是一个应用程序中最容易发生改变的部分。最好的方法是,为你需要访问的组件属性定义一个窗体属性。要实现这一点,可以通过读取组件状态的Get方法和设置组件状态的Set方法实现。假如你现在需要改变用户界面,用另外一个组件替换现有的组件,那么你只需做的是修改与这个组件属性相关的Get方法和Set方法,而不必查找,修改所有引用这个组件的窗体和类的源码。详细实现方法请参见下面的代码: private function GetText:String; procedure SetText(const Value:String); public property Text:String; read GetText write SetText; function TformDialog.GetText:String; begin Result:=Edit1.Text; end; procedure TformDialog.SetText(const Value:String); begin Edit1.Text;=Value; end;
    规则12:属性数组(Array Properties) 如果你需要处理窗体中的一系列变量,你可以定义一个属性数组。如果这些变量是一些对于窗体很重要的信息,你还可以把他们定义成窗体默认的属性数组,这样你就可以直接使用SpecialForm[3]来访问他们的值了。下面的代码显示了如何将一个listbox组件的项目定义成窗体默认的属性数组。 type TformDialog =class(TForm) private listItems:TlistBox; function GetItems(Index:Integer):String; procedure SetItems(Index:Integer:const Value:String); public property Items[Index:Integer]:string; end; function TFormDialog.GetItems(Index:Integer):string; begin if Index >=ListItems.Items.Count then raise Exception.Create(‘TformDialog:Out of Range’); Result:=ListItems.Items[Index]; end; procedure TformDialog.SetItems(Index:Integer;const alue:string); begin if Index >=ListItems.Items.Count then raise Exception.Create(‘TformDialog:Out of Range’); ListItems.Items[Index]:=Value; end;
   规则13:使用属性的附加作用(Use Side-Effects In Properties)请记住:使用属性而不是访问全局变量(参见规则10、11、12)的好处之一就是当你设置或者读取属性的值时,你还可能有意想不到的收获。例如,你可以直接在窗体界面上拖拉组件,设置多个属性的值,调用特殊方法,立即改变多个组件的状态,或者撤销一个事件(如果需要的话)等等。 规则14:隐藏组件(Hide Components)我经常听见那些面向对象编程的狂热追求者抱怨Delphi窗体中包含一些在published部分声明的组件,这是和面向对象思想的封装性原理不相符合的。他们确实提出了一个重要的议题,但是他们中的大多数人都没有意识到解决方法其实就在他们手边,完全不用重写Delphi代码,也不用转向其他语言。 Delphi向窗体中添加的组件参照可以被移到private部分,使得其他窗体不能访问他们。如果你这样做,你就有必要设置一些指向组件的窗体属性(请参见规则11),并且使用它们来访问组件的状态。 Delphi将所有的这些组件都放在published部分,这是因为使用这种方式能够保证这些域一定是在.DFM文件中创建的组件。当你改变一个组件的名称时,VCL能够自动地将这个组件对象与它在窗体中的参照关联起来。因为delphi使用RTTI和Tobject方法来实现这种功能,所以如果想要使用这种自动实现功能,就必须把参照放置在published部分(这也正是为什么delphi将所有的组件都放在published部分的缘故)。如果你想知道的更详细一点,可以参看下面的代码: procedure Tcomponent.SetReference(Enable:Boolean); var Field:^Tcomponent; begin If Fowner<> nil then begin Field:=Fowner.FieldAddress(Fname); If Field<>nil then Field^:=Self else Field^:=nil; end; end; 上面的代码是Tcomponent类的SetReference方法,这个方法可以被InserComponent,RemoveComponent和SetName等方法调用。当你理解了这一点后,你应该不难想到如果你将组件参照从published部分移到了private段,你将失去VCL的自动关联功能。为了解决这个问题,你可以通过在窗体的OnCreate事件中添加如下代码解决: Edit1:=FindComponent(‘Edit1’) as Tedit; 你接下来应该做的就是在系统中注册这些组件类,当你为他们注册过后就能使RTTI包含在编译程序中并且能够被系统所使用。当你将这些类型的组件参照移到private部分时,对于每一个组件类,你只需为他们注册一次。即使为他们注册不是一定必要的时候,你也可以这样做,因为对于RegisterClasses的额外调用有益无害。通常你应该在单元中负责生成窗体的初始化部分添加以下的代码: RegisterClass([TEdit]);
   规则15:面向对象编程的窗体向导(The OOP Form Wizard)为每一个窗体的每一个组件重复上述两个操作不仅十分的烦人,而且相当的浪费时间。为了避免额外的负担,我已经为此写了一个简单的向导程序。这个程序将会生成一些可以完成以上两步工作的代码,你需要做的仅仅是做几次复制和粘贴就行了。遗憾的是这个向导程序不能自动将代码放置到单元中合适的地方,我目前正在修改这个向导程序,希望能实现这个功能。你可以到我的网站(www.marcocantu.com)查找更加完善的程序。
    规则16:可视化窗体继承(Visual Form Inheritance)如果应用得当,这将是一个强大的工具。根据我的经验,你所开发的项目越大,越能体现它的价值。在一个复杂的程序中,你可以使用窗体的不同等级关系来处理一组相关窗体的多态性(polymorphism)。可视化窗体继承允许你共享多个窗体的一些公共的动作:你可以使用共享的方法,公用的属性,甚至是事件处理程序,组件,组件属性,组件事件处理方法等等。
    规则17:限制保护域数据的使用(Limit Protected Data)当创建一些具有不同分级体系的类时,一些程序员趋向于主要使用保护域,因为私有数据不能被子类访问。我不能说这没有其合理性,但是这肯定是和封装性不相容和的。保护数据的实现能够被所有继承的窗体所共享,而且一旦这些数据的原始定义发生改变,你必须更改所有的相关部分。请注意,如果你遵循隐藏组件这样一条规则(Rule 14),继承窗体就不可能访问基类的私有组件。在一个继承窗体中,类似Edit1.Text:=’’的代码就不会被编译。虽然这是相当的不方便,但是至少在理论上这是值得肯定的事情,而不是否定的。如果你感觉到实现封装性是最主要,最需要的,就请将这些组件参照放在基类的私有段。
    规则18:保护域中的访问方法(Protected Access Methods)在基类中将组件参照放置在私有域中,而为这些组件添加一些访问函数来得到他们的属性,这将是一种更好的方法。如果这些访问函数仅仅在这些类内部使用而且不是类接口的一部分,你应该在保护域声明他们。例如Rule 11中描述过的GetText和SetText方法就可以声明成protected,并且我们可以通过调用SetText(’’)来编辑文本。事实上,当一个方法被镜像到一个属性时,我们可以简单地采用如下代码就可以达到编辑文本地目的:Text:=’’;
    规则19:保护域中的虚拟方法(Protected Virtual Methods)实现一个灵活的分级制度的另一个关键点是定义一些你可以从外部类调用的虚拟方法来得到多态性。如果这个方法使用得当,将会很少出现其他公共的方法调用保护域中的虚拟方法的情况。这是一个重要的技巧,因为你可以定制派生类的虚拟方法,来修改对象的动作。
    规则20:用于属性的虚拟方法(Virtual Methods For Properties)即使是访问属性的方法也能定义成virtual,这样派生类就能改变属性的动作而不必重定义他们。虽然这种方法在VCL当中很少使用,但是它确实十分灵活、强大。为了实现这一点,仅仅需要将Rule 11当中的Get 和Set 方法定义成Virtual。基类的代码如下所示: type TformDialog = class ( TForm) Procedure FormCreate(Sender:Tobject); Private Edit1:Tedit; Protected function GetText:String;virtual; procedure SetText(const Value:String);virtual; public constructor Create(Text :String):reintroduce;overload; property Text:String read GetText write SetText; end; 在继承窗体中,你可以添加一些额外的动作来重载虚拟方法SetText: procedure TformInherit.SetText(const Value:String); begin inherited SetText(Value); if Value=’’ then Button1.Enabled:=False; end;
   小结
    要做到一个好的Delphi面向对象编程程序员远非我在上面提到的这些规则这么简单。上面的这20条规则中有一些可能需要足够的耐性和时间来实现,因此,我也不能强求你能遵循所有的这些规则。但是这些规则应该被合适的运用到你的程序中,而且当你开发的应用程序越大,参与的程序员越多,这些规则越重要。不过,即使是一些小程序,始终记住这些规则并在合适的地方使用他们也会对你有所帮助。当然,还有很多其他的经验规则我没有涉及到,特别是存储器处理和RTTI问题,因为他们十分的复杂,需要专门的说明。我的结论是要遵循我上面列出的规则会付出一定的代价,特别是额外的代码,但是这些代价会让你得到一个更加灵活强壮的程序。希望Delphi的后续版本能够帮组我们减少这些代价。(出处:http://www.nssoft.net/showdoc.asp?did=1009

Delphi中使用纯正的面向对象方法
日期:2004年12月30日 作者:dabao45 人气:1054 查看:[大字体 中字体 小字体]
企商在线老牌虚拟主机商 购主机送鼠标 送U盘送30G移动硬盘!

Delphi的VCL技术使很多程序员能够非常快速的入门:程序员门只要简单的拖动再加上少量的几个Pascal语句,呵呵,一个可以运行得非常良好的Delphi程序!恭喜你,你已经可以进行程序开发这个伟大的事业了。不过,当你学了一段时间后也许就不这么想了哦。因为Delphi是支持面向对象的语言,其实所有的VCL Component都是基于面向对象的语言设计的,那么当我们用这些面向对象的东东来设计出一些不怎么面向对象的东东好象有些不伦不类的感觉,当然,这里不讨论用不用面向对象方法的好坏,也不想引起相关人士的抗议,毕竟“萝卜青菜”嘛。
  在Delphi中,所有的控件都声明在Publish的关键字下,这也是利用组件编程的默认位置。这样,如果一个Form2想要引Form1(假如其为Unit1)中的某个控件时,只要Use Unit1就OK了,如果Form1要引用Form2的东东,也可以如法泡制。不过,如果哪天我不小心把Form2中的控件改了名,那岂不是Form1中调的的代码全部要重写了么?所以,我主张把这些控件作为Form类的专用元素,外部窗体可以通过Form类公布的属性来访问其中的控件。
   比如:
        TForm1=class(Tform)
privte
Button1:Tbutton
end;
不过,这样的设计是解决了成员的高度封装不过,编译会出现错误说Tbutton类找不到,原因是我们把Button1放到了Private中,Delphi不会自动帮我们注册Tbutton类,其实解决这个问题也很简单只要在
Initialization
中加入 RegisterClasses([Tbutton])
就OK了,当然如果有不同的类的控件都可以如法炮制放在RegisterClasses的参数中,因为其参数是一个控件数组。
   当然,这样的面向对象的设计方法是要比以前那种“拖拉”的方法复杂,不过,我们得到了高度的封装性,我认为值得,各位呢?

(出处:选择自 dabao45 的 Blog)

网络歌手:弦子

月色正朦胧

与清风把酒相送

太多的诗颂

醉生梦死也空

和你醉后缠绵

你曾记得

乱了分寸的心动

怎么只有这首歌

会让你轻声合

醉清风

梦镜的虚有

琴声一曲相送

还有没有情浓

风花雪月颜容

和你醉后缠绵

你曾记得

乱了分寸的心动

蝴蝶去向无影踪

举杯消愁意正浓

无人宠

是我想得太多

犹如飞蛾扑火那么冲动

最后

还有一盏烛火

燃尽我

曲终人散

谁无过错

我看破

『月色正朦胧与清风把酒相送』

『太多的诗颂醉生梦死也空』

『和你醉后缠绵』

『你曾记得』

『梦镜的虚有清唱一曲相送』

『还有没有情浓风花雪月颜容』

『和你醉后缠绵』

『你曾记得』

梦镜的虚有

琴声一曲相送

还有没有情浓

风花雪月颜容

和你醉后缠绵

你曾记得

乱了分寸的心动

蝴蝶去向无影踪

举杯消愁意正浓

无人宠

是我想得太多

犹如飞蛾扑火那么冲动

最后

还有一盏烛火

燃尽我

曲终人散

谁无过错

我看破

是我想得太多啊..

犹如飞蛾扑火那么冲动

最后

还有一盏烛火

燃尽我

曲终人散

谁无过错

我看破

2005年03月21日

丑陋的中国玩家



  1、盲从的玩家 
  记得华彩的网络游戏会议里华义谈到石器的成功,原因在于当初的市场定位。如果说玩UO的玩家被定义为骨灰级玩家,那么玩石器的玩家则是入门级的,他们不懂得什么是真正的网络游戏,所以容易吸引,即便他们玩过一段觉得不好玩离开了,马上也会有下一批新的入门级玩家涌入。
  我想,用盲从性来形容这些初级玩家最合适不过。他们的确不懂得如何鉴赏一款网络游戏的好坏,媒体宣传什么,他们便以为什么好玩。对于入门级玩家的盲从性,我以为那不是什么错误,或许也没有多大的弊端。甚至对于商家而言这是件大大的好事,网络的普及和网络游戏的发展迅速壮大了入门级玩家的市场,可以带来可观的利润。
  然而盲从性的确是入门级玩家的悲哀。若是因为这盲从性而被骗去玩一款好游戏,我想还是值得庆幸的。但如果是被骗去玩一款并不优秀的网络游戏呢?想必是很痛苦的。这就好比刚入市的股民,看宣传说哪支股票好些,自己也就跟风。若是股票看涨,自然皆大欢喜。若是看跌呢?即便有人与自己一样被套住,自己也依然是不开心的。好在玩网络游戏与炒股票在量上差别巨大,炒股被套了,因为数额太大而不忍心割肉。可觉得游戏不好玩,很少有人会在乎浪费的游戏盘与月卡的价钱。
  所以,盲从的玩家是愚蠢的。
  2、忍,是无用的
  假设入门级玩家被商家利用是因为盲从性,那么无论新老玩家,如果不幸的遇见了一款不好玩的网络游戏,却依然边骂边玩了下去,就是因为中国玩家乃至中国人所共有的奴性了。
  虽然不可否认的,无论那款游戏多么不好玩,都会给玩家带来乐趣。但那不是真正的乐趣,真正的乐趣该是在一个成心的环境里所得到的。在一个自己看着就厌恶,想着就烦的世界里,会有乐趣么?有的,那是苦中做乐。游戏不好玩?我忍。游戏太贵,我忍。总之,坏的方面都不想了,能交几个朋友就好,值当是聊天室都收费了,反正也无聊。看似开心,说穿了就是阿Q式的自我安慰而已。
  更大意义上,还是痛苦的。人活在世上,要么改变世界,要么适应世界。游戏已经做好了,就如同盘古开了天地,想要重新回炉不能了,于是只好屈服了。服务器不稳定,骂几句,接着玩。有人作弊,揭发一下,然后继续玩。
  是因为真的爱这款游戏么?有人说爱一个人的话会爱对方的全部,包括缺点。那么如果说爱的是这款游戏,游戏自身的不完善忍了自然可以理解。然而让我颇为惊讶的是服务器不稳定,网管作弊这些事奴性甚强的中国玩家也就忍了。我想,就算爱疯了一个人,倘若脑髓里没有贵恙的话,是不会希望对方衣观不整的跑到大街上吧?
  这一点让我想到了两件事,一大陆玩家因为华义收费一事,自发组织于华义打官司;二是同为中国人的台湾UO玩家,因为台湾官方UO站的服务器不稳定,频繁当机,所有玩家聚集在B 城银行一齐自杀抗议。
  总之,忍,是无用的,那只会让商家更加肆意。骂,依然是无用的,那无关商家的痛痒。从奴性中解放出来,敢于对商家某些不负责任的行为进行抗议,用法律武器保护自己的利益才是正道。
  3、自始至终一盘散沙
  要反抗,必须要团结。一个人的力量是渺小的,这个道理说出来想必是谁都明白的。可网络游戏的玩家大约都不明白,台湾官方站的玩家集体自杀只那一次,大陆比华义收费还高,甚至近似于诈骗的网络游戏也有,官司却只那一场。
  这就是因为中国的玩家自始至终仍是一盘散沙,俗话说“中国人单个的都是龙,聚在一起都是虫。”是有根据的。和国外的玩家交过手的人一定记忆尤心,单打单不是中国人对手的,一配合起来就是比中国人厉害。
  这大概可以理解为东西方文化差异,但是鲁迅先生早就讲过我们应当发扬拿来主义。如果中国人单个都是条龙,聚在一起还都是龙,岂不更好?
  4、偏激性与无知性
  虽然奴性是必须克服的,但是绝对不能因为要克服奴性便失去了理智,甚至触犯法律。这是玩家的偏激性和无知性。
  前几天看到过一条消息,说是台湾一名华义的网管在下班回家的路上被一群玩家谋杀了。虽然消息是否属实不得而知,但我想那大约是真的,因为石器最火暴的那段时候就总有朋友都对我说:“如果谁在街上自称是华义老板,即便不被乱棒打死,也会被口水淹没。”退一步讲,就算消息是假的,我想这种事并非没有发生的可能,玩千年的那段日子我就看到论坛里有许多玩家扬言要对亚联的网管如何如何,只是最终没有如何如何罢了。印象中可以确认为事实的也有,西安新大陆UO站的网管曾经因为删掉了作弊玩家的ID,屡次被打成重伤并进了医院。
  究其原因,玩家抗议的过激了,不知道该用怎样的抗议才是合法的。甚至,许多玩家是无知的,根本搞不清楚该抗议什么,不该抗议什么。
  本拉登策划劫机撞了美国的五角大楼和世贸大厦,除了为反对霸权主义的人出了心中一口恶气,静下心来,这种行为应当予以赞同的么?
  如果某个游戏不好玩,不玩便是。但如果非常喜欢玩某款游戏,可因为那个游戏的服务器不稳,网管作弊侵害了自己的消费者权益,利用法律手段进行攻击是正当的,抗议是应该的。但若是因为自己触犯了网络游戏的规定,或者因为与网管是朋友,却不给自己作弊便用武力来出气,这样的玩家连最基本的是非观都没有,简直幼稚的可笑。
  5、可笑的大侠
  有人说以上现象是正常的,廉价的游戏造就了廉价的玩家。首先我不大赞同用廉价来形容玩家,其次我更不敢苟同玩家的本性是游戏所造就的。网络游戏只是反应了玩家的这些本性而已。
  反应最多的,还有中国玩家的武侠情结。我发现,中国的玩家竟是如此的好斗。所以韩国的网络游戏可以在中国大行其道,因为有打杀,因为只有打杀。即便是西方骑士文化背景的UO,也难逃被同化为江湖的下场。
  现在中国的网络游戏与武侠片已经没有什么分别了,武侠片是因为有市场需求所以才会诞生,网络游戏也亦然。所不同的是,武侠片看完以后至多不过夜里睡觉多翻几个身,嘴里喊着天山折梅手!而网络游戏玩多了便真的以为自己是侠了,至少是个活在虚拟世界里的侠。我一直认为这是很可笑的,原来大侠竟是拿着把破刀杀鸡杀牛练出的绝世武功,而后满口脏话的斗殴。
  这叫魔该更恰当些,即便算作侠吧,古人早有云“儒以文乱法,侠以武犯禁。”侠本身也是触犯法律的,我怀疑这些自诩为侠的玩家们脑海里压根就没有一个道德观。所以,当我听说过千年里两个大侠把一个女孩堵在死角里一次一次的杀,逼她把衣服脱掉极愤怒的时候,竟有许多人说这很正常。这就是网络游戏玩家脑海里侠的概念,为所欲为的魔鬼!
  6、色欲熏心的玩家
  更可怕的是,网络游戏玩家的色欲。我不知道是从什么时候起开始流行男玩家用女ID的,我接触网络游戏的时候这已经是一种风气了。
  食、色性也。这是古话,然而人终究是种文明的高等动物。如果能够克制自己的感性,是高等动物,如若不能呢?
  中国的男性玩家,在网络游戏里把人类固有的兽性更加发扬光大了。如果说在女性玩家罕见的年代里,女性玩家如同稀世珍宝一般可以理解。那么在现如今,玩网络游戏的男性玩家想得最多的莫过于如何寻求一个女性玩家做伴侣发展到现实。我早先玩UO的时候就听过不少这样的事,但那时我以为中国的男性玩家尚不至于如此。谁知现今竟愈演愈烈了,一个男人起了色心,想要霸占一个女ID,而后惊讶的发现对方竟也是男的,于是,用女ID的便是“人妖”。权且不论男玩家用女ID出去什么心理,即便大多数是为了骗钱罢。纳闷倘若用男ID的玩家不想霸占现实里的对方,爱的仅是游戏里的一个ID而已,又何须在乎人家是男是女?
  女玩家则更过火了,我没有具体的数字来证明现在的女性玩家普遍年龄段,但科学证明女性是比较早熟的。所以她们懂得充分利用男性的好色心理,把自己妩媚的相片贴的到处都是。网络游戏是否吸引人已经不在于游戏本身是否好玩,而在于其中女玩家的比重了。还是在华彩的网络游戏会议上,商家早以提出网络游戏里1个女玩家吸引4个男玩家的量化数字。
  如果说男女玩家互相吸引与许仙白蛇之恋尚有一比,那么商家便象法海一样横来惹是生非了。只是这一次他没有把白娘子困住,而是把她衣服脱光了。
  7、无知者无畏
  中国玩家的素质是被议论的榜首。除了素质,我觉得该谈知识了。中国的玩家普遍知识水平不高,这大概是因为学知识的人都被家长强按着在学校苦读了。剩下的多是些文化水平不高的玩家,如果素质和道德是衡量一个人为人处事的准则,那么文化水平无疑是一个人理解和分析事物的基础。
  我一向很惊讶于中国低年龄玩家对游戏的天赋,15、6岁,understand都不明白的孩子竟然能够玩全英文的UO.然而那毕竟只是玩,他们不理解UO.我曾经在QQ上问朋友“远上寒山石径斜,白云深处有人家。”的后两句是什么,回答多半是省略号,唯一一个回答的朋友,竟告诉我“借问酒家何处有,牧童遥指杏花村。”
  我能够想象为什么许多玩家不懂得如何体验网络游戏了,更清楚为什么会有如此多的玩家会不分是非善恶。他们的知识含量注定了他们没有可以正确分析事物的能力。
  说到这里我突然想起一条新闻,浙江永康一名十九岁的少年将半瓶甲胺磷农药倒入了外婆的粥里,为的是从外婆那里偷些钱出来。他竟不知道农药是有毒的,以为只是让人昏迷!
  无知者——无畏!
  8、龙与虫
  中国还是有许多优秀的网络游戏玩家的。但他们同样是幼稚的,他们以为,莲出淤泥而不染,世人皆醉我独醒便是好。熟知独善其身乃一大罪过!
  优秀的网络游戏玩家认为,网络游戏不是我一个人的,所以我只要自己玩得开心就好,我没有权利对其他玩家的要求都象对自己的要求一样。可相比并不优秀的玩家是自私的,他们认为凡事都要我开心才好,我看不顺眼的便要去修理他。于是为了谋求成名,并不优秀的玩家烂用Bug,疯狂使用外挂,高喊着外挂无罪,加速有理,封包合法等等等等。
  面对此情此景,优秀的网络游戏玩家选择的仅是因为无法适应便退出。这实际上是一种助长的行为,莲出淤泥而不染被世人赞誉是因为他不受外界影响,且还能够在淤泥中生长。而不是他不去理会四周的淤泥独善其身,倘若所有的莲都因为四周有淤泥而不生长了,那么日子一久,我们能看见的,便只剩下肮脏的淤泥了。
  说白了,所谓有素质的优秀网络游戏玩家,一样的奴性的牺牲品。而独善其身最大的罪过莫过于一个“独”字,一样应了中国传统的一人是龙,多人是虫的俗话。
  记得龙族未上市前,许多中国玩家远去韩国服务器测试。因为中国玩家开齿轮,所以韩国玩家联起手来一起猛杀中国玩家。抛开民族的话题不谈,韩国玩家可以联手与非正当的行为抗衡,这正是中国的玩家,尤其是中国优秀的玩家所最为欠缺的!
  拿来主义,不单要拿来其他国家的游戏,优秀的游戏精神才是最该拿来的!
  9、被玷污的“玩家”
  写到这里本该停笔了,突然又想到,是否玩游戏的人都可以称为玩家?写几篇文字的人都可以叫作者,惟有大成者为作家。其他领域也是如此。
  倘若玩游戏的人也可以依此划分的话,那么上文所述多为游戏爱好者的丑陋了。如果非要说玩游戏的人就是玩家,我想,“玩家”这个词定是被玷污了。

笑三少

作 者: dinglj1760
标 题: 寂寞
时 间: Sun Mar 20 00:57:21 2005
点 击: 17

今日,烟抽多了点,感到胸闷。独坐电脑前,寂寞随之袭来。
很久以来,都忽律了心情的作用。在忙的团团转的时候,在努力追求的时候,总是忘记了
反思。
毕业也有半年了,没有一次真正的总结过。学习,工作,再学习……人生就是这样循环的

岁月蹉跎,白驹过隙,珍惜每一分钟吧,好好的把握住现在才有资格去说追求梦想。
努力,给自己打气,是自己的执着支撑自己。任何人都替代不了自己。
    Delphi中接口定义的接口识别码(GUID)是全球唯一的,人也是。地球上没有第二个
你。
作 者: dinglj1760
标 题: OOP
时 间: Fri Mar 18 23:01:12 2005
点 击: 4

    OOP这个鸟东西,搞的我烦死了!
    程序设计的道路有很多,但是为了以后维护性强而采用了OOP的思想设计。虽然OOP原
理大家都懂,但是要真正的用到实际中去,还不是一件简单的事情。
    我现在做的项目属于二次开发的类型,所以在对象的分割和功能的封装上有很大的争
议。而且我现在的状况是将对象封装后,发现代码和功能跟以前面向过程式的代码没什么
大的区别,可读性也不是很强,虽然说没什么代码冗余(可以通过继承来实现代码的重用
),但是看着就让人不爽。
对于对象于对象之间的通信机制还未实现,对象于后台服务器的通信机制也没有实现,现
在的对象感觉就像一个独立的Record,不过就是将以前的公用函数集成到基类而已。
    我对我的设计表示怀疑,这样的设计是OOP吗?
   虽然,对象分割的粒度大小的把握在业界一直是个难题,但我现在设计的也太差了吧。
灰心中
作 者: dinglj1760
标 题: 从游戏中解脱
时 间: Fri Mar 18 00:03:41 2005
点 击: 16

     很久没玩剑侠了,但是心里还是惦记着,似乎放不下。
     昨天写的一个帖子有人跟贴说他以前也是这样,后来“戒”了。很是惶恐的意识到“
戒”这个词语。网络游戏真的是海洛因,放下是需要“戒”的,戒毒是利用强制性的措施
来达到目的,而戒网游是自己的控制。
毕业后,说是不玩游戏了,可心里还是想的游戏的一些事情。抽空还去17173上看文章,每
天都看,不知这算不算离开。这感觉像是恋爱中的分手,欲罢还休。
    今天,在17173上看帖子,很是感触。有很多经历跟我相似的人都“戒”了,一个120
级的丐删号了,一身的黄金装备,删了,走了,彻底的走了……还有很多曾经跟我一样没
日没夜的冲级的人,都走了。其实,我也想走,却一直保留着帐号,是心里还是割舍不下
。正是这种心态纵容了我,想走就走,还要走的干脆彻底!这才是办事干净利落的表现啊

    晚上回来,我把帐号和装备都给了我朋友,连同小号和仓库,干净的离开,只让剑侠
留在我的记忆中。这也许就是解脱的一种诠释吧。
    前不久,看《仙剑》电视剧,个中情节让人琢磨。“放下并不是一件简单的事情”,
“没有拥有过,又哪来放下之说”。人生经历大概就这样的吧。
  别了,我的武侠情缘! 永别了,我的剑侠!