用Java写俄罗斯方块
来源:互联网 发布:大数据趋势分析 编辑:程序博客网 时间:2024/05/29 03:19
假期闲着无事,就用一周多的时间看了百度java吧的一位大神(alwing)发布的视频,学着用java写了一个俄罗斯方块,在此就以发布源代码以及必要讲解的形式来感谢他的帮助。当然我这里也是做了一些改动,做出来的程序界面以及功能没有和他的完全一样。
整个程序运行起来的界面如下所示:
程序包含的功能有:
- 俄罗斯方块本身基本的游戏元素
- 显示下一轮出现的方块、当前等级、分数、消行数等数值
- 以值槽形式显示当前等级到下一等级的距离
- 左上角头像以及背景图片会随着等级的升高而改变
- 循环播放背景音乐
一、
整个程序的设计如下图所示,共有七个包。因为程序原先的设计是会连接数据库保存用户名称以及分数的,而我的电脑又因为数据库软件安装失败,所以功能上我做了调整。因此某些包名以及类名会与其本身功能不符。
二、
整个程序中最重要的界面编程是由UI包中的Layer类来建立的,它定义了一个方法使一张64乘64像素的图片运用drawImage函数来切割、拉伸成预定的宽度和高度,并使之显示在指定的坐标,从而成为一个窗口。
UI包中的各个Layer***.java类都继承了Layer类,分别用来实现各个窗口界面,如游戏主窗口(LayerGame)、等级窗口(LayerLevel)、分数窗口(LayerPoint)等。此外我还在窗口表面覆盖了一层半透明的图片,从而实现了一种“朦胧感”。
三、
Img类是用来声明所有的图片对象的,我在声明边框图片WINDOW时,又故意写错路径,从而实现了无边框效果。
四、
下落方块的绘制也是采用图片切割的方法
每个不同颜色的方块都一样大,每次使用drawImage函数来切割不同颜色的方块。首先要把游戏主窗口看成是一个以左上角为原点的坐标系,游戏主窗口宽为9,高为16,则右下角的坐标应该是(15,8),这样就可以为下落方块定义坐标了。再采用List < Point[] >来保存下落方块中各个小方块的坐标。
下落方块应该是如下七种形状:
则方块0到方块6自由下落时的初始坐标应是:
TYPE_CONFIG=new ArrayList<Point[]>(7);TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(3,0),new Point(5,0),new Point(6,0)});TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(3,0),new Point(5,0),new Point(4,1)});TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(3,0),new Point(5,0),new Point(3,1)});TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(5,0),new Point(3,1),new Point(4,1)});TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(5,0),new Point(4,1),new Point(5,1)});TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(3,0),new Point(5,0),new Point(5,1)});TYPE_CONFIG.add(new Point[]{new Point(4,0),new Point(3,0),new Point(4,1),new Point(5,1)});
每一个方块都有一个中心点,当方块旋转时,方块以该中心点位圆心进行90°的旋转。
旋转方法如下:
五、
游戏的逻辑控制主要在GameService类中,实现了判断是否能消行,消行操作,键盘相应操作等
六、
程序中使用了dom4j-1.6.1.jar和jl1.0.1.jar两个额外的jar包。
dom4j-1.6.1.jar用来读取xml文件。在config文件夹中有个cfg.xml文件,当中设置了各个窗口的大小以及位置。在程序中使用dom4j-1.6.1.jar来读取xml数据,然后根据这些数据来配置程序界面。因此只要改变了xml中的数值,就可以改变窗口的大小以及坐标。
jl1.0.1.jar则是用来播放背景音乐的,这是我自己添加的功能,通过这个jar文件提供的方法,可以很简单地实现播放音乐的功能,具体实现在MP3Player类和Main类中,需要在Main类中新建一个线程。
具体参考方法:JavaSwing后台播放音乐
七、
源代码程序下载:源代码
- 用Java写俄罗斯方块
- 用java代码写的俄罗斯方块
- 用java写的俄罗斯方块小程序
- JAVA写的俄罗斯方块
- Java 写俄罗斯方块感想
- 用shell写俄罗斯方块
- 用java写的俄罗斯方块,并有详细的注释.
- 用C语言写俄罗斯方块
- 用JS写的俄罗斯方块
- 用shell写俄罗斯方块(一)
- 用c++写的俄罗斯方块
- 写俄罗斯方块...
- 用TC2.0写俄罗斯方块游戏---cnasm
- 用TC2.0写俄罗斯方块---cnasm
- 用C#写的俄罗斯方块代码参考
- 牛×,用批处理写的俄罗斯方块游戏
- 用60行javascript写的俄罗斯方块
- 用shell写的俄罗斯方块游戏
- echo 命令
- 使用技巧Windows
- onNewIntent
- 性能极客马振雄:不提升最终用户体验的APM就是耍流氓
- final 关键字
- 用Java写俄罗斯方块
- 如何利用js正则表达式判断ip地址的合法性
- 【数据结构学习笔记】——用链表形式的栈完成汉诺塔
- 【整理】Android中EditText中的InputType类型含义与如何定义
- Android 6.0系统读写文件出现FileNotFoundException:EACCES (permission denied)解决办法
- 数据结构-栈应用-迷宫
- mybatis自增主键配置
- 解决CI调用Ranorex运行web测试失败的问题
- 网络IO之阻塞、非阻塞、同步、异步总结