博文

[转]编写java最常见的21种错误 (2006-12-26 22:14:00)

摘要:1.Duplicated Code  代码重复几乎是最常见的异味了。他也是Refactoring的主要目标之一。代码重复往往来自于copy-and-paste的编程风格。与他相对应OAOO是一个好系统的重要标志。2.Long method  它是传统结构化的“遗毒”。一个方法应当具有自我独立的意图,不要把几个意图放在一起。3.Large Class  大类就是你把太多的责任交给了一个类。这里的规则是One Class One Responsibility.4.Divergent Change  一个类里面的内容变化率不同。某些状态一个小时变一次,某些则几个月一年才变一次;某些状态因为这方面的原因发生变化,而另一些则因为其他方面的原因变一次。面向对象的抽象就是把相对不变的和相对变化相隔离。把问题变化的一方面和另一方面相隔离。这使得这些相对不变的可以重用。问题变化的每个方面都可以单独重用。这种相异变化的共存使得重用非常困难。5.Shotgun Surgery  这正好和上面相反。对系统一个地方的改变涉及到其他许多地方的相关改变。这些变化率和变化内容相似的状态和行为通常应当放在同一个类中。6.Feature Envy 对象的目的就是封装状态以及与这些状态紧密相关的行为。如果一个类的方法频繁用get 方法存取其他类的状态进行计算,那么你要考虑把行为移到涉及状态数目最多的那个类。7.Data Clumps  某些数据通常像孩子一样成群玩耍:一起出现在很多类的成员变量中,一起出现在许多方法的参数中,这些数据或许应该自己独立形成对象。8.Primitive Obsession  面向对象的新手通常习惯使用几个原始类型的数据来表示一个概念。譬如对于范围,他们会使用两个数字。对于Money,他们会用一个浮点数来表示。因为你没有使用对象来表达问题中存在的概念,这使得代码变的难以理解,解决问题的难度大大增加。好的习惯是扩充语言所能提供原始类型,用小对象来表示范围、金额、转化率、邮政编码等等。9.Switch Statement  基于常量的开关语句是OO 的大敌,你应当把他变为子类、state或strategy.10. Parallel Inheritance Hierarchies  并行的继承层次是shotgun surgery的特殊情况。因为当你改变一个层次中的某一个类时,你必须同......

阅读全文(11079) | 评论:0

[转]小日本的GAME製作方式(2006-12-19 14:17:00)

摘要: 日本GAME製作方式   项目管理检讨 一、 现阶段问题点(1) 组织架构  公司与项目应有不同之架构(2) 各职务定位  各职务工作执掌与权责须划分更加清楚,特别是各部经理与总监。(3) 项目经理与制作人的角色差异  须更进一步划分工作执掌与权责(4) 项目管理  尚未进行,项目是否已算成立? 不清楚界定标准。 二、 附录 (参考资料)(1) 何谓项目管理?  针对特定目标的一系列规划、组织、人事、领导与控制等活动,其目的在有效运用组织内人力、物力、财力等资源,以达成组织目标。   规划:为设定项目发展目标、制定政策、研拟策略及实施步骤,及如何达成该目标的基本过程。   设定目标:目标必须写下来。必须让所有参与者都能清楚明白它的意思。   研拟策略的要点:    1. 要把欲达到的结果,清楚地表达出来。    2. 这些结果要合理可行。设立一个难以达到的目标,会使参与的人望而却步。    3. 要把一系列的行动细节,详尽地陈述出来。    4. 必须指定负责人,使整个计划能因此而推动、进行。    5. 要提供合理的资源。    6. 计划的每一个阶段,均须有时间表。    7. 要设立工作表现的标准,以衡量所欲达到的成就。  组织:为了达成共同的目的,规定各个角色的职务,并依据一定的权限与责任的分配,决定各职务间相互的关系。   管理人必须知道自己究竟负责哪些活动,哪些人需对自己负责、自己又该对哪些人负责。此外,管理人还必须清楚整个公司的结构、自己在公司的位置、可以使用哪些沟通管道等。这些都必须以达成部门和公司的目标为主,并且定下所要完成的效果,最后再用文字陈述出来。   许多公司都把组织营建在员工身上,而不是先决定所要的结果,然后再寻找适当的人选来占据那些职位。通常,小公司并没有真正的组织架构,都是把现有人员分配去做所有的工作。不用多久,又会有另一批人被聘来分摊各部门的工作。一个简陋架构的公司,有时也能维持好几年的时间,但这样很难继续维持成长。   为了让企业成功,整个组织必须以「结果为导向」作为建筑架构的基础。公司的目标需明确且实际可行,整个管理工作也必须以达成公司的目标来进行。公司的架构完全依照所要达成的结果来设计–––每个职位是专为达成某个目的而设,然后再找寻最适当的人选来执行职务。人事 甄选优秀人员于适当职位上,从事项目各......

