package com.lyx.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 changeItem = new JMenuItem("changeImage");
JMenuItem replayItem = new JMenuItem("restart");
JMenuItem reLoginItem = new JMenuItem("reLogin");
JMenuItem closeItem = new JMenuItem("close");
//创建关于账号
JMenuItem accountItem = new JMenuItem("account");
//创建关于更换图片对象,用于更换游戏
JMenuItem megumi1 = new JMenuItem("megumi1");
JMenuItem megumi2 = new JMenuItem("megumi2");
JMenuItem megumi3 = new JMenuItem("megumi3");
JMenuItem another = new JMenuItem("another");
//步数
int step = 0 ;
int win [][]=new int [][] {
{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15},
{16,17,18,19,20},
{21,22,23,24,0}
};
//创建一个二维数组管理数据
int [][] data = new int[6][6];
//游戏主界面
public GameJFrame() {
initJFrame();
//初始化菜单
initJMenuBar();
//初始化数据(打乱)
initDate();
//初始化图片
initImage();
this.setVisible(true);
}
//定义一个对象,记录当前展示图片位置
String path = "D:\\IDEASPACE\\puzzlegame\\image\\katomegumi1\\";
//记录空白方块在二维数组中的位置
int x = 0;
int y = 0;
//初始化数据
private void initDate() {
int[] tempArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24};
Random r = new Random();
for (int i = 0; i < tempArr.length; i++) {
//获得随机索引
int index = r.nextInt(tempArr.length);
//拿着遍历得到的每个数据,跟随机索引上的数据交换
int temp = tempArr[i];
tempArr[i] = tempArr[index];
tempArr[index] = temp;
}
//遍历一维数组tempArr得到每一个元素,把每一个元素依次添加到二维数组中
for (int i = 0; i < tempArr.length; i++) {
if (tempArr[i] == 0){
x = i / 5;
y = i % 5;
}//此处的else if会导致后边实现replay时候出现空白格不会传递覆盖的BUG,所以
//应该让整个二维数组被覆盖即可
data [ i / 5 ][ i % 5 ] = tempArr [ i ];
}
}
private void initImage() {
this.getContentPane().removeAll();
//判断是否是正确的图像
if (victory()) {
JLabel winJ = new JLabel(new ImageIcon("D:\\IDEASPACE\\puzzlegame\\image\\background\\true.jpg"));
winJ.setBounds(200,200,400,400);
this.getContentPane().add(winJ);
}
//计数器
JLabel stepCount = new JLabel("步数:" + step);
stepCount.setBounds(30,30,200,50);
this.getContentPane().add(stepCount);
//设置拼图
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
//获取当前要加载图片的序号
int number = data[i][j];
//创建一个ImageIcon对象
//创建一个JLabel的对象(管理容器)
JLabel jLabel = new JLabel(new ImageIcon(path + number +".jpg"));
//指定位置
jLabel.setBounds(120*j + 100,120*i + 100,120,120);
//给图片添加边框
jLabel.setBorder(new BevelBorder(BevelBorder.RAISED));
//把管理容器添加到界面中
this.getContentPane().add(jLabel);
}
}
//设置背景
JLabel backGround = new JLabel(new ImageIcon("D:\\IDEASPACE\\puzzlegame\\image\\background\\bg.jpg"));
backGround.setBounds(0,0,800,900);
this.getContentPane().add(backGround);
this.getContentPane().repaint();
}
private void initJMenuBar() {
JMenuBar jMenuBar = new JMenuBar();
//创建上方菜单对象
JMenu functionJMenu = new JMenu("功能");
JMenu aboutJMenu = new JMenu("关于");
//JMenu 中可以再次嵌套多个JMenu。
JMenu changeJMenu = new JMenu("changeImage");
changeJMenu.add(megumi1);
changeJMenu.add(megumi2);
changeJMenu.add(megumi3);
changeJMenu.add(another);
//添加监听器
megumi1.addActionListener(this);
megumi2.addActionListener(this);
megumi3.addActionListener(this);
another.addActionListener(this);
//给条目绑定事件,让按钮条目能够实现对应功能
//过程中,为了实现按钮功能,首先需要准备好动作监听(准备好相应接口),然后给按钮创建对象,并把对象和接口监听事件
//绑定,重写接口中的方法,然后调用方法。
replayItem.addActionListener(this);
reLoginItem.addActionListener(this);
closeItem.addActionListener(this);
accountItem.addActionListener(this);
//将每个子条目加入对应选项中
functionJMenu.add(replayItem);
functionJMenu.add(reLoginItem);
functionJMenu.add(closeItem);
//添加更换图片菜单
functionJMenu.add(changeJMenu);
//添加关于账号菜单
aboutJMenu.add(accountItem);
//将菜单对象加入上方菜单中
jMenuBar.add(functionJMenu);
jMenuBar.add(aboutJMenu);
//给整个界面设置菜单
this.setJMenuBar(jMenuBar);
}
private void initJFrame() {
this.setSize(800,900);
this.setTitle("拼图单机版v1.0");
//置顶
this.setAlwaysOnTop(true);
//居中
this.setLocationRelativeTo(null);
//关闭模式
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//取消默认布局
this.setLayout(null);
//整个屏幕的键盘监听器
this.addKeyListener(this);
}
@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("D:\\IDEASPACE\\puzzlegame\\image\\katomegumi\\all.jpg"));
all.setBounds(100,100,600,600);
this.getContentPane().add(all);
//设置背景
JLabel backGround = new JLabel(new ImageIcon("D:\\IDEASPACE\\puzzlegame\\image\\background\\bg.jpg"));
backGround.setBounds(0,0,800,900);
this.getContentPane().add(backGround);
this.getContentPane().repaint();
//刷新页面
this.getContentPane().repaint();
}
}
@Override
//松开
public void keyReleased(KeyEvent e) {
//如果游戏胜利,不能继续移动代码
if (victory()) {
//1.返回结果 2.结束方法
return;
}
//对上下左右进行判断
//左37,上38,右39,下40
int code = e.getKeyCode();
System.out.println(code);
if (code ==37) {
System.out.println("向左移动");
if (y == 4){
return;
}
//x,y表示空白,x,y+1表示右边
data[x][y] = data[x][y+1];
data[x][y+1] = 0;
y++;
step++;
//调用方法按最新的数字加载图片
initImage();
}
else if (code ==38) {
System.out.println("向上移动");
if(x == 4){
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计
资源推荐
资源详情
资源评论
收起资源包目录
个人java学习项目一:简易拼图游戏.zip (128个子文件)
GameJFrame.class 8KB
LoginJFrame.class 4KB
MyJFrame2.class 2KB
MyJFrame.class 2KB
MyJFrame3.class 1KB
MyActionListener.class 657B
RegisterJFrame.class 601B
text3.class 429B
text2.class 429B
text.class 425B
App.class 396B
12.gif 90KB
.gitignore 180B
puzzlegame.iml 423B
GameJFrame.java 12KB
LoginJFrame.java 4KB
MyJFrame.java 1KB
MyJFrame2.java 1KB
test4.java 1KB
MyJFrame3.java 1KB
RegisterJFrame.java 410B
MyActionListener.java 276B
App.java 210B
text2.java 122B
text3.java 122B
text.java 119B
5.jpeg 100KB
10.jpeg 86KB
4.jpeg 82KB
13.jpeg 75KB
19.jpeg 70KB
15.jpeg 69KB
16.jpeg 68KB
11.jpeg 58KB
14.jpeg 52KB
8.jpeg 33KB
6.jpeg 28KB
17.jpeg 26KB
18.jpeg 25KB
22.jpeg 17KB
21.jpeg 16KB
20.jpeg 14KB
9.jpeg 7KB
7.jpeg 3KB
1.jpg 106KB
3.jpg 92KB
2.jpg 87KB
all.jpg 61KB
all.jpg 61KB
all.jpg 61KB
bg.jpg 47KB
20.jpg 6KB
20.jpg 6KB
20.jpg 6KB
15.jpg 5KB
15.jpg 5KB
15.jpg 5KB
10.jpg 5KB
10.jpg 5KB
10.jpg 5KB
7.jpg 5KB
7.jpg 5KB
7.jpg 5KB
2.jpg 5KB
2.jpg 5KB
2.jpg 5KB
8.jpg 4KB
8.jpg 4KB
8.jpg 4KB
12.jpg 4KB
12.jpg 4KB
12.jpg 4KB
13.jpg 4KB
13.jpg 4KB
13.jpg 4KB
19.jpg 4KB
19.jpg 4KB
19.jpg 4KB
9.jpg 4KB
9.jpg 4KB
9.jpg 4KB
24.jpg 4KB
24.jpg 4KB
25.jpg 4KB
25.jpg 4KB
25.jpg 4KB
18.jpg 4KB
18.jpg 4KB
18.jpg 4KB
3.jpg 4KB
3.jpg 4KB
3.jpg 4KB
6.jpg 3KB
6.jpg 3KB
6.jpg 3KB
23.jpg 3KB
23.jpg 3KB
16.jpg 3KB
16.jpg 3KB
16.jpg 3KB
共 128 条
- 1
- 2
资源评论
辣椒种子
- 粉丝: 3414
- 资源: 5723
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功