最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

廢話(huà)不多說(shuō),直接上效果圖:

1.所需技術(shù)

  • java基礎(chǔ)
  • java的GUI相關(guān)技術(shù)

2.具體實(shí)現(xiàn)

2.1 圖片制作

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

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

 2.2 創(chuàng)建項(xiàng)目

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

 2.3 編碼實(shí)現(xiàn)

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

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

這里我們就應(yīng)用了java的OOP思想,把游戲中的一個(gè)拼圖抽象成一個(gè)Picture類(lèi), 上圖左邊的小圖片對(duì)應(yīng)Picture類(lèi)的subPicPaths屬性, 右邊的預(yù)覽圖對(duì)應(yīng)Picture類(lèi)的picPath屬性,以及我們給這個(gè)拼圖取了一個(gè)名稱(chēng),對(duì)應(yīng)Picture的alisa屬性.

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

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; //預(yù)覽區(qū)的面板
    private JTextField nameTxt; //顯示圖片名詞的文本域
    public static Picture selectedPicture;  //被選中的圖片
    private JButton startBtn;  //開(kāi)始按鈕
    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);
        }
    }
 
    //無(wú)參構(gòu)造方法,進(jìn)行界面的初始化
    public MainFrame(){
        setMap();
        //初始化
        init(); 
        //添加組件
        addComponent();
        //添加拼圖和預(yù)覽
        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("圖片名稱(chēng):"+cbx.getSelectedItem());
                canvasPanle.changePictureCell();
                previewPanle.repaint();
            }
        });
        
        //給開(kāi)始按鈕添加事件監(jiān)聽(tīng)
        startBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //把移動(dòng)的步數(shù)清零
                canvasPanle.stepNum = 0;
                stepTxt.setText("步數(shù):"+canvasPanle.stepNum);
                //打亂拼圖區(qū)的小方塊
                canvasPanle.start();
            }
        }); 
    }
 
    //添加預(yù)覽圖片
    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();
        //設(shè)置布局器
        topPanel.setLayout(new GridLayout(1,2));
        //給上面板添加左右面板
        //左面板
        JPanel leftPanel = new JPanel();
        //設(shè)置背景顏色
        leftPanel.setBackground(Color.PINK);
        leftPanel.setBorder(new TitledBorder("游戲設(shè)置區(qū)"));
        //添加其他組件
        //設(shè)置左邊的布局
        leftPanel.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
        
        //標(biāo)簽
        JLabel infoLabel = new JLabel("選擇圖片: ");
        leftPanel.add(infoLabel);
        //設(shè)置下拉框
        imgComboBox = new JComboBox<String>(items);
        imgComboBox.setBackground(Color.PINK);
        leftPanel.add(imgComboBox);
        
        //設(shè)置添加按鈕
        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("圖片名稱(chēng):小熊");
        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);
        //把這個(gè)面板添加到窗口
        this.add(topPanel,BorderLayout.NORTH);
    }
 
    private void init() {
        //設(shè)置窗體的標(biāo)題
        this.setTitle("拼圖游戲");
        //設(shè)置窗體的大小
        this.setSize(1000, 720);
        //設(shè)置窗體在屏幕居中
        this.setLocationRelativeTo(null);
        //設(shè)置固定大小
        this.setResizable(false);
        //設(shè)置窗口的默認(rèn)關(guān)閉操作
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        selectedPicture = this.picMap.get(items[0]);
    }
    
}

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

由于篇幅有限,游戲拼圖區(qū)和游戲預(yù)覽區(qū)的代碼我們?cè)谙乱黄恼陆o各位看官老爺展示,各位看官老爺也可以自己思考一下,后面的代碼的實(shí)現(xiàn)思路,并嘗試自己動(dòng)手.俗話(huà)說(shuō):"紙上得來(lái)終覺(jué)淺,絕知此事要躬行&quot;.

總結(jié)

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

相關(guān)文章

  • Java面試題沖刺第九天--MyBatis

    Java面試題沖刺第九天--MyBatis

    這篇文章主要為大家分享了最有價(jià)值的三道MyBatis框架面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 可觀(guān)測(cè)性-Metrics-數(shù)據(jù)庫(kù)連接池HikariCP監(jiān)控教程

    可觀(guān)測(cè)性-Metrics-數(shù)據(jù)庫(kù)連接池HikariCP監(jiān)控教程

    這篇文章主要介紹了可觀(guān)測(cè)性-Metrics-數(shù)據(jù)庫(kù)連接池HikariCP監(jiān)控教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java設(shè)計(jì)模式中的裝飾器模式簡(jiǎn)析

    Java設(shè)計(jì)模式中的裝飾器模式簡(jiǎn)析

    這篇文章主要介紹了Java設(shè)計(jì)模式中的裝飾器模式簡(jiǎn)析,裝飾模式能夠?qū)崿F(xiàn)動(dòng)態(tài)的為對(duì)象添加功能,是從一個(gè)對(duì)象外部來(lái)給對(duì)象添加功能,通常給對(duì)象添加功能,要么直接修改對(duì)象添加相應(yīng)的功能,要么派生對(duì)應(yīng)的子類(lèi)來(lái)擴(kuò)展,抑或是使用對(duì)象組合的方式,需要的朋友可以參考下
    2023-12-12
  • java阻塞隊(duì)列實(shí)現(xiàn)原理及實(shí)例解析

    java阻塞隊(duì)列實(shí)現(xiàn)原理及實(shí)例解析

    這篇文章主要介紹了java阻塞隊(duì)列實(shí)現(xiàn)原理及實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java使用apache?poi操作excel的方式

    Java使用apache?poi操作excel的方式

    這篇文章主要介紹了Java使用apache?poi進(jìn)行excel相關(guān)操作,本文主要針對(duì)Apache?POI對(duì)excel的操作進(jìn)行介紹,主要包括如何創(chuàng)建一個(gè)excel、錄入數(shù)據(jù)、讀取excel數(shù)據(jù)的方式,需要的朋友可以參考下
    2022-05-05
  • 工廠(chǎng)模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    工廠(chǎng)模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了工廠(chǎng)模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • Javaweb實(shí)現(xiàn)上傳下載文件的多種方法

    Javaweb實(shí)現(xiàn)上傳下載文件的多種方法

    本篇文章主要介紹了Javaweb實(shí)現(xiàn)上傳下載文件,有多種實(shí)現(xiàn)方式,需要的朋友可以參考下。
    2016-10-10
  • JPA實(shí)現(xiàn)多條件分頁(yè)查詢(xún)

    JPA實(shí)現(xiàn)多條件分頁(yè)查詢(xún)

    這篇文章主要介紹了JPA實(shí)現(xiàn)多條件分頁(yè)查詢(xún)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Spring JdbcTemplate執(zhí)行數(shù)據(jù)庫(kù)操作詳解

    Spring JdbcTemplate執(zhí)行數(shù)據(jù)庫(kù)操作詳解

    JdbcTemplate是Spring框架自帶的對(duì)JDBC操作的封裝,目的是提供統(tǒng)一的模板方法使對(duì)數(shù)據(jù)庫(kù)的操作更加方便、友好,效率也不錯(cuò),這篇文章主要介紹了Spring JdbcTemplate執(zhí)行數(shù)據(jù)庫(kù)操作,需要的朋友可以參考下
    2022-10-10
  • 超詳細(xì)介紹idea中java程序打jar包的兩種方式

    超詳細(xì)介紹idea中java程序打jar包的兩種方式

    這篇文章主要介紹了超詳細(xì)介紹idea中java程序打jar包的兩種方式一種是可直接執(zhí)行的runnable jar文件,另一種是包含多個(gè)主類(lèi),運(yùn)行時(shí)需要指定主類(lèi)全類(lèi)名的jar包,感興趣的可以了解一下
    2020-07-07

最新評(píng)論

永吉县| 永济市| 安新县| 平泉县| 安陆市| 周口市| 长海县| 尉犁县| 南城县| 军事| 石棉县| 乌兰浩特市| 新营市| 重庆市| 遂平县| 娱乐| 张北县| 闽侯县| 安义县| 申扎县| 渑池县| 绵阳市| 恩平市| 长武县| 黔西| 郎溪县| 崇文区| 库尔勒市| 衡阳市| 九龙县| 兴业县| 彭州市| 青川县| 襄垣县| 凤庆县| 枝江市| 固镇县| 平遥县| 通山县| 芜湖县| 东平县|