package UI;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
//游戏的主界面,包括和游戏相关的所有逻辑
public class GameJFrame extends JFrame implements KeyListener, ActionListener {
//创建选项的条目对象
JMenuItem people = new JMenuItem("人物");
JMenuItem animal = new JMenuItem("动物");
JMenuItem replayItem = new JMenuItem("重新游戏");
/*JMenuItem reLoginItem = new JMenuItem("重新登录");*/
JMenuItem closeItem = new JMenuItem("关闭游戏");
JMenuItem accountItem = new JMenuItem("作者微信");
//定义一个变量用来展示当前图片的路径
String path = "image\\rtwo\\rtwo-";
//很多图片路径的数组
String[] peoplePath = {
"image\\rtwo\\rtwo-",
"image\\rone\\rone-",
"image\\Eron\\Eron-",
"image\\levi\\levi-"
};
String[] animalPath = {
"image\\cat\\cat-",
"image\\cutty\\cutty-"
};
//创建二维数组记录顺序
int[][] data = new int[3][3];
//记录空白方块在二维数组中的位置
int x = 0;
int y = 0;
//定义一个存储正确数据的二维数组(判断胜利)
int[][] win = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 0}
};
//定义统计步数的变量
int step = 0;
public GameJFrame() {
//初始化界面
initJFrame();
//初始化菜单
initJMenuBar();
//初始化数据(打乱顺序)
initData();
//初始化图片(打乱之后)
initImage();
//让界面显示
this.setVisible(true);
}
private void initJFrame() {
//设置界面的宽高
this.setSize(603, 680);
this.setTitle("拼图单机版 v1.0");
//设置界面置顶
this.setAlwaysOnTop(true);
//设置界面居中
this.setLocationRelativeTo(null);
//设置关闭模式
this.setDefaultCloseOperation(3);
//取消默认的居中模式
this.setLayout(null);
//给整个界面添加键盘监听事件
this.addKeyListener(this);
}
private void initJMenuBar() {
//创建整个菜单对象
JMenuBar jMenuBar = new JMenuBar();
//创建菜单上面两个选项
JMenu fonctionJMenu = new JMenu("功能");
JMenu aboutJMenu = new JMenu("关于作者");
//创建更换图片
JMenu changeImage = new JMenu("更换图片");
//将每个选项下的条目添加到选项中
fonctionJMenu.add(changeImage);
changeImage.add(people);
changeImage.add(animal);
fonctionJMenu.add(replayItem);
/*fonctionJMenu.add(reLoginItem);*/
fonctionJMenu.add(closeItem);
aboutJMenu.add(accountItem);
//给条目绑定事件
people.addActionListener(this);
animal.addActionListener(this);
replayItem.addActionListener(this);
/*reLoginItem.addActionListener(this);*/
closeItem.addActionListener(this);
accountItem.addActionListener(this);
//将选项添加进菜单中
jMenuBar.add(fonctionJMenu);
jMenuBar.add(aboutJMenu);
//给界面设置菜单
this.setJMenuBar(jMenuBar);
}
private void initData() {
Random r = new Random();
int[] tem = {0, 1, 2, 3, 4, 5, 6, 7, 8};
for (int i = 0; i < tem.length; i++) {
int x = r.nextInt(tem.length);
int temp = tem[i];
tem[i] = tem[x];
tem[x] = temp;
}
for (int i = 0; i < tem.length; i++) {
//记录0索引的位置
if (tem[i] == 0) {
x = i / 3;
y = i % 3;
}
data[i / 3][i % 3] = tem[i];
}
}
private void initImage() {
//清空原本出现的所有图片
this.getContentPane().removeAll();
if (victory()) {
JLabel winJLabel = new JLabel(new ImageIcon("image\\else\\win.png"));
winJLabel.setBounds(0, 0, 600, 650);
this.getContentPane().add(winJLabel);
}
JLabel stepCount = new JLabel("步数:" + step);
stepCount.setBounds(0, 0, 100, 20);
this.getContentPane().add(stepCount);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
//获取当前加载图片的序号
int num = data[i][j];
//创建一个JLabel的对象
JLabel jLabel = new JLabel(new ImageIcon(path + num + ".jpg"));
//指定图片位置
jLabel.setBounds(200 * j, 216 * i, 200, 216);
//给图片添加边框(优化)
jLabel.setBorder(new BevelBorder(0));
//把管理容器添加到界面中!=this.add(jLabel);
this.getContentPane().add(jLabel);
}
}
//刷新界面
this.getContentPane().repaint();
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == 65) {
//将界面中的图片全部删除
this.getContentPane().removeAll();
//加载第一张完整图片
JLabel all = new JLabel(new ImageIcon(path + "all.jpg"));
all.setBounds(0, 0, 600, 650);
this.getContentPane().add(all);
}
}
@Override
public void keyReleased(KeyEvent e) {
//若游戏胜利,则不需要再移动了
if (victory())
return;
//对上下左右判断(左37上38右39下40)
int code = e.getKeyCode();
switch (code) {
case 37:
if (y == 2)
return;
data[x][y] = data[x][y + 1];
data[x][y + 1] = 0;
y++;
step++;
initImage();
break;
case 38:
if (x == 2)
return;
data[x][y] = data[x + 1][y];
data[x + 1][y] = 0;
x++;
step++;
initImage();
break;
case 39:
if (y == 0)
return;
data[x][y] = data[x][y - 1];
data[x][y - 1] = 0;
y--;
step++;
initImage();
break;
case 40:
if (x == 0)
return;
data[x][y] = data[x - 1][y];
data[x - 1][y] = 0;
x--;
step++;
initImage();
break;
case 65:
initImage();
case 87:
data = new int[][]{
{1, 2, 3},
{4, 5, 6},
{7, 8, 0}
};
initImage();
}
}
@Override
public void actionPerformed(ActionEvent e) {
//获取当前被点击的条目对象
Object obj = e.getSource();
Random r = new Random();
if (obj == replayItem) {
System.out.println("重新游戏");
//再次打乱顺序
initData();
//计步器清零(先清零再加载)
step = 0;
//重新加载图片(小bug解决)
initImage();
} /*else if (obj == reLoginItem)
没有合适的资源?快使用搜索试试~ 我知道了~
java拼图小游戏项目完整源代码.zip
共67个文件
jpg:54个
java:5个
xml:4个
0 下载量 97 浏览量
2024-06-21
20:36:02
上传
评论
收藏 2.21MB ZIP 举报
温馨提示
java拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zipjava拼图小游戏项目完整源代码.zip
资源推荐
资源详情
资源评论
收起资源包目录
java拼图小游戏项目.zip (67个子文件)
puzzle-game-Java-master
image
cat
cat-2.jpg 5KB
cat-4.jpg 5KB
cat-6.jpg 6KB
cat-7.jpg 5KB
cat-8.jpg 4KB
cat-5.jpg 5KB
cat-1.jpg 5KB
cat-3.jpg 6KB
cat-all.jpg 315KB
cutty
cutty-1.jpg 2KB
cutty-7.jpg 4KB
cutty-4.jpg 6KB
cutty-5.jpg 7KB
cutty-2.jpg 5KB
cutty-3.jpg 5KB
cutty-8.jpg 3KB
cutty-all.jpg 109KB
cutty-6.jpg 6KB
else
win.png 13KB
wechat.png 33KB
Eron
eron-7.jpg 15KB
eron-6.jpg 17KB
eron-8.jpg 12KB
eron-3.jpg 10KB
eron-5.jpg 11KB
eron-2.jpg 15KB
eron-4.jpg 18KB
eron-1.jpg 15KB
eron-all.jpg 91KB
rtwo
rtwo-2.jpg 9KB
rtwo-5.jpg 13KB
rtwo-4.jpg 5KB
rtwo-6.jpg 6KB
rtwo-all.jpg 313KB
rtwo-8.jpg 7KB
rtwo-1.jpg 4KB
rtwo-3.jpg 7KB
rtwo-7.jpg 6KB
rone
rone-1.jpg 9KB
rone-8.jpg 9KB
rone-4.jpg 8KB
rone-7.jpg 8KB
rone-all.jpg 352KB
rone-3.jpg 5KB
rone-2.jpg 11KB
rone-5.jpg 10KB
rone-6.jpg 6KB
levi
levi-3.jpg 10KB
levi-2.jpg 12KB
levi-6.jpg 12KB
levi-1.jpg 13KB
levi-7.jpg 12KB
levi-all.jpg 625KB
levi-8.jpg 11KB
levi-5.jpg 14KB
levi-4.jpg 13KB
src
App.java 275B
UI
LoginJFrame.java 568B
RegisterJFrame.java 501B
GameJFrame.java 10KB
Test.java 0B
.idea
vcs.xml 225B
workspace.xml 3KB
misc.xml 287B
modules.xml 267B
puzzleGame.iml 433B
.gitignore 344B
共 67 条
- 1
资源评论
王二空间
- 粉丝: 5488
- 资源: 1415
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功