之前我们扩展升级了一下游戏底层框架,新建了MyGameFrameJpane类,这个类可以直接建仓带有JFrame窗口的游戏场景,我们只需要指定两个参数,一个是窗口的大小,一个是窗口的标题,我们Pinball extends MyGameFrameJpane 之后,只接就可以new一个游戏窗口出来。比如:
new Pinball(new Dimension(TABLE_WIDTH, TABLE_HEIGHT), "PinBall Game Frame!").init();
有了场景,我们就可以添加游戏元素进去了。
2.添加游戏元素:运动的小球和球拍。
其实无非就是添加一个圆和一长方形,我们可以直接用g.fillXXXX的方法进行绘制,但如果这样的话就脱离了面向对象编程的初衷。这个游戏可以把整个游戏看成一个对象,那么把游戏中的所有参数及方法都看成这个类的属性及方法也是可以的,这样看似简单了些,但还是不够纯粹的面向对象,我们要做到取要面向对象,又不要过度封装,而且现在所做的一面是为了制作游戏,另一方面是为了丰富扩展这个游戏框架,方便以后制作其它游戏。(这里啰嗦了一些,我们继续)
这里我是这样安排的,整个游戏是一个类,这个包括一些属性:比如 球拍、小球、游戏逻辑方法等,但小球及球拍也可以是单独的对象,小球 和球拍有自己的方法,可以自己在游戏场景里按一定的逻辑进行动作,但游戏本身有自己的逻辑规则,用来检测他们的行为是否符合,这样大家各司其职,互不干扰但又互相依赖....好了,啰嗦了,大家自己看看吧:
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。
http://baike.baidu.com/link?url=YPIAfamZnLvkmH5x5RqjQ_W3ok8IlNUXhWPZ5eSq1yPMNzUCosB3Gpmcw-Jo5NkDVvuwdLDhoIwWTf04LaRhXa
我们想一下小球和球拍这个二元素在场景里有什么共同的属性? x,y,width,height这四个他们都是共有的,另外上球还有移动速度包括x和y轴。这样的话我们需要一个底层的精灵类,他包括这六种属性,并给他们封装提供set及get方法,提供了构造器。以后我们其它的游戏角色都可以继承这个基类来创建新游戏元类了。class Sprite 我按着上边的介绍创建了这个类,接下来我们继承这个类创建小球 及球拍类。Racket 及 Ball 类就是我们创建的,具体代码亲们可以参考git代码仓库里的源文件。
这二个类无非就是多了一个draw()方法,调用场景中的g来画自己。当我们创建完这二个对象后,就可以在场景中画自己:
racket.draw(g);
ball.draw(g);
今天先写到这里,太多了记不住。
具体可以查看游戏框架源码,我已上传git.osc
传送门:
http://git.oschina.net/J_Sky/HEHEJava2DGame