Java基础-实战300行代码实现2048游戏

Java基础-实战300行代码实现2048游戏

本人在开始写之前在网上看过很多版本的2048,但令我印象深刻的不多,很多都动不动600多行,有的甚至上千,当然啦,有的写得还是非常详细的,功能也比我的多,比如计分,还有历史最高分等等…本文暂时没有写那些,只是仅仅实现了这个游戏,失败或获胜之后可以选择再玩一次和关闭。

先来张图看看大致结构:

2048李飘1

数据处理方面,我发现其实这四个操作相同点其实很多,但几乎所有的文章都是代码重复率比较高的上下左右四个数据处理函数,那么在数据处理方面写这四个方法是不是有捷径可寻呢??当然有啦

上图:

操作转化 这图是否只观?思路大致为:将上下左右四个数据处理通过transpose 和reverse 两个方法转化为向左移动,让后left也可以分解为coverup和merge两个方法。

具体这四个新加的方法的效果如下:

转换函数说明

转换函数说明2 这里就不具体给出这四个函数了,接下来看看怎么用这四个函数简化上和左的操作,至于下和右是同理,是差不多的。

public static void up()	{
          
   
    transpose();
    coverup();
    merge();
    coverup();
    transpose();
}
public static void left()	{
          
   
      coverup();
      merge();
      coverup();

}

UI界面方面:

//构造函数 
public Frame() {
          
   
//初始化窗体大小位置等
 initBasic();
//初始化空块
 initEmptyBlocks();
//初始化两个初始值 到block_Data数组中,并设置block_Label中对应块的图像 initData();
//键盘监听,获取方向键执行操作
this.addKeyListener(new KeyAdapter(){
          
    public void keyPressed(KeyEvent event) {
          
   } });
//可视化 
setVisible(true);
}

除了将上下左右进行转换之外的细节:

1.JFrame中纵横坐标是和数组是相反的。

mytips:在最开始的加入标签的时候就将其进行转换

2.在无法朝某个方向移动时不生成新的数。

mytips:移动前将数据传到一个数组与移动后的数组对比来判断有无变化

3.标签jlabel无法接受整型,

mytips:用 标签名.setText(整型变量+""); 进行转换

4.数组中的0不显示在frame窗口上

mytips:0元素单独用:标签名.setText(" ");表示

5.每进行一次操作都都要使整型数组中的数据与标签数组对应

mytips:写一个updata,把整型数组传给标签数组

6.游戏结束时如何play again

mytips:失败时的效果如文章的第一张图片,游戏成功同理,只是那一句话不同,具体实现如下:

失败时:

int result = JOptionPane.showConfirmDialog(null, "竟然输了,再来一局?", "游戏结果", JOptionPane.YES_NO_OPTION);

if(result == 0)	{
          
   

Frame.reSetBlocks();	Frame.initData();

}

else	{
          
   System.exit(0);}

最后,打开链接获取源代码

http://note.youdao.com/noteshare?id=de211010710217c2ede102236b775bf5&sub=83D0B1E308E04F6583873DCEAC9E0FE8

经验分享 程序员 微信小程序 职场和发展