【Java項目介紹和界面搭建】拼圖小游戲——打亂圖片順序

🍬 博主介紹👨?🎓 博主介紹:大家好,我是 hacker-routing ,很高興認識大家~
?主攻領域:【滲透領域】【應急響應】 【Java】 【VulnHub靶場復現】【面試分析】
🎉點贊?評論?收藏 == 養成習慣(一鍵三連)😋
🎉歡迎關注💗一起學習👍一起討論??一起進步📝文末有彩蛋
🙏作者水平有限,歡迎各位大佬指點,相互學習進步!

目錄

拼圖小游戲

練習

創建主界面1

代碼

創建主界面2

菜單制作

在游戲界面中添加菜單

代碼

添加圖片

游戲主界面添加組件

代碼

打亂圖片順序

練習


拼圖小游戲

練習

創建主界面1

  • 到idea中創建一個寬603像素,高680像素的游戲主界面
  • 到idea中創建一個寬488像素,高430像素的登錄界面
  • 到idea中創建一個寬488像素,高500像素的注冊界面

代碼

測試類:test ,在這個測試類中,我們直接把三個Java用戶圖形化界面生成了,但是這樣三個功能界面全部都寫在同一個main函數里面,對于我們以后的代碼修改很不方便。

所以我們這里進行修改下,分別寫成單獨的類中。

package ui;import javax.swing.*;public class test {public static void main(String[] args) {//JFrame是JavaBean類描述界面的//屬性 (寬 高)  行為//1.創建一個游戲的主界面JFrame gameJFrame = new JFrame();gameJFrame.setSize(603,680);//單位是像素gameJFrame.setVisible(true);//2.創建一個登陸界面JFrame loginJFrame = new JFrame();loginJFrame.setSize(488,430);loginJFrame.setVisible(true);//3.創建一個注冊界面JFrame registerJFrame = new JFrame();registerJFrame.setSize(488,500);registerJFrame.setVisible(true);}
}

注冊界面:RegisterJFrame

package ui;import javax.swing.*;public class RegisterJFrame extends JFrame {//跟相關注冊界面的代碼,都寫里面public RegisterJFrame(){this.setSize(488,500);this.setVisible(true);}}

登錄界面:loginJFrame

package ui;import javax.swing.*;public class loginJFrame extends JFrame {//loginJFrame 表示登錄界面//以后所以跟登錄相關的代碼,都寫里面public loginJFrame(){this.setSize(488,430);this.setVisible(true);}}

游戲界面:GameJFrame

package ui;import javax.swing.*;public class GameJFrame extends JFrame {//JFrame 界面,窗體//子類呢?也表示界面,窗體//規定:GameJFrame這個界面表示的就是游戲的主界面//以后跟游戲相關的所有邏輯都寫在這個類中public GameJFrame(){this.setSize(603,680);//單位是像素this.setVisible(true);}}

程序的啟動入口:App

我們可以把test這個類刪掉了,我們可以直接俄利用App這個程序的啟動入口,我們需要啟動哪個界面,我們直接創建誰就可以了。

import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;public class App {public static void main(String[] args) {//表示程序的啟動入口//如果我們想要開啟一個界面,就創建誰的對象就好了new RegisterJFrame();new GameJFrame();new loginJFrame();}
}

創建主界面2

簡單初始化界面

    public RegisterJFrame(){this.setSize(488,500);//設置界面的標題this.setTitle("拼圖 注冊");//設置界面置頂this.setAlwaysOnTop(true);//設置界面居中this.setLocationRelativeTo(null);//設置關閉模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//讓界面顯示出來this.setVisible(true);
菜單制作

在游戲界面中添加菜單

代碼

游戲界面:GameJFrame

package ui;import javax.swing.*;public class GameJFrame extends JFrame {//JFrame 界面,窗體//子類呢?也表示界面,窗體//規定:GameJFrame這個界面表示的就是游戲的主界面//以后跟游戲相關的所有邏輯都寫在這個類中public GameJFrame(){//初始化界面initJFrame();//初始化菜單initJMenuBar();//讓界面顯示出來,最后寫this.setVisible(true);}private void initJMenuBar() {//初始化菜單//創建整個的菜單對象JMenuBar jMenuBar = new JMenuBar();//創建菜單上面的兩個選項的對象  (功能  關于我們)JMenu fuctionJMenu = new JMenu("功能");JMenu aboutJMenu = new JMenu("關于我們");//創建選項下面的條目對象JMenuItem replayItem = new JMenuItem("重新游戲");JMenuItem reloginItem = new JMenuItem("重新登錄");JMenuItem closeItem = new JMenuItem("關閉游戲");JMenuItem accountItem = new JMenuItem("公眾號");//將每一個選項下的條目添加到對應的選項中fuctionJMenu.add(replayItem);fuctionJMenu.add(reloginItem);fuctionJMenu.add(closeItem);aboutJMenu.add(accountItem);//將菜單里面的兩個選項添加到菜單中jMenuBar.add(fuctionJMenu);jMenuBar.add(aboutJMenu);//給整個界面設置菜單this.setJMenuBar(jMenuBar);}private void initJFrame() {//設置界面的寬高this.setSize(603,680);//單位是像素//設置界面的標題this.setTitle("拼圖單機版 v1.0");//設置界面置頂this.setAlwaysOnTop(true);//設置界面居中this.setLocationRelativeTo(null);//設置關閉模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}}

測試類:App

import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;public class App {public static void main(String[] args) {//表示程序的啟動入口//如果我們想要開啟一個界面,就創建誰的對象就好了new GameJFrame();
//        new RegisterJFrame();
//        new loginJFrame();}
}

添加圖片

  • 默認添加圖片顯示在正中央

多寫一個初始化圖片

package ui;import javax.swing.*;public class GameJFrame extends JFrame {//JFrame 界面,窗體//子類呢?也表示界面,窗體//規定:GameJFrame這個界面表示的就是游戲的主界面//以后跟游戲相關的所有邏輯都寫在這個類中public GameJFrame(){//初始化界面initJFrame();//初始化菜單initJMenuBar();//初始化圖片initimage();//讓界面顯示出來,最后寫mthis.setVisible(true);}//---------------------------------- ---------------------//初始化圖片private void initimage() {//1.創建一個圖片imageicon的對象ImageIcon icon = new ImageIcon("E:\\tool\\IDEA-java\\java代碼\\routing\\image\\animal\\animal3\\3.jpg");//2.創建一個Jlabel的對象(管理容器)JLabel JLabel = new JLabel(icon);//3.把管理容器添加到界面中this.add(JLabel);}private void initJMenuBar() {//初始化菜單//創建整個的菜單對象JMenuBar jMenuBar = new JMenuBar();//創建菜單上面的兩個選項的對象  (功能  關于我們)JMenu fuctionJMenu = new JMenu("功能");JMenu aboutJMenu = new JMenu("關于我們");//創建選項下面的條目對象JMenuItem replayItem = new JMenuItem("重新游戲");JMenuItem reloginItem = new JMenuItem("重新登錄");JMenuItem closeItem = new JMenuItem("關閉游戲");JMenuItem accountItem = new JMenuItem("公眾號");//將每一個選項下的條目添加到對應的選項中fuctionJMenu.add(replayItem);fuctionJMenu.add(reloginItem);fuctionJMenu.add(closeItem);aboutJMenu.add(accountItem);//將菜單里面的兩個選項添加到菜單中jMenuBar.add(fuctionJMenu);jMenuBar.add(aboutJMenu);//給整個界面設置菜單this.setJMenuBar(jMenuBar);}private void initJFrame() {//設置界面的寬高this.setSize(603,680);//單位是像素//設置界面的標題this.setTitle("拼圖單機版 v1.0");//設置界面置頂this.setAlwaysOnTop(true);//設置界面居中this.setLocationRelativeTo(null);//設置關閉模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}}

app運行:

import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;public class App {public static void main(String[] args) {//表示程序的啟動入口//如果我們想要開啟一個界面,就創建誰的對象就好了new GameJFrame();
//        new RegisterJFrame();
//        new loginJFrame();}
}

游戲主界面添加組件

代碼
    //初始化圖片private void initimage() {//外循環  --把內循環重復執行了4次int number = 1;for (int i = 0; i < 4; i++) {//內循環  --表示在一行添加4張圖片for (int j = 0; j < 4; j++) {//1.創建一個Jlabel的對象(管理容器)JLabel JLabel = new JLabel(new ImageIcon("E:\\\\tool\\\\IDEA-java\\\\java代碼\\\\routing\\\\image\\\\animal\\\\animal3\\\\" + number +".jpg"));//2.指定圖片的位置JLabel.setBounds(105 * i,105 * j,105,105);//3.把管理容器添加到界面中this.getContentPane().add(JLabel);number++;}}

App 運行

import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;public class App {public static void main(String[] args) {//表示程序的啟動入口//如果我們想要開啟一個界面,就創建誰的對象就好了new GameJFrame();
//        new RegisterJFrame();
//        new loginJFrame();}
}

打亂圖片順序

練習

打亂一維數組中的數據

int[] tempArr={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

要求:打亂一維數組中的數據,并按照4個一組的方式添加到二維數組中。

解法一:

package test;import java.util.Random;public class test1 {public static void main(String[] args) {//1.定義一個一維數組int[] temArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//2.打亂數組中的順序//遍歷數組,得到每一個元素,拿著每一個元素跟隨機索引上的數據進行交換Random r = new Random();for (int i = 0; i < temArr.length; i++) {//獲取到隨機索引int index = r.nextInt(temArr.length);//拿著每一個元素跟隨機索引上的數據進行交換int temp = temArr[i];temArr[i] = temArr[index];temArr[index] = temp;}//3.遍歷數組for (int i = 0; i < temArr.length; i++) {System.out.print(temArr[i] + " ");}System.out.println();//4.創建一個二維數組int[][] data = new int[4][4];//5.給二維數組添加數據//解法一://遍歷一維數組tempArr得到每一個元素,把每一個元素依次添加到數組當中for (int i = 0; i < temArr.length; i++) {data[i / 4][i % 4] = temArr[i];}//遍歷二維數組for (int i = 0; i < data.length; i++) {for (int j = 0; j < data[i].length; j++) {System.out.print(data[i][j] + " ");}System.out.println();}}
}

解法二:

package test;import java.util.Random;public class test2 {public static void main(String[] args) {//1.定義一個一維數組int[] temArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//2.打亂數組中的順序//遍歷數組,得到每一個元素,拿著每一個元素跟隨機索引上的數據進行交換Random r = new Random();for (int i = 0; i < temArr.length; i++) {//獲取到隨機索引int index = r.nextInt(temArr.length);//拿著每一個元素跟隨機索引上的數據進行交換int temp = temArr[i];temArr[i] = temArr[index];temArr[index] = temp;}//3.遍歷數組for (int i = 0; i < temArr.length; i++) {System.out.print(temArr[i] + " ");}System.out.println();//4.創建一個二維數組int[][] data = new int[4][4];//5.給二維數組添加數據//解法二://遍歷二維數組,給里面的每一個數據賦值int index = 0;for (int i = 0; i < data.length; i++) {for (int j = 0; j < data[i].length; j++) {data[i][j] = temArr[index];index++;}}//遍歷二維數組for (int i = 0; i < data.length; i++) {for (int j = 0; j < data[i].length; j++) {System.out.print(data[i][j] + " ");}System.out.println();}}
}

在GameJFrame編寫

package ui;import javax.swing.*;
import java.util.Random;public class GameJFrame extends JFrame {//JFrame 界面,窗體//子類呢?也表示界面,窗體//規定:GameJFrame這個界面表示的就是游戲的主界面//以后跟游戲相關的所有邏輯都寫在這個類中//創建一個二維數組//目的:加載圖片int[][] data = new int[4][4];public GameJFrame(){//初始化界面initJFrame();//初始化菜單initJMenuBar();//初始化數據(打亂)initdata();//初始化圖片(根據打亂之后的數據結果加載圖片)initimage();//讓界面顯示出來,最后寫mthis.setVisible(true);}//---------------------------------- ---------------------private void initdata() {//1.定義一個一維數組int[] temArr = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//2.打亂數組中的順序//遍歷數組,得到每一個元素,拿著每一個元素跟隨機索引上的數據進行交換Random r = new Random();for (int i = 0; i < temArr.length; i++) {//獲取到隨機索引int index = r.nextInt(temArr.length);//拿著每一個元素跟隨機索引上的數據進行交換int temp = temArr[i];temArr[i] = temArr[index];temArr[index] = temp;}//3.給二維數組添加數據//遍歷一維數組tempArr得到每一個元素,把每一個元素依次添加到數組當中for (int i = 0; i < temArr.length; i++) {data[i / 4][i % 4] = temArr[i];}}//初始化圖片private void initimage() {//外循環  --把內循環重復執行了4次for (int i = 0; i < 4; i++) {//內循環  --表示在一行添加4張圖片for (int j = 0; j < 4; j++) {//獲取當前要加載圖片的序號int num = data[i][j];//創建一個Jlabel的對象(管理容器)JLabel JLabel = new JLabel(new ImageIcon("E:\\\\tool\\\\IDEA-java\\\\java代碼\\\\routing\\\\image\\\\animal\\\\animal3\\\\" + num +".jpg"));//指定圖片的位置JLabel.setBounds(105 * i,105 * j,105,105);//把管理容器添加到界面中this.getContentPane().add(JLabel);}}//------------------------------------------------------}private void initJMenuBar() {//初始化菜單//創建整個的菜單對象JMenuBar jMenuBar = new JMenuBar();//創建菜單上面的兩個選項的對象  (功能  關于我們)JMenu fuctionJMenu = new JMenu("功能");JMenu aboutJMenu = new JMenu("關于我們");//創建選項下面的條目對象JMenuItem replayItem = new JMenuItem("重新游戲");JMenuItem reloginItem = new JMenuItem("重新登錄");JMenuItem closeItem = new JMenuItem("關閉游戲");JMenuItem accountItem = new JMenuItem("公眾號");//將每一個選項下的條目添加到對應的選項中fuctionJMenu.add(replayItem);fuctionJMenu.add(reloginItem);fuctionJMenu.add(closeItem);aboutJMenu.add(accountItem);//將菜單里面的兩個選項添加到菜單中jMenuBar.add(fuctionJMenu);jMenuBar.add(aboutJMenu);//給整個界面設置菜單this.setJMenuBar(jMenuBar);}private void initJFrame() {//設置界面的寬高this.setSize(603,680);//單位是像素//設置界面的標題this.setTitle("拼圖單機版 v1.0");//設置界面置頂this.setAlwaysOnTop(true);//設置界面居中this.setLocationRelativeTo(null);//設置關閉模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//取消默認的居中位置,只有取消了才會按照XY軸的形式添加組件this.setLayout(null);}}

App 測試

import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;public class App {public static void main(String[] args) {//表示程序的啟動入口//如果我們想要開啟一個界面,就創建誰的對象就好了new GameJFrame();
//        new RegisterJFrame();
//        new loginJFrame();}
}

現在就每次運行的結果都不一樣了

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

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

相關文章

再次走到了個人發展的十字路口

人生有非常多的十字路口 諸如&#xff1a;大學選擇專業、畢業選擇公司、選擇技術方向、兩年發展方向、三年發展方向、五年發展方向。 在之前&#xff0c;我選擇深入做elasticsearch&#xff0c;做專精es搜索和優化。做了大概4年時間。 但是現在又走到了很難抉擇的十字路口 第…

網絡仿真(一)

網絡仿真的意義 在網絡規劃和設計、網絡設備研發、網絡協議開發中&#xff0c;需要一種手段來反映和預測網絡的性能 網絡仿真可以提高網絡規劃設計的可靠性和準確性&#xff0c;明顯降低網絡投資風險&#xff0c;減少不必要的浪費 Ns-2 is a discrete event simulator Sched…

持安科技亮相張江高科895創業營,總評分第三名榮獲「最具創新性企業」!

近日&#xff0c;張江高科895創業營&#xff08;第十三季&#xff09;信息安全專場Demo day&結營儀式在上海集成電路設計產業園圓滿落幕。本季創業營通過多種渠道在海內外甄選優秀創業項目&#xff0c;一共擇優錄取了29家入營&#xff0c;最終甄選出9家代表參加Demo day路演…

ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘報錯解決

安裝labelme出錯了 根據爆棧的提示信息&#xff0c;我在cmd運行以下命令之后一切正常了&#xff0c;解決了問題&#xff01; pip install urllib31.26.6參考網址&#xff1a;ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1, currently the ‘ssl’ module is compile…

一文徹底搞懂基于數組和鏈表分別實現LRU算法

文章目錄 1. LRU算法2. 基于數組實現LRU算法3. 基于鏈表實現LRU算法 1. LRU算法 常見的緩存淘汰策略有三種&#xff0c;分別是&#xff1a;先進先出策略FIFO&#xff08;First In&#xff0c;First Out&#xff09;、最少使用策略LFU&#xff08;Least Frequently Used&#x…

董兆祥出席工業廢水資源化,開創變廢為寶新途徑演講

演講嘉賓&#xff1a;董兆祥 董事長 河北奧博水處理有限公司 演講題目&#xff1a;工業廢水資源化&#xff0c;開創變廢為寶新途徑 會議簡介 “十四五”規劃中提出&#xff0c;提高工業、能源領城智能化與信息化融合&#xff0c;明確“低碳經濟”新的戰略目標&#xff0c;熱…

springcloud:3.2測試超時機制

服務提供者 Openfeign遠程調用服務提供者搭建 文章地址http://t.csdnimg.cn/06iz8 PaymentController【控制層】 /*** 測試超時機制** return*/GetMapping("/timeout")public String TimeOut() {try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {…

應用層DDoS防護:理解、必要性與實現策略

一、應用層簡介 應用層&#xff0c;也稱作第七層&#xff0c;是OSI&#xff08;開放系統互聯&#xff09;模型中的最高層。在這一層&#xff0c;數據以特定的應用程序協議格式進行傳輸&#xff0c;如HTTP、FTP、SMTP等。應用層的主要職責是為用戶提供網絡服務&#xff0c;如文…

【筆記】Android Telephony 獲取SubscriptionManager和TelephonyManager

背景 早期的手機只有單卡 &#xff0c;基本用默認卡&#xff08;代碼如下&#xff09;&#xff0c;那么雙卡手機的業務邏輯就會存在問題。 //手動搜網的功能案例&#xff0c;根據卡槽/Phone對象直接獲取信息private Context mcontext context; private Phone mPhone PhoneF…

LeetCode 560. 和為 K 的子數組

由于題目要求子數組必須連續&#xff0c;也就是需要一個和為K的區間&#xff0c;可以利用前綴和預處理后&#xff0c;枚舉找到這些區間段[l,r]&#xff0c;使之滿足s[r] - s[l] k。 不理解前綴和的可以先看這里。 class Solution { public:int subarraySum(vector<int>…

MongoDB聚合運算符:$count

文章目錄 語法使用舉例在$group階段中使用在$setWindowFields階段使用 $count聚合運算符返回分組中文檔的數量。從5.0開始支持。 語法 { $count: { } }$count不需要參數 使用 $count可以用于下列聚合階段&#xff1a; $bucket$bucket$group$setWindowFields 在$group階段中…

【vuex之五大核心概念】

vuex:五大核心概念 一、state狀態1.state的含義2.如何訪問以及使用倉庫的數據&#xff08;1&#xff09;通過store直接訪問獲取store對象 &#xff08;2&#xff09;通過輔助函數MapState 二、mutations1.作用2.嚴格模式3.操作流程定義 mutations 對象&#xff0c;對象中存放修…

Freesia 項目引用的依賴

UML圖 項目總依賴 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.0</version> </parent> <groupId>com.freesia</groupId> <artifa…

計算機網絡_2.1 物理層概述

2.1 物理層概述 一、物理層要實現的功能二、物理層接口特性 B站 深入淺出計算機網絡 2.1物理層概述 一、物理層要實現的功能 物理層要實現的功能就是在各種傳輸媒體上傳輸比特0和1&#xff0c;進而給上面的數據鏈路層提供透明傳輸比特流的服務。 數據鏈路層“看不見”&#xff…

劍指offer面試題22:鏈表中倒數第k個節點

面試題22&#xff1a;鏈表中倒數第k個節點 題目&#xff1a; 實現一種算法&#xff0c;找出單向鏈表中倒數第 k 個節點。返回該節點的值。 示例&#xff1a; 輸入&#xff1a; 1->2->3->4->5 和 k 2 輸出&#xff1a; 4思路&#xff1a; 1、求倒數第k個節點的…

設計模式-命令模式(Command Pattern)

承接Qt/C軟件開發項目&#xff0c;高質量交付&#xff0c;靈活溝通&#xff0c;長期維護支持。需求所尋&#xff0c;技術正適&#xff0c;共創完美&#xff0c;歡迎私信聯系&#xff01; 一、命令模式的說明 命令模式&#xff08;Command Pattern&#xff09;是一種行為設計模式…

跨境代購系統獨立站:掌握核心競爭優勢,打造專業國際購物體驗

跨境代購系統獨立站&#xff08;獲取代購系統獨立站演示&#xff09;的核心競爭優勢可能包括&#xff1a; 獨立性&#xff1a;獨立站不依賴于任何第三方電商平臺&#xff0c;擁有自己的域名和網站空間&#xff0c;可以自主控制網站的設計和內容。靈活性&#xff1a;獨立站不受…

springboot基于web的網上攝影工作室的開發與實現論文

網上攝影工作室 摘要 隨著信息技術在管理上越來越深入而廣泛的應用&#xff0c;管理信息系統的實施在技術上已逐步成熟。本文介紹了網上攝影工作室的開發全過程。通過分析網上攝影工作室管理的不足&#xff0c;創建了一個計算機管理網上攝影工作室的方案。文章介紹了網上攝影工…

微信小程序云開發教程——墨刀原型工具入門(動態組件)

引言 作為一個小白&#xff0c;小北要怎么在短時間內快速學會微信小程序原型設計&#xff1f; “時間緊&#xff0c;任務重”&#xff0c;這意味著學習時必須把握微信小程序原型設計中的重點、難點&#xff0c;而非面面俱到。 要在短時間內理解、掌握一個工具的使用&#xf…

0基礎跨考計算機|408保姆級全年計劃

我也是零基礎備考408&#xff01; 雖說是計算機專業&#xff0c;但是本科一學期學十幾門,真的期末考試完腦子里什么都不進的...基本都是考前一周發瘋學完水過考試...&#x1f605; 想要零基礎跨考可以直接從王道開始&#xff01;跟教材一點一點啃完全沒必要&#x1f978; 現在…