继续上面(一),
Java 如何设计一款小游戏详细讲解(一)
步骤
步骤一
接下来我们主要完成GameJFrame,就是拼图游戏的界面及代码。
这里接下来完成菜单的设置,将主界面的代码放到一个方法中,像下面这样,接下来我们书写菜单的代码
这里我们初始化JMenuBar对象,JMenu对象,然后将JMenuItem条目放到JMenu对象中,然后将JMenu对象添加到JMenuBar中,然后将JMenuBar添加到页面中,代码如下。
private void initJMenuBar() {
JMenuBar jMenuBar = new JMenuBar(); //初始化
JMenu functionJMenu = new JMenu("功能"); //菜单中的功能
JMenu aboutJMenu = new JMenu("关于"); //菜单中的关于
JMenuItem replayItem = new JMenuItem("重新游戏");
JMenuItem reLoginItem = new JMenuItem("重新登录");
JMenuItem closeItem = new JMenuItem("关闭");
JMenuItem accoutItem = new JMenuItem("博客");
functionJMenu.add(replayItem); //把条目添加到菜单里面
functionJMenu.add(reLoginItem);
functionJMenu.add(closeItem);
aboutJMenu.add(accoutItem);
jMenuBar.add(functionJMenu); //将菜单中的东西,添加到菜单中
jMenuBar.add(aboutJMenu);
this.setJMenuBar(jMenuBar); //将菜单所有东西放到菜单,让可以显示出来
}
这里我们运行一下Main,查看一下
步骤二
主界面大概是这样,接下来我们要完成图片布置,这里新生成一个初始化图片的类,这里我们使用一个管理容器的JLabel类来管理图片ImageIcon类,然后添加到页面中
这里我们先将素材里面的图片直接复制进来,这里我们ctrl+c复制img文件,然后选中game2,ctrl+v直接粘贴,这里面有很多图片是黑马已经整理好的,注意自己可以将每一个的文件夹里面的16.jpg删除
这里我们查看一张图片的大小105x105,这里的大小是像素。
代码如下,这里我们使用的是相对路径,而不是绝对路径,因为我还要给别人使用,使用绝对路径,那么别人图片的位置不一定是这个位置,所以我们使用相对路径就可以了。
private void initImage() {
JLabel jlabel = new JLabel(new ImageIcon("image\\animal\\animal1\\1.jpg"));
jlabel.setBounds(0,0,105,105);
this.getContentPane().add(jlabel);
}
这里我们运行Main类,来查看GameJFrame现在的图形化。
这里看到是直接有图片的,然后我们还要生成14个图片进去,这里我们就可以使用for循环,这里看一下
private void initImage() {
int number = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
JLabel jlabel = new JLabel(new ImageIcon("image\\animal\\animal1\\"+number+".jpg"));
jlabel.setBounds(105*j,105*i,105,105);
this.getContentPane().add(jlabel);
number++;
}
}
}
步骤三
这里我们优化一下,因为肯定这个位置是不舒服的,而且还有背景图片我们是没有搞的,这里我们先设置背景图片。
private void initImage() {
int number = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
JLabel jlabel = new JLabel(new ImageIcon("image\\animal\\animal1\\"+number+".jpg"));
jlabel.setBounds(105*j+80,105*i+134,105,105);
jlabel.setBorder(new BevelBorder(BevelBorder.RAISED)); //设置边框
this.getContentPane().add(jlabel);
number++;
}
}
JLabel background = new JLabel(new ImageIcon("image\\background.png"));
background.setBounds(40,40,500,560);
this.getContentPane().add(background);
}
详细代码
Main.java,LoginJFram.java,RegisterFRrame.java不变,这里GameJFrame.java
package pulzzegame.ui;
import javax.swing.*;
import javax.swing.border.BevelBorder;
public class GameJFrame extends JFrame {
public GameJFrame(){
initJFame(); //初始化页面
initJMenuBar(); //菜单初始化
initImage(); //初始化图片
this.setVisible(true); //将界面显示出来
}
//初始化图片
private void initImage() {
int number = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
JLabel jlabel = new JLabel(new ImageIcon("image\\animal\\animal1\\"+number+".jpg"));
jlabel.setBounds(105*j+80,105*i+134,105,105);
jlabel.setBorder(new BevelBorder(BevelBorder.RAISED));
this.getContentPane().add(jlabel);
number++;
}
}
JLabel background = new JLabel(new ImageIcon("image\\background.png"));
background.setBounds(40,40,500,560);
this.getContentPane().add(background);
}
//初始化菜单
private void initJMenuBar() {
JMenuBar jMenuBar = new JMenuBar(); //初始化
JMenu functionJMenu = new JMenu("功能"); //菜单中的功能
JMenu aboutJMenu = new JMenu("关于"); //菜单中的关于
JMenuItem replayItem = new JMenuItem("重新游戏");
JMenuItem reLoginItem = new JMenuItem("重新登录");
JMenuItem closeItem = new JMenuItem("关闭");
JMenuItem accoutItem = new JMenuItem("博客");
functionJMenu.add(replayItem); //把条目添加到菜单里面
functionJMenu.add(reLoginItem);
functionJMenu.add(closeItem);
aboutJMenu.add(accoutItem);
jMenuBar.add(functionJMenu); //将菜单中的东西,添加到菜单中
jMenuBar.add(aboutJMenu);
this.setJMenuBar(jMenuBar); //将菜单所有东西放到菜单,让可以显示出来
}
//初始化主界面
private void initJFame() {
this.setTitle("拼图 v1.0"); //设置标题
this.setAlwaysOnTop(true); //设置置顶
this.setLocationRelativeTo(null); //设置居中
this.setDefaultCloseOperation(3); //设置关闭后,也停止运行
this.setSize(600,680); //设置页面宽和高
this.setLayout(null); //取消默认的居中
}
}