package com.itheima.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.Arrays;
import java.util.Random;
public class GameJFrame extends JFrame implements KeyListener,ActionListener{
//JFrame 界面,窗体
//子类呢?也表示界面,窗体
//规定:GameJFrame这个界面表示的就是游戏的主界面
//以后跟游戏相关的所有逻辑都写在这个类中
//创建一个二维数组
//目的:用来管理数据
//加载图片的时候,会根据二维数组中的数据进行加载
int[][] data = new int[4][4];
//记录空白方块在二维数组中的位置
int x = 0;
int y = 0;
//定义一个变量,记录当前展示图片的路径
String path = "puzzlegame\\image\\animal\\animal3\\";
//定义一个二维数组,存储正确的数据
int[][] win = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,0}
};
//定义变量用来统计步数
int step = 0;
//创建选项下面的条目对象
JMenuItem replayItem = new JMenuItem("重新游戏");
JMenuItem reLoginItem = new JMenuItem("重新登录");
JMenuItem closeItem = new JMenuItem("关闭游戏");
JMenuItem accountItem = new JMenuItem("公众号");
public GameJFrame() {
//初始化界面
initJFrame();
//初始化菜单
initJMenuBar();
//初始化数据(打乱)
initData();
//初始化图片(根据打乱之后的结果去加载图片)
initImage();
//让界面显示出来,建议写在最后
this.setVisible(true);
}
//初始化数据(打乱)
private void initData() {
//1.定义一个一维数组
int[] tempArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
//2.打乱数组中的数据的顺序
//遍历数组,得到每一个元素,拿着每一个元素跟随机索引上的数据进行交换
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;
}
/*
*
* 5 6 8 9
* 10 11 15 1
* 4 7 12 13
* 2 3 0 14
*
* 5 6 8 9 10 11 15 1 4 7 12 13 2 3 0 14
* */
//4.给二维数组添加数据
//遍历一维数组tempArr得到每一个元素,把每一个元素依次添加到二维数组当中
for (int i = 0; i < tempArr.length; i++) {
if (tempArr[i] == 0) {
x = i / 4;
y = i % 4;
}
data[i / 4][i % 4] = tempArr[i];
}
}
//初始化图片
//添加图片的时候,就需要按照二维数组中管理的数据添加图片
private void initImage() {
//清空原本已经出现的所有图片
this.getContentPane().removeAll();
if (victory()) {
//显示胜利的图标
JLabel winJLabel = new JLabel(new ImageIcon("C:\\Users\\moon\\IdeaProjects\\basic-code\\puzzlegame\\image\\win.png"));
winJLabel.setBounds(203,283,197,73);
this.getContentPane().add(winJLabel);
}
JLabel stepCount = new JLabel("步数:" + step);
stepCount.setBounds(50,30,100,20);
this.getContentPane().add(stepCount);
//路径分为两种:
//绝对路径:一定是从盘符开始的。C:\ D:\
//相对路径:不是从盘符开始的
//相对路径相对当前项目而言的。 aaa\\bbb
//在当前项目下,去找aaa文件夹,里面再找bbb文件夹。
//细节:
//先加载的图片在上方,后加载的图片塞在下面。
//外循环 --- 把内循环重复执行了4次。
for (int i = 0; i < 4; i++) {
//内循环 --- 表示在一行添加4张图片
for (int j = 0; j < 4; j++) {
//获取当前要加载图片的序号
int num = data[i][j];
//创建一个JLabel的对象(管理容器)
JLabel jLabel = new JLabel(new ImageIcon(path + num + ".jpg"));
//指定图片位置
jLabel.setBounds(105 * j + 83, 105 * i + 134, 105, 105);
//给图片添加边框
//0:表示让图片凸起来
//1:表示让图片凹下去
jLabel.setBorder(new BevelBorder(BevelBorder.LOWERED));
//把管理容器添加到界面中
this.getContentPane().add(jLabel);
}
}
//添加背景图片
JLabel background = new JLabel(new ImageIcon("puzzlegame\\image\\background.png"));
background.setBounds(40, 40, 508, 560);
//把背景图片添加到界面当中
this.getContentPane().add(background);
//刷新一下界面
this.getContentPane().repaint();
}
private void initJMenuBar() {
//创建整个的菜单对象
JMenuBar jMenuBar = new JMenuBar();
//创建菜单上面的两个选项的对象 (功能 关于我们)
JMenu functionJMenu = new JMenu("功能");
JMenu aboutJMenu = new JMenu("关于我们");
//将每一个选项下面的条目天极爱到选项当中
functionJMenu.add(replayItem);
functionJMenu.add(reLoginItem);
functionJMenu.add(closeItem);
aboutJMenu.add(accountItem);
//给条目绑定事件
replayItem.addActionListener(this);
reLoginItem.addActionListener(this);
closeItem.addActionListener(this);
accountItem.addActionListener(this);
//将菜单里面的两个选项添加到菜单当中
jMenuBar.add(functionJMenu);
jMenuBar.add(aboutJMenu);
//给整个界面设置菜单
this.setJMenuBar(jMenuBar);
}
private void initJFrame() {
//设置界面的宽高
this.setSize(603, 680);
//设置界面的标题
this.setTitle("拼图单机版 v1.0");
//设置界面置顶
this.setAlwaysOnTop(true);
//设置界面居中
this.setLocationRelativeTo(null);
//设置关闭模式
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 code = e.getKeyCode();
if (code == 65){
//把界面中所有的图片全部删除
this.getContentPane().removeAll();
//加载第一张完整的图片
JLabel all = new JLabel(new ImageIcon(path + "all.jpg"));
all.setBounds(83,134,420,420);
this.getContentPane().add(all);
//加载背景图片
//添加背景图片
JLabel background = new JLabel(new ImageIcon("puzzlegame\\image\\background.png"));
background.setBounds(40, 40, 508, 560);
//把背景图片添加到界面当中
this.getContentPane().add(background);
//刷新界面
this.getContentPane().repaint();
}
}
//松�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
java教程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教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipjava教程入门.zipja
资源推荐
资源详情
资源评论
收起资源包目录
java教程入门.zip (1043个子文件)
jdk-11中文api修订版.CHM 56.34MB
GameJFrame.class 7KB
LoginJFrame.class 6KB
demo1.class 3KB
LocalDateDemo1.class 3KB
test.class 3KB
ChronoUnitDemo1.class 3KB
ThreadSocket.class 3KB
demo2.class 2KB
User.class 2KB
demo.class 2KB
Demo2.class 2KB
Demo5.class 2KB
demo3.class 2KB
Demo1.class 2KB
Demo2.class 2KB
LocalDateTimeDemo1.class 2KB
Demo4.class 2KB
LocalTimeDemo1.class 2KB
CollectionDemo1.class 2KB
demo2.class 2KB
Demo1.class 2KB
demo1.class 2KB
Test3.class 2KB
demo1.class 2KB
Student.class 2KB
Ticket.class 2KB
CodeUtil.class 2KB
a09JDK7DateDemo6.class 2KB
Demo.class 2KB
Test1.class 2KB
Student.class 2KB
MyJFrame2.class 2KB
Student.class 2KB
ClientDemo.class 2KB
ClientDemo.class 2KB
MyJFrame.class 2KB
DurationDemo1.class 2KB
Ticket2.class 2KB
a09JDK7DateDemo5.class 2KB
Test2.class 2KB
Student.class 2KB
PeriodDemo1.class 2KB
Test1.class 2KB
test.class 2KB
InstantDemo1.class 2KB
ServerDemo.class 2KB
Season.class 2KB
ServerDemo.class 2KB
a08RegexDemo4.class 2KB
Ticket.class 2KB
Student.class 2KB
User.class 2KB
Test3.class 2KB
a08RegexDemo3.class 2KB
ZonedDateTimeDemo1.class 1KB
Student.class 1KB
Test4.class 1KB
Demo5.class 1KB
a08RegexDemo5.class 1KB
MyJFrame3.class 1KB
Student.class 1KB
ServerDemo.class 1KB
IntegerDemo01.class 1KB
ClientDemo.class 1KB
ClientDemo.class 1KB
Student.class 1KB
a08RegexDemo6.class 1KB
myRunnable.class 1KB
Test2.class 1KB
a09JDK7DateDemo3.class 1KB
demo1.class 1KB
a09JDK7DateDemo2.class 1KB
a06BigInterDemo2.class 1KB
Test3.class 1KB
MySetDemo1.class 1KB
myCallable.class 1KB
Demo4.class 1KB
Demo1.class 1KB
Test2.class 1KB
YIQinginformation.class 1KB
Exception.class 1KB
Demo3.class 1KB
CollectionDemo3.class 1KB
a02SystemDemo1.class 1KB
SeverDemo.class 1KB
a04ObjectDemo3.class 1KB
a08RegexDemo8.class 1KB
Demo3.class 1KB
Student.class 1KB
DateTimeFormatterDemo1.class 1KB
CollectionDemo2.class 1KB
myThread.class 1KB
test.class 1KB
demo1.class 1KB
Actor.class 1KB
ClientDemo.class 1KB
SeverDemo.class 1KB
MyRunnable.class 1KB
demo2.class 1KB
共 1043 条
- 1
- 2
- 3
- 4
- 5
- 6
- 11
资源评论
猰貐的新时代
- 粉丝: 1w+
- 资源: 2494
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功