java制作《石头迷阵》游戏。
java制作《⽯头迷阵》游戏。java如何制作⼩时候玩过的经典游戏《⽯头迷阵》,打乱数字按⽅向键进⾏移动,最终排好序。
下⾯⽤到的图⽚我放在下⾯了,⼤家可以先去⾃⾏下载。
提取码:204n
话不多说,上源码
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class MyFrame extends JFrame implements KeyListener{
//定义⼆维数组
int[][] datas = new int[4][4];
// 定义⼀个⼆维胜利数组
int[][] victory = { {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0}};
// 定义两个变量记录空⽩的位置0
int x0 = 0;
int y0 = 0;
// 定义⼀个计步变量
int step = 0;
public MyFrame() {
/
/ 初始化界⾯
initFrame();
//初始化菜单
initMenu();
// 初始化数据
initDate();
// 初始化图⽚
initImage();
//设置窗体可见
this.setVisible(true);
}
/
/窗体基本规格设置
public void initFrame(){
//设置窗体⼤⼩
this.setSize(514, 595);
//设置窗体标题
this.setTitle(“⽯头迷阵(海龟制作) v1.0”);
//设置窗体关闭程序也关闭
this.setDefaultCloseOperation(3);
//设置窗体位置在屏幕中间
this.setLocationRelativeTo(null);
this.setAlwaysOnTop(true);
/
/添加监听键盘
this.addKeyListener(this);
//设置取消窗体内居中放置⽅式
this.setLayout(null);
农村贷款}
//窗体菜单栏设置
清明节高速公路免费吗?2022
public void initMenu() {
//创建菜单栏对象
JMenuBar jMenuBar = new JMenuBar();
//设置菜单栏的宽跟⾼
jMenuBar.setSize(514, 20);
/
/设置菜单
JMenu jMenu1 = new JMenu(“功能”);
JMenu jMenu2 = new JMenu(“关于”);
//设置⼦菜单
JMenuItem jMenuItem1 = new JMenuItem(“重新开始”); JMenuItem jMenuItem2 = new JMenuItem(“联系作者”); //设置菜单添加⼦菜单
jMenu1.add(jMenuItem1);
jMenu2.add(jMenuItem2);
//设置菜单栏添加菜单
jMenuBar.add(jMenu1);
jMenuBar.add(jMenu2);
//设置菜单栏添加到最外层的窗体中
this.setJMenuBar(jMenuBar);
// 重新开始
jMenuItem1.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
// 调⽤打乱数据的⽅法
initDate();职前培训
// 计步器必须清0
step =0;
// 调⽤添加图⽚的⽅法
initImage();
}
});
//
jMenuItem2.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
// 创建⼀个弹窗对象
JDialog jDialog = new JDialog();
ImageIcon iconDD = new ImageIcon(“image\dd.png”); JLabel jLabel = new JLabel(iconDD);
jLabel.setBounds(0, 0, 398, 344);
// 把图⽚放到弹窗中
jDialog.add(jLabel);
// 设置弹窗⼤⼩
jDialog.setSize(344,344);
// 要把弹窗置顶
jDialog.setAlwaysOnTop(true);
// 居中显⽰
jDialog.setLocationRelativeTo(null);
jDialog.setVisible(true);
}
});
}
//游戏数据逻辑
public void initDate() {
/
/ 创建⼀个数组
int[] temp = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
// 遍历数组
for(int i =0;i<temp.length;i++) {
// 打乱数组中的顺序
Random r = new Random();
int index = r.nextInt(temp.length);
// 随机的索引与遍历到的数字交换
int n = temp[i];
temp[i] = temp[index];
temp[index] = n;
描写虫子的作文}
// 把打乱之后16个元素添加到⼆维数组中
for(int i =0;i<temp.length;i++) {
datas[i / 4][i % 4] = temp[i];
if(temp[i]==0) {
x0 = i / 4;
y0 = i / 4;
}
}
}
public void initImage() {
/
/删除原先的图⽚
// 绘制图⽚之前判断是否胜利
if(isVictory()) {
ImageIcon icon = new ImageIcon(“image\win.png”);
JLabel iconJLabel = new JLabel(icon);
iconJLabel.setBounds(514/2-266/2, 230,266, 88);
this.add(iconJLabel);
}
//添加计步器
JLabel StepJLabel = new JLabel(“步数:” + step);
StepJLabel.setFont(new Font(“宋体”,Font.BOLD,20));
StepJLabel.setBounds(50, 20, 100, 20);
this.add(StepJLabel);
//窗体内图⽚设置
for(int i = 0; i <datas.length; i++){
for(int j = 0 ; j < datas[i].length; j++) {
int data = datas[i][j];
if(data != 0) {
ImageIcon icon = new ImageIcon(“image\”+data+".png");
JLabel jLabel = new JLabel(icon);
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);
// 将整个界⾯重新绘制
}
public boolean isVictory() {
// 判断两个数组是否相等 datas,victory
for(int i = 0; i <datas.length; i++){
for(int j = 0 ; j < datas[i].length; j++) {
if (datas[i][j] != victory[i][j]) {
// 只要⼀个不相等就返回false
return false;
}
}
}
return true;
}
/
/按下
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println(“按下”);
}
//松开时
@Override
public void keyReleased(KeyEvent e) {
// 获取按键的数字
int keyCode = e.getKeyCode();
move(keyCode);
//重新绘制图⽚
initImage();
}
public void move(int keyCode) {
//左(空格向左边移动,图⽚向右移动)
if (keyCode == 37) {
datas[x0][y0] = datas[x0][y0 + 1];
datas[x0][y0 + 1] = 0;
y0++;
step++;
} //上
else if (keyCode == 38) {
datas[x0][y0] = datas[x0 + 1][y0];
教师节写给老师的话
datas[x0 + 1][y0] = 0;
x0++;
step++;
}//右
else if (keyCode == 39) {
datas[x0][y0] = datas[x0][y0 - 1];
datas[x0][y0 - 1]= 0;
y0–;
step++;
}// 下
else if (keyCode == 40) {
通信工程就业datas[x0][y0] = datas[x0 - 1][y0];
datas[x0 - 1][y0]=0;
x0–;
step++;
}
// 作弊码
else if (keyCode == 87) {
datas = new int[][]{ {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,0}}; }
else {
JDialog jDialog = new JDialog();
JLabel jLabel = new JLabel(“错误!!只能上下左右”);
jLabel.setFont(new Font(“宋体”,Font.BOLD,15));

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。