【Java】24点扑克牌游戏
【Charloe原创】
【前言】
这是学Java以来写的第一个比较有意思的东西——GUI界面的24点扑克牌游戏。大概是这个样子:
【功能介绍】
一、随机生成四张扑克牌,按下Refresh按钮可以刷新牌
二、按下Verify按钮,可以检测用户输入的24点表达式是否合法,答案是否正确
三、按下Find A Solution按钮,为当前的四张扑克牌找出24点的计算方法,如果无解则显示无解
【实现分析】
这里逐步分析每个功能的实现思路。
【功能一】
工具:54张扑克牌的图片包。(大、小王用不上)
这个比较好实现。定义一个int类型名为card的含4个元素的数组,生成四个不同的随机数存在数组里面。根据随机数,然后在GUI界面上显示出来。
【功能二】
这里需要判断表达式的三个方面:
1、用户输入的表达式是否合法,即是否符合数学表达式的规范,如括号是否匹配、运算符是否合法等等
表达式的计算应该有挺多方法,我本是打算用栈的数据结构来实现,但后来在网上找到一个非常巧妙的递归算法,就用了这个,没有自己写一个。
2、用户输入的表达式中所用到数值是否与扑克牌一一对应,即一张牌只能用一次、所有牌必须用上等等
先分割字符串,将表达式中的数字分离出来,然后在判断是否一一对应。我是用链表来判断一一对应的,每找到一个相同元素,就从链表中删除它。
3、表达式的答案是否为24
这个直接判断1中的结果就可以了。
【功能三】
根据当前的扑克牌,找到一个表达式,计算出的值为24.
说实话,这个功能我是用一种很笨但有效的方法实现的:遍历。
这里共有四个数值、三个运算符,那这个形式可以列出所有的表达式:(((num op num)op num)op num)。四个数值都是card数组里面的值,三个运算符是四个基本运算符{+ - * /}之三。这里我用了七层for循环嵌套,实际上就是七个符号的全排列。
用这种方法,找到一个表达式就不困难了。
这里肯定有更好的方法,欢迎大家一起来讨论。
【源码奉上】
这里直接放IntelliJ IDEA的工程包,如果不是用IDEA作为IDE的网友也可以在src目录下找到.java源代码。
(初学Java,代码风格很烂请多多包容)
百度网盘:https://pan.baidu.com/s/1-LZ5Rv4Vuvpin92KAz18Bw
提取码:tp22
【总结】
小小的自我总结一下吧。
1、Java学到现在,什么样的代码风格是好,什么样的代码风格是不好还不是很清楚。书上的例子,一会儿是这个风格,一会儿是那个风格,所以我就稀里糊涂,感觉找不到标准。
2、虽然说Java有些方面和Qt很像,但还是有很多方面是不一样的。我在学Java时,总会以Qt的思维去思考,这经常给我造成困扰,我要以Java的思维去写代码。
3、Java里有些东西使用起来很灵活。这就造成,我知道这个东西,但我不知道怎么使用,或者说使用起来很僵硬很拘谨。比如Lambda表达式、内部类、匿名类等,我还不很懂什么时候应该使用它们,什么时候最好不要使用他们。
4、要想精通Java,还有很长的路要走。
在学习过程中,我感觉很充实。越努力越幸运。