DDD实践:手机java游戏(俄罗斯方块)

工作一直都是跟数据库和web相关的。虽说都是编程,但从来没写成一个小游戏。
于是我打算趁空闲写个小游戏。
我总觉得应用开发和游戏开发是有很大鸿沟的。
长期的DB开发,令我觉得若不建个表就不是设计模型,不用文本框下拉框就不是做界面。
而游戏既不需要表,也不用这些Form元素。

幸好,近年学习了一点DDD,用到了hibernate,逐渐远离SQL语句。
于是,我毫无把握的开始了游戏的开发:
1 游戏的需求大家都知道,几种方块:长条的,方块的,...。我去wiki上查阅了一下,人家用字母都给命名了:IDLJSZ。非常形象。
2 于是,我用ROSE设计类图,惊喜的发现,一共才需要3个类:
  1. Grid(基本元素,小方块),
  2. Tetromino(各种形状的方块),
  3. PlayField(整个方块的容器)。
  先不考虑界面显示,Grid的属性是位置和颜色,Tetromino由若干Grid组成,PlayField由若干Grid和一个正在下落的Tetromino组成。Tetrmino的职责主要是旋转和移动。PlayField的主要职责是生成和消去tetrmino,并且计分。
3 这3个类都很快定义好了。该考虑如何显示了。写惯了JSP,但Java的2D编程我没接触过,有点害怕。我甚至打算用AWT的按钮来当作Grid。

我google了"java游戏编程",结果多数是讲J2ME的,想想也对,java小游戏多数是跑在手机上的。于是我找了一个例子,模仿它定义了一个Canvas的子类,似乎没有Timer这样的东西,用线程解决。我决定让Grid,Tetrmino,PlayField都各自负责绘自己,定义了一个paint()函数。

于是,这游戏能跑在我的手机上了。

一点总结:
1 MVC的思想很重要。这次游戏开发一开始没考虑显示层。但毫不影响核心逻辑的开发。我觉得稍微学习一下3D API,这游戏就成为3D俄罗斯方块了。
2 OO思想很重要,以后不要凡事先考虑界面和持久层。应以domain为核心来驱动分析和设计,然后再考虑持久化和界面的问题。

附:
代码和可执行的jar文件都在google code上:  http://code.google.com/p/jack-lab/

你可能感兴趣的:(java,游戏,编程,Google,OO)