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( );

}//

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



Share on Hacker News
Share on LinkedIn


← Home


Want to learn more?

Sign up to get a digest of my articles and interesting links via email every month.

* indicates required

Please select all the ways you would like to hear from Krzysztof Kula:

You can unsubscribe at any time by clicking the link in the footer of my emails.

I use Mailchimp as a marketing platform. By clicking below to subscribe, you acknowledge that your information will be transferred to Mailchimp for processing. Learn more about Mailchimp's privacy practices here.