阅读全文(4129) | 评论:0

赏金猎人游戏文档(2006-12-18 08:59:00)

摘要:现在做个赏金猎人的游戏,做了主界面(我用阿卡的手机756)几个选项:日程商店训练跑路任务系统 不知道要实现什么功能呢还有玩法怎么玩才好玩?大家出点注意啊完成后给大家下.;) 5%完成率训练完成30%可以用的指令有训练和商店 思路还没搞好具体剧情就是女主角欠下别人1000W,要不断做任务和躲收债的还债. 而训练是为了提升经验值,主角初始为1级而属性分为攻击防御敏捷(在某些场景先出手)体力弹药(在某些场景的攻击能力,例如训练) 商店可以买怪来训练 5日的食物(没食物就饿死咯- -|||)10日的食物 弹药武器 宝石(红黄绿什么的分级,打造兵器要用)珠宝(拿来当的吧) 镶嵌(无敌黄金盔甲,要的EMAIL我- -|||) ********任务************最最最头疼的地方分为:运货类保镖类体力活这些随机出现,根据主角级别出现还有些什么类?估计这里就要写上千代码疼!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ---------------------控制------------------------- 5确定 2上 4左 6右 8下 1返回上个界面 2某些菜单有用......

阅读全文(10544) | 评论:0

SJLR(2006-12-15 11:38:00)

摘要:import javax.microedition.midlet.MIDlet;import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.GameCanvas;import javax.microedition.lcdui.game.*;import java.util.*; //Runtime.getRuntime().freeMemory()察看内存/**方法内的变量只能在方法内使用*/public class SJLR extends MIDlet{ private DrawMenu drawmenu;//菜单类 private SJLRMenu sjlrmenu;   public void startApp(){ //drawmenu=new DrawMenu(Display.getDisplay(this)); sjlrmenu=new SJLRMenu(Display.getDisplay(this));          } public void pauseApp(){}   public void destroyApp(boolean e){  notifyDestroyed();      }   /**赏金猎人主菜单*/class SJLRMenu extends GameCanvas implements Runnable{ private Display display; private Sprite sjlrSprite;//主菜单图片 private Sprite itemSprite[]=new Sprite[6]; private int nowPosition=1; private Study study; private int month,week,day,hour;//三个时间,线程里面添加,最后一个是小时 private long ......

阅读全文(11562) | 评论:2

J2ME 菜单制作方法一(2006-12-11 08:56:00)

摘要://////////////////////////////////////////////////////////////////////////////////////////////////////////** *菜单制作,涵数*/ //要传进来的Graphics,菜单宽,菜单间隔,菜单项目数/***内部值,可以释放,方便修改*/private void drawMenu(Graphics graphics,int MenuX,int MenuY,int number){ private Graphics g; private int x,y; private int num;  g=graphics; x=MenuX; y=MenuY; num=number;  /***开始画咯,这里可以修改颜色,或者你设置自己的字体*g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_SMALL));方法都给你了*起始地址还没写,默认0,0*/ //先清屏 g.setColor(0xffffff); g.fillRect(0,0,getWidth(),getHeight());  g.setColor(0xff00ff); for(int i=0;i<num;i++){ g.drawRect(0,0+y*i,x,y);         } /***传进来的菜单项目,简单点说就是有多少格,五格以上就免了,那样还要写一个更加广泛的涵数,现在没空*写上每格的字*/ g.setColor(0X333333);  switch(num) { case 5:g.drawString("",0,y*5,Graphics.TOP|Graphics.LEFT);  case 4:g.drawString("",0,y*4,Graphics.TOP|Graphics.LEFT);  ......

阅读全文(12740) | 评论:0

ssss(2006-12-04 11:24:00)

摘要:import javax.microedition.midlet.MIDlet;import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.GameCanvas;import javax.microedition.lcdui.game.*;import java.util.*;public class Saver extends MIDlet{ private SaverCanvas savercanvas; private static Menu menu;//菜单类  public void startApp(){  menu=new Menu(Display.getDisplay(this));  //savercanvas=new SaverCanvas(Display.getDisplay(this)); //savercanvas.start();          }  public void pauseApp(){}  public void destroyApp(boolean e){ notifyDestroyed();      }  class SaverCanvas extends GameCanvas implements Runnable{  private Display display; private Sprite xman; private TiledLayer background;  private int Xbackground,Ybackground; private int xmanX=2,xmanY=2;//主角的XY坐标,速度 private int xman_now_X,xman_now_Y;//主角现在的XY坐标 private Random rand; private ......

阅读全文(1900) | 评论:0

J2ME 有关中文包名和图标(2006-12-03 22:02:00)

摘要:在模拟器上测试通常首画面都是显示的工程名,但工程名只能是英文,,如果想在手机上首画面上显示中文包名该怎么做啊??   简单,在WTK里面有设置,MIDlet-name之类的有两个,你这两个都写同一个中文包名就可以了   但是图标还没试过,在WTK应该也可以   1, 在WTK的SETTING的MIDlet-1项中设置图标的路径就行了。 注意不是MIDlet-Icon项   2, MIDlet-1:游戏名, /manicon.png, 主类名(含包)  ......

阅读全文(11571) | 评论:0

J2ME 拯救大兵(2006-11-30 18:28:00)

摘要://img3.png//img2.png//img1.png//tree.png //man.png /* *http://blog.programfan.com/blog.asp?author=qq14923349 *程序之巢制作 @J2ME计时器@ *如果有图片 *图片存在rec目录下,记得在存之前把格式转换成png,具体方法是: 1,点击开始 2,附件 3,图画板 4,打开图片 5,另存为(可以存作PNG了,不要直接改后续名,否则运行不了) 6,其他工具,可以选用PS,或者ACDSEE等等改 */   /*    人肉小炒(418138484)  (2006-12-02 12:34:54)没有菜单没有帮助没有退出游戏没有关卡寻路太差可控人物跟npc没有明显区分玩了一会居然跑到屏幕外面去了 */ import javax.microedition.midlet.MIDlet;import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.GameCanvas;import javax.microedition.lcdui.game.*;import java.util.*;public class Saver extends MIDlet{ private SaverCanvas savercanvas;  public void startApp(){  savercanvas=new SaverCanvas(Display.getDisplay(this)); savercanvas.start();         }  public void pauseApp(){}  public void destroyApp(boolean e){}  class SaverCanvas extends GameCanvas implements Runnable{  private Display display;......

阅读全文(12244) | 评论:0

[程序之巢]\mapwin1411的使用简介(2006-11-30 09:42:00)

摘要:关于这个工具虽然他不是必备的,但是功能足以生成我门需要的序列,不用手工比划,而且小,才几百K,可以生成2维数列和1维数列,而且还可以生成各种格式,一句话,做J2ME游戏开发的你都应该用一下。 下面简单介绍一下使用: 1,NEW 新建一文件,然后就可以IMPORTS导入图片,这里注意,、新建的时候有参数可以选择,行列数,每个图的大小。而在IMPORTS中,我现在只知道可以导入BMP,当然其他的应该也没问题(PNG,GIF我试过不能),格式转化一下吧 2,拉好你的背景后,就要导出文件了,这里可以导出的文件有多种,但是我选择了导出txt文件,具体操作是EXPORT,DATA AS TEXT勾上,OK按下,又会有选择,这里注意一下,如果你要生成一维数组,这里有2D FORMAT和1D FORMAT,意思你应该懂吧,搞好这里就可以生成你心目中的序列了。   完          程序之巢于2006,11,30 请转载的全部复制,因为部分BLOG程序或者软件使用确是原创,我到某论坛一看,文章出处和作者都被改了,这让我非常气愤,那么努力的打字结果换成别人成果,这是对作者的不尊重啊。......

阅读全文(11538) | 评论:0

《J2ME手机游戏编程入门》一书的TiledLayer的行列算法有误(2006-11-30 08:57:00)

摘要:不知道大家有没发现   书里面的算法有时候可以成功 但更大部分有错误的 昨天我郁闷了一天,看来我思考的没错,现将我的见解如下:   for(int i=0;i<map.length;i++) { int column=i%5; int row=(i-column)/7; background.setCell(column,row,map[i]); } 我思考是算法这里出了问题。如果i=7的时候,column=2;row=5;然后就是setCell(2,5,map[7])等于在第三列第六行赋予map[7] 但是map[7]对应的位置应该是第2列,第二行。不知道我思考的对不??   这个算法,你给出的列数要是比行数大结果是正确的。但是行数要比列数大,就出问题:要不就只显示一行要不就只显示到一定的行数:据我实验,这个数是列数......

阅读全文(3608) | 评论:0