·
#include __FILE__

浅浅改了一下,你没给代码仓库,所以修改后的代码就被我传到reproduce/demo2048上了(这是我临时代码的仓库不要介意)

首先使用回调解耦的方法用得非常好,确实不应该“越职”修改

其次代码逻辑问题不大,就是控制层和视图层并没有完全分离,一个简单的例子是_CardPane中混杂了合并卡片的逻辑,其他的代码可以自己想想是属于视图还是控制的,尽量分离,不过我对JavaFX不是很熟,怎么改出优雅的代码还得是你来

然后多使用语法糖简化代码,比如Menu gameMenu=new Menu("游戏");,等号后面明确给出类型,那么前置类型就可以用var省略(JDK10以上),var gameMenu=new Menu("游戏");,其他的语法糖也可以想想怎么用上

最后要说的是注释和代码风格,你的代码中有大量的无效注释,实际上好的代码是自解释的,比如

  • score+=card.getNumber();//计入分数
  • voidCards.add(card);//添加到列表中
  • card.draw();//重绘
  • cardMatrixPane.createKeyListener();//添加键盘监听

还有很多地方,其实这些代码你一看就能懂,注释就是多余的了,代码风格的话我把一些操作合并整理了一下,你可以对照着看看(上下左右操作我想了很久也没办法合并那就不改了)

Replies
3

谢谢,我已经翻阅了你优化后的代码

其中afterGetMoreScoreInfo()方法的变化是最大的,你为它准备了一个静态内部类Counter,还加入了表格来显示。而我在写这个方法的时候已经处在了代码的收尾阶段,所以搞得有些粗糙

我还看到了像三元表达式这类的语法糖,它更加简洁;以及一些其他的优化,有些是我写代码时粗心没有注意到的

toString()方法改用了格式化字符串,这确实更标准一些

以及,看到一部分的遍历改用了for-each循环,这样的写法是专门为了简化代码,还是有另外的好处呢?

关于控制层和视图层的分离,我之后会尝试