详解Java实现小游戏2048(使用JavaFX)
刚刚完成的一个小游戏程序,写文章记录分享一下,如果有任何错误或者可以改进的代码,还希望各位大佬可以狠狠纠错和提建议,请指导我! 另一方面也是方便自己几个月或几年后忘记时,来这里翻一翻回顾思路
首先放
浅浅改了一下,你没给代码仓库,所以修改后的代码就被我传到reproduce/demo2048上了(这是我临时代码的仓库不要介意)
首先使用回调解耦的方法用得非常好,确实不应该“越职”修改
其次代码逻辑问题不大,就是控制层和视图层并没有完全分离,一个简单的例子是_CardPane中混杂了合并卡片的逻辑,其他的代码可以自己想想是属于视图还是控制的,尽量分离,不过我对JavaFX不是很熟,怎么改出优雅的代码还得是你来
然后多使用语法糖简化代码,比如Menu gameMenu=new Menu("游戏");
,等号后面明确给出类型,那么前置类型就可以用var
省略(JDK10以上),var gameMenu=new Menu("游戏");
,其他的语法糖也可以想想怎么用上
最后要说的是注释和代码风格,你的代码中有大量的无效注释,实际上好的代码是自解释的,比如
score+=card.getNumber();//计入分数
voidCards.add(card);//添加到列表中
card.draw();//重绘
cardMatrixPane.createKeyListener();//添加键盘监听
还有很多地方,其实这些代码你一看就能懂,注释就是多余的了,代码风格的话我把一些操作合并整理了一下,你可以对照着看看(上下左右操作我想了很久也没办法合并那就不改了)
谢谢,我已经翻阅了你优化后的代码
其中afterGetMoreScoreInfo()方法的变化是最大的,你为它准备了一个静态内部类Counter,还加入了表格来显示。而我在写这个方法的时候已经处在了代码的收尾阶段,所以搞得有些粗糙
我还看到了像三元表达式这类的语法糖,它更加简洁;以及一些其他的优化,有些是我写代码时粗心没有注意到的
toString()方法改用了格式化字符串,这确实更标准一些
以及,看到一部分的遍历改用了for-each循环,这样的写法是专门为了简化代码,还是有另外的好处呢?
关于控制层和视图层的分离,我之后会尝试