日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java制作《石头迷阵》游戏。

發布時間:2023/12/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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);
}

//窗體菜單欄設置
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() {

//刪除原先的圖片
this.getContentPane().removeAll();

// 繪制圖片之前判斷是否勝利
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);
// 將整個界面重新繪制
this.getContentPane().repaint();

}

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));

// 把圖片放到彈窗中
jDialog.add(jLabel);
// 設置彈窗大小
jDialog.setSize(200,150);
// 要把彈窗置頂
jDialog.setAlwaysOnTop(true);
// 居中顯示
jDialog.setLocationRelativeTo(null);
jDialog.setVisible(true);
}
}

@Override
public void keyTyped(KeyEvent e) {
return;
}

public static void main(String[] args) {
MyFrame myFrame = new MyFrame();
System.getProperty(“sun.arch.data.model”);

}
}

以上就《石頭迷陣》的源碼啦,菜雞博主希望大家可以點點贊。大家有什么意見跟建議可以在下方留言。

總結

以上是生活随笔為你收集整理的java制作《石头迷阵》游戏。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。