自學Java-AI結合GUI開發一個石頭迷陣的游戲

自學Java-AI結合GUI開發一個石頭迷陣的游戲

  • 準備環節
  • 1、創建石頭迷陣的界面
  • 2、打亂順序
  • 3、控制上下左右移動
  • 4、判斷是否通關
  • 5、統計移動步驟,重啟游戲
  • 6、拓展問題

準備環節

在這里插入圖片描述
技術:
1、GUI界面編程
2、二維數組
3、程序流程控制
4、面向對象編程

? \bullet ?創建一個模塊用于開發石頭迷陣游戲,模塊名稱取名為:stone-maze
? \bullet ?導入項目需要的資源包到src目錄下:主要是一些圖片文件,在image文件夾下
? \bullet ?創建項目包:com.itheima.

1、創建石頭迷陣的界面

? \bullet ?定義主界面類,MainFrame繼承JFrame
? \bullet ?初始化窗口大小
? \bullet ?初始化界面圖片
? \bullet ?初始化界面菜單:系統退出,重啟游戲

完成代碼如下:

package com.itheima;import javax.swing.*;
// 自定義窗口類,創建對象,展示一個主窗口。
public class MainFrame extends JFrame {// 設置圖片位置private static final String imagePath = "stone-maze/src/image/";// 準備一個數組,用戶存儲數字色塊的行列位置:4行4列private int[][] imageData = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12},{13, 14, 15, 0}};public MainFrame() {// 1、調用一個初始化方法:初始化窗口大小等信息。initFrame();// 2、初始化界面:展示數字色塊。initImage();// 3、初始化系統菜單:點擊彈出菜單信息是系統退出,重啟游戲。initMenu();// 設置窗口可見this.setVisible(true);}private void initMenu() {JMenuBar menuBar = new JMenuBar(); // 創建一個菜單欄JMenu menu = new JMenu("系統");JMenuItem exitJi = new JMenuItem("退出");menu.add(exitJi); // 添加子菜單exitJi.addActionListener(e -> { // 添加點擊事件// 退出游戲dispose();});JMenuItem restartJi = new JMenuItem("重啟");menu.add(restartJi);restartJi.addActionListener(e -> { // 添加點擊事件// 重啟游戲});menuBar.add(menu); // 添加到菜單欄中this.setJMenuBar(menuBar);}private void initImage() {// 1、展示一個行列矩陣的圖片色塊依次鋪滿窗口(4 * 4)for (int i = 0; i < imageData.length; i++) { // 遍歷行for (int j = 0; j < imageData[i].length; j++) { // 遍歷列// 拿到圖片的名稱String imageName = imageData[i][j] + ".png";// 2、創建一個JLabel對象,設置圖片給他展示。JLabel label = new JLabel();// 3、設置圖片到label對象中去。label.setIcon(new ImageIcon(imagePath + imageName));// 4、設置數字色塊的位置label.setBounds(25 + j * 100, 60 + i * 100, 100, 100);// 5、把這個圖片展示到窗口中this.add(label);}}// 設置窗口的背景圖片JLabel background = new JLabel(new ImageIcon(imagePath + "background.png"));background.setBounds(0, 0, 450, 484);this.add(background);}private void initFrame() {// 設置窗口標題this.setTitle("石子迷宮 V 1.0");// 設置窗口大小this.setSize(465, 575);// 設置窗口關閉方式this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 設置窗口的居中顯示this.setLocationRelativeTo(null);// 設置布局方式為絕對位置定位this.setLayout(null);}
}

2、打亂順序

? \bullet ?打亂界面的圖片順序,讓游戲具備可玩性:使用方法如下

打亂二維數組中的元素順序:initRandomArray();

完成代碼如下:

private void initRandomArray() {// 1、打亂數組for (int i = 0; i < imageData.length; i++) { // 遍歷行for (int j = 0; j < imageData[i].length; j++) { // 遍歷列// 隨機兩個行列位置,讓這兩個位置交換。int i1 = (int)(Math.random() * imageData.length);int j1 = (int)(Math.random() * imageData.length);int i2 = (int)(Math.random() * imageData.length);int j2 = (int)(Math.random() * imageData.length);int temp = imageData[i1][j1];imageData[i1][j1] = imageData[i2][j2];imageData[i2][j2] = temp;}}}

3、控制上下左右移動

? \bullet ?給窗口綁定上下左右按鍵事件

? \bullet ?控制位置的交換
–定位當前空白色塊的位置。
–根據用戶點擊的方位確定交換哪個數據,到數組中交換。

? \bullet ?重新繪制主界面的內容
–讓主界面按照二維數組的最新內容刷新界面

public enum Direction {UP, DOWN, LEFT, RIGHT;
}

完成代碼如下:

package com.itheima;import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;// 自定義窗口類,創建對象,展示一個主窗口。
public class MainFrame extends JFrame {// 設置圖片位置private static final String imagePath = "stone-maze/src/image/";// 準備一個數組,用戶存儲數字色塊的行列位置:4行4列private int[][] imageData = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12},{13, 14, 15, 0}};// 定義兩個整數變量記錄當前空白色塊的位置。private int row; // 當前空白色塊的行位置private int col; // 當前空白色塊的列位置public MainFrame() {// 1、調用一個初始化方法:初始化窗口大小等信息。initFrame();// 4、打亂數組色塊的順序,再提示圖片initRandomArray();// 2、初始化界面:展示數字色塊。initImage();// 3、初始化系統菜單:點擊彈出菜單信息是系統退出,重啟游戲。initMenu();// 5、給當前窗口綁定上下左右按鍵事件。initKeyPressEvent();// 設置窗口可見this.setVisible(true);}private void initKeyPressEvent() {// 給當前窗口綁定上下左右按鍵事件。this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {// 判斷當前按鍵的編號int keyCode = e.getKeyCode();// 判斷按鍵編號,上下左右switch (keyCode) {case KeyEvent.VK_UP:switchAndMove(Direction.UP);// 用戶按下上鍵,把圖片上移。break;case KeyEvent.VK_DOWN:switchAndMove(Direction.DOWN);// 用戶按下下鍵,把圖片下移。break;case KeyEvent.VK_LEFT:switchAndMove(Direction.LEFT);// 用戶按下左鍵,把圖片左移。break;case KeyEvent.VK_RIGHT:switchAndMove(Direction.RIGHT);// 用戶按下右鍵,把圖片右移。break;}}});}// 控制數據交換和圖片移動private void switchAndMove(Direction r) {// 判斷圖片的方向,再控制圖片移動。switch (r) {case UP:// 上交換的條件是行必須 < 3,然后才開始交換。if (row < imageData.length - 1) {// 當前空白色塊位置:rol  col// 需要被交換的位置:row + 1  colint temp = imageData[row][col];imageData[row][col] = imageData[row + 1][col];imageData[row + 1][col] = temp;// 更新當前空白色塊的位置。row++;}break;case DOWN:if (row > 0) {// 當前空白色塊位置:row  col// 需要被交換的位置:row - 1  colint temp = imageData[row][col];imageData[row][col] = imageData[row - 1][col];imageData[row - 1][col] = temp;// 更新當前空白色塊的位置。row--;}break;case LEFT:// 左交換的條件是列必須 < 3,然后才開始交換。if (col < imageData.length - 1) {// 當前空白色塊位置:row  col// 需要被交換的位置:row  col + 1int temp = imageData[row][col];imageData[row][col] = imageData[row][col + 1];imageData[row][col + 1] = temp;// 更新當前空白色塊的位置。col++;}break;case RIGHT:if (col > 0) {int temp = imageData[row][col];imageData[row][col] = imageData[row][col - 1];imageData[row][col - 1] = temp;col--;}break;}// 重新刷新界面!!!initImage();}private void initRandomArray() {// 1、打亂數組for (int i = 0; i < imageData.length; i++) { // 遍歷行for (int j = 0; j < imageData[i].length; j++) { // 遍歷列// 隨機兩個行列位置,讓這兩個位置交換。int i1 = (int)(Math.random() * imageData.length);int j1 = (int)(Math.random() * imageData.length);int i2 = (int)(Math.random() * imageData.length);int j2 = (int)(Math.random() * imageData.length);int temp = imageData[i1][j1];imageData[i1][j1] = imageData[i2][j2];imageData[i2][j2] = temp;}}// 定義空白色塊的位置。// 去二維數組中遍歷每個數據,只要發現這個數據等于0,這個位置就是當前空白色塊的位置。OUT:for (int i = 0; i < imageData.length; i++) { // 遍歷行for (int j = 0; j < imageData[i].length; j++) { // 遍歷列if (imageData[i][j] == 0) {// 定位空白色塊的位置row = i;col = j;break OUT; // 跳出兩個for循環}}}}private void initMenu() {JMenuBar menuBar = new JMenuBar(); // 創建一個菜單欄JMenu menu = new JMenu("系統");JMenuItem exitJi = new JMenuItem("退出");menu.add(exitJi); // 添加子菜單exitJi.addActionListener(e -> { // 添加點擊事件// 退出游戲dispose();});JMenuItem restartJi = new JMenuItem("重啟");menu.add(restartJi);restartJi.addActionListener(e -> { // 添加點擊事件// 重啟游戲});menuBar.add(menu); // 添加到菜單欄中this.setJMenuBar(menuBar);}private void initImage() {// 先清空窗口上的全部圖層this.getContentPane().removeAll();// 1、展示一個行列矩陣的圖片色塊依次鋪滿窗口(4 * 4)for (int i = 0; i < imageData.length; i++) { // 遍歷行for (int j = 0; j < imageData[i].length; j++) { // 遍歷列// 拿到圖片的名稱String imageName = imageData[i][j] + ".png";// 2、創建一個JLabel對象,設置圖片給他展示。JLabel label = new JLabel();// 3、設置圖片到label對象中去。label.setIcon(new ImageIcon(imagePath + imageName));// 4、設置數字色塊的位置label.setBounds(20 + j * 100, 60 + i * 100, 100, 100);// 5、把這個圖片展示到窗口中this.add(label);}}// 設置窗口的背景圖片JLabel background = new JLabel(new ImageIcon(imagePath + "background.png"));background.setBounds(0, 0, 450, 484);this.add(background);// 刷新新圖層,重新繪制窗口this.repaint();}private void initFrame() {// 設置窗口標題this.setTitle("石子迷宮 V 1.0");// 設置窗口大小this.setSize(463, 543);// 設置窗口關閉方式this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 設置窗口的居中顯示this.setLocationRelativeTo(null);// 設置布局方式為絕對位置定位this.setLayout(null);}
}

4、判斷是否通關

? \bullet ?用戶每操作一步,需要立即判斷是否已經通關,如果通過,需要顯示勝利的標記。
在這里插入圖片描述

完成代碼如下:

package com.itheima;import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;// 自定義窗口類,創建對象,展示一個主窗口。
public class MainFrame extends JFrame {// 設置圖片位置private static final String imagePath = "stone-maze/src/image/";// 準備一個數組,用戶存儲數字色塊的行列位置:4行4列private int[][] imageData = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12},{13, 14, 15, 0}};// 定義一個二維數組,用于存儲最終游戲成功的數據順序private int[][] winData = new int[][] {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12},{13, 14, 15, 0}};// 定義兩個整數變量記錄當前空白色塊的位置。private int row; // 當前空白色塊的行位置private int col; // 當前空白色塊的列位置public MainFrame() {// 1、調用一個初始化方法:初始化窗口大小等信息。initFrame();// 4、打亂數組色塊的順序,再提示圖片initRandomArray();// 2、初始化界面:展示數字色塊。initImage();// 3、初始化系統菜單:點擊彈出菜單信息是系統退出,重啟游戲。initMenu();// 5、給當前窗口綁定上下左右按鍵事件。initKeyPressEvent();// 設置窗口可見this.setVisible(true);}private void initKeyPressEvent() {// 給當前窗口綁定上下左右按鍵事件。this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {// 判斷當前按鍵的編號int keyCode = e.getKeyCode();// 判斷按鍵編號,上下左右switch (keyCode) {case KeyEvent.VK_UP:switchAndMove(Direction.UP);// 用戶按下上鍵,把圖片上移。break;case KeyEvent.VK_DOWN:switchAndMove(Direction.DOWN);// 用戶按下下鍵,把圖片下移。break;case KeyEvent.VK_LEFT:switchAndMove(Direction.LEFT);// 用戶按下左鍵,把圖片左移。break;case KeyEvent.VK_RIGHT:switchAndMove(Direction.RIGHT);// 用戶按下右鍵,把圖片右移。break;}}});}// 控制數據交換和圖片移動private void switchAndMove(Direction r) {// 判斷圖片的方向,再控制圖片移動。switch (r) {case UP:// 上交換的條件是行必須 < 3,然后才開始交換。if (row < imageData.length - 1) {// 當前空白色塊位置:rol  col// 需要被交換的位置:row + 1  colint temp = imageData[row][col];imageData[row][col] = imageData[row + 1][col];imageData[row + 1][col] = temp;// 更新當前空白色塊的位置。row++;}break;case DOWN:if (row > 0) {// 當前空白色塊位置:row  col// 需要被交換的位置:row - 1  colint temp = imageData[row][col];imageData[row][col] = imageData[row - 1][col];imageData[row - 1][col] = temp;// 更新當前空白色塊的位置。row--;}break;case LEFT:// 左交換的條件是列必須 < 3,然后才開始交換。if (col < imageData.length - 1) {// 當前空白色塊位置:row  col// 需要被交換的位置:row  col + 1int temp = imageData[row][col];imageData[row][col] = imageData[row][col + 1];imageData[row][col + 1] = temp;// 更新當前空白色塊的位置。col++;}break;case RIGHT:if (col > 0) {int temp = imageData[row][col];imageData[row][col] = imageData[row][col - 1];imageData[row][col - 1] = temp;col--;}break;}// 重新刷新界面!!!initImage();}private void initRandomArray() {// 1、打亂數組for (int i = 0; i < imageData.length; i++) { // 遍歷行for (int j = 0; j < imageData[i].length; j++) { // 遍歷列// 隨機兩個行列位置,讓這兩個位置交換。int i1 = (int)(Math.random() * imageData.length);int j1 = (int)(Math.random() * imageData.length);int i2 = (int)(Math.random() * imageData.length);int j2 = (int)(Math.random() * imageData.length);int temp = imageData[i1][j1];imageData[i1][j1] = imageData[i2][j2];imageData[i2][j2] = temp;}}// 定義空白色塊的位置。// 去二維數組中遍歷每個數據,只要發現這個數據等于0,這個位置就是當前空白色塊的位置。OUT:for (int i = 0; i < imageData.length; i++) { // 遍歷行for (int j = 0; j < imageData[i].length; j++) { // 遍歷列if (imageData[i][j] == 0) {// 定位空白色塊的位置row = i;col = j;break OUT; // 跳出兩個for循環}}}}private void initMenu() {JMenuBar menuBar = new JMenuBar(); // 創建一個菜單欄JMenu menu = new JMenu("系統");JMenuItem exitJi = new JMenuItem("退出");menu.add(exitJi); // 添加子菜單exitJi.addActionListener(e -> { // 添加點擊事件// 退出游戲dispose();});JMenuItem restartJi = new JMenuItem("重啟");menu.add(restartJi);restartJi.addActionListener(e -> { // 添加點擊事件// 重啟游戲});menuBar.add(menu); // 添加到菜單欄中this.setJMenuBar(menuBar);}private void initImage() {// 先清空窗口上的全部圖層this.getContentPane().removeAll();// 判斷是否贏了if (isWin()) {// 展示勝利的圖片JLabel label = new JLabel(new ImageIcon(imagePath + "win.png"));label.setBounds(124, 230, 266, 88);this.add(label);}// 1、展示一個行列矩陣的圖片色塊依次鋪滿窗口(4 * 4)for (int i = 0; i < imageData.length; i++) { // 遍歷行for (int j = 0; j < imageData[i].length; j++) { // 遍歷列// 拿到圖片的名稱String imageName = imageData[i][j] + ".png";// 2、創建一個JLabel對象,設置圖片給他展示。JLabel label = new JLabel();// 3、設置圖片到label對象中去。label.setIcon(new ImageIcon(imagePath + imageName));// 4、設置數字色塊的位置label.setBounds(20 + j * 100, 60 + i * 100, 100, 100);// 5、把這個圖片展示到窗口中this.add(label);}}// 設置窗口的背景圖片JLabel background = new JLabel(new ImageIcon(imagePath + "background.png"));background.setBounds(0, 0, 450, 484);this.add(background);// 刷新新圖層,重新繪制窗口this.repaint();}private boolean isWin() {// 判斷是否贏了for (int i = 0; i < imageData.length; i++) { // 遍歷行for (int j = 0; j < imageData[i].length; j++) { // 遍歷列// 判斷當前遍歷到的數據是否和winData中的數據是否一致if (imageData[i][j] != winData[i][j]) {// 如果不一致,則返回falsereturn false;}}}// 如果一致,則返回true,則顯示勝利的圖片return true;}private void initFrame() {// 設置窗口標題this.setTitle("石子迷宮 V 1.0");// 設置窗口大小this.setSize(463, 543);// 設置窗口關閉方式this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 設置窗口的居中顯示this.setLocationRelativeTo(null);// 設置布局方式為絕對位置定位this.setLayout(null);}
}

5、統計移動步驟,重啟游戲

? \bullet ?每成功移動一步,都需要累加一次步數
? \bullet ?定義一個變量用于累加步數,并實時展示到界面上

6、拓展問題

? \bullet ?數字華容道的亂序操作,并不是可以隨意打亂的,必須滿足一定的算法去打亂順序,這樣才是有解的,才能讓玩家恢復到有序。有沒有簡單的算法???在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70584.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70584.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70584.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言的內存分配:malloc和free

使用庫函數分配和管理內存。在運行時&#xff0c;分配更多的內存給程序使用&#xff0c;主要工具是malloc函數&#xff0c;這個函數接受一個參數&#xff1a;所需要要的內存字節數。malloc函數會找到合適的空閑內存塊&#xff0c;這樣的內存是匿名的&#xff0c;即malloc分配了…

本地安裝 Grafana Loki

本地安裝 Grafana Loki 一、 安裝 Loki1. 下載 Loki2. 創建 Loki 配置文件3. 創建 Loki 服務 二、安裝 Promtail1. 下載 Promtail2. 創建 Promtail 配置文件3. 創建 Promtail 服務 三、 安裝 Grafana四、啟動所有服務五、添加loki 數據源1. 添加儀表板2. 日志查詢面板 json 參考…

趣味數學300題1981版-十五個正方形

分析&#xff1a;移動兩根變成11個正方形很簡單&#xff1a; 移動4根變成15個正方形&#xff0c;分析&#xff1a; 一個田字格包含5個正方形&#xff0c;若要15個正方形需要3個田字格&#xff0c;如果3個田字格完全不重合&#xff0c;需要6*318根火柴。如果合并正方形的邊&…

IDEA——Mac版快捷鍵

目錄 按鍵含義常用組合代碼生成快捷鍵&#xff1a;代碼追蹤快捷鍵&#xff1a;高效編輯快捷鍵&#xff1a;代碼重構快捷鍵&#xff1a;工具類快捷鍵&#xff1a;常規文件操作快捷鍵&#xff1a; 按鍵含義 ? command Command鍵&#xff08;?&#xff09;相當于Windows中的Con…

基于Spring Boot的興順物流管理系統設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導&#xff0c;歡迎高校老師/同行前輩交流合作?。 技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;…

Prompt:創造性的系統分析者

分享的提示詞&#xff1a; 你是一個創造性的系統分析者&#xff0c;作為咨詢師&#xff0c;你具有以下特質&#xff1a; 基礎能力&#xff1a; 深入理解我的系統性模式 識別模式間的隱藏聯系 發現出人意料的關聯 提供令人驚訝的洞見 工作方式&#xff1a; 在每次回應中至少…

Andorid 學習 Compose UI(1):Box

今天學習和實驗一下Android 的compose UI&#xff0c;寫一些很小的Demo實驗。下面和css 布局有點相似性。 如Box 看起來像html 當中的 div &#xff0c;compose UI 提供Modifier 很多設置。你會發現Text,Box,Row,Image等組件 都有這個屬性。我們處理任務包括對齊布局&#xff0…

Selenium實戰案例1:論文pdf自動下載

在上一篇文章中&#xff0c;我們介紹了Selenium的基礎用法和一些常見技巧。今天&#xff0c;我們將通過中國科學&#xff1a;信息科學網站內當前目錄論文下載這一實戰案例來進一步展示Selenium的web自動化流程。 目錄 中國科學&#xff1a;信息科學當期目錄論文下載 1.網頁內…

《炒股養家心法.pdf》 kimi總結

《炒股養家心法.pdf》這篇文章詳細闡述了一位超級游資炒股養家的心得與技巧&#xff0c;展示了其從40萬到10億的股市傳奇。以下是文章中炒股技巧和心得的詳細總結&#xff1a; 1.核心理念 市場情緒的理解&#xff1a;炒股養家強調&#xff0c;股市的本質是群體博弈&#xff0c…

2025年華為手機解鎖BL的方法

注&#xff1a;本文是我用老機型測試的&#xff0c;新機型可能不適用 背景 華為官方已經在2018年關閉了申請BL解鎖碼的通道&#xff0c;所以華為手機已經無法通過官方獲取解鎖碼。最近翻出了一部家里的老手機華為暢玩5X&#xff0c;想著能不能刷個系統玩玩&#xff0c;但是卡…

Perfectly Clear WorkBench深度解析:專業圖像處理軟件的高效應用

在圖像處理領域,面對照片曝光不足、色彩失真、細節模糊等常見問題,一款專業且高效的圖像處理軟件顯得尤為重要。今天,本文將為大家詳細介紹Perfectly Clear WorkBench這款圖像處理軟件,幫助大家更好地了解并應用其功能,提升照片質量。 一、智能圖像校正,解決常見問題 Pe…

使用 DistilBERT 進行資源高效的自然語言處理

DistilBERT 是 BERT 的一個更小、更快的版本&#xff0c;在減少資源消耗的同時仍能保持良好性能。對于計算能力和內存受限的環境來說&#xff0c;它是一個理想的選擇。 在自然語言處理&#xff08;NLP&#xff09;中&#xff0c;像 BERT 這樣的模型提供了高精度和出色的性能。然…

【后端基礎】布隆過濾器原理

文章目錄 一、Bloom Filter&#xff08;布隆過濾器&#xff09;概述1. Bloom Filter 的特點2. Bloom Filter 的工作原理 二、示例1. 添加與查詢2. 假陽性 三、Bloom Filter 的操作1、假陽性概率2、空間效率3、哈希函數的選擇 四、應用 Bloom Filter 是一種非常高效的概率型數據…

Pytorch實現論文之三元DCGAN生成RGB圖像用于紅外圖像著色生成

簡介 簡介:采用了三次DCGAN單獨生成單通道圖像之后進行組成RGB圖像放入鑒別器中檢測,并在鑒別器和生成器的損失訓練中采用梯度方法來提升或者降低權重。該方法將用于獲得紅外圖像著色的生成。 論文題目:Infrared Image Colorization based on a Triplet DCGAN Architectur…

Qt中QDockWidget的使用方式

在PyQt5中使用QDockWidget可以創建靈活的停靠窗口&#xff0c;增強應用程序的多功能性。以下是詳細的步驟和示例代碼&#xff1a; 基本步驟 導入模塊&#xff1a;確保導入必要的PyQt5模塊。創建主窗口&#xff1a;繼承QMainWindow并初始化界面。設置中心部件&#xff1a;例如…

docker獨立部署milvus向量數據庫

milvus鏡像&#xff1a;國外封鎖&#xff0c;國內源也不好用。基本上所有源都不能用 首先想到阿里云服務&#xff0c;但是阿里云國外服務器便宜的300~400呢。 基于成本考慮終于裝上心心念念的milvus(*^▽^*) 安裝 Milvus 安裝 Milvus 獨立版 wget https://raw.githubuserco…

【SpringBoot整合系列】HttpClient遠程訪問的示例

前言 使用Apache的HttpClient庫&#xff0c;添加Apache HttpClient的依賴。工具類的封裝。通常&#xff0c;工具類需要處理GET、POST請求&#xff0c;可能還有其他方法如PUT、DELETE。需要設計一個工具類&#xff0c;提供靜態方法&#xff0c;可以發送請求&#xff0c;并處理響…

Git操作整體流程

文章目錄 1.Git創建個人倉庫2、Git全局配置3、Git本地管理4. Git本地管理常用命令匯總5、使用Git命令將項目提交到遠程碼云管理6.使用IDEA進行管理7、Idea里面的終端8、關于提交總結 1.Git創建個人倉庫 打開https://gitee.com/&#xff0c;登錄個人賬號&#xff0c;右上角加號…

MySQL MHA 部署全攻略:從零搭建高可用數據庫架構

文章目錄 1.MHA介紹2.MHA組件介紹3.集群規劃4.服務器初始化5.MySQL集群部署5.1 安裝MySQL集群5.2 配置一主兩從5.3 測試MySQL主從5.4 賦予MHA用戶連接權限 6.安裝MHA環境6.1 安裝MHA Node6.2 安裝MHA Manager 7.配置MHA環境8.MySQL MHA高可用集群測試8.1 通過VIP連接MySQL8.2模…

如何查看java的字節碼文件?javap?能用IDEA嗎?

編譯指令&#xff1a; javac YourProject.java 查看字節碼文件的指令&#xff1a; javap -c -l YourProject.class 不添加-c指令就不會顯示字節碼文件&#xff1a; 不添加 -l 就不會顯示源代碼和字節碼文件的對應關系&#xff1a; 添加-l之后多出來這些&#xff1a; IDEA不太…