300行代码实现2048(java)

声明:1.本文章为原创文章,转载注明出处,蟹蟹~

          2.初学java,水平有限,还有很多不足和应当修正的地方,欢迎评论指点

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

不修改代码的情况下(自己写的游戏想赢太简单),我没有赢过,所以就晒张失败截图???

先来张图看看大致结构:


2048李飘1

我借鉴了网上的一篇文章(https://blog.csdn.net/m_szqyx/article/details/75495318),但不是简单的ctrlc+ctrlV,数据处理(核心)和按键监听完全不一样,UI方面借鉴了他的大体框架,但他完全用图片来显示,我为了简单一点就直接把整型放在标签上了....自认为原创率百分之70以上吧。


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

上图:


操作转化

这图是否只观?思路大致为:将上下左右四个数据处理通过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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,273评论 19 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,220评论 2 89
  • 这个活动不错,之前参加过一次,欢迎扫码参加!
    叶儿麦西阅读 1,189评论 0 0
  • 谷雨将近,春尽,天降大雪,为何? 百花未开,老树新芽,含苞欲放,何解? 余尝听古仁人之解,观古人之说,解今日之谜,...
    格利普阅读 1,657评论 0 2
  • 前阵子看了一本叫《才女之累:李清照及其接受史》的书,还是一个叫艾朗诺的美国人写的,这更让我萌生了好奇心。 以前对李...
    小闲云阅读 5,351评论 36 34

友情链接更多精彩内容