欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java基礎教程之拼圖游戲的實現(xiàn)

 更新時間:2022年01月24日 11:58:41   作者:蘇可正文  
拼圖游戲大家應該都玩過,下面這篇文章主要給大家介紹了關于java基礎教程之拼圖游戲的實現(xiàn)方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

前言

大家在初學java的時候,大部分的代碼都是在控制臺上運行的.可能大家辛辛苦苦寫了幾十行代碼,最終就只是在控制臺輸出一個字符,這個時候,心里肯定是拔涼拔涼的,心中那一朵編程的火花,就馬上給撲滅了.我們都知道興趣是最好的老師.為了拯救大家快要熄滅的小火花,小編在這里給大家?guī)硎褂胘ava做個小游戲,并且通過做這個游戲,好好收悉一下面向?qū)ο蟮膶嶋H使用.

廢話不多說,直接上效果圖:

1.所需技術

  • java基礎
  • java的GUI相關技術

2.具體實現(xiàn)

2.1 圖片制作

選擇你喜歡的一張圖片,(友情提示:圖片盡量在400*600 范圍內(nèi)),然后通過網(wǎng)上的在線分割圖片,或者你ps等其他軟件,把圖片分割為大小相等的12份.如下圖所示

 推薦大家給小圖片取名按照: 大圖片的文件名-序號 這種方式命名,方便程序讀取

 2.2 創(chuàng)建項目

使用idea或者是Eclipse創(chuàng)建一個java項目,小編使用的是idea,然后再項目下,創(chuàng)建一個image的目錄,把上一步的圖片復制到項目下的image目錄下:  

 2.3 編碼實現(xiàn)

 我們首先創(chuàng)建一個勇于描述游戲中顯示的圖片的實體類:Picture類,代碼如下

public class Picture {
    private String alisa;//別名
    private String picPath;//預覽圖片的路徑
    private String[] subPicPaths;//拼圖區(qū)的切片圖片路徑
    //省略了setter/getter 構造方法的代碼
}

這里我們就應用了java的OOP思想,把游戲中的一個拼圖抽象成一個Picture類, 上圖左邊的小圖片對應Picture類的subPicPaths屬性, 右邊的預覽圖對應Picture類的picPath屬性,以及我們給這個拼圖取了一個名稱,對應Picture的alisa屬性.

我們已經(jīng)封裝好了Picture類,接下來我們需要編寫我們的游戲主界面類 MainFrame,我們現(xiàn)在的程序不是運行在控制臺,而是運行一個界面窗口,所有我們的主界面類必須實現(xiàn)Swing包下的JFrame類,JFrame簡單的理解就是一個游戲窗口.

public class MainFrame extends JFrame{
    private String[] items = {"小熊","美女"};
    private Map<String,Picture> picMap = new HashMap<>(); //游戲中的圖片
    private static final long serialVersionUID = -3974891708686273202L;
    private JComboBox<String> imgComboBox; //選擇圖片的下拉框
    private PictureCanvasPanle canvasPanle; //拼圖區(qū)的面板
    private PicturePreviewPanel previewPanle; //預覽區(qū)的面板
    private JTextField nameTxt; //顯示圖片名詞的文本域
    public static Picture selectedPicture;  //被選中的圖片
    private JButton startBtn;  //開始按鈕
    public static JTextField stepTxt; //顯示步數(shù)的文本域
 
    //添加圖片
    public void setMap(){
        for(int i = 0; i < items.length;i++){
            String[] subPaths = new String[12];
            for(int j = 0; j < subPaths.length; j++){
                subPaths[j] = "image/" +(i+1)+"-"+(j+1)+".jpg";
            }
            Picture pic = new Picture(items[i], "image/" +(i+1)+".jpg", subPaths);
            picMap.put(pic.getAlisa(), pic);
        }
    }
 
    //無參構造方法,進行界面的初始化
    public MainFrame(){
        setMap();
        //初始化
        init(); 
        //添加組件
        addComponent();
        //添加拼圖和預覽
        addPreview();
        //給組件添加事件
        addActionLisener();
    }
 
