博文
[转]编写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......
[转]小日本的GAME製作方式(2006-12-19 14:17:00)
摘要:
日本GAME製作方式
项目管理检讨
一、 现阶段问题点
(1) 组织架构
公司与项目应有不同之架构
(2) 各职务定位
各职务工作执掌与权责须划分更加清楚,特别是各部经理与总监。
(3) 项目经理与制作人的角色差异
须更进一步划分工作执掌与权责
(4) 项目管理
尚未进行,项目是否已算成立? 不清楚界定标准。
二、 附录 (参考资料)
(1) 何谓项目管理?
针对特定目标的一系列规划、组织、人事、领导与控制等活动,其目的在有效运用组织内人力、物力、财力等资源,以达成组织目标。
规划:为设定项目发展目标、制定政策、研拟策略及实施步骤,及如何达成该目标的基本过程。
设定目标:目标必须写下来。必须让所有参与者都能清楚明白它的意思。
研拟策略的要点:
1. 要把欲达到的结果,清楚地表达出来。
2. 这些结果要合理可行。设立一个难以达到的目标,会使参与的人望而却步。
3. 要把一系列的行动细节,详尽地陈述出来。
4. 必须指定负责人,使整个计划能因此而推动、进行。
5. 要提供合理的资源。
6. 计划的每一个阶段,均须有时间表。
7. 要设立工作表现的标准,以衡量所欲达到的成就。
组织:为了达成共同的目的,规定各个角色的职务,并依据一定的权限与责任的分配,决定各职务间相互的关系。
管理人必须知道自己究竟负责哪些活动,哪些人需对自己负责、自己又该对哪些人负责。此外,管理人还必须清楚整个公司的结构、自己在公司的位置、可以使用哪些沟通管道等。这些都必须以达成部门和公司的目标为主,并且定下所要完成的效果,最后再用文字陈述出来。
许多公司都把组织营建在员工身上,而不是先决定所要的结果,然后再寻找适当的人选来占据那些职位。通常,小公司并没有真正的组织架构,都是把现有人员分配去做所有的工作。不用多久,又会有另一批人被聘来分摊各部门的工作。一个简陋架构的公司,有时也能维持好几年的时间,但这样很难继续维持成长。
为了让企业成功,整个组织必须以「结果为导向」作为建筑架构的基础。公司的目标需明确且实际可行,整个管理工作也必须以达成公......
赏金猎人游戏文档(2006-12-18 08:59:00)
摘要:现在做个赏金猎人的游戏,做了主界面(我用阿卡的手机756)
几个选项:
日程
商店
训练
跑路
任务
系统
不知道要实现什么功能呢
还有玩法怎么玩才好玩?
大家出点注意啊
完成后给大家下.;)
5%完成率
训练完成30%可以用的指令有训练和商店
思路还没搞好
具体剧情就是女主角欠下别人1000W,要不断做任务和躲收债的还债.
而训练是为了提升经验值,主角初始为1级
而属性分为
攻击
防御
敏捷(在某些场景先出手)
体力
弹药(在某些场景的攻击能力,例如训练)
商店
可以买怪来训练
5日的食物(没食物就饿死咯- -|||)
10日的食物
弹药
武器
宝石(红黄绿什么的分级,打造兵器要用)
珠宝(拿来当的吧)
镶嵌(无敌黄金盔甲,要的EMAIL我- -|||)
********任务************
最最最头疼的地方
分为:
运货类
保镖类
体力活
这些随机出现,根据主角级别出现
还有些什么类?估计这里就要写上千代码
疼!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
---------------------控制-------------------------
5确定
2上
4左
6右
8下
1返回上个界面
2某些菜单有用......
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......
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......
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......
J2ME 有关中文包名和图标(2006-12-03 22:02:00)
摘要:在模拟器上测试通常首画面都是显示的工程名,但工程名只能是英文,,如果想在手机上首画面上显示中文包名该怎么做啊??
简单,在WTK里面有设置,MIDlet-name之类的有两个,你这两个都写同一个中文包名就可以了
但是图标还没试过,在WTK应该也可以
1,
在WTK的SETTING的MIDlet-1项中设置图标的路径就行了。
注意不是MIDlet-Icon项
2,
MIDlet-1:游戏名, /manicon.png, 主类名(含包)
......
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......
[程序之巢]\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程序或者软件使用确是原创,我到某论坛一看,文章出处和作者都被改了,这让我非常气愤,那么努力的打字结果换成别人成果,这是对作者的不尊重啊。......
《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列,第二行。
不知道我思考的对不??
这个算法,你给出的列数要是比行数大
结果是正确的。
但是行数要比列数大,就出问题:
要不就只显示一行
要不就只显示到一定的行数:据我实验,这个数是列数......