博文

[转]编写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 Inhe......

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

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

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

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

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

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

阅读全文(10449) | 评论: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;
 pr......

阅读全文(11457) | 评论: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)
&n......

阅读全文(12650) | 评论: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......

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

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

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

阅读全文(11476) | 评论: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......

阅读全文(11933) | 评论: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程序或者软件使用确是原创,我到某论坛一看,文章出处和作者都被改了,这让我非常气愤,那么努力的打字结果换成别人成果,这是对作者的不尊重啊。......

阅读全文(11431) | 评论: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列,第二行。
不知道我思考的对不??   这个算法,你给出的列数要是比行数大
结果是正确的。
但是行数要比列数大,就出问题:
要不就只显示一行
要不就只显示到一定的行数:据我实验,这个数是列数......

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