Sunday, April 7, 2013

Games Mine


Hai Gan,,  hari ini saya ingin membuat games Mine dengan menggunakan java.

1. Pertama - tama kita buka aplikasi Notped ++

2. Copas coding dibawah ini ke Notped ++

Source code :



  
  import java.awt.*;
    import java.awt.event.*;
    
    import javax.swing.*;
    public class Mine extends JFrame implements ActionListener, MouseListener{
            int nomines = 80;
            int perm[][];
           String tmp;
           boolean found = false;
           int row;
           int column;
           int guesses[][];
           JButton b[][];
           int[][] mines;
           boolean allmines;
           int n = 30;
           int m = 30;
           int deltax[] = {-1, 0, 1, -1, 1, -1, 0, 1};
           int deltay[] = {-1, -1, -1, 0, 0, 1, 1, 1};
           double starttime;
           double endtime;
           public Mine(){
           this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            perm = new int[n][m];
                   boolean allmines = false;
                   guesses = new int [n+2][m+2];
                   mines = new int[n+2][m+2];
                   b = new JButton [n][m];
                   setLayout(new GridLayout(n,m));
                   for (int y = 0;y<m+2;y++){
                           mines[0][y] = 3;
                           mines[n+1][y] = 3;
                           guesses[0][y] = 3;
                           guesses[n+1][y] = 3;
                   }
                   for (int x = 0;x<n+2;x++){
                           mines[x][0] = 3;
                           mines[x][m+1] = 3;
                           guesses[x][0] = 3;
                           guesses[x][m+1] = 3;
                   }
                   do {
                           int check = 0;
                           for (int y = 1;y<m+1;y++){
                               for (int x = 1;x<n+1;x++){
                                       mines[x][y] = 0;
                                       guesses[x][y] = 0;
                               }
                           }
                   for (int x = 0;x<nomines;x++){
                           mines [(int) (Math.random()*(n)+1)][(int) (Math.random()*(m)+1)] = 1;
                   }
                   for (int x = 0;x<n;x++){
                           for (int y = 0;y<m;y++){
                   if (mines[x+1][y+1] == 1){
                           check++;
                   }
                   }}
                   if (check == nomines){
                           allmines = true;
                           }}while (allmines == false);
                   for (int y = 0;y<m;y++){
                           for (int x = 0;x<n;x++){
                               if ((mines[x+1][y+1] == 0) || (mines[x+1][y+1] == 1)){
                                       perm[x][y] = perimcheck(x,y);
                               }
                                   b[x][y] = new JButton("?");
                                   b[x][y].addActionListener(this);
                                   b[x][y].addMouseListener(this);
                                   add(b[x][y]);
                                   b[x][y].setEnabled(true);
                           }//end inner for
                   }//end for
                   pack();
                   setVisible(true);
                   for (int y = 0;y<m+2;y++){
                   for (int x = 0;x<n+2;x++){
                   System.out.print(mines[x][y]);
                   }
                   System.out.println("");}
                   starttime = System.nanoTime();
           }//end constructor Mine()
    
           public void actionPerformed(ActionEvent e){
               found =  false;
                   JButton current = (JButton)e.getSource();
                   for (int y = 0;y<m;y++){
                           for (int x = 0;x<n;x++){
                                   JButton t = b[x][y];
                                   if(t == current){
                                           row=x;column=y; found =true;
                                   }
                           }//end inner for
                   }//end for
                   if(!found) {
                           System.out.println("didn't find the button, there was an error "); System.exit(-1);
                   }
                   Component temporaryLostComponent = null;
                   if (b[row][column].getBackground() == Color.orange){
                       return;
                   }else if (mines[row+1][column+1] == 1){
                           JOptionPane.showMessageDialog(temporaryLostComponent, "You set off a Mine!!!!.");
                           System.exit(0);
                   } else {
                           tmp = Integer.toString(perm[row][column]);
                           if (perm[row][column] == 0){
                                   tmp = " ";
                           }
                           b[row][column].setText(tmp);
                           b[row][column].setEnabled(false);
                           checkifend();
                           if (perm[row][column] == 0){
                               scan(row, column);
                               checkifend();
                           }}}
          
           public void checkifend(){
               int check= 0;
               for (int y = 0; y<m;y++){
                    for (int x = 0;x<n;x++){
               if (b[x][y].isEnabled()){
                       check++;
               }
                    }}
               if (check == nomines){
                       endtime = System.nanoTime();
                       Component temporaryLostComponent = null;
                       JOptionPane.showMessageDialog(temporaryLostComponent, "Congratulations you won!!! It took you "+(int)((endtime-starttime)/1000000000)+" seconds!");
               }
           }
    
           public void scan(int x, int y){
                   for (int a = 0;a<8;a++){
           if (mines[x+1+deltax[a]][y+1+deltay[a]] == 3){
              
           } else if ((perm[x+deltax[a]][y+deltay[a]] == 0) && (mines[x+1+deltax[a]][y+1+deltay[a]] == 0) && (guesses[x+deltax[a]+1][y+deltay[a]+1] == 0)){
               if (b[x+deltax[a]][y+deltay[a]].isEnabled()){
                   b[x+deltax[a]][y+deltay[a]].setText(" ");
                   b[x+deltax[a]][y+deltay[a]].setEnabled(false);
                   scan(x+deltax[a], y+deltay[a]);
          }
           } else if ((perm[x+deltax[a]][y+deltay[a]] != 0) && (mines[x+1+deltax[a]][y+1+deltay[a]] == 0)  && (guesses[x+deltax[a]+1][y+deltay[a]+1] == 0)){
                   tmp = new Integer(perm[x+deltax[a]][y+deltay[a]]).toString();
                   b[x+deltax[a]][y+deltay[a]].setText(Integer.toString(perm[x+deltax[a]][y+deltay[a]]));
                   b[x+deltax[a]][y+deltay[a]].setEnabled(false);   
           }
                   }}
          
           public int perimcheck(int a, int y){
                   int minecount = 0;
                           for (int x = 0;x<8;x++){
                                   if (mines[a+deltax[x]+1][y+deltay[x]+1] == 1){
                                           minecount++;
                                   }
                   }
                   return minecount;
           }
    
           public void windowIconified(WindowEvent e){
    
           }
    
           public static void main(String[] args){
                   new Mine();
           }
    
    
                    public void mouseClicked(MouseEvent e) {
                  
            }
    
    
    
                    @Override
                    public void mouseEntered(MouseEvent arg0) {
                            // TODO Auto-generated method stub
                          
                    }
    
                    @Override
                    public void mouseExited(MouseEvent arg0) {
                            // TODO Auto-generated method stub
                          
                    }
    
                    @Override
                    public void mousePressed(MouseEvent e) {
                            if (e.getButton() == MouseEvent.BUTTON3) {
                                    found =  false;
                        Object current = e.getSource();
                        for (int y = 0;y<m;y++){
                                for (int x = 0;x<n;x++){
                                        JButton t = b[x][y];
                                        if(t == current){
                                                row=x;column=y; found =true;
                                        }
                                }//end inner for
                        }//end for
                        if(!found) {
                                System.out.println("didn't find the button, there was an error "); System.exit(-1);
                        }
                        if ((guesses[row+1][column+1] == 0) && (b[row][column].isEnabled())){
                            b[row][column].setText("x");
                        guesses[row+1][column+1] = 1;
                        b[row][column].setBackground(Color.orange);
                        } else if (guesses[row+1][column+1] == 1){
                            b[row][column].setText("?");
                            guesses[row+1][column+1] = 0;
                            b[row][column].setBackground(null);
                        }}
                    }
    
                    @Override
                    public void mouseReleased(MouseEvent arg0) {
                            // TODO Auto-generated method stub
                          
                    }
    
    
    }//end class


3. Save file yang sudah di bikin tadi dengan nama Mine.java
4. Komfile file tersebut dengan CMD
5. SUKSES dehh gannn bikin games Mine menggunakan Java
Outputnya :



jangan lupa komentarnya ya gannn,,,
Salam sukses gannn

Link source code nya yang sudah jadi dan complite :  http://www.mediafire.com/?9cq1i6fp6sb44ie

0 comments:

Post a Comment