Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

Help me! game xếp số

Discussion in 'Xây dựng ứng dụng chạy console, applet' started by findkixx, 8/12/10.

  1. findkixx

    findkixx New Member

    Java

    mấy anh chị cho em xin game xếp số viết bằng Jcreator hay netbean cũng được. Code cũng được nữa. Đó là game sắp xếp 15 chữ số theo thứ tự từ trên xuống và từ trái qua có cả đồng hồ tính thời gian. Anh chị giúp dùm em với
     
  2. JackV

    JackV Administrator Staff Member

    Ðề: Help me! game xếp số

    hả, lấy làm gì thế?
     
  3. findkixx

    findkixx New Member

    Ðề: Help me! game xếp số

    Tại thứ 2 này em phải nộp đề tài về game đó anh JackV cho em xin đi. Anh làm rồi mà
     
  4. JackV

    JackV Administrator Staff Member

    Ðề: Help me! game xếp số

    Có vài vấn đề thế này:
    1. Tớ không nhớ là đã làm thế nào và đã chia sẻ ở đâu.
    2. Nếu bạn biết đã chia sẻ ở đâu bạn có thể lấy về đây trao đổi thêm, tớ hoan nghênh.
    3. Tớ không hỗ trợ
    Tớ tham gia diễn đàn với mục đích chia sẻ kinh nghiệm và hỗ trợ mọi người thực hành.
     
  5. JackV

    JackV Administrator Staff Member

    Ðề: Help me! game xếp số

    Ok, tớ share dạng mở để trao đổi mà, nếu vậy chúng ta trao đổi ở đây nhé.

    [​IMG]

    Code này đã hiện thực phần cơ bản.

    Còn lại hai vấn đề:
    - Chưa kiểm tra xem nút được nhấn có hợp lệ hay không nên bấm nút nào nó cũng đổi vị trí.
    - Khi các nút được sắp xếp theo thứ tự thì mặc dù nút trống không phải là nút 16 nhưng game vẫn successful

    PHP:
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Random;
    import java.util.Vector;
    import javax.swing.ButtonGroup;
    import javax.swing.JOptionPane;
    import javax.swing.JToggleButton;

    public class 
    BrainstormPuzzleGame_Number extends javax.swing.JFrame implements ActionListener {

        
    /** Creates new form PuzzleGame_Number */
        
    public BrainstormPuzzleGame_Number() {
            
    initComponents();

            
    prepareBut();
            
    setRandomBut();

            
    setSize(337376);
            
    setLocationRelativeTo(this);
        }
        
    JToggleButton[] arrNew = new JToggleButton[16];     //Mảng các buttons
        
    Vector<StringvRandomButName = new Vector();       //Vector các số từ 1-15 đã random
        
    ButtonGroup butGroups = new ButtonGroup();

        
    //Tạo nút
        
    private void prepareBut() {
            for (
    int i 016i++) {
                
    arrNew[i] = new JToggleButton("");
                
    arrNew[i].addActionListener(this);
                
    arrNew[i].setBackground(Color.red);
                
    jPanelNuberButtoms.add(arrNew[i]);
                
    butGroups.add(arrNew[i]);
            }
            
    arrNew[0].setSelected(true);

            
    jPanelNuberButtoms.updateUI();
        }
        
    Random theRandom = new Random();

        
    //Đổi chữ trên các nút
        
    private void setRandomBut() {
            
    vRandomButName.removeAllElements();
            
    int iTmp;

            
    //Lấy các số random
            
    vRandomButName.add("");
            for (
    int i 015;) {
                
    iTmp theRandom.nextInt(16);
                if (
    iTmp != && vRandomButName.contains("" iTmp) == false) {
                    
    vRandomButName.add("" iTmp);
                    
    i++;
                }
            }

            
    //Đổi chữ trên các button bằng danh sách số đã random
            
    for (int i 0arrNew.lengthi++) {
                
    arrNew[i].setText(vRandomButName.get(i));
            }
            
    arrNew[0].setSelected(true);

            
    jPanelNuberButtoms.updateUI();
        }
        
    //Chuỗi số thành công từ cách ký tự trên các nút nối lại
        
    String sSuccess "123456789101112131415";

        public 
    void actionPerformed(ActionEvent e) {
            
    String sPlaying "";

            
    //Lấy ký tự trên nút đã được nhấn
            //String sSelected = "";
            
    String sSelected = ((JToggleButtone.getSource()).getText();

            
    //Xóa chữ trên nút đã nhấn
            
    ((JToggleButtone.getSource()).setText("");

            
    //Đổi chữ trên nút rỗng.
            
    for (int i 0arrNew.lengthi++) {
                if (!
    arrNew[i].isSelected() && arrNew[i].getText().equals("")) {
                    
    arrNew[i].setText(sSelected);
                }

                
    //Nỗi các ký tự trên các nút lại so sánh với chuỗi sSuccess
                
    if (arrNew.length 1) {
                    
    sPlaying += arrNew[i].getText();
                }
            }

            
    //Check and promt if success
            
    if (sPlaying.equals(sSuccess)) {
                if (
    JOptionPane.showConfirmDialog(this"Successful\nDo you want to start new game?""Option"JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
                    
    setRandomBut();
                }
            }
        }

        
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
        
    private void initComponents() {

            
    jPanelNuberButtoms = new javax.swing.JPanel();
            
    butNewGame = new javax.swing.JButton();
            
    jLabel1 = new javax.swing.JLabel();
            
    jLabel2 = new javax.swing.JLabel();

            
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            
    setTitle("JackV luyenlaptrinh.com");
            
    setResizable(false);
            
    getContentPane().setLayout(null);

            
    jPanelNuberButtoms.setBorder(javax.swing.BorderFactory.createEtchedBorder());
            
    jPanelNuberButtoms.setLayout(new java.awt.GridLayout(44));
            
    getContentPane().add(jPanelNuberButtoms);
            
    jPanelNuberButtoms.setBounds(2070290230);

            
    butNewGame.setText("New Game");
            
    butNewGame.addActionListener(new java.awt.event.ActionListener() {
                public 
    void actionPerformed(java.awt.event.ActionEvent evt) {
                    
    butNewGameActionPerformed(evt);
                }
            });
            
    getContentPane().add(butNewGame);
            
    butNewGame.setBounds(9031015023);

            
    jLabel1.setFont(new java.awt.Font("Tahoma"018));
            
    jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
            
    jLabel1.setText("Sắp xếp chữ số");
            
    getContentPane().add(jLabel1);
            
    jLabel1.setBounds(30427030);

            
    jLabel2.setText("Sắp theo thứ tự từ trái qua, từ trên xuống");
            
    getContentPane().add(jLabel2);
            
    jLabel2.setBounds(204029014);

            
    pack();
        }
    // </editor-fold>                       

        
    private void butNewGameActionPerformed(java.awt.event.ActionEvent evt) {                                           
            
    setRandomBut();
        }                                         

        
    /**
         * @param args the command line arguments
         */
        
    public static void main(String args[]) {
            
    java.awt.EventQueue.invokeLater(new Runnable() {

                public 
    void run() {
                    new 
    BrainstormPuzzleGame_Number().setVisible(true);
                }
            });
        }
        
    // Variables declaration - do not modify                     
        
    private javax.swing.JButton butNewGame;
        private 
    javax.swing.JLabel jLabel1;
        private 
    javax.swing.JLabel jLabel2;
        private 
    javax.swing.JPanel jPanelNuberButtoms;
        
    // End of variables declaration                   
    }
     
  6. findkixx

    findkixx New Member

    Ðề: Help me! game xếp số

    Làm sao để các số đó di chuyển lên xuống và qua lại ở ổ trống không anh Jack
     
  7. findkixx

    findkixx New Member

    Ðề: Help me! game xếp số

    Anh giúp em cái vấn đề đầu tiên đi anh. Làm sao kiểm tra được nut nhấn hợp lệ
     
  8. JackV

    JackV Administrator Staff Member

    Ðề: Help me! game xếp số

    Nút nhấn hợp lệ là nút nhấn ở bên cạnh ô trống.
     
  9. nothing1010

    nothing1010 CongdongJava Dev Group

    Ðề: Help me! game xếp số

    Nhưng em thấy khi em nhấn nút k cạnh ô trống vẫn chuyển. Chắc anh JackV vẫn chưa check trường hợp này! :)
     
  10. JackV

    JackV Administrator Staff Member

    Ðề: Help me! game xếp số

    thì đã bảo là share thực hành để trao đổi mà, đâu phải là game hoàn chỉnh đâu.
     
  11. nothing1010

    nothing1010 CongdongJava Dev Group

    Ðề: Help me! game xếp số

    hihi. sorry anh! em đọc k kỹ!
     
  12. JackV

    JackV Administrator Staff Member

    Ðề: Help me! game xếp số

    Source này mình code hơi khác so với bình thường, đối với các bạn mới thì sẽ dùng mảng hai chiều biểu diễn vì nó trực quan hơn.

    Game này có thể phát sinh một lỗi báo thành công khác vì
    String sSuccess = "123456789101112131415"; tức là khi các số đúng sẽ xếp liền nhau theo thứ tự 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 nhưng nếu sếp theo thứ tự 12 3 4 5 6 7 8 9 10 1 2 13 14 15 liền nhau cũng đúng.
     
  13. findkixx

    findkixx New Member

    Ðề: Help me! game xếp số

    Nếu là bài này thì mảng 2 chiều làm sao anh
     
  14. findkixx

    findkixx New Member

    Ðề: Help me! game xếp số

    Đây làm theo mảng 2 chiều nhưng không bjt cách load số. Có ai biết chỉ mình với
    Code:
    import java.util.Random;
    import javax.swing.Box;
    import java.util.Vector;
    import javax.swing.*;
    import java.awt.event.ActionEvent;
    import java.awt.*;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.event.*;
    import java.util.EventListener;
    import javax.swing.JOptionPane;
    
    class giaodien extends JFrame implements ActionListener
    {
    	JMenuBar MnB = new JMenuBar();
    	JMenu MnF = new JMenu("File");
    	JMenuItem MnNewGame = new JMenuItem("New Game");
    	JMenuItem MnSort = new JMenuItem("Sort");
    	JMenuItem MnExit = new JMenuItem("Exit");
    	JMenu MnHelp = new JMenu("Help");
    	JMenuItem MnAbout = new JMenuItem("About");
    	JLabel lbl1 = new JLabel ("Sap xep chu so");
    	JLabel lbl2 = new JLabel ("Sap theo thu tu tu trai qua, tu tren xuong");
    	JButton btnTimer = new JButton ("PlayGame");
    	JTextField time = new JTextField();
    	JButton btnExit = new JButton ("Exit");
    	JButton btnAbout = new JButton ("About");
    	JButton btn = new JButton("");
    	JLabel lbl = new JLabel("");
    	Boolean kt[] = new Boolean[16];
    	Vector<String> vRandomButName = new Vector<String>();
    	ButtonGroup btnGroups = new ButtonGroup();
    	JPanel p = new JPanel();
    	int[][] luv;
    	int width, height;
    	giaodien()
    	{
    	}	
    	giaodien(String td)
    	{
    		
    		super(td);
    		setSize(337, 400);
    		show();
    		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    		setResizable(false);
    		this.setJMenuBar(MnB);
    		MnB.add(MnF);
    		MnF.add(MnNewGame);
    		MnF.add(MnExit);
    		MnB.add(MnHelp);
    		MnHelp.add(MnAbout);
    		getContentPane().setLayout(null);
        	p.setLayout(new GridLayout(4, 4, 0, 0));
            luv = new int[][] {
                                {0, 1, 2, 3}, 
                                {4, 5, 6, 7}, 
                                {8, 9, 10, 11}, 
                                {12, 13, 14, 15}
                            };
         
            p.updateUI();
            
            add(Box.createRigidArea(new Dimension(0, 5)), BorderLayout.NORTH);    
            add(p, BorderLayout.CENTER);
    
            
            getContentPane().add(p);
            p.setBounds(20, 70, 290, 230);
            
            for ( int i = 0; i < 4; i++) {
                for ( int j = 0; j < 4; j++) {
                 
                }
            }
            
            lbl1.setFont(new Font("Tahoma", 0, 18));
            lbl1.setHorizontalAlignment(SwingConstants.CENTER);
            getContentPane().add(lbl1);
            lbl1.setBounds(30, 4, 270, 30);
             
    
            getContentPane().add(lbl2);
            lbl2.setBounds(20, 40, 290, 14);
            
            for ( int i = 0; i < 4; i++) {
                for ( int j = 0; j < 4; j++) {
    
                }
            }
            
            add(p, BorderLayout.CENTER);
            for(int i = 0; i < 16; i++)
            {
            	kt[i] = false;
            }
            for(int i = 0; i < 4; i++){
            	for( int j = 0; j < 4; j++){
                    	btn.setBackground(Color.green);
                        Random rnd = new Random();
                        int n = Math.abs(rnd.nextInt()%15);
                        while(kt[n])
                        	n = Math.abs(rnd.nextInt()%15);
                        kt[n] = true;
                        p.add(btn);
                    }
            	}
           }
    	String sSuccess = "123456789101112131415";
    	public void actionPerformed(ActionEvent e) 
    	{
    		JButton button = (JButton) e.getSource();
    		Dimension size = button.getSize();
    
            int lblX = lbl.getX();
            int lblY = lbl.getY();
            int btnX = button.getX();
            int btnY = button.getY();
            int btnPosX = btnX / size.width;
            int btnPosY = btnY / size.height;
            int btnIndex = luv[btnPosY][btnPosX];
    
    
    
            if (lblX == btnX && (lblY - btnY) == size.height ) {
    
                 int labelIndex = btnIndex + 4;
    
                 p.remove(btnIndex);
                 p.add(lbl, btnIndex);
                 p.add(btn,labelIndex);
                 p.validate();
            }
    
            if (lblX == btnX && (lblY - btnY) == -size.height ) {
    
                 int labelIndex = btnIndex - 4;
                 p.remove(labelIndex);
                 p.add(btn,labelIndex);
                 p.add(lbl, btnIndex);
                 p.validate();
            }
    
            if (lblY == btnY && (lblX - btnX) == size.width) {
    
                 int labelIndex = btnIndex + 1;
    
                 p.remove(btnIndex);
                 p.add(lbl, btnIndex);
                 p.add(btn,labelIndex);
                 p.validate();
            }
    
            if (lblY == btnY && (lblX - btnX) == -size.width ) {
    
                 int labelIndex = btnIndex - 1;
    
                 p.remove(btnIndex);
                 p.add(lbl, labelIndex);
                 p.add(btn,labelIndex);
                 p.validate();
            }	
    	}
    }
    public class baimoi {
            
        /**
         * Creates a new instance of <code>baimoi</code>.
         */
        public baimoi() {
        }
        
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            giaodien luv = new giaodien ("Xep so");
            luv.setVisible(true);
        }
    }
    
    
     
  15. findkixx

    findkixx New Member

    Ðề: Help me! game xếp số

    Nhưng không load số lên được anh ơi anh có thể giúp cách load số ko. với cái code này gắn vào bàn trên để kiểm tra nút di chuyển được ko ?
    Code:
    temp = index+1; 
                    if ((temp == 4) || ( temp == 8) || (temp ==12) || (temp==16)) {
                            right = -1;
                    }else{
                            right = temp;
                    } 
    
                    // LEFT 
                    temp = index-1;
                    if ((temp == 3) || (temp == 7) || (temp == 11) ) {
                            left = -1;
                    }else{
                            left = temp;
                    }
    
                    // UP 
                    temp = index-4;
                    if ((temp<0)) {
                            up = -1;
                    } else {
                            up = temp;
                    }
    
                    // DOWN 
                    temp = index+4;
                    if ((temp >= 16)) {
                            down = -1;
                    } else {
                            down = temp;
                    } 
     
  16. JackV

    JackV Administrator Staff Member

    Ðề: Help me! game xếp số

    mảng 2 chiều thì tiện hơn vì mỗi nút có tọa độ x,y nên khi muốn kiểm tra các nút trái trên dưới có phải nút trống hay không thì chỉ cần thay đổi x hoặc y một đơn vị để lấy nút ở vị trí kế nó.
     
  17. JackV

    JackV Administrator Staff Member

    Ðề: Help me! game xếp số

    Đọc source của cậu đưa không hiểu là code như thế nào (Code đã khó mà đọc hiểu code còn khó hơn mà), nên tớ code cái demo sự di chuyển và kiểm tra cho 1 nút, các nút còn lại triển khai giống như thế, có vấn đề gì trao đổi tiếp.

    [​IMG]

    Trong code này, nút được chọn là nút ở vị trí (1, 0), vị trí trống sẽ là vị trí của nút số 0, để test từng trường hợp số 0 ở các vị trí nó có thể thay đổi với vị trí (1, 0) thì bạn đổi comment các dòn tương ứng trong đoạn
    PHP:
        int arrNew[][] = new int[][]{{134}, {208}, {756}};// phía duoi
    //    int arrNew[][] = new int[][]{{1, 3, 4}, {2, 7, 8}, {0, 5, 6}};// phía phải
    //    int arrNew[][] = new int[][]{{0, 3, 4}, {2, 7, 8}, {1, 5, 6}};// phía trái
    Giải thuật chỉ hiện thực ở mức cơ bản nên phải xét vị trí từng nút được nhấn.

    code GameXepSo.java
    PHP:
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import javax.swing.JButton;
    import javax.swing.JOptionPane;

    /**
     *
     * @author JackV <JackV at congdongjava.com>
     */
    public class GameXepSo extends javax.swing.JFrame {

        
    /** Creates new form GameXepSo */
        
    public GameXepSo() {
            
    initComponents();
            
    setSize(200200);
            
    setLocationRelativeTo(this);
            
    setButName();
            
    setButText();
        }

        private 
    void setButName() {
            
    //đặt tên theo vị trí trong mảng để sau này khi nút nào đó có event thì từ nút đó lấy ra tên tức là vị trí nút được nhấn
            
    but00.setName("00");
            
    but10.setName("10");
            
    but20.setName("20");
            
    but01.setName("01");
            
    but11.setName("11");
            
    but21.setName("21");
            
    but02.setName("02");
            
    but12.setName("12");
            
    but22.setName("22");
        }

        private 
    void setButText() {
            
    but00.setText(arrNew[0][0] + "");
            
    but10.setText(arrNew[1][0] + "");
            
    but20.setText(arrNew[2][0] + "");
            
    but01.setText(arrNew[0][1] + "");
            
    but11.setText(arrNew[1][1] + "");
            
    but21.setText(arrNew[2][1] + "");
            
    but02.setText(arrNew[0][2] + "");
            
    but12.setText(arrNew[1][2] + "");
            
    but22.setText(arrNew[2][2] + "");
        }
    //    int arrNew[][] = new int[][]{{1, 4, 7}, {2, 5, 8}, {3, 6, 0}};// successful
        
    int arrNew[][] = new int[][]{{134}, {208}, {756}};// phía duoi
    //    int arrNew[][] = new int[][]{{1, 3, 4}, {2, 7, 8}, {0, 5, 6}};// phía phải
    //    int arrNew[][] = new int[][]{{0, 3, 4}, {2, 7, 8}, {1, 5, 6}};// phía trái
        
    int arrSuccess[][] = new int[][]{{147}, {258}, {360}};// successful

        
    private void diChuyen(Object obj) {
            
    JButton butClicked = ((JButtonobj);
            
    System.out.println("Click: " butClicked.getName());
            
    Point pClickedLocation = new Point(Integer.parseInt("" butClicked.getName().charAt(0)), Integer.parseInt("" butClicked.getName().charAt(1)));
            
    int x = (int) pClickedLocation.getX();
            
    int y = (int) pClickedLocation.getY();
            if (
    == 1) {// nhấn nút ở cột giữa
                
    if (== 0) {// nhấn nút ở dòng trên cùng
                    
    if (arrNew[x][1] == 0) { // kiểm tra nút phía dưới có giá trị 0
                        
    int tmp arrNew[x][y];
                        
    arrNew[x][y] = arrNew[x][1];
                        
    arrNew[x][1] = tmp;
                    } else if (
    arrNew[1][y] == 0) { // kiểm tra nút phía phải có giá trị 0
                        
    int tmp arrNew[x][y];
                        
    arrNew[x][y] = arrNew[1][y];
                        
    arrNew[1][y] = tmp;
                    } else if (
    arrNew[1][y] == 0) { // kiểm tra nút phía trái có giá trị 0
                        
    int tmp arrNew[x][y];
                        
    arrNew[x][y] = arrNew[1][y];
                        
    arrNew[1][y] = tmp;
                    }
                } else if (
    pClickedLocation.getY() == 1) {// nhấn nút ở dòng giữa
                
    } else if (pClickedLocation.getY() == 2) {// nhấn nút ở dòng dưới cùng
                
    }
            }
            
    setButText();
            
    checkSuccessful();
        }

        private 
    void checkSuccessful() {
            if (
    arrNew == arrSuccess) {
                
    JOptionPane.showMessageDialog(rootPane"Successful");
            }
        }

        
    /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        
    @SuppressWarnings("unchecked")
        
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
        
    private void initComponents() {

            
    but00 = new javax.swing.JButton();
            
    but10 = new javax.swing.JButton();
            
    but20 = new javax.swing.JButton();
            
    but01 = new javax.swing.JButton();
            
    but11 = new javax.swing.JButton();
            
    but21 = new javax.swing.JButton();
            
    but02 = new javax.swing.JButton();
            
    but12 = new javax.swing.JButton();
            
    but22 = new javax.swing.JButton();

            
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            
    getContentPane().setLayout(new java.awt.GridLayout(33));

            
    but00.addActionListener(new java.awt.event.ActionListener() {
                public 
    void actionPerformed(java.awt.event.ActionEvent evt) {
                    
    but00ActionPerformed(evt);
                }
            });
            
    getContentPane().add(but00);

            
    but10.setBackground(new java.awt.Color(5151255));
            
    but10.addActionListener(new java.awt.event.ActionListener() {
                public 
    void actionPerformed(java.awt.event.ActionEvent evt) {
                    
    but10ActionPerformed(evt);
                }
            });
            
    getContentPane().add(but10);

            
    but20.addActionListener(new java.awt.event.ActionListener() {
                public 
    void actionPerformed(java.awt.event.ActionEvent evt) {
                    
    but20ActionPerformed(evt);
                }
            });
            
    getContentPane().add(but20);

            
    but01.addActionListener(new java.awt.event.ActionListener() {
                public 
    void actionPerformed(java.awt.event.ActionEvent evt) {
                    
    but01ActionPerformed(evt);
                }
            });
            
    getContentPane().add(but01);

            
    but11.addActionListener(new java.awt.event.ActionListener() {
                public 
    void actionPerformed(java.awt.event.ActionEvent evt) {
                    
    but11ActionPerformed(evt);
                }
            });
            
    getContentPane().add(but11);

            
    but21.addActionListener(new java.awt.event.ActionListener() {
                public 
    void actionPerformed(java.awt.event.ActionEvent evt) {
                    
    but21ActionPerformed(evt);
                }
            });
            
    getContentPane().add(but21);

            
    but02.addActionListener(new java.awt.event.ActionListener() {
                public 
    void actionPerformed(java.awt.event.ActionEvent evt) {
                    
    but02ActionPerformed(evt);
                }
            });
            
    getContentPane().add(but02);

            
    but12.addActionListener(new java.awt.event.ActionListener() {
                public 
    void actionPerformed(java.awt.event.ActionEvent evt) {
                    
    but12ActionPerformed(evt);
                }
            });
            
    getContentPane().add(but12);

            
    but22.addActionListener(new java.awt.event.ActionListener() {
                public 
    void actionPerformed(java.awt.event.ActionEvent evt) {
                    
    but22ActionPerformed(evt);
                }
            });
            
    getContentPane().add(but22);

            
    pack();
        }
    // </editor-fold>//GEN-END:initComponents

        
    private void but00ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_but00ActionPerformed
            
    diChuyen(evt.getSource());
        }
    //GEN-LAST:event_but00ActionPerformed

        
    private void but10ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_but10ActionPerformed
            
    diChuyen(evt.getSource());
        }
    //GEN-LAST:event_but10ActionPerformed

        
    private void but20ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_but20ActionPerformed
            
    diChuyen(evt.getSource());
        }
    //GEN-LAST:event_but20ActionPerformed

        
    private void but01ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_but01ActionPerformed
            
    diChuyen(evt.getSource());
        }
    //GEN-LAST:event_but01ActionPerformed

        
    private void but11ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_but11ActionPerformed
            
    diChuyen(evt.getSource());
        }
    //GEN-LAST:event_but11ActionPerformed

        
    private void but21ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_but21ActionPerformed
            
    diChuyen(evt.getSource());
        }
    //GEN-LAST:event_but21ActionPerformed

        
    private void but02ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_but02ActionPerformed
            
    diChuyen(evt.getSource());
        }
    //GEN-LAST:event_but02ActionPerformed

        
    private void but12ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_but12ActionPerformed
            
    diChuyen(evt.getSource());
        }
    //GEN-LAST:event_but12ActionPerformed

        
    private void but22ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_but22ActionPerformed
            
    diChuyen(evt.getSource());
        }
    //GEN-LAST:event_but22ActionPerformed

        /**
         * @param args the command line arguments
         */
        
    public static void main(String args[]) {
            
    java.awt.EventQueue.invokeLater(new Runnable() {

                public 
    void run() {
                    new 
    GameXepSo().setVisible(true);
                }
            });
        }
        
    // Variables declaration - do not modify//GEN-BEGIN:variables
        
    private javax.swing.JButton but00;
        private 
    javax.swing.JButton but01;
        private 
    javax.swing.JButton but02;
        private 
    javax.swing.JButton but10;
        private 
    javax.swing.JButton but11;
        private 
    javax.swing.JButton but12;
        private 
    javax.swing.JButton but20;
        private 
    javax.swing.JButton but21;
        private 
    javax.swing.JButton but22;
        
    // End of variables declaration//GEN-END:variables
    }
    Nếu bạn muốn mở form bằng netbeans thì lưu thêm file GameXepSo.form
    PHP:
    <?xml version="1.1" encoding="UTF-8" ?>

    <Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
      <Properties>
        <Property name="defaultCloseOperation" type="int" value="3"/>
      </Properties>
      <SyntheticProperties>
        <SyntheticProperty name="formSizePolicy" type="int" value="1"/>
      </SyntheticProperties>
      <AuxValues>
        <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
        <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
        <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
        <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
        <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
        <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
        <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
        <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
        <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
      </AuxValues>

      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
        <Property name="columns" type="int" value="3"/>
        <Property name="rows" type="int" value="3"/>
      </Layout>
      <SubComponents>
        <Component class="javax.swing.JButton" name="but00">
          <Events>
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="but00ActionPerformed"/>
          </Events>
        </Component>
        <Component class="javax.swing.JButton" name="but10">
          <Properties>
            <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
              <Color blue="ff" green="33" red="33" type="rgb"/>
            </Property>
          </Properties>
          <Events>
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="but10ActionPerformed"/>
          </Events>
        </Component>
        <Component class="javax.swing.JButton" name="but20">
          <Events>
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="but20ActionPerformed"/>
          </Events>
        </Component>
        <Component class="javax.swing.JButton" name="but01">
          <Events>
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="but01ActionPerformed"/>
          </Events>
        </Component>
        <Component class="javax.swing.JButton" name="but11">
          <Events>
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="but11ActionPerformed"/>
          </Events>
        </Component>
        <Component class="javax.swing.JButton" name="but21">
          <Events>
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="but21ActionPerformed"/>
          </Events>
        </Component>
        <Component class="javax.swing.JButton" name="but02">
          <Events>
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="but02ActionPerformed"/>
          </Events>
        </Component>
        <Component class="javax.swing.JButton" name="but12">
          <Events>
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="but12ActionPerformed"/>
          </Events>
        </Component>
        <Component class="javax.swing.JButton" name="but22">
          <Events>
            <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="but22ActionPerformed"/>
          </Events>
        </Component>
      </SubComponents>
    </Form>
     
  18. acoolboylovely

    acoolboylovely New Member

    Ðề: Help me! game xếp số

    em làm hoài cũng không sửa được lỗi ô cạnh ô trống mới đổi ~X(
    các ô xa ô trống vẫn đổi. sư phụ nào làm rồi vào cứu với
     
  19. JackLtv

    JackLtv New Member

    Ðề: Help me! game xếp số

    Mình share trong bài này rồi mà.
    http://congdongjava.com/showthread.php?t=22963

    Đây là hướng giải quyết vấn đề theo thuật toán.
    Còn nếu bạn muốn tự di chuyển thì xem cái dưới đây của mình.
    Mình viết on C# nhưng bạn hoàn toàn có thể Edit lại on Java. :)
    PHP:
            private static int Direction(Point LocPoint ep)
            {
                
    int valuetoreturn 0;
                if ((
    Loc.ep.X) && (Loc.== ep.Y))
                    
    valuetoreturn 0;
                else if ((
    Loc.ep.X) && (Loc.== ep.Y))
                    
    valuetoreturn 2;
                else if ((
    Loc.ep.Y) && (Loc.== ep.X))
                    
    valuetoreturn 3;
                else if ((
    Loc.ep.Y) && (Loc.== ep.X))
                    
    valuetoreturn 1;
                return 
    valuetoreturn;
            }

            private 
    void MoveButton(Button ClickedButton)
            {        
                if (
    EmptyPoint.== ClickedButton.Location.|| EmptyPoint.== ClickedButton.Location.Y)
                {
                    
    Point tempEmptyPoint = new Point();
                    
    tempEmptyPoint ClickedButton.Location;
                    
    int d Direction(ClickedButton.LocationEmptyPoint);
                    if (
    EmptyPoint.== ClickedButton.Location.X)
                    {
                        foreach (
    Button bx in panel1.Controls)
                        {
                            if (((
    bx.Location.>= ClickedButton.Location.Y)
                                && (
    bx.Location.EmptyPoint.Y) && (bx.Location.== EmptyPoint.X)) || ((bx.Location.<= ClickedButton.Location.Y)
                                && (
    bx.Location.EmptyPoint.Y) && (bx.Location.== EmptyPoint.X)))
                            {
                                switch (
    d)
                                {
                                    case 
    1Handles.MoveUp(bx);
                                        break;
                                    case 
    3Handles.MoveDown(bx);
                                        break;
                                }
                            }

                        }
                    } 
                    if (
    EmptyPoint.== ClickedButton.Location.Y)
                    {
                        foreach (
    Button bx in panel1.Controls)
                        {
                            if (((
    bx.Location.>= ClickedButton.Location.X)
                                && (
    bx.Location.EmptyPoint.X) && (bx.Location.== EmptyPoint.Y)) || ((bx.Location.<= ClickedButton.Location.X)
                                && (
    bx.Location.EmptyPoint.X) && (bx.Location.== EmptyPoint.Y)))
                            {
                                switch (
    d)
                                {
                                    case 
    0Handles.MoveRight(bx);
                                        break;
                                    case 
    2Handles.MoveLeft(bx);
                                        break;
                                }

                            }
                        }
                    }
                    
    EmptyPoint tempEmptyPoint;
                    
    pz.SetCurrent(btn1.Locationbtn2.Locationbtn3.Locationbtn4.Locationbtn5.Locationbtn6.Locationbtn7.Locationbtn8.LocationEmptyPoint);
                }
            }
    PHP:
        class Handles
        
    {
            public static 
    void MoveLeft(Button b)
            {
                
    b.Location = new Point(b.Location.b.Size.Widthb.Location.Y);
            }
            public static 
    void MoveRight(Button b)
            {
                
    b.Location = new Point(b.Location.b.Size.Widthb.Location.Y);
            }
            public static 
    void MoveUp(Button b)
            {
                
    b.Location = new Point(b.Location.Xb.Location.b.Size.Height);
            }
            public static 
    void MoveDown(Button b)
            {
                
    b.Location = new Point(b.Location.Xb.Location.b.Size.Height);
            }
        }
     
  20. JackLtv

    JackLtv New Member

    Ðề: Help me! game xếp số

    PHP:
        class Move
        
    {
            public static 
    void Left(Puzzle.State _Currentint iint j)
            {
                
    _Current.Data[ij] = _Current.Data[i1];
                
    _Current.Data[i1] = 0;
            }

            public static 
    void Right(Puzzle.State _Currentint iint j)
            {
                
    _Current.Data[ij] = _Current.Data[i1];
                
    _Current.Data[i1] = 0;
            }

            public static 
    void Down(Puzzle.State _Currentint iint j)
            {
                
    _Current.Data[ij] = _Current.Data[1j];
                
    _Current.Data[1j] = 0;
            }

            public static 
    void Up(Puzzle.State _Currentint iint j)
            {
                
    _Current.Data[ij] = _Current.Data[1j];
                
    _Current.Data[1j] = 0;
            }
        }

    PHP:
    Cách thức di chuyển ô trống.
    VD:
     
    1 2 3
     5 0 7
     4 8 6

    Left

    A[ij] = A[i1];
    A[i1] = 0;
    Khi thực hiện left thì mảng sẽ như sau:
    1 2 3
    0 5 7
    4 8 6
    Làm tương tự với Right, Up, Down.

    Đây là bảng số sau khi di chuyển nhưng các bạn lại hỏi: Làm sao để di chuyển các Button (mảnh ghép) khi mảng số bị thay đổi? (Phục vụ cho việc tự động giải)

    Rất đơn giản, các bạn hãy di chuyển tọa độ của nó.
    Ví dụ:
    Tôi có một Panel chứa các button (mảnh ghép), với mỗi mảnh ghép hình vuông có kích thước: 100, 100
    => Size of panel is: 300, 300.
    => Ta có một mảng Location như sau:
    PHP:
                Location = new Point[] { new Point(00), new Point(1000), new Point(2000), new Point(0100), new Point(100100), 
                    new 
    Point(200100), new Point(0200), new Point(100200), new Point(200200)};

    Mảng Location này với mục đích lưu trữ vị trí thật sự của mảng đích.

    Khi ta move xongta hãy Set lại Location cho các Button.
    VDLúc đầu có mảng như sau:

    1 2 3
    5 0 7
    4 8 6


    Button 5 có vị trí: (0, 100) sau khi di chuyển sẽ là: (100, 100)

    Từ đó ta có hàm SetLocation như sau:
    Dyệt lần lượt các phần tử trong ma trận đưa vào.
    Ví dụ:
    1 2 3
    0 5 7
    4 8 6
    A[0, 0] = 1; => SetLocation cho Button 1;
    A[1, 1] = 5; => SetLocation cho Button 5;
    Tương tự SetLocation cho đến hết.


    PHP:
            public void SetLocation(int[,] _Current)
            {
                
    int i 0;
                for (
    int j 03j++)
                {
                    for (
    int k 03k++)
                    {
                        
    Button(_Current[jk]).Location Puzzle.Location[i++];
                        
    // Có nghĩa là button A[j, k].Location = Location[i]; // Trong mảng Location
                    
    }
                }
            }

    Từ những gì tôi nói ở trên thì các bạn hãy cài đặt Action cho Button (Mảnh ghép) như sau:
    Khi Click vào Button thì các bạn sẽ lấy giá trị của mảng hiện tại, sau đó Di chuyển rồi set lại
    Loction cho mảng mới. :)
     

Chia sẻ trang này

Loading...