package ui;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
/**
* @author gyf
* @ClassName MainjFrame
* @Date 2024/8/23 20:03
* @Version V1.0
* @Description : 游戏主页面
*/
public class MainjFrame extends JFrame implements KeyListener, ActionListener {
Random random = new Random();
// 初始化菜单条目对象 4个
JMenuItem replayjMenuItem1 = new JMenuItem("重新游戏");
JMenuItem reloginjMenuItem2 = new JMenuItem("重新登陆");
JMenuItem closejMenuItem3 = new JMenuItem("关闭游戏");
JMenuItem accountjMenuItem4 = new JMenuItem("公众号");
// 初始化菜单条目对象
JMenuItem girljMenuItem = new JMenuItem("美女");
JMenuItem animaljMenuItem = new JMenuItem("动物");
JMenuItem sportjMenuItem = new JMenuItem("运动");
//赢的数组
int[][] win = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 0}
};
// 二位数组的长度为4
int[][] data = new int[4][4];
// 记录空白方块在数组中的位置
int x = 0;
int y = 0;
// 记录图片的路径
String path = "image/animal/animal3/";
// 步数
int step = 0;
// 空参构造方法
public MainjFrame() throws HeadlessException {
// 初始化窗体
init();
// 初始化菜单
initJmenuBar();
// 初始化数据(打乱数据并添加到二维数组中)
initData();
// 初始化图片(根据打乱之后的结果去加载图片)
initImage();
// 设置可见
this.setVisible(true);
}
/**
* @Description: 打乱数组中数据的顺序
* @Param: []
* @return: void
* @Author: gyf
* @Date: 11:29 2024/8/24
*/
private void initData() {
Random random = new Random();
int[] tempArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
// 打乱顺序
for (int i = 0; i < tempArr.length; i++) {
int temp = tempArr[i];
int index = random.nextInt(tempArr.length);
tempArr[i] = tempArr[index];
tempArr[index] = temp;
}
// 添加到二维数组中
int index = 0;
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[i].length; j++) {
// 找到空白图片的的位置(当数组的值为0的时候)
if (tempArr[index] == 0) {
x = i;
y = j;
}
data[i][j] = tempArr[index];
index++;
}
}
}
/**
* @Description: 初始化图片, 按照二维数组中打乱的顺序进行添加照片, 要先添加小的照片再添加背景图片
* @Param: []
* @return: void
* @Author: gyf
* @Date: 21:19 2024/8/23
*/
private void initImage() {
// 清空原本已经出现的图片
this.getContentPane().removeAll();
// 判断两个数组是否相同
System.out.println(compare(win, data));
if (compare(win, data)) {
// 若相同则直接win的照片,游戏结束
// 加载完整的图片
JLabel winlabel = new JLabel(new ImageIcon("image/win.png"));
winlabel.setBounds(203, 283, 197, 73);
this.getContentPane().add(winlabel);
}
JLabel coutjLabel = new JLabel("步数:" + step);
coutjLabel.setBounds(50, 30, 100, 20);
this.getContentPane().add(coutjLabel);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
int number = data[i][j];
JLabel jLabel2 = new JLabel(new ImageIcon(path + number + ".jpg"));
// 指定图片的位置
jLabel2.setBounds((105 * j + 83), (105 * i + 134), 105, 105);
// 给每个图片添加边框
// jLabel2.setBorder(new BevelBorder(1));
jLabel2.setBorder(new BevelBorder(BevelBorder.LOWERED));
// 把管理容器添加到界面中
// this.add(jLabel);
// 先获取到里面的隐藏容器(创建界面的时候默认创造了),然后在将管理容器添加进去
this.getContentPane().add(jLabel2);
// 加在下一张照片
}
}
// 添加背景图片(后添加即可)
// 创建一个图片的ImageIcon的对象
// ImageIcon imageIcon = new ImageIcon("image/animal/animal3/1.jpg");
// 创建一个JLable的对象(管理容器)
ImageIcon imageIcon = new ImageIcon("image/background.png");
JLabel jLabel1 = new JLabel(imageIcon);
jLabel1.setBounds(40, 40, 508, 560);
this.getContentPane().add(jLabel1);
// 刷新
this.getContentPane().repaint();
}
/**
* @Description: 初始化菜单
* @Param: []
* @return: void
* @Author: gyf
* @Date: 21:07 2024/8/23
*/
private void initJmenuBar() {
// 菜单 选项以及条目对象都是相互独立的
JMenuBar jMenuBar = new JMenuBar();
// 初始化菜单上的两个选项对象(功能 关于我们)
JMenu functionjMenu1 = new JMenu("功能");
JMenu aboutjMenu2 = new JMenu("关于");
JMenu changeIamge = new JMenu("更换图片");
// 绑定事件
replayjMenuItem1.addActionListener(this);
reloginjMenuItem2.addActionListener(this);
closejMenuItem3.addActionListener(this);
accountjMenuItem4.addActionListener(this);
// 将菜单加在当前窗体上
this.setJMenuBar(jMenuBar);
//窗体上增加选项对象
jMenuBar.add(functionjMenu1);
jMenuBar.add(aboutjMenu2);
// 选项对象上增加条目对象
functionjMenu1.add(changeIamge);
functionjMenu1.add(replayjMenuItem1);
functionjMenu1.add(reloginjMenuItem2);
functionjMenu1.add(closejMenuItem3);
aboutjMenu2.add(accountjMenuItem4);
changeIamge.add(girljMenuItem);
changeIamge.add(animaljMenuItem);
changeIamge.add(sportjMenuItem);
// 绑定事件
girljMenuItem.addActionListener(this);
animaljMenuItem.addActionListener(this);
sportjMenuItem.addActionListener(this);
}
/**
* @Description: 初始化窗体
* @Param: []
* @return: void
* @Author: gyf
* @Date: 21:05 2024/8/23
*/
private void init() {
// 设置窗体大小
this.setSize(603, 680);
// 设置标题
this.setTitle("拼图单机版本 V1.0");
// 设置界面置顶
this.setAlwaysOnTop(true);
// 设置界面居中
this.setLocationRelativeTo(null);
// 设置关闭模式 0 1 2 3(关闭一个 VM停止工作)
// this.setDefaultCloseOperation(3);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// 取消默认的剧中设置,只有取消了才会按照XY轴的形式添加组件
this.setLayout(null);
// 给界面添加监听事件
this.addKeyListener(this);
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
// 长按住A,查看完整的图片
if (keyCode == 65) {
// 界面的所有图片删除
this.getContentPane().removeAll();
//加载完整的图片
JLabel all = n
没有合适的资源?快使用搜索试试~ 我知道了~
Java实现拼图游戏搭建源码分享
共669个文件
jpg:527个
xml:73个
png:21个
0 下载量 100 浏览量
2024-08-26
17:13:49
上传
评论
收藏 10.55MB ZIP 举报
温馨提示
Java实现拼图游戏搭建源码分享
资源推荐
资源详情
资源评论
收起资源包目录
Java实现拼图游戏搭建源码分享 (669个子文件)
MainjFrame.class 8KB
LoginJFrame.class 6KB
RegisterJFranme.class 6KB
CodeUtil.class 2KB
MyJframe2.class 2KB
MyJframe.class 2KB
arrayTest.class 2KB
MyJframe3.class 1KB
Test3.class 1KB
User.class 844B
Test3$1.class 743B
MyActionListener.class 641B
Main.class 402B
APP.class 389B
config 130B
description 73B
exclude 240B
.gitignore 184B
HEAD 23B
Project.iml 618B
MainjFrame.java 14KB
LoginJFrame.java 11KB
RegisterJFranme.java 9KB
CodeUtil.java 2KB
MyJframe.java 2KB
Test3.java 2KB
MyJframe2.java 2KB
arrayTest.java 1KB
MyJframe3.java 1KB
User.java 658B
MyActionListener.java 402B
Main.java 285B
APP.java 251B
all.jpg 399KB
all.jpg 328KB
all.jpg 319KB
all.jpg 253KB
all.jpg 240KB
all.jpg 238KB
all.jpg 231KB
all.jpg 211KB
all.jpg 203KB
all.jpg 200KB
all.jpg 200KB
all.jpg 197KB
all.jpg 193KB
all.jpg 173KB
all.jpg 167KB
all.jpg 152KB
all.jpg 149KB
all.jpg 148KB
all.jpg 143KB
all.jpg 139KB
all.jpg 134KB
all.jpg 133KB
all.jpg 127KB
all.jpg 126KB
all.jpg 125KB
all.jpg 123KB
all.jpg 122KB
all.jpg 120KB
all.jpg 118KB
all.jpg 113KB
all.jpg 103KB
10.jpg 23KB
7.jpg 23KB
12.jpg 23KB
11.jpg 23KB
16.jpg 23KB
7.jpg 23KB
14.jpg 23KB
8.jpg 23KB
9.jpg 23KB
10.jpg 23KB
4.jpg 22KB
13.jpg 22KB
9.jpg 22KB
6.jpg 22KB
5.jpg 22KB
1.jpg 22KB
12.jpg 22KB
11.jpg 22KB
11.jpg 22KB
15.jpg 21KB
3.jpg 21KB
15.jpg 21KB
2.jpg 21KB
3.jpg 21KB
16.jpg 21KB
6.jpg 20KB
15.jpg 20KB
10.jpg 20KB
2.jpg 19KB
16.jpg 19KB
14.jpg 19KB
10.jpg 19KB
5.jpg 19KB
11.jpg 19KB
4.jpg 19KB
14.jpg 18KB
共 669 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
XF鸭
- 粉丝: 438
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 最新lEO数值资产系统某平台2021新版 c2c币数值合约交易平台自动撮合松机器人功能
- 技术资料分享mp1482非常好的技术资料.zip
- 通过组态王,可以实现对火灾报警设备的实时监控、数据采集、报警信息的显示和记录等功能
- usb串口驱动,console线驱动
- c++课程设计-智慧个人收支管理系统
- asp.net framework从webform开始创建mvc项目
- notepad++ 7.9.5
- 技术资料分享MAX811T非常好的技术资料.zip
- 技术资料分享KXTE9-2050 Specifications Rev 3非常好的技术资料.zip
- THU uCore OS Plus 的 Rust 版本
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功