程序设计方法学--24点
程序设计方法学–24点
一、题目要求
24点游戏是经典的纸牌益智游戏。
常见游戏规则:
从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。
1.基本要求
随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
- 程序风格良好(
使用自定义注释模板
)- 列出表达式无重复。
2.提高要求
用户初始生命值为一给定值(比如3),初始分数为0。随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局。
- 程序风格良好(
使用自定义注释模板
)- 使用计时器要求用户在规定时间内
输入表达式
,如果规定时间内运算正确则加分,超时或运算错误则进入下一题并减少生命值(不扣分)。- 所有成绩均可记录在TopList.txt文件中。
二、题目分析
本次作业完成提高要求所有规定。
随机生成四张扑克牌牌面或者字母,可以使用标准库中Random类生成四个伪随机数。
后根据题目立意,用户输入表达式为中缀表达式,便采用javax.script.ScriptEngine类中evel函数解决问题。
成绩计算公式定义为:现有生命值600+所剩时间10
至此题目基本流程已经明确。
本次作业采用JavaFX完成,共使用到jfoenix(JavaFX Material Design UI组件库)、JavaFX、层叠样式表CSS、CompletableFuture异步调用、lambda演算等基础知识。采用java-gradle项目自动化构建开源工具。
三、业务流程总览
JavaFX应用程序的基本结构如下:
框架架构如下:
(图片来源:http://www.oracle.com)
Stage中包含一个Scene,一个Scene中可以包含多个Control。 Stage就相当于我们的一个Windows或者说窗体,然后窗体中是用来容纳内容的Scene,我们可以在Scene中添加我们的布局控件,UI控件形成我们最终的UI界面。
首先是MainMenu界面,加入一个Lable与三个Button——开始游戏、高分榜与退出游戏,随后各自添加监听器。主游戏界面整体布局简约,主要在于处理各个回调。
四、调试与测试截屏
测试版本:Happy24-1.0-SNAPSHOT
1. 主界面初始化
可以看到为Main Stage利用VBox纵向布局一个Lable与三个Button
2. 游戏主界面初始化
在这里初始化了例如四张poker的点数、倒计时时间、生命点数、TimeProperty控件、back按钮、reset按钮、input文本框与nashorn等。同时heart图标采用了SVG可缩放矢量图形显示。
3. 提交后台细节
这里我们发牌为3、7、5、6,我们输入了3*((7-5)+6),后台表现为newValue存储当前中缀表达式,利用nashorn获得value值为24,即为正确结果,记录成绩。
4. 高分榜
初始化scoreView视图,back按钮等控件,获取在score.txt中录入的成绩。
运行时功能截图
1. 主界面
2. 游戏界面
3. 提交成功界面
4. 高分榜
五、总结与心得
本次作业第一次开发JavaFX应用,也是第一次使用java-gradle项目自动化构建开源工具,在写JavaFX中callback时也出现了很多次错误。
一次次的去网上搜索官方文档,一次次的自己尝试,总算也是东拼西凑出来一个,看来自己要学的东西还有很多。
在用户输入表达式并计算时,一开始没有采用javax.script.ScriptEngine类中evel函数,而是自己手写中缀表达式算法,即维护一个数据栈与一个操作栈,也是消耗了非常多的时间。
同时,配置gradle还有生成最终的可执行文件.exe也找了很久的方法。每一次作业都会让我收获很多新的知识,虽然失败很多次但是最终的结果还是好的。
附录
参考资料:
- JavaFX官方文档:https://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-overview.htm
- Wikipedia-Gradle:https://en.wikipedia.org/wiki/Gradle
- Scalable Vector Graphics可缩放矢量图形:https://www.w3.org/TR/SVG/mimereg.html
- Cascading Style Sheets层叠样式表:https://en.wikipedia.org/wiki/Cascading_Style_Sheets