程序设计方法学--24点

程序设计方法学–24点

一、题目要求

24点游戏是经典的纸牌益智游戏。
常见游戏规则:
从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏。

1.基本要求

随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式,用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。

  1. 程序风格良好(使用自定义注释模板)
  2. 列出表达式无重复。

2.提高要求

用户初始生命值为一给定值(比如3),初始分数为0。随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局。

  1. 程序风格良好(使用自定义注释模板)
  2. 使用计时器要求用户在规定时间内输入表达式,如果规定时间内运算正确则加分,超时或运算错误则进入下一题并减少生命值(不扣分)。
  3. 所有成绩均可记录在TopList.txt文件中。

二、题目分析

本次作业完成提高要求所有规定。

随机生成四张扑克牌牌面或者字母,可以使用标准库中Random类生成四个伪随机数。
后根据题目立意,用户输入表达式为中缀表达式,便采用javax.script.ScriptEngine类中evel函数解决问题。
成绩计算公式定义为:现有生命值600+所剩时间10
至此题目基本流程已经明确。

本次作业采用JavaFX完成,共使用到jfoenix(JavaFX Material Design UI组件库)、JavaFX、层叠样式表CSS、CompletableFuture异步调用、lambda演算等基础知识。采用java-gradle项目自动化构建开源工具。

三、业务流程总览

JavaFX应用程序的基本结构如下:
javafx structure
框架架构如下:
javafx
(图片来源:http://www.oracle.com

Stage中包含一个Scene,一个Scene中可以包含多个Control。 Stage就相当于我们的一个Windows或者说窗体,然后窗体中是用来容纳内容的Scene,我们可以在Scene中添加我们的布局控件,UI控件形成我们最终的UI界面。

首先是MainMenu界面,加入一个Lable与三个Button——开始游戏、高分榜与退出游戏,随后各自添加监听器。主游戏界面整体布局简约,主要在于处理各个回调。

四、调试与测试截屏

测试版本:Happy24-1.0-SNAPSHOT

1. 主界面初始化

InitMainMenu
可以看到为Main Stage利用VBox纵向布局一个Lable与三个Button

2. 游戏主界面初始化

GameMenuInit
在这里初始化了例如四张poker的点数、倒计时时间、生命点数、TimeProperty控件、back按钮、reset按钮、input文本框与nashorn等。同时heart图标采用了SVG可缩放矢量图形显示。

3. 提交后台细节

back
这里我们发牌为3、7、5、6,我们输入了3*((7-5)+6),后台表现为newValue存储当前中缀表达式,利用nashorn获得value值为24,即为正确结果,记录成绩。

4. 高分榜

highscore
初始化scoreView视图,back按钮等控件,获取在score.txt中录入的成绩。

运行时功能截图

1. 主界面

Mainmenu

2. 游戏界面

gameview

3. 提交成功界面

success

4. 高分榜

highscoreview

五、总结与心得

本次作业第一次开发JavaFX应用,也是第一次使用java-gradle项目自动化构建开源工具,在写JavaFX中callback时也出现了很多次错误。
一次次的去网上搜索官方文档,一次次的自己尝试,总算也是东拼西凑出来一个,看来自己要学的东西还有很多。

在用户输入表达式并计算时,一开始没有采用javax.script.ScriptEngine类中evel函数,而是自己手写中缀表达式算法,即维护一个数据栈与一个操作栈,也是消耗了非常多的时间。
同时,配置gradle还有生成最终的可执行文件.exe也找了很久的方法。每一次作业都会让我收获很多新的知识,虽然失败很多次但是最终的结果还是好的。

附录

参考资料

  1. JavaFX官方文档:https://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-overview.htm
  2. Wikipedia-Gradle:https://en.wikipedia.org/wiki/Gradle
  3. Scalable Vector Graphics可缩放矢量图形:https://www.w3.org/TR/SVG/mimereg.html
  4. Cascading Style Sheets层叠样式表:https://en.wikipedia.org/wiki/Cascading_Style_Sheets
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值