java实现俄罗斯方块

  

假期闲着无事,就用一周多的时间看了百度java吧的一位大神(alwing)发布的视频,学着用java写了一个俄罗斯方块,在此就以发布源代码以及必要讲解的形式来感谢他的帮助。当然我这里也是做了一些改动,做出来的程序界面以及功能没有和他的完全一样。

  

整个程序运行起来的界面如下所示:

  

癹ava实现俄罗斯方块"

  

程序包含的功能有:

  
      <李>俄罗斯方块本身基本的游戏元素李   <李>显示下一轮出现的方块,当前等级,分数,消行数等数值   <李>以值槽形式显示当前等级到下一等级的距离李   <李>左上角头像以及背景图片会随着等级的升高而改变李   <李>循环播放背景音乐李   
  

<强>一、

  

整个程序的设计如下图所示,共有七个包,因为程序原先的设计是会连接数据库保存用户名称以及分数的,而我的电脑又因为数据库软件安装失败,所以功能上我做了调整。因此某些包名以及类名会与其本身功能不符。

  

癹ava实现俄罗斯方块"

  

<强>二,

  

整个程序中最重要的界面编程是由UI包中类的层来建立的,它定义了一个方法使一64乘64张像素的图片癹ava实现俄罗斯方块”运用drawImage函数来切割,拉伸成预定的宽度和高度,并使之显示在指定的坐标,从而成为一个窗口。UI包中的各个层* * * . java类都继承了层类,分别用来实现各个窗口界面,如游戏主窗口(LayerGame)等级窗口(LayerLevel),分数窗口(LayerPoint)等。此外我还在窗口表面覆盖了一层半透明的图片,从而实现了一种“朦胧感”。

  

<强>三,

  

Img类是用来声明所有的图片对象的,我在声明边框图片窗口时,又故意写错路径,从而实现了无边框效果。

  

癹ava实现俄罗斯方块"

  

<强>四,

  

下落方块的绘制也是采用图片切割的方法

  

, 癹ava实现俄罗斯方块"

  

每个不同颜色的方块都一样大,每次使用drawImage函数来切割不同颜色的方块。首先要把游戏主窗口看成是一个以左上角为原点的坐标系,游戏主窗口宽为9日高为16,则右下角的坐标应该是(15日8),这样就可以为下落方块定义坐标了。再采用列表& lt;点[]祝辞来保存下落方块中各个小方块的坐标。

  

癹ava实现俄罗斯方块"

  

下落方块应该是如下七种形状:

  

癹ava实现俄罗斯方块”,

  

则方块0到方块6自由下落时的初始坐标应是:

        TYPE_CONFIG=new ArrayList<点[]祝辞(7);   TYPE_CONFIG。(新添加点[]{新的点(4 0),   点(3,0),新的点(5,0),新的点(6,0)});   TYPE_CONFIG。(新添加点[]{新的点(4 0),   点(3,0),新的点(5,0),新的点(4,1)});   TYPE_CONFIG。(新添加点[]{新的点(4 0),   点(3,0),新的点(5,0),新观点(3,1)});   TYPE_CONFIG。(新添加点[]{新的点(4 0),   点(5,0),新的点(3,1),新的点(4,1)});   TYPE_CONFIG。(新添加点[]{新的点(4 0),   点(5,0),新的点(4,1),新的点(5、1)});   TYPE_CONFIG。(新添加点[]{新的点(4 0),   点(3,0),新的点(5,0),新的点(5、1)});   TYPE_CONFIG。(新添加点[]{新的点(4 0),   点(3,0),新的点(4,1),新的点(5、1)});   之前      

每一个方块都有一个中心点,当方块旋转时,方块以该中心点位圆心进行90°的旋转。旋转方法如下:

  

癹ava实现俄罗斯方块"

  

<强>五,

  

游戏的逻辑控制主要在GameService类中,实现了判断是否能消行,消行操作,键盘相应操作等

  

<强>六,

  

程序中使用了dom4j-1.6.1.jar和jl1.0.1。jar两个额外的jar包。dom4j-1.6.1.jar用来读取xml文件。在配置文件夹中有个cfg.xml文件,当中设置了各个窗口的大小以及位置。在程序中使用dom4j-1.6.1.jar来读取xml数据,然后根据这些数据来配置程序界面。因此只要改变了xml中的数的值,就可以改变窗口的大小以及坐标。

java实现俄罗斯方块