文章目录
效果图如图所示:
1 搭建游戏主界面
知识点:
- JFrame 最外层窗体,菜单图片文字添加到JFrame当中的
- JMenuBar 菜单栏,菜单上可以添加很多选项,如功能、关于,并且每个选项下面有很多条目进行选择
- JLabel 展示图片,设置图片的位置和大小
1.1 用JFrame类来创建窗体 (知识点继承)
JFrame类是Java提供的,我们无法改动其中的代码,如果想要在原有的基础上添加额外的功能,可以使用继承
并在构造方法中初始化界面
import javax.swing.*;
public class MyJFrame extends JFrame {
public MyJFrame() {
//把当前窗体的宽高进行了设置
this.setSize(514, 595);
//把当前窗体的标题进行了设置
this.setTitle("石头迷阵单机版 V1.0");
//把当前窗体的关闭模式进行了设置
this.setDefaultCloseOperation(3);
//让当前窗体可以写到屏幕的正中央
this.setLocationRelativeTo(null);
//让当前窗体可以置顶
this.setAlwaysOnTop(true);
//让当前窗体可以展示出来
this.setVisible(true);
}
}
public class App3 {
public static void main(String[] args) {
//1.启动主界面
MyJFrame jFrame = new MyJFrame();
}
}
1.2 菜单制作JMenuBar
private void initMenu() {
//1.创建一个菜单对象
JMenuBar jMenuBar = new JMenuBar();
//2.设置菜单的宽高
jMenuBar.setSize(514,20);
//3.创建一个选项
JMenu jMenu1 = new JMenu("功能");
JMenu jMenu2 = new JMenu("关于");
//4.创建两个条目
jMenuItem1 = new JMenuItem("重新游戏");
jMenuItem2 = new JMenuItem("联系我们");
//5.把条目添加到选项当中
jMenu1.add(jMenuItem1);
jMenu2.add(jMenuItem2);
//6.把选项添加到菜单当中
jMenuBar.add(jMenu1);
jMenuBar.add(jMenu2);
//7.把菜单添加到最外层的窗体当中
this.setJMenuBar(jMenuBar);
}
1.3 添加图片
//添加一张图片
ImageIcon imageIcon = new ImageIcon("image\\1.png");
//创建一个JLabel对象,利用JLabel对象来设置图片的位置和宽高
JLabel jLabel = new JLabel(imageIcon);
//设置jLabel的位置和宽高
//第一个参数,第二个参数表示位置
//第三个参数,第四个参数表示宽高
jLabel.setBounds(0,0,100,100);
//把JLabel添加到整个窗体当中
this.add(jLabel);
通过构建二维数组,加入4*4的图片到界面中
方法思想:
- 构造容量为4*4的一维数组,并打乱
- 构造4*4的二维数组,通过乱序的一维数组进行初始化,形成随机的二维数组
- 最后通过图片下标加入到窗体中
1.4 代码
至此一个完整的界面绘制成功,但是还未添加功能
import javax.swing.*;
import java.util.Random;
public class MyJFrame extends JFrame {
//定义一个二维数组方便管理数据
private int[][] data = new int[4][4];
public MyJFrame() {
//添加窗体
initFrame();
//添加菜单
initMenu();
//添加图片
initImage();
//让当前窗体可以展示出来
this.setVisible(true);
}
private void initImage() {
//随机二位数组data取得随机的imgIndex
initData();
//创建随机的4*4图片
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[i].length; j++) {
int imgIndex = data[i][j];
//第0号图片不放,放15张图片
if (imgIndex != 0) {
ImageIcon imageIcon = new ImageIcon("image\\"+imgIndex+".png");
JLabel jLabel = new JLabel(imageIcon);
jLabel.setBounds(j*100+50,i*100+90,100,100);
this.add(jLabel);
}
}
}
//添加背景图片
ImageIcon background = new ImageIcon("image\\background.png");
JLabel backgroundJLabel = new JLabel(background);
backgroundJLabel.setBounds(26,30,450,484);
this.add(backgroundJLabel);
}
/**
* 用随机的二维数组代表图片下标,从而生成随机的4*4的图片
* 先构造随机的4*4的一维数组,然后将每一个随机的数赋值到二维数组中
*/
private void initData() {
int[] tmp = {
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//打乱tmp一位数组,通过随机下标,使之成为一维随机数组
for (int i = 0; i < tmp.length; i++) {
//2.获取数组中的一个随机索引
Random r =