- 博客(24)
- 收藏
- 关注
原创 Tetris 俄罗斯方块 设计与源码
记不得从哪个网站上看到的了(貌似gamedev.net),说Tetris(传说中的俄罗斯方块)应该是每个游戏初学者的首款作品。无论如何,它确实包含了很多游戏的基本元素,做一个优秀的Tetris也并不容易——当然,我写的这个就比较容易~这个Tetris的算法并不算最好的,它只是我目前对游戏结构的理解的一种表现,并且引入了一些软件工程的理念——当然,仓促写作它的根本原因是2006年的情人节作为礼物
2006-02-17 19:47:00 1454
原创 多个背景的处理
通常卷轴设计类的游戏都会有好几个关口,或者叫做等级。不同的关口的背景地图是不一样的。这里简单起见,设立两个关口。这时遇到的一个问题是,不同的关口对应不同的背景地图,而将这些设定都放在GameScreen类里就不怎么合适了。为了便于管理和以后的扩展,新建一个GameMap类来管理背景地图。 public GameMap(int screenHeight) throws Exception {
2005-11-21 16:03:00 1225
原创 卷动背景(scroll background)
背景是游戏比较不重要但又不可或缺的一部分。这个游戏中需要有一个由上往下卷动的背景(就像游戏厅里所有的飞行射击游戏一样)。在MIDP2.0里,game包里新增的一些类型极大的方便了画面的制作(详见wireless toolkit 的api文档)。 LayerManager 顾名思义,图层管理。即把若干个图层叠加在一起,上层的覆盖下层的。LayerManager规定index号为0的为最上
2005-11-16 08:26:00 2018 1
原创 简单的游戏结构
一般来说,最常用的游戏结构是这样的:游戏开始后即进入一个循环,每次循环做三件事情:1. 获取玩家的输入。2. 更新游戏状态。3. 刷新屏幕。理论上说,刷屏的频率在24Hz以上,人的眼睛看到的就是动画了。 这个例子游戏的主循环是这样的:public void run() {Graphics g = getGraphics();Thread currentThrea
2005-11-08 16:52:00 1870
原创 rms系统
RMS,Record Management System,是移动设备的存储系统。首先,RMS是必要的。用户程序总要有一些数据需要存储在掉电不丢失的媒介上,比如用户的个性化设置,或者用户的数据。其次,RMS是抽象的。各种移动设备都有着不同的物理实现方法,相应的存储系统也有各自不同的实现方法(flash,rom……)。因此,RMS为程序员提供了一套统一的接口,如同JDBC一样,大大减轻了程序员的负担—
2005-11-07 17:08:00 1499
原创 菜单设计(2)—MIDP2.0
具体实现了各个层次的菜单。注意的是这段代码需要用jdk1.4编译,否则运行时会报错(WTK2.2)。代码相关下载:http://www.j2medev.com/bbs/dispbbs.asp?boardid=11&id=4028&star=1#20463建议:对于Splash Screen,有两个改进可以使界面更加友好:a. 加上一个软按键,如“跳过”,提示用户可以按键来跳过这个画面;b. 加上一
2005-11-02 20:42:00 1007
原创 Mixins: Something Else You Can't Do With Java Generics?
http://www.artima.com/weblogs/viewpost.jsp?thread=132988
2005-10-26 20:41:00 647
原创 菜单设计(1)—MIDP2.0
<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } -->MIDP程序有两种GUI的API,高级和低级。高级API提供了很多可视元素,而低级API则使得程序员可以进行象素级的操作。这两种API都是由基类Display
2005-10-26 08:19:00 1135
原创 初始画面—MIDP2.0
初始画面(Splash Screen),通常一开始显示给用户一些信息(厂商信息,作者信息等),持续大概2—3秒钟。在这其间,程序可以做些初始化之类的工作。以下是一个简单的实现(代码附后): SplashScreen(Display display, Displayable next, Image image,int dismissTime) static void access(Spl
2005-10-24 16:03:00 1327
原创 J2ME优化程序的一些小技巧----Gaming with MIDP2.0
1. Use StringBuffer instead of String because of the fact the String object can not be changed. Any modification to a String variable is actually a new object creation.2. Accessing class variables d
2005-10-14 15:53:00 669
原创 猜数字MIDP版 v0.1
此游戏程序 及 源码在以下地址下载:http://www.j2medev.com/bbs/dispbbs.asp?boardID=11&ID=2758&page=1猜数字 想来大部分人都玩过,就是设定四个数字去猜测,最多八次机会。四个数字在0--1之间,互不重复。数字位置均正确记一个a,数字正确位置不正确记一个b。结果 就是xaxb,4a0b时玩家胜利。猜数字的算法很简单,看看源代码就明白了,不行
2005-08-23 15:09:00 1613
原创 `MDIP的生命周期
MDIP的状态有三种:paused,active,destroyed通常的格式如:public class MyMIDlet extends MIDlet{ MyMIDlet(){} protected void startApp() throws MIDletStateChangedException{} protected void pauseApp(){} prote
2005-07-26 12:53:00 905 1
原创 jdk1.5之九 —— Generics —— 4 the End
复杂是一个比较讨厌的东西,但技术的复杂与政治的复杂却有着本质的区别:后者的目的是愚弄民众,前者却是为了服务用户。——Fantasy Dog Generics引进了两个问题,一是针对Exception的,一个则是针对新东西Enum的。1. Exception这其实是一个不太复杂的问题,即你不能声明或使用一个parameterized的Exception:MyException exten
2005-07-10 02:45:00 670
原创 jdk1.5之八 —— Generics —— 3 定义泛型
虽然任何东西都应该是先造出来再用,但学习过程恰好相反:比如电脑,比如软件——Fantasy Dog 知道了Generics的特性后,现在我们终于可以构造它了。 1. 基本的Generics类public class Tree {V value;V getValue(){return value;}…}按照java的习惯(或者叫命名规范),类型参数(type variables)通常都是
2005-07-03 03:35:00 771
原创 jdk1.5之七 ——Generics —— 2 Bounds
限制未必都是有损于自由的,通常却是为了更好的保障自由,比如红绿灯,又比如Generics的Bound——Fantasy Dog面向对象最大的好处就是向后兼容性,比如你写俄罗斯方块的时候,用Block类表示方块,然后继承之表示各种不同的方块(长条,正方,品字形等),再然后你发现想加入一个新品种的方块,仅仅需要再定义这个方块的特性——即从Block再继承一个新类就可以了,游戏代码中大量的关于Block
2005-07-02 04:31:00 788
原创 jdk1.5之六 —— Generics —— 1 Basic
你可以说某某对象是属于某个类的,但某某类是属于?Java之前偷懒说所有的类其实都是个Object,咱Java不像C,C是没有唯一的基类的,所以必须要Template。可是用Object来包容所有类毕竟是继承的概念,与泛型(把类抽象化)的概念有很大差别,所以,Generic Types最终还是不可避免的来到了——Fantasy DogGeneric引进的最大原因是Type Safe(类型安全)。之前
2005-06-28 00:51:00 638
原创 jdk1.5之五 —— import static members
技术的进步往往缘自于人类的懒惰——至少软件业是如此——Fantasy Dogimport的作用有两个:简化输入和方便阅读。前者成全了coder的懒惰,后者成全了读者的。我们一直觉得把java.util.ArrayList写成ArrayList是一件很幸福的事情(除了那些希望用连续的噼里啪啦的键盘声装酷或者装做努力工作的人,然则写软件大部分时间是要思考的,手指太快只能做打字员,或者怪sdk要用户输入
2005-06-21 00:51:00 844
原创 jdk1.5之四 —— Covariant return types
Important things are always tiny, and thats why the word "key" goes popular——Fantasy Dog协变式的返回参数?名字翻译起来比较麻烦,还是用例子好解释:class Base{ public Base Method(){return this;}}class Derived extends Base{ p
2005-06-20 17:48:00 619
原创 jdk1.5之三 —— varargs methods
如此细节且微不足道的东西都有了,java是不是该考虑一下引用参数了?——Fantasy Dog这个东西在c里好像叫作可变参数,即参数的数目是可变的。格式:xxx Method(int first, object ... next)所谓的varargs就是第二个参数,表示的意思是参数类型为object, 这种参数可以有无限多个,最后可以用object[] 类型的next来操作这些varargs要求
2005-06-20 16:37:00 631
原创 jdk1.5之二 —— for/in
C#想哗众取宠一下,弄了个foreach(int i in ints)恶心了本分的程序员们一把。java觉得恶心得还不够,于是更加简单的说for(int i : ints),可是取名字犯了难,最后竟然忘了人家c#已经把in用作了关键字,抓过来表示那个colon,这才诞生了“伟大”的 for/in——FantasyDog int[] array = new int[10];for(int i : a
2005-06-18 22:07:00 749
原创 JDK1.5之一 —— automatic boxing and unboxing
Java 鼓吹 everything is an object,结果有八个东西不是object,于是被称为primitiveint 变成 Integer 曰 boxing,反之曰 unboxing1.5的新特性之一就是把这两个动作变automatic了,也就是原本的:Integer i = new Integer(0);int ii = i.intValue();可以简化成:Integer i =
2005-06-18 21:07:00 639
原创 关于产生无重复随机数
思路:有点类似于选择排序法,只依靠一个数组,产生后数组的最后n位即为所需的n个随机数。例如,从1-10取3个不重复的随机数,则初始时:1 2 3 4 5 6 7 8 9 10| 进行第一遍随机,rander在0-(n-i-1)中选择,n为10,i为遍数,设得3:1 2 10 4 5 6 7 8 9
2005-02-18 19:23:00 885 1
原创 猜数字游戏的基本实现
基本流程:a.初始化4个不重复的数字b.玩家有8次机会进行猜测。数字正确位置不正确记为b,数字正确且位置正确记为a 如:要猜测的数字为1234,则1563的结果是1A1B,1数字正确且位置正确,3数字正确位置不正确 8次机会内猜测出数字,即得出4A0B为胜利,否则失败概述: 这个游戏实在不复杂,要点无非一:产生不重复的随机数;二:如何验证玩家输入的数字,进行比较。第一点另写一文描
2005-02-18 18:30:00 940
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人