    //給界面上的組件綁定事件
    private void addActionLisener() {
        //給下拉框添加事件
        imgComboBox.addActionListener(new ActionListener() {
            @SuppressWarnings("unchecked")
            @Override
            public void actionPerformed(ActionEvent e) {
                JComboBox<String> cbx = (JComboBox<String>) e.getSource();
                selectedPicture = picMap.get(cbx.getSelectedItem());
                previewPanle.setPath(selectedPicture.getPicPath());
                nameTxt.setText("圖片名稱:"+cbx.getSelectedItem());
                canvasPanle.changePictureCell();
                previewPanle.repaint();
            }
        });
        
        //給開始按鈕添加事件監(jiān)聽
        startBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //把移動的步數(shù)清零
                canvasPanle.stepNum = 0;
                stepTxt.setText("步數(shù):"+canvasPanle.stepNum);
                //打亂拼圖區(qū)的小方塊
                canvasPanle.start();
            }
        }); 
    }
 
    //添加預覽圖片
    private void addPreview() {
        JPanel mainPanle = new JPanel();
        mainPanle.setLayout(new GridLayout(1,2));
        canvasPanle = new PictureCanvasPanle();
        previewPanle = new PicturePreviewPanel();
        mainPanle.add(canvasPanle,BorderLayout.WEST);
        mainPanle.add(previewPanle,BorderLayout.EAST);
        
        this.add(mainPanle,BorderLayout.CENTER);
    }
 
    private void addComponent() {
        //上部分的內(nèi)容
        JPanel topPanel = new JPanel();
        //設置布局器
        topPanel.setLayout(new GridLayout(1,2));
        //給上面板添加左右面板
        //左面板
        JPanel leftPanel = new JPanel();
        //設置背景顏色
        leftPanel.setBackground(Color.PINK);
        leftPanel.setBorder(new TitledBorder("游戲設置區(qū)"));
        //添加其他組件
        //設置左邊的布局
        leftPanel.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
        
        //標簽
        JLabel infoLabel = new JLabel("選擇圖片: ");
        leftPanel.add(infoLabel);
        //設置下拉框
        imgComboBox = new JComboBox<String>(items);
        imgComboBox.setBackground(Color.PINK);
        leftPanel.add(imgComboBox);
        
        //設置添加按鈕
        startBtn = new JButton("Start");
        startBtn.setBackground(Color.PINK);
        leftPanel.add(startBtn);
        
        //添加
        topPanel.add(leftPanel, BorderLayout.WEST);
        
        
        //右面板
        JPanel rightPanle = new JPanel();
        rightPanle.setBackground(Color.PINK);
        rightPanle.setBorder(new TitledBorder("游戲狀態(tài)區(qū)"));
        rightPanle.setLayout(new GridLayout(1,2));
        
        nameTxt = new JTextField("圖片名稱:小熊");
        nameTxt.setEditable(false);
        nameTxt.setBackground(Color.PINK);
        
        stepTxt = new JTextField("步數(shù):0");
        stepTxt.setEditable(false);
        stepTxt.setBackground(Color.PINK);
        rightPanle.add(nameTxt,BorderLayout.WEST);
        rightPanle.add(stepTxt,BorderLayout.EAST);
        
        topPanel.add(rightPanle, BorderLayout.EAST);
        //把這個面板添加到窗口
        this.add(topPanel,BorderLayout.NORTH);
    }
 
    private void init() {
        //設置窗體的標題
        this.setTitle("拼圖游戲");
        //設置窗體的大小
        this.setSize(1000, 720);
        //設置窗體在屏幕居中
        this.setLocationRelativeTo(null);
        //設置固定大小
        this.setResizable(false);
        //設置窗口的默認關閉操作
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        selectedPicture = this.picMap.get(items[0]);
    }
    
}

此時,我們已經(jīng)把游戲的主界面給搭建好了,但是這個主界面的游戲拼圖區(qū)和游戲預覽區(qū)的代碼還沒有實現(xiàn).并且我們還需要把游戲拼圖區(qū)中每一小塊的拼圖片也抽象成一個類,并且需要給每一個拼圖片綁定鼠標事件.

由于篇幅有限,游戲拼圖區(qū)和游戲預覽區(qū)的代碼我們在下一篇文章給各位看官老爺展示,各位看官老爺也可以自己思考一下,后面的代碼的實現(xiàn)思路,并嘗試自己動手.俗話說:"紙上得來終覺淺,絕知此事要躬行&quot;.

總結

到此這篇關于java基礎教程之拼圖游戲?qū)崿F(xiàn)的文章就介紹到這了,更多相關java拼圖游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot配置 Druid 三種方式(包括純配置文件配置)

    SpringBoot配置 Druid 三種方式(包括純配置文件配置)

    本文給大家分享在項目中用純 YML(application.yml 或者 application.properties)文件、Java 代碼配置 Bean 和注解三種方式配置 Alibaba Druid 用于監(jiān)控或者查看 SQL 狀況的相關知識,感興趣的朋友一起看看吧
    2021-10-10
  • java進階解析Springboot上傳excel存入數(shù)據(jù)庫步驟

    java進階解析Springboot上傳excel存入數(shù)據(jù)庫步驟

    項目需要,寫了一個,批量導入的接口。因為需要使用excel去批量導入數(shù)據(jù),所以寫了一個例子,經(jīng)過測試已經(jīng)可以用于實際開發(fā),這里記錄一下
    2021-09-09
  • Kotlin 接口與 Java8 新特性接口詳解

    Kotlin 接口與 Java8 新特性接口詳解

    這篇文章主要介紹了Kotlin 接口與 Java8 新特性接口,Kotlin的接口是可以包含屬性聲明。Kotlin默認的聲明是fianl 和public的。 Kotlin里嵌套的類默認并不是內(nèi)部內(nèi),不包含對器外部類的隱式調(diào)用。下面我們來一起學習一下吧
    2019-06-06
  • Java死鎖問題詳解及示例

    Java死鎖問題詳解及示例

    本文將討論Java程序中死鎖問題的概念、產(chǎn)生原因以及避免策略。同時,我們還將通過代碼示例來進一步闡述這個問題,感興趣的小伙伴可以跟著小編一起來學習
    2023-04-04
  • springboot json時間格式化處理的方法

    springboot json時間格式化處理的方法

    這篇文章主要介紹了springboot json時間格式化處理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • JAVA創(chuàng)建和銷毀對象的方法

    JAVA創(chuàng)建和銷毀對象的方法

    本篇文章主要介紹了JAVA創(chuàng)建和銷毀對象的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • spring data 連接mongodb的兩種方式

    spring data 連接mongodb的兩種方式

    這篇文章主要介紹了spring data mongodb連接方式詳解,本文給大家分享兩種連接方式,通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • 使用CXF和Jersey框架來進行Java的WebService編程

    使用CXF和Jersey框架來進行Java的WebService編程

    這篇文章主要介紹了使用CXF和Jersey框架來進行Java的WebService編程,Web service是一個平臺獨立的低耦合的自包含的基于可編程的web的應用程序,需要的朋友可以參考下
    2015-12-12
  • java之scan.next()與scan.nextline()函數(shù)的使用及區(qū)別

    java之scan.next()與scan.nextline()函數(shù)的使用及區(qū)別

    這篇文章主要介紹了java之scan.next()與scan.nextline()函數(shù)的使用及區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Mybatis批量插入大量數(shù)據(jù)的最優(yōu)方式總結

    Mybatis批量插入大量數(shù)據(jù)的最優(yōu)方式總結

    批量插入功能是我們?nèi)粘9ぷ髦斜容^常見的業(yè)務功能之一,下面這篇文章主要給大家總結介紹了關于Mybatis批量插入大量數(shù)據(jù)的幾種最優(yōu)方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03

最新評論