/*
* 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) {
} 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 (tablica[i - 1][j - 1] == jeden) {
zywi++;
} else if (tablica[i - 1][j - 1] == dwa) {
sasiedzi[2].ilość++;
zywi++;
}
}
}
//lewy bok
if (i > 0) {
if (tablica[i - 1][j] == jeden) {
zywi++;
} else if (tablica[i - 1][j] == dwa) {
sasiedzi[2].ilość++;
zywi++;
}
}
//dolny lewy róg
if (i > 0) {
if (tablica[i - 1][j + 1] == jeden) {
zywi++;
} else if (tablica[i - 1][j + 1] == dwa) {
sasiedzi[2].ilość++;
zywi++;
}
}
}
//nad badaną
if (j > 0) {
if (tablica[i][j - 1] == jeden) {
zywi++;
} else if (tablica[i][j - 1] == dwa) {
sasiedzi[2].ilość++;
zywi++;
}
}
//pod badaną
if (j < 31) {
if (tablica[i][j + 1] == jeden) {
zywi++;
} else if (tablica[i][j + 1] == dwa) {
sasiedzi[2].ilość++;
zywi++;
}
}
//górny prawy róg
if (i < 36) {
if (tablica[i + 1][j - 1] == jeden) {
zywi++;
} else if (tablica[i + 1][j - 1] == dwa) {
sasiedzi[2].ilość++;
zywi++;
}
}
}
//prawy bok
if (i < 36) {
if (tablica[i + 1][j] == jeden) {
zywi++;
} else if (tablica[i + 1][j] == dwa) {
sasiedzi[2].ilość++;
zywi++;
}
}
//dolny lewy róg
if (i < 36) {
if (tablica[i + 1][j + 1] == jeden) {
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( ) {
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{
IlośćKolorów( ){
}
}
}
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
ReplyDeleteMiło przeczytać taki komentarz:)
ReplyDeletePozdrawiam!