Hallo zusammen:)
Folgendes Problem:
Habe erfolgreich Conway’s Game of Life programmiert.
Nächster Schritt soll die Verarbeitung in GUI sein, soweit so gut.
Habe bereits ein Frame erstellt und “Startbutton” sowie Header hinzugefügt.
Jetzt gehts daran die Consolenausgabe in den Frame zu überführen, an der Stelle komme ich ins stocken.
Life.java
import java.util.Random;
public class Life {
public static int Zeilen = 10;
public static int Spalten = 10;
public static int spielmarken = 25;
public static char spielfeld[][] = new char[Zeilen][Spalten];
public Life() {
for (int i = 0; i < Zeilen; i++) {
for (int j = 0; j < Spalten; j++) {
spielfeld**[j] = '0';
}
}
}
// public void anfangspopulation(Random zufall) {
// for (int i = 0; i < zufall.length; i++) {
// spielfeld[zufall**[0]][zufall**[1]] = '1';
//
// }
// }
public void zufallBakterien() {
Random zufall = new Random();
for (int i = 0; i <= spielmarken; i++) {
int z1 = zufall.nextInt(Zeilen);
int z2 = zufall.nextInt(Spalten);
spielfeld[z1][z2] = '1';
}
}
public void druckeSpielfeld() {
System.out.println();
System.out.println();
for (int i = 0; i < Zeilen; i++) {
for (int j = 0; j < Spalten; j++) {
System.out.print(" " + spielfeld**[j]);
// System.out.println('
');
//
}
System.out.println();
}
System.out.println();
}
public void nextGeneration() {
char newWorld[][] = new char[Zeilen][Spalten];
for (int i = 0; i < Zeilen; i++) {
for (int j = 0; j < Spalten; j++) {
switch (nachbarn(i, j)) {
case 3:
if (dead(i, j))
{
newWorld**[j] = '1';
} else if (alive(i, j))
{
newWorld**[j] = '1';
}
break;
case 2:
if (alive(i, j))
{
newWorld**[j] = '1';
} else if (dead(i, j))
{
newWorld**[j] = '0';
}
break;
default:
newWorld**[j] = '0';
break;
}
}
}
for (int i = 0; i < Zeilen; i++) {
for (int j = 0; j < Spalten; j++) {
spielfeld**[j] = newWorld**[j];
}
}
}
public boolean dead(int i, int j) {
if (spielfeld**[j] == '0') {
return true;
} else
return false;
}
public boolean alive(int i, int j) {
if (spielfeld**[j] == '1') {
return true;
} else
return false;
}
public int border(int i) {
if (i <= 0) {
return 0;
} else if (i >= Zeilen) {
return (Zeilen - 1);
} else
return i;
}
private int nachbarn(int i, int j) {
int iNachbarn = 0;
int iZeilenstart = border(i - 1);
int iSpaltenstart = border(j - 1);
while (iZeilenstart <= border(i + 1)) {
while (iSpaltenstart <= border(j + 1)) {
if (alive(iZeilenstart, iSpaltenstart)
&& !((iZeilenstart == i) && (iSpaltenstart == j))) {
iNachbarn++;
}
iSpaltenstart++;
}
iZeilenstart++;
iSpaltenstart = border(j - 1);
}
return iNachbarn;
}
}
LifeAusführen.java
public class LifeAusführen {
public static void druckeNextGeneration(Life l, int n) {
while (n > 0) {
l.druckeSpielfeld();
l.nextGeneration();
n--;
}
}
public static void spiele(){
Life life = new Life();
life.zufallBakterien();
druckeNextGeneration(life, 10);
}
public static void main(String[] args) {
new Fensterausgabe();
}
}
Fensterausgabe.java
package Game;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
@SuppressWarnings("serial")
public class Fensterausgabe extends JFrame {
private final JLabel m_oHeading;
private final Box m_oMainbox;
private final Life m_oLifeBox;
private final JButton m_oStart;
public Fensterausgabe() {
super();
m_oMainbox = new Box(BoxLayout.Y_AXIS);
m_oHeading = new JLabel("Game of Life");
m_oStart = new JButton("Start");
m_oLifeBox = new Life();
createFrame();
}
protected void createFrame() {
setSize(800, 600);
setLocation(100, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
getMainbox().add(Box.createRigidArea(new Dimension(0, 25)));
getMainbox().add(getHeading());
getHeading().setAlignmentX(CENTER_ALIGNMENT);
getMainbox().add(getLifeBox()); //The method add(Component) in the type Container is not applicable for the arguments
getMainbox().add(getStart());
getStart().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
LifeAusführen.spiele();
}
});
getStart().setAlignmentY(BOTTOM_ALIGNMENT);
getStart().setAlignmentX(CENTER_ALIGNMENT);
this.add(getMainbox());
setVisible(true);
}
public JLabel getHeading() {
return m_oHeading;
}
public Box getMainbox() {
return m_oMainbox;
}
public JButton getStart() {
return m_oStart;
}
public Life getLifeBox() {
return m_oLifeBox;
}
}
Wäre sehr nice wenn Ihr mir eine kleine Hilfestellung geben könntet:)
FaJo