如何写出专属的2048

         2048想必所有人都非常熟悉。作为一款曾近风靡全球的游戏,2048也成为学习Java的经典案例。那么怎么去写出一个自己独有的2048呢?其实也不是很难,学过一定的swing界面,会使用二维数组便足以写出自己的2048。
          首先当然是把基本的swing实现出来。基本不难。在布局方面建议使用两个Jpanel来将游戏界面和菜单界面分开实现。游戏界面在布局上自然需要使用4*4的网格布局。添加组件方面推荐使用Jlabel组件,不管是填写文字还是链接图片都比较方便。菜单组件就比较多样,可以根据自己的喜好独立设置声音、难度、分数的组件,布局方面也比较随意。
          对于UI,有两个细节需要注意。如果选择的是在标签上链接图片,那么最好将图片通过PS转成圆角矩形的形状,并且将图片大小设置为略小于Jlabel组件的大小,这样实现的UI将会更加美观。如果选择的是通过复写Jpanel的paint方法来画出组件,一定要记得使用      Graphics2D的g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);   方法来去掉边角的锯齿。
         但是这里强烈建议大家不要通过复写JPanel的paint方法来将界面画出。不光坐标计算超级麻烦,而且后期添加菜单也会因为组件的层次问题而需要进行很多无谓的处理。
          接下来就是后台算法的实现了。首先当然是建立一个4*4的二维数组,来储存游戏界面的信息。游戏进程的算法其实也比较简单,这里可以推荐一种较为简单的算法。
算法需要通过三个循环来完成遍历。(以按“下”这个键来举例)外层循环用来遍历所有列(从第一列到第四列),第二层循环用来遍历列中每一个格,最内层的循环则算法最为核心的部分,用来实现每个数字格的加法实现。具体代码实现就是向上(不同按键方向不同)遍历,如果相同则将数字相加并赋给上面的格,如果上一格为空,这将是赋给上面的格,如果不同则循环结束。
for (int j=0;j<4;j++)
{
   for (int i=2;i>=0;i--)
   {
       for (int p=i;p<=2;p++)
       {   
          if (zhi[p][j] == zhi[p+1][j]){
             zhi[p+1][j] = zhi[p+1][j]*2;
             zhi[p][j]=0;
       }else if (zhi[p+1][j] ==0 ){
          zhi[p+1][j] = zhi[p][j];
          zhi[p][j]=0;
       }else{
          break;
       }
    }
}
}
         这种算法将会和原版游戏有一定的出入,就是在出现“2,2,4”类似现象是会出现一个“8”,而原版游戏则是“4,4”。这样的设计会让游戏更为简单,所以我也就没有进行更改。要想完全的复原 游戏场景也不难,在if语句中多一层判断即可。
         最后就是监听器的添加了。游戏界面可以根据操作方式分别添加键盘监听和鼠标(或者触摸板)监听。这里有一个小细节。对于不同的电脑,按键的编码可能会不同。所以如果使用的是KeyEvent类中static常量但出现无法正确判断的情况,就有可能是编码不同导致。这是可以先在监听器中将对应的按键进行输出,便可的到按键对应的byte型编码。
          至于菜单栏的实现,就比较个性化了。大家可以根据自己的喜好提供喜欢的菜单并添加相应的监听即可。
          总而言之,2048作为一款以游戏性取胜的游戏,编程实现的难度确实不大,注意好细节,添加好监听,做出一款专属的2048自然不在话下。

猜你喜欢

转载自729660130.iteye.com/blog/2218388