Program zaliczeniowy: Gra w życie

Gra w życie.
Poniżej zamieszczam mój najnowszy programik napisany w javie. Pisałem go w NetBeans 6.1 co widać jeśli ktoś w nim pracował. Porgram umożliwia rysowanie oraz wykonanie kroku po naciśnięciu przycisku "Krok". W zrozumieniu jest raczej prosty więc jeśli komuś się przyda to bardzo dobrze;-)


 /*

* Main.java

*Gra w życie z użyciem dwóch kolorów

* Created on 7 czerwiec 2008, 19:20

*/

package grawzycie;


import java.awt.Color;

import java.awt.Graphics;


/**

*

* @author  shaman

*/

public class Main extends javax.swing.JFrame {

       /** Creates new form Main */

       public Main( ) {
             tablica = new Color[37][32];

           tymczasowa = new Color[37][32];

           for (int i = 0; i < 37; i++) {
                 for (int j = 0; j < 32; j++) {
                     tablica[i][j] = new Color(255, 255, 255);

               }
           }

           kolor = true;

           initComponents( );

           g = jPanel1.getGraphics( );
       }


       /** 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">

       private void initComponents( ) {

             jButton1 = new javax.swing.JButton( );

             jPanel1 = new javax.swing.JPanel( );


             setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

             setMinimumSize(new java.awt.Dimension(400, 400));

             setResizable(false);


             jButton1.setText("Krok");

             jButton1.addActionListener(new java.awt.event.ActionListener( ) {
                   public void actionPerformed(java.awt.event.ActionEvent evt) {
                       jButton1ActionPerformed(evt);
                 }
             });


             jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

             jPanel1.setMinimumSize(new java.awt.Dimension(200, 200));

             jPanel1.setPreferredSize(new java.awt.Dimension(200, 200));

             jPanel1.addMouseListener(new java.awt.event.MouseAdapter( ) {
                   public void mousePressed(java.awt.event.MouseEvent evt) {
                       jPanel1MousePressed(evt);
                 }
             });


             javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);

             jPanel1.setLayout(jPanel1Layout);

             jPanel1Layout.setHorizontalGroup(

                 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

                 .addGap(0, 198, Short.MAX_VALUE)

             );

             jPanel1Layout.setVerticalGroup(

                 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

                 .addGap(0, 198, Short.MAX_VALUE)

             );


             javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane( ));

             getContentPane( ).setLayout(layout);

             layout.setHorizontalGroup(

                 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

                 .addGroup(layout.createSequentialGroup( )

                     .addContainerGap( )

                     .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

                         .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

                         .addComponent(jButton1))

                     .addContainerGap( ))

             );

             layout.setVerticalGroup(

                 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

                 .addGroup(layout.createSequentialGroup( )

                     .addContainerGap( )

                     .addComponent(jButton1)

                     .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

                     .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

                     .addContainerGap( ))

             );


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


      private void jPanel1MousePressed(java.awt.event.MouseEvent evt) {                                     
        // TODO add your handling code here:




         int x = evt.getX( );

         System.out.println("x = " + x);

         x = x - x % 10;

         System.out.println("x = " + x);

         int iX = x / 10;

         System.out.println("iX = " + iX);


         int y = evt.getY( );

         System.out.println("y = " + y);

         y = y - y % 10;

         System.out.println("y = " + y);

         int iY = y / 10;

         System.out.println("iY = " + iY);


         if (kolor) {
               tablica[iX][iY] = jeden;

         } else {

             tablica[iX][iY] = dwa;
         }

         kolor = !kolor;




         g.setColor(tablica[iX][iY]);

         g.fillRect(x, y, 7, 7);
      }                                    


      private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:

         //tablica przechowująca ilość sąsiadów w koorze 1 i 2

         IlośćKolorów sasiedzi[ ] = new IlośćKolorów[3];

         sasiedzi[1] = new IlośćKolorów( );

         sasiedzi[2] = new IlośćKolorów( );

         //ilość żywych sąsiadów

         int zywi = 0;


         //pętle sprawdzające każdy element tablicy

         for (int i = 0; i < 37; i++) {
               for (int j = 0; j < 32; j++) {

                   //ilosc zywych sąsiadów

                   zywi = 0;

                   sasiedzi[1].ilość = 0;

                   sasiedzi[2].ilość = 0;

        //górny lewy róg

                   if (i > 0) {
                         if (j > 0) {
                             if (tablica[i - 1][j - 1] == jeden) {
                                 sasiedzi[1].ilość++;

                               zywi++;

                           } else if (tablica[i - 1][j - 1] == dwa) {

                               sasiedzi[2].ilość++;

                               zywi++;
                           }
                       }
                   }


                   //lewy bok

                   if (i > 0) {
                         if (tablica[i - 1][j] == jeden) {
                             sasiedzi[1].ilość++;

                           zywi++;

                       } else if (tablica[i - 1][j] == dwa) {

                           sasiedzi[2].ilość++;

                           zywi++;
                       }

                   }


                   //dolny lewy róg

                   if (i > 0) {
                         if (j < 31) {
                             if (tablica[i - 1][j + 1] == jeden) {
                                 sasiedzi[1].ilość++;

                               zywi++;

                           } else if (tablica[i - 1][j + 1] == dwa) {

                               sasiedzi[2].ilość++;

                               zywi++;
                           }
                       }
                   }


                   //nad badaną

                   if (j > 0) {
                         if (tablica[i][j - 1] == jeden) {
                             sasiedzi[1].ilość++;

                           zywi++;

                       } else if (tablica[i][j - 1] == dwa) {

                           sasiedzi[2].ilość++;

                           zywi++;
                       }

                   }


                   //pod badaną

                   if (j < 31) {
                         if (tablica[i][j + 1] == jeden) {
                             sasiedzi[1].ilość++;

                           zywi++;

                       } else if (tablica[i][j + 1] == dwa) {

                           sasiedzi[2].ilość++;

                           zywi++;
                       }

                   }



                   //górny prawy róg

                   if (i < 36) {
                         if (j > 0) {
                             if (tablica[i + 1][j - 1] == jeden) {
                                 sasiedzi[1].ilość++;

                               zywi++;

                           } else if (tablica[i + 1][j - 1] == dwa) {

                               sasiedzi[2].ilość++;

                               zywi++;
                           }
                       }
                   }


                   //prawy bok

                   if (i < 36) {
                         if (tablica[i + 1][j] == jeden) {
                             sasiedzi[1].ilość++;

                           zywi++;

                       } else if (tablica[i + 1][j] == dwa) {

                           sasiedzi[2].ilość++;

                           zywi++;
                       }

                   }


                   //dolny lewy róg

                   if (i < 36) {
                         if (j < 31) {
                             if (tablica[i + 1][j + 1] == jeden) {
                                 sasiedzi[1].ilość++;

                               zywi++;

                           } else if (tablica[i + 1][j + 1] == dwa) {

                               sasiedzi[2].ilość++;

                               zywi++;
                           }
                       }
                   }


                   //jesli spełnia warunki życia

                   if (zywi != 2 && zywi != 3) {
                         tymczasowa[i][j] = martwa;


                   } else {

                       tymczasowa[i][j] = tablica[i][j];

                   }


                   //jesli ożywa

                   if (zywi == 3 && tablica[i][j].equals(martwa)) {
                         if (sasiedzi[1].ilość >= 2) {
                             tymczasowa[i][j] = jeden;

                       } else if (sasiedzi[2].ilość >= 2) {

                           tymczasowa[i][j] = dwa;
                       }

                       System.out.println("ozywa" + "jeden" + sasiedzi[1].ilość);

                       System.out.println("ozywa" + "dwa" + sasiedzi[2].ilość);
                   }

               }
           }


           //przepisanie tablicy tymczasowej do głównej

           for (int i = 0; i < 37; i++) {
                 for (int j = 0; j < 32; j++) {

                     tablica[i][j] = tymczasowa[i][j];

                     ///

                     //rysowanie tablicy!!!!

                     g.setColor(tablica[i][j]);


                     g.fillRect(i * 10, j * 10, 7, 7);
                 }
             }

          }                                        


             /**

             * @param args the command line arguments

             */

             public static void main(String args[ ]) {
                   java.awt.EventQueue.invokeLater(new Runnable( ) {
                       public void run( ) {
                           new Main( ).setVisible(true);
                     }
                 });
             }


             // Variables declaration - do not modify

             private javax.swing.JButton jButton1;

             private javax.swing.JPanel jPanel1;

             // End of variables declaration

             

             //tablica przechowująca stany komórek - ich kolory

             private Color tablica[ ][ ],tymczasowa[ ][ ]; 

             private boolean kolor = true; 

             private Color jeden = new Color(255,0,0);

             private Color dwa = new Color(0,255,0);

             private Color martwa = new Color(255,255,255);

             private Graphics g;

             //klasa przechowująca ilość sasiadów w danym kolorze

             private class IlośćKolorów{
                   public int ilość;

                 IlośćKolorów( ){
                       ilość = 0;
                 }
                  }

             
          }


          Kod wygenerowany za pomocą programu: Code Generator

          Comments

          1. Podziękowania i gratulacje dla Autora. Realizacja tej samej gry w C++ Builderze jest przedstawiona w książce Andrzeja Stasiewicza "C++ Builder całkiem inny świat", ma więcej możliwości, ale korzysta z bibliotecznego komponentu TGridBag, którego odpowiednika w Javie nie ma (albo go nie znalazłem). Właśnie się zastanawiałem, jak to samo zrealizować w Javie

            ReplyDelete
          2. Miło przeczytać taki komentarz:)
            Pozdrawiam!

            ReplyDelete

          Post a Comment

          Comments:

          Popular posts from this blog

          How to simulate slow connection (developer proxy in Node.js)

          How to use NPM packages from private repositories on bitbucket