基于Java的⽯头迷阵⼩游戏的设计与实现
⽂章⽬录
效果图如图所⽰:
1 搭建游戏主界⾯
知识点:
1. JFrame 最外层窗体菜单图⽚⽂字添加到JFrame当中的
2. JMenuBar 菜单栏,菜单上可以添加很多选项,如功能、关于,并且每个选项下⾯有很多条⽬进⾏选择
3. 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的图⽚到界⾯中
⽅法思想:
1. 构造容量为4*4的⼀维数组,并打乱
2. 构造4*4的⼆维数组,通过乱序的⼀维数组进⾏初始化,形成随机的⼆维数组
3. 最后通过图⽚下标加⼊到窗体中
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 =new Random();
int index = r.nextInt(tmp.length);
//3.将当前遍历到的数字,跟随机索引上的数字两者进⾏交换
int number = tmp[i];
tmp[i]= tmp[index];
tmp[index]= number;
}
//把打乱后的数据添加到⼆维数组当中,成为随机⼆维数组
for(int i =0; i < tmp.length; i++){
data[i/4][i%4]=tmp[i];
}
mine韩剧}
tfboys王俊凯女朋友吻照
private void initMenu(){
//1.创建⼀个菜单对象
JMenuBar jMenuBar =new JMenuBar();
//2.设置菜单的宽⾼
jMenuBar.setSize(514,20);
//3.创建⼀个选项
JMenu jMenu =new JMenu("功能");
//4.创建⼀个条⽬
JMenuItem jMenuItem =new JMenuItem("重新游戏");
//5.把条⽬添加到选项当中
jMenu.add(jMenuItem);
//6.把选项添加到菜单当中
jMenuBar.add(jMenu);
/
/7.把菜单添加到最外层的窗体当中
this.setJMenuBar(jMenuBar);
}
private void initFrame(){
//把当前窗体的宽⾼进⾏了设置
this.setSize(514,630);
//把当前窗体的标题进⾏了设置
this.setTitle("⽯头迷阵单机版 V1.0");
//把当前窗体的关闭模式进⾏了设置
this.setDefaultCloseOperation(3);
王宝强母亲逝世//让当前窗体可以写到屏幕的正中央
this.setLocationRelativeTo(null);
//让当前窗体可以置顶
this.setAlwaysOnTop(true);
//取消内部居中放置⽅式能灵活调整图⽚的位置
this.setLayout(null);
}
}
2 添加游戏功能
2.1 事件监听机制
对动作进⾏监听,可以监听⿏标和键盘的事件
接⼝:Java接⼝是⼀系列⽅法的声明,是⼀些⽅法特征的集合。
实现KeyListener接⼝(class MyJFrame extends JFrame implements KeyListener),监听键盘
1. 添加键盘监听 initFrame()中增加this.addKeyListener(this);
2. 实现键盘⾏为重写KeyListener接⼝的keyTyped、keyPressed、keyReleased⽅法
电脑为什么这么卡3. 每次触发键盘后重新绘制界⾯,实现类似移动的效果