Working Prototype

This commit is contained in:
Noah
2021-09-29 20:22:37 +02:00
parent c7fa4c8e91
commit d416fa834a
5 changed files with 204 additions and 59 deletions
+64
View File
@@ -0,0 +1,64 @@
package draw;
import javax.swing.*;
import java.awt.*;
public class Draw extends JPanel {
private int xSize, ySize;
private float ratio;
private Graphics2D g2d;
private boolean[][] currentGrid;
private boolean drawLocked = false;
public Draw(int gridSizeX, int gridSizeY, float ratio) {
this.xSize = gridSizeX;
this.ySize = gridSizeY;
this.ratio = ratio;
currentGrid = new boolean[gridSizeX][gridSizeY];
}
public void showGrid(boolean[][] grid) {
currentGrid = new boolean[xSize][ySize];
for (int x = 0; x < xSize; x++) {
for (int y = 0; y < ySize; y++) {
currentGrid[x][y] = grid[x][y];
}
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g2d = (Graphics2D) g;
float cellSizeX = 1024f / xSize;
float cellSizeY = 1024f / ySize;
if(ySize > xSize)
{
cellSizeX /= ratio;
}
else
{
cellSizeY *= ratio;
}
for (int x = 0; x < xSize; x++)
{
for (int y = 0; y < ySize; y++)
{
if (currentGrid[x][y])
{
g2d.fillRect((int) (x * cellSizeX), (int) (y * cellSizeY), (int) ((cellSizeX + 1)), (int) (cellSizeY + 1));
}
}
}
repaint();
}
}
+12 -7
View File
@@ -1,34 +1,39 @@
package game; package game;
import gui.GUI;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
public class Clock extends Thread{ public class Clock extends Thread{
public static boolean running = true; private boolean running = true;
public void start(Control control){ public void start(Control control, GUI gui){
Timer t = new Timer(); Timer t = new Timer();
TimerTask tt = new TimerTask() { TimerTask tt = new TimerTask() {
@Override @Override
public void run() { public void run() {
if (running){ if (running){
control.nextGen(); boolean[][] booleans = control.nextGen();
gui.showGrid(booleans);
} }
} }
}; };
t.scheduleAtFixedRate(tt, 1, 1000); t.scheduleAtFixedRate(tt, 1, 120);
} }
public static boolean isRunning() { public boolean isRunning() {
return running; return running;
} }
public static void setRunning(boolean running) { public void setRunning(boolean running) {
Clock.running = running; this.running = running;
} }
} }
+27 -6
View File
@@ -15,7 +15,6 @@ public class Control {
private boolean[][] newcells; private boolean[][] newcells;
public void start() { public void start() {
gui = new GUI(this); gui = new GUI(this);
@@ -25,7 +24,7 @@ public class Control {
public void startGame() { public void startGame() {
clock = new Clock(); clock = new Clock();
clock.start(this); clock.start(this, gui);
} }
public void buildGameWindow(int xSize, int ySize, int cellCount, StartMode startMode) { public void buildGameWindow(int xSize, int ySize, int cellCount, StartMode startMode) {
@@ -49,9 +48,16 @@ public class Control {
buildManuelGame(); buildManuelGame();
} }
} }
if (gui == null){
gui = new GUI(this);
}
gui.gameWindow(this.xSize, this.ySize);
startGame();
} }
private void buildManuelGame() { private void buildManuelGame() {
@@ -79,20 +85,25 @@ public class Control {
for (int i = 0; i < this.cellCount; i++) { for (int i = 0; i < this.cellCount; i++) {
int x = rand(0, this.xSize); int x = rand(0, this.xSize);
int y = rand(0, this.ySize); int y = rand(0, this.ySize);
if (!cells[x][y]) {
this.cells[x][y] = true; this.cells[x][y] = true;
} else {
i--;
}
} }
syncCells(); syncCells();
} }
private void syncCells() { private void syncCells() {
for (int x = 0; x < this.xSize; x++) { for (int x = 0; x < this.xSize; x++) {
for (int y = 0; y < this.ySize; y++) { for (int y = 0; y < this.ySize; y++) {
this.newcells[x][y] = this.cells[x][y]; newcells[x][y] = cells[x][y];
} }
} }
} }
public void nextGen(){ public boolean[][] nextGen() {
gen ++; gen ++;
System.out.println("Generation:" + gen); System.out.println("Generation:" + gen);
@@ -119,8 +130,15 @@ public class Control {
} }
} }
syncCells(); for (int x = 0; x < this.xSize; x++) {
for (int y = 0; y < this.ySize; y++) {
cells[x][y] = newcells[x][y];
}
}
return cells;
} }
@@ -147,6 +165,9 @@ public class Control {
} }
public void showGrid() {
}
} }
+1 -1
View File
@@ -2,6 +2,6 @@ package game;
public enum StartMode { public enum StartMode {
Manuel, Task1, Randomized, Hallo Manuel, Randomized, Task1,
} }
+85 -30
View File
@@ -1,5 +1,6 @@
package gui; package gui;
import draw.Draw;
import game.Control; import game.Control;
import game.StartMode; import game.StartMode;
@@ -14,7 +15,14 @@ public class GUI {
private final Control control; private final Control control;
private JFrame jf; /* Universial Atributes */
private final String title = "Conway's Game of Life";
/* End of Universial Atributes */
/* Components of the menue View */
private JFrame jfMenue;
private JLabel heading; private JLabel heading;
private int xAxisSize = 6; private int xAxisSize = 6;
@@ -41,6 +49,17 @@ public class GUI {
private ImageIcon preview; private ImageIcon preview;
private JLabel previewLabel; private JLabel previewLabel;
/* End of control view Elements */
/* Game view Elements */
private JFrame jfGame;
private Draw draw;
private int xSize, ySize;
/* End of Game view Elements */
public GUI(Control control) { public GUI(Control control) {
@@ -49,31 +68,31 @@ public class GUI {
} }
public void controlWindow() { public void controlWindow() {
jf = new JFrame(); jfMenue = new JFrame();
jf.setTitle("Conway's Game of Life"); jfMenue.setTitle(title);
ImageIcon imageIcon = new ImageIcon("src/data/PNG/Icon.png"); ImageIcon imageIcon = new ImageIcon("src/data/PNG/Icon.png");
jf.setIconImage(imageIcon.getImage()); jfMenue.setIconImage(imageIcon.getImage());
//getContentPane().setBackground(Color.decode("#121212")); //getContentPane().setBackground(Color.decode("#121212"));
jf.setUndecorated(false); jfMenue.setUndecorated(false);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jfMenue.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setAutoRequestFocus(false); jfMenue.setAutoRequestFocus(false);
jf.setLayout(null); jfMenue.setLayout(null);
jf.setSize(752, 424); jfMenue.setSize(752, 424);
jf.setResizable(false); jfMenue.setResizable(false);
initControlComponents(); initControlComponents();
addControlComponents(); addControlComponents();
jf.setLocationRelativeTo(null); jfMenue.setLocationRelativeTo(null);
jf.setVisible(true); jfMenue.setVisible(true);
} }
private void initControlComponents() { private void initControlComponents() {
@@ -145,7 +164,7 @@ public class GUI {
yAxisLabel.setFont(text); yAxisLabel.setFont(text);
yAxisLabel.setForeground(Color.decode("#121212")); yAxisLabel.setForeground(Color.decode("#121212"));
yAxisLabel.setVisible(true); yAxisLabel.setVisible(true);
//TODO: Inputfield witch Changelistner to cange Slider
startCells = new JSlider(6, 6); startCells = new JSlider(6, 6);
startCells.setBounds(180, 210, 200, 20); startCells.setBounds(180, 210, 200, 20);
@@ -203,8 +222,9 @@ public class GUI {
modeBox = new JComboBox<String>(); modeBox = new JComboBox<String>();
modeBox.setBounds(180, 257, 100, 20); modeBox.setBounds(180, 257, 100, 20);
addComboBoxEntry(modeBox, "CTTask1");
addComboBoxEntry(modeBox, "Randomized"); addComboBoxEntry(modeBox, "Randomized");
addComboBoxEntry(modeBox, "CTTask1");
startButton = new JButton(); startButton = new JButton();
startButton.setText("Start Game"); startButton.setText("Start Game");
@@ -275,21 +295,21 @@ public class GUI {
} }
private void addControlComponents() { private void addControlComponents() {
jf.add(heading); jfMenue.add(heading);
jf.add(xAxis); jfMenue.add(xAxis);
jf.add(xAxisName); jfMenue.add(xAxisName);
jf.add(xAxisLabel); jfMenue.add(xAxisLabel);
jf.add(yAxis); jfMenue.add(yAxis);
jf.add(yAxisName); jfMenue.add(yAxisName);
jf.add(yAxisLabel); jfMenue.add(yAxisLabel);
jf.add(startCells); jfMenue.add(startCells);
jf.add(startCellsName); jfMenue.add(startCellsName);
jf.add(startCellsLabel); jfMenue.add(startCellsLabel);
jf.add(startButton); jfMenue.add(startButton);
jf.add(manuelStart); jfMenue.add(manuelStart);
jf.add(previewLabel); jfMenue.add(previewLabel);
jf.add(modeName); jfMenue.add(modeName);
jf.add(modeBox); jfMenue.add(modeBox);
} }
@@ -297,9 +317,32 @@ public class GUI {
comboBox.addItem(entry); comboBox.addItem(entry);
} }
public void gameWindow() { public void gameWindow(int xSize, int ySize) {
this.xSize = xSize;
this.ySize = ySize;
jfGame = new JFrame(title);
jfGame.getContentPane().setPreferredSize(new Dimension(1600, 1600));
jfGame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jfGame.setResizable(false);
float ratio = (float)(ySize) / (float)(xSize);
draw = new Draw(this.xSize, this.ySize, ratio);
draw.setBounds(0, 0, 1200, 1200);
draw.setVisible(true);
jfGame.add(draw);
jfGame.pack();
jfGame.setLayout(null);
jfGame.setLocationRelativeTo(null);
jfGame.setVisible(true);
} }
private void initGameComponents() { private void initGameComponents() {
@@ -308,5 +351,17 @@ public class GUI {
private void addGameComponents() { private void addGameComponents() {
} }
public void showGrid(boolean[][] grid)
{
if(draw != null)
{
draw.showGrid(grid);
}
else
{
System.err.println("There is no Window");
}
}
} }