
Java制作24点小游戏
发布日期:2021-05-14 16:26:12
浏览次数:18
分类:精选文章
本文共 4787 字,大约阅读时间需要 15 分钟。
24点小游戏开发技术文档
本文详细介绍了一个24点小游戏的核心功能实现方法及代码逻辑,适用于不同难度设置的用户体验。
一、屏幕显示与尺寸获取
游戏窗口的显示基于Java.awt.Toolkit获取默认显示设置。在开发过程中,首先获取屏幕宽度和高度,以便进行布局设置。代码片段如下:
public static int Width = Toolkit.getDefaultToolkit().getScreenSize().width;public static int Height = Toolkit.getDefaultToolkit().getScreenSize().height;
二、变量定义与初始化
为了便于程序运算,定义了多个变量来储存操作结果、得分、高级设置等信息。具体变量包括:
private String s[]; // 存放操作符private static int ss = 0; // 总分private int l = 0; // 运算次数private Random ra; // 随机数生成器private int t1, t2, t3, t4; // 卡牌值private JButton cardButtonOne, cardButtonTwo, cardButtonThree, cardButtonFour; // 卡牌按钮private int r = 0; // 操作结果private int card1 = 0, card2 = 0, card3 = 0, card4 = 0, k1 = 0, k2 = 0; // 卡牌、括号使用private int HARD = 1; // 难度级别
三、窗口展示
主窗口采用标准的布局机制,自定义布局以满足不同设备显示需求。窗口初始化及显示代码如下:
JFrame frame = new JFrame();test t = new test();t.setLayout(null); // 取消默认布局t.initView();t.setBackground(new Color(0xCCFF66)); // 窗口背景色frame.add(t);frame.setSize(Width, Height); // 窗口尺寸frame.setUndecorated(true); // 无标题条frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 退出方式设置frame.setVisible(true); // 窗口可视化
四、字体与绘制
游戏界面采用预设字体绘制,用户可以随时更新显示内容。主要绘制逻辑如下:
public void paint(Graphics g) { super.paint(g); g.setFont(font); // 设置字体 g.drawString("24点小游戏 难度" + HARD, (int)(0.1 * Width), (int)(0.1 * Height)); // 显示难度 for (int i = 0; i < 11; i++) { int startx = (int)(Width * (0.1 + i * 0.07)); int starty = (int)(Height * 0.5); int endx = (int)(Width * (0.15 + i * 0.07)); int endy = (int)(Height * 0.5); g.drawLine(startx, starty, endx, endy); // 绘制分割线 int tx = (int)(Width * (0.12 + i * 0.07)); int ty = (int)(Height * 0.49); g.drawString(s[i], tx, ty); // 显示操作符 } g.drawString(" 分数 " + ss, (int)(Width * 0.1), (int)(Height * 0.15));}
五、按钮操作
游戏界面设置了四个卡牌按钮,用于用户选择卡片信息。按钮创建及事件处理逻辑如下:
ImageIcon ic = new ImageIcon("D:/image/c.png");JButton close = new JButton();close.setBounds(Width - 100, 10, 80, 80);ic.setImage(ic.getImage().getScaledInstance(100, 100, 0));close.setIcon(ic);this.add(close);close.setActionCommand("close");close.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { doaction(e); }});
六、按钮事件处理
不同难度和操作命令触发不同的逻辑。具体事件处理细节如下:
String commend = e.getActionCommand();if ("close".equals(commend)) { System.exit(0);} else if ("one".equals(commend)) { if (HARD != 3) { s[l] += t1; l++; repaint(); } else { if (card1 == 0) { s[l] += t1; l++; card1 = 1; repaint(); } else { jumpwindow(2); } }} else if ("hard1".equals(commend)) { HARD = 1; jumpwindow(11); repaint();}
七、卡片刷新
为确保卡片显示效果,定期更新卡片和操作符显示:
card1 = 0;card2 = 0;card3 = 0;card4 = 0;k1 = 0;k2 = 0;ss += (t1 + t2 + t3 + t4);l = 0;for (int i = 0; i < 11; i++) { s[i] = "";}repaint();String s1 = "D:/image/cards_";int d1 = ra.nextInt(4) % 4 + 1;int t1 = ra.nextInt(13) % 13 + 1;s1 = s1 + d1 + "_" + t1 + ".jpg";ImageIcon c1 = new ImageIcon(s1);c1.setImage(c1.getImage().getScaledInstance((int)(Width * 0.07), (int)(Height * 0.18), 0));cardButtonOne.setIcon(c1);
八、运算处理
本人实现的算法旨在提取最里层括号进行计算,确保运算顺序遵循数学法则。核心计算逻辑如下:
public int getresult() { int t1 = 0, t2 = 0; char c = '.'; for (int i = 0; i < l; i++) { String s1 = s[i]; int d = 0; for (int j = 0; j < s1.length(); j++) { if (Character.isDigit(s1.charAt(j))) { d = d * 10; d += Character.getNumericValue(s1.charAt(j)); } else { c = s1.charAt(j); break; } } if (t1 == 0) { t1 = d; } else if (t1 != 0 && t2 == 0) { t2 = d; } if (t1 != 0 && t2 != 0) { switch (c) { case '+': t1 += t2; t2 = 0; break; case '-': t1 -= t2; t2 = 0; break; case '*': t1 *= t2; t2 = 0; break; case '/': t1 /= t2; t2 = 0; break; } } } return t1;}
九、弹出窗口
用户通过闯关成功触发跳转界面,显示得分及下一关提示。窗口跳转逻辑如下:
if (k == 0) { String title = "闯关成功!"; int d = t1 + t2 + t3 + t4; String message = "恭喜您,闯关成功!o(*^@^*)o\n您将获得" + d + "分,祝您闯关顺利!\n点击确定开始下一关!"; int messageType = JOptionPane.PLAIN_MESSAGE; JOptionPane.showMessageDialog(this, message, title, messageType);}
以上是关于24点小游戏核心功能实现的技术文档,涵盖了难度设置、得分计算、用户交互、卡片随机生成及运算方程解析等多个方面,为后续开发提供了清晰的指导和参考。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年05月03日 21时56分32秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
2020-05-31 py执行时超时控制
2019-03-12
关于hostent以及in_addr结构体
2019-03-12
加入epoll_wait之后的简化版本
2019-03-12
一段强大的shellcode
2019-03-12
双链表相加问题
2019-03-12
c++复杂数据类型——结构体、共用体、枚举、匿名类型、类型别名
2019-03-12
Linux常用命令合集
2019-03-12
冒泡排序
2019-03-12
高兴的小明
2019-03-12
GB2312-80 汉字机内码
2019-03-12
允许并列的排名
2019-03-12
狼人杀
2019-03-12
超级素数——蓝桥杯
2019-03-12
n的a进制数
2019-03-12
配置jdk的环境变量
2019-03-12
leetcode9.回文数
2019-03-12
【C++ Primer 第五版】 注释简介
2019-03-12
【C++ Primer 第五版】处理类型
2019-03-12
echo命令的颜色及同行显示控制
2019-03-12
CentOS7利用Systemd添加用户自定义系统服务
2019-03-12