溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中拼圖游戲怎么實現(xiàn)

發(fā)布時間:2022-03-04 10:05:46 來源:億速云 閱讀:191 作者:小新 欄目:開發(fā)技術

這篇文章主要介紹了java中拼圖游戲怎么實現(xiàn),具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

    直接上效果圖:

    java中拼圖游戲怎么實現(xiàn)

    1.所需技術

    • java基礎

    • java的GUI相關技術

    2.具體實現(xiàn)

    2.1 圖片制作

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

    java中拼圖游戲怎么實現(xiàn)

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

     2.2 創(chuàng)建項目

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

    java中拼圖游戲怎么實現(xiàn)

     2.3 編碼實現(xiàn)

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

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

    java中拼圖游戲怎么實現(xiàn)

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

    我們已經封裝好了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() {
            //上部分的內容
            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]);
        }
        
    }

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

    感謝你能夠認真閱讀完這篇文章,希望小編分享的“java中拼圖游戲怎么實現(xiàn)”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,更多相關知識等著你來學習!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI