JAVA实现24点小程序-GUI

Application of 24 Points

首先,必须要感谢JcMan在github上发布的[Game_24Points](https://github.com/JcMan/Game_24Points),这在我一开始设计一筹莫展的时候给予我很大的帮助。

总体流程构思

在刚接到这个任务的时候,经过一段时间的调研,有非常多的方法来解决24点这个问题,虽然有些方法存在着改进的空间,但是单从算法效率去处理这个任务,显然不仅仅是我们想要的。所以我们有了设计一个完整的24点交互小游戏的想法。

在这里插入图片描述

为了得到一个24点的小游戏,首先我们需要正确的获取外界的输入,包括他们对数字、符号的选择,以及他们提交答案、获取提示等一系列的操作。其次,我们需要对输入表达式的合法性和正确性进行判断,并根据判断给予用户一定的反馈,来拥有更加良好的交互感官。

在获取外界输入这一过程中,java的swing包提供了非常好的接口来表现这一过程,也就是java控件的监听事件,能够处理点击,聚焦等等来自于鼠标键盘的事件。这里我们将各个数字、符号、游戏操作都设计为了按钮(JButton),通过点击来处理应有的展示内容。

例如下方为处理数字按钮的相应内容(当检测当用户按下某一数字按钮时,应该在原有显示基础上增加该数字,并且需要防止按钮再次被生效,此外加入key是为了防止连续按下两个数字,产生非法操作。)

if(key==0){
    string +=  number[0];
    textfield.setText(s);
    Button1.setEnabled(false); 
}

在这里插入图片描述

如上图,就是我们对24点游戏的基本框架设计。但是,这里的24点的判断任务只是,完成对字符串是否符合计算结果的判断。所以我们额外增加了一个窗口来体现回溯方法下的24点算法,并展示24点的所有可能性。并且,我们加入了一些基本的游戏元素来增加整体的趣味性。

如图,为我们最终的游戏整体框架。

在这里插入图片描述

算法设计

这里对一般的算法不在介绍,比如按钮的实现、窗口的切换、计时器功能、按钮之间的逻辑互斥,这些都非常容易实现。

本次游戏设计的主要算法有两个:1.完成对字符串文本是否符合24点的判断。2.判断四个数字之间所有组成24点的可能性。(剪枝版:得到一种结果)

算法1: 获取文本框中的字符串 expression
        判断字符串是否合法:
            if expression 为空 and 当前数字有解: 不合法
            if expression 中括号位置不对 : 不合法
        判断expression是否等于24:
            numbers = expression 中的数字 #(利用字符串分割数字,在进行转换)
            sign = expression 中的符号 #(正则表达式提取)
            对符号进行优先级判断
            通过优先级计算四个数字的表达式expression是否等于24
算法2:  回溯方法:每一步选择两个数字进行加减乘除结果。
        step1: 选择 1-2 两个数字
                加|||除 操作
                并将得到的数字放回数字组中
        stepi: 选择 i-i+1 两个数字
                加|||除 操作
                并将得到的数字放回数字组中
        结束:  当仅剩下一个数字时
                判断是否为24点。

为此在程序实现过程中我们专门利用类Algorithm来处理有关24点的所有算法。

在这里插入图片描述

实验代码

所有的实验代码已经上传到github上。[代码](https://github.com/00zwp/Game24)

这里简单介绍几块内容,方便日后在利用Swing包的时候。

1.窗体的创建

// 本类继承 extends JFrame 
this.setVisible(true);
this.setTitle("欢迎来到初始选择界面");
this.setLayout(null);
this.setBounds(300,50,400,600);
this.addelements();
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

2.按钮的监听事件

this.Button1 =new JButton();
this.Button1.setBounds(50,100,100,150);
this.Button1.setIcon(new ImageIcon("./imgs/number_img/first.JPG"));
this.add(this.Button1);
this.Button1.addActionListener(new ButtonEvent());
    class ButtonEvent implements ActionListener {                     //定义牌按钮的监视器类
        public void actionPerformed(ActionEvent e){
            if (backupkey==0)
            {   backupkey=1;
                if (e.getSource() == Button1) {
                    s += "" + endarray[0];
                    textfield.setText(s);
                    Button1.setEnabled(false);
                }//需要和操作符添加互斥
            }
        }
    }

2022-07-07 更新链接

近日,将24点小游戏实现的源码以及可执行文件上传,链接如下。
源码
可执行文件

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zwp&Zyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值