diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..8cbcff2
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/.project b/.project
new file mode 100644
index 0000000..6c308c0
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ Snake
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..2f5cc74
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/Snake/.classpath b/Snake/.classpath
index e461bea..6c1ba30 100644
--- a/Snake/.classpath
+++ b/Snake/.classpath
@@ -1,6 +1,6 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/Snake/jgoodies-forms-1.8.0.jar b/Snake/jgoodies-forms-1.8.0.jar
new file mode 100644
index 0000000..d5cdefb
Binary files /dev/null and b/Snake/jgoodies-forms-1.8.0.jar differ
diff --git a/Snake/miglayout15-swing.jar b/Snake/miglayout15-swing.jar
new file mode 100644
index 0000000..835545d
Binary files /dev/null and b/Snake/miglayout15-swing.jar differ
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..b2dcbcc
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,33 @@
+
+ 4.0.0
+ Snake
+ Snake
+ 0.0.1-SNAPSHOT
+
+ Snake/src
+
+
+ Snake/src
+
+ **/*.java
+
+
+
+ Snake/src/dev/lh/snake
+
+ **/*.java
+
+
+
+
+
+ maven-compiler-plugin
+ 3.8.0
+
+
+ 1.8
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/dev/lh/Food.java b/src/main/dev/lh/Food.java
new file mode 100644
index 0000000..d8da66a
--- /dev/null
+++ b/src/main/dev/lh/Food.java
@@ -0,0 +1,21 @@
+package dev.lh;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Point;
+
+public class Food {
+
+ private Point position;
+
+ public Food(int x, int y) {
+ position = new Point(x,y);
+ }
+
+ public void render(Graphics g) {
+ g.setColor(Color.yellow);
+ g.fillRect(position.x, position.y, 16, 16);
+ }
+
+
+}
diff --git a/src/main/dev/lh/FoodFactory.java b/src/main/dev/lh/FoodFactory.java
new file mode 100644
index 0000000..ca39968
--- /dev/null
+++ b/src/main/dev/lh/FoodFactory.java
@@ -0,0 +1,114 @@
+package dev.lh;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Point;
+import java.awt.Rectangle;
+
+public class FoodFactory {
+
+ public static enum Food{
+ white, yellow, orange, red, blue
+ }
+
+ private static FoodFactory foodFactory = new FoodFactory();
+
+ private long timeOfNextFood;
+
+
+ Point pFood = null;
+
+
+
+ private Food nextFood = Food.white;
+
+ public int rectangleSize = 6;
+
+ private FoodFactory() {}
+
+ public static FoodFactory getInstance() { return foodFactory; }
+
+ public Food generateFood() {
+ int nextFoodIs = (int) Math.floor(Math.random()*5);
+ switch (nextFoodIs) {
+
+ case 0: nextFood =Food.white; break;
+ case 1: nextFood =Food.yellow; break;
+ case 2: nextFood =Food.orange; break;
+ case 3: nextFood =Food.red; break;
+ case 4: nextFood =Food.blue; break;
+ default: nextFood=generateFood();
+ }
+ rectangleSize= nextFood.ordinal()+2;
+ setTimeToNextFoodMillis();
+ return nextFood;
+ }
+
+ public void setTimeToNextFoodMillis() {
+ timeOfNextFood=System.currentTimeMillis()+(int) Math.round(Math.random() * 15000+1000);;
+ }
+
+ public Food getNextFood() {
+ return nextFood;
+ }
+
+ public void setNext(Food nextFood) {
+ this.nextFood = nextFood;
+ }
+
+ public long getTimeOfNextFood() {
+ return timeOfNextFood;
+ }
+
+ public Point generateFoodLocation(int width, int height) {
+ pFood=new Point((int) Math.round(Math.random() * width), (int) Math.round(Math.random() * height));
+ if(pFood.x<50||pFood.x>width-50||pFood.y<50||pFood.y>height-50) {
+ pFood.x = (pFood.x<50)?50:(pFood.x>width-50)?width-50:pFood.x;
+ pFood.y = (pFood.y<50)?50:(pFood.y>height-50)?height-50:pFood.y;
+ }
+ return pFood;
+ }
+
+ public int getRectangleSize() {
+ return rectangleSize;
+ }
+
+ public Point getFoodLocation() {
+ return pFood;
+ }
+
+ public void colorOfFood(Graphics g) {
+ switch(nextFood) {
+ case white: g.setColor(Color.white); break;
+ case yellow:g.setColor(Color.yellow); break;
+ case orange:g.setColor(Color.orange); break;
+ case red: g.setColor(Color.red); break;
+ case blue: g.setColor(Color.blue); break;
+ }//switch
+ }
+
+ public void paintFood(Graphics g) {
+ colorOfFood(g);
+ g.fillRect(pFood.x, pFood.y, 5*rectangleSize, 5*rectangleSize);
+ }
+
+ public boolean checkCollision(Rectangle snakeHead) {
+ int s = rectangleSize*5;
+ Rectangle food = new Rectangle(pFood, new Dimension(s, s));
+ return food.intersects(snakeHead);
+ }
+
+ public int getAdditionalLength() {
+ int snakeAdditionalLength = 0;
+ switch(nextFood) {
+ case white: snakeAdditionalLength =40;break;
+ case yellow:snakeAdditionalLength =15;break;
+ case orange:snakeAdditionalLength =6;break;
+ case red: snakeAdditionalLength =2;break;
+ case blue: snakeAdditionalLength =1;break;
+ }//switch
+ return snakeAdditionalLength;
+ }
+
+}
diff --git a/src/main/dev/lh/Handler.java b/src/main/dev/lh/Handler.java
new file mode 100644
index 0000000..1f02d2f
--- /dev/null
+++ b/src/main/dev/lh/Handler.java
@@ -0,0 +1,15 @@
+package dev.lh;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Handler {
+
+ List targets;
+
+ public Handler() {
+ targets = new ArrayList<>();
+ targets.add(new Snake(3));
+ }
+
+}
diff --git a/src/main/dev/lh/Main.java b/src/main/dev/lh/Main.java
new file mode 100644
index 0000000..68c2f14
--- /dev/null
+++ b/src/main/dev/lh/Main.java
@@ -0,0 +1,22 @@
+package dev.lh;
+
+import dev.lh.ui.GameWindow;
+
+public class Main {
+
+ private static GameWindow game;
+ public static void main(String[] args) {
+ //if wanted, the StartScreen can be added here
+ startGame();
+ }
+
+ public static void startGame() {
+ game = new GameWindow("Snake");
+ game.setVisible(true);
+ }
+
+ public static GameWindow getGame() {
+ return game;
+ }
+
+}
diff --git a/src/main/dev/lh/Snake.java b/src/main/dev/lh/Snake.java
new file mode 100644
index 0000000..dc56eda
--- /dev/null
+++ b/src/main/dev/lh/Snake.java
@@ -0,0 +1,94 @@
+package dev.lh;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.util.ArrayList;
+import java.util.List;
+
+import dev.lh.ui.GameWindow;
+
+public class Snake implements Updateable {
+
+ public static enum Direction{
+ Left, Right, Up, Down;
+ }
+ private Direction Richtung;
+ private int length;
+ private List tiles = new ArrayList<>();
+ private static FoodFactory foodFactory = FoodFactory.getInstance();
+ private final int snakeSize = 10;
+
+ public Snake(int length) {
+ this.length = length;
+ Richtung = Direction.Left;
+
+ for(int i = 0; i=)
+ if(foodFactory.checkCollision(new Rectangle(tiles.get(0).x, tiles.get(0).y, snakeSize, snakeSize))){
+ addLength(foodFactory.getAdditionalLength());
+ GameWindow game = Main.getGame();
+ game.newFood();
+ }
+
+ }//End tick
+ @Override
+ public void render(Graphics g) {
+ g.setColor(Color.green);
+
+ for (int i = 0; i thread.interrupt());
+ System.exit(0);
+ }
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Create the dialog.
+ */
+
+ public Endscreen(int score1) {
+ setScore(score1);
+ try {
+// readInHighscoresPoints();
+// readInHighscoresPlayers();
+
+ setTitle("Endscreen");
+ setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+ setBounds(100, 100, 700, 700);
+ getContentPane().setLayout(new BorderLayout());
+ contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
+ getContentPane().add(contentPanel, BorderLayout.CENTER);
+ contentPanel.setLayout(null);
+// JScrollPane scrollPane = new JScrollPane();
+// scrollPane.setBounds(10, 412, 349, 238);
+// contentPanel.add(scrollPane);
+// String[][] combis = new String[highscorePoints.length][2];
+// for (int i = 0; i < highscorePoints.length; i++) {
+// combis[i][0] = highscorePlayers[i];
+// combis[i][1] = String.valueOf(highscorePoints[i]);
+// }
+// table = new JTable(combis, tableTitle);
+// table.setRowSelectionAllowed(false);
+// table.setFillsViewportHeight(true);
+// table.setFont(new Font("Times New Roman", Font.PLAIN, 15));
+// scrollPane.setViewportView(table);
+
+// JLabel lblNewLabel = new JLabel("Highscores");
+// lblNewLabel.setFont(new Font("Times New Roman", Font.BOLD | Font.ITALIC, 18));
+// lblNewLabel.setBounds(65, 292, 98, 41);
+// contentPanel.add(lblNewLabel);
+
+ JButton btnNewButton = new JButton("Play again");
+ btnNewButton.setMnemonic(KeyEvent.VK_ENTER);
+
+ btnNewButton.addActionListener(new ActionListener() {// Beginn Listener new game
+ public void actionPerformed(ActionEvent e) {
+ Main.startGame();
+ setVisible(false);
+ dispose();
+ }
+ });
+//BLOß NICHT RAUSWERFEN
+ btnNewButton.setIconTextGap(5);
+ btnNewButton.setIcon(new ImageIcon(
+ Endscreen.class.getResource("/com/sun/javafx/webkit/prism/resources/mediaPlayDisabled.png")));
+ btnNewButton.setFont(new Font("Times New Roman", Font.PLAIN, 15));
+ btnNewButton.setBounds(85, 512, 243, 100);
+ contentPanel.add(btnNewButton);
+
+// JButton btnClose = new JButton("Close game");
+//
+// btnClose.addActionListener(new ActionListener() {// Beginn Listener new game
+// public void actionPerformed(ActionEvent e) {
+// System.exit(0);
+// }
+// });
+//
+// btnClose.setFont(new Font("Times New Roman", Font.PLAIN, 15));
+// btnClose.setBounds(400, 500, 200, 100);
+// contentPanel.add(btnClose);
+//
+// tfName = new JTextField();
+// tfName.setFont(new Font("Times New Roman", Font.PLAIN, 15));
+// tfName.setBounds(102, 344, 257, 40);
+// contentPanel.add(tfName);
+// tfName.setColumns(10);
+//
+// JTextArea txtrBitteErstNamen = new JTextArea();
+// txtrBitteErstNamen.setVisible(false);
+// txtrBitteErstNamen.setBackground(UIManager.getColor("ScrollBar.foreground"));
+// txtrBitteErstNamen.setText("Bitte erst Namen \r\neingeben und\r\ndann Speichern!!!!");
+// txtrBitteErstNamen.setBounds(468, 412, 155, 92);
+// contentPanel.add(txtrBitteErstNamen);
+// txtrBitteErstNamen.setVisible(false);
+//
+// JButton btnSaveHighscore = new JButton("Save Highscore");
+// btnSaveHighscore.setMnemonic(KeyEvent.VK_ENTER);
+// btnSaveHighscore.setIconTextGap(5);
+// btnSaveHighscore.setIcon(
+// new ImageIcon(Endscreen.class.getResource("/javax/swing/plaf/metal/icons/ocean/floppy.gif")));
+// btnSaveHighscore.setFont(new Font("Times New Roman", Font.PLAIN, 15));
+//
+// btnSaveHighscore.addActionListener(new ActionListener() {// Beginn Listener Save Highscore
+// public void actionPerformed(ActionEvent e) {
+// relocate(score1);
+// writeFiles();
+// table.updateUI();
+// }
+//
+// });
+//
+// btnSaveHighscore.setBounds(468, 344, 155, 50);
+// contentPanel.add(btnSaveHighscore);
+
+ JLabel lblDeinPunktestand = new JLabel("Dein Punktestand: " + String.valueOf(score));
+ lblDeinPunktestand.setFont(new Font("Times New Roman", Font.PLAIN, 25));
+ lblDeinPunktestand.setBounds(10, 45, 291, 50);
+ contentPanel.add(lblDeinPunktestand);
+
+// JLabel lblYourName = new JLabel("Your Name:");
+// lblYourName.setFont(new Font("Times New Roman", Font.PLAIN, 15));
+// lblYourName.setBounds(10, 355, 82, 29);
+// contentPanel.add(lblYourName);
+
+ JCheckBox chckbxNewCheckBox = new JCheckBox("");
+ JLabel lblDasIstEin = new JLabel("Das ist ein hervorragender Wert!");
+ lblDasIstEin.setFont(new Font("Times New Roman", Font.PLAIN, 15));
+ if (score1 >= goodOrBadResult) {
+ chckbxNewCheckBox.setIcon(new ImageIcon(Endscreen.class.getResource("/dev/lh/snake/1211548-200.png")));
+ chckbxNewCheckBox.setBounds(300, 200, 200, 200);
+ lblDasIstEin.setBounds(10, 100, 212, 50);
+ } else {
+ chckbxNewCheckBox.setIcon(new ImageIcon(Endscreen.class.getResource("/dev/lh/snake/Try_Again.jpg")));
+ chckbxNewCheckBox.setBounds(300, 200, 250, 210);
+ lblDasIstEin.setText("Das kannst du aber noch verbessern!");
+ lblDasIstEin.setBounds(10, 100, 240, 50);
+ contentPanel.add(lblDasIstEin);
+ }
+ contentPanel.add(chckbxNewCheckBox);
+ contentPanel.add(lblDasIstEin);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ public static int getScore() {
+ return score;
+ }
+
+ public static void setScore(int score) {
+ Endscreen.score = score;
+ }
+ /*
+ * public static void readInHighscoresPoints() { try { // FileReader reads text
+ * files in the default encoding. FileReader fileReader = new
+ * FileReader(fileNamePoints);
+ *
+ * // Always wrap FileReader in BufferedReader. BufferedReader bufferedReader =
+ * new BufferedReader(fileReader);
+ *
+ * currentIndex = Integer.parseInt(bufferedReader.readLine()); for (int i = 0; i
+ * < currentIndex; i++) { highscorePoints[i]=
+ * Integer.parseInt(bufferedReader.readLine()); } // Always close files.
+ * bufferedReader.close(); fileReader.close(); } catch (FileNotFoundException
+ * ex) { System.out.println("Error 404:File '" + fileNamePoints +
+ * "' not found");
+ *
+ * } catch (IOException ex) { System.out.println("Error reading file '" +
+ * fileNamePoints + "'"); ex.printStackTrace(); } } private void
+ * readInHighscoresPlayers(){ try { // FileReader reads text files in the
+ * default encoding. FileReader fileReader = new FileReader(fileNamePlayers);
+ *
+ * // Always wrap FileReader in BufferedReader. BufferedReader bufferedReader =
+ * new BufferedReader(fileReader);
+ *
+ * for (int i = 0; i < currentIndex; i++) { highscorePlayers[i]=
+ * bufferedReader.readLine(); } // Always close files. bufferedReader.close();
+ * fileReader.close(); } catch (FileNotFoundException ex) {
+ * System.out.println("Error 404:File '" + fileNamePlayers + "' not found");
+ *
+ *
+ * } catch (IOException ex) { System.out.println("Error reading file '" +
+ * fileNamePlayers + "'"); ex.printStackTrace(); } } /* private void
+ * writeFiles() { File dateiPoints = new File("." + File.separator +
+ * fileNamePoints); FileWriter fwpoints = null; BufferedWriter bwpoints = null;
+ * try { fwpoints = new FileWriter(dateiPoints); bwpoints = new
+ * BufferedWriter(fwpoints); bwpoints.write(highscorePoints.length); for (int
+ * i=0;i=
+ * 30){ for (int i=30;i {
+ s.tick();
+ if(System.currentTimeMillis()>=foodFactory.getTimeOfNextFood()) newFood();
+ repaint();
+ });
+ timer.start();
+
+ setVisible(true);
+ }
+
+ public void newFood() {
+ foodFactory.generateFood();
+ foodFactory.generateFoodLocation(super.getWidth(), super.getHeight());
+ }
+
+ public void close() {
+ dispose();
+ }
+}
\ No newline at end of file
diff --git a/src/main/dev/lh/ui/StartScreen.java b/src/main/dev/lh/ui/StartScreen.java
new file mode 100644
index 0000000..795279f
--- /dev/null
+++ b/src/main/dev/lh/ui/StartScreen.java
@@ -0,0 +1,111 @@
+package dev.lh.ui;
+
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.border.EmptyBorder;
+
+import dev.lh.Main;
+
+public class StartScreen extends JFrame {
+
+ private static final long serialVersionUID = 6055940532003735543L;
+ private JPanel contentPane;
+ public static int currentIndex = 0;
+ public static List combination = new ArrayList<>();
+
+ /**
+ * Launch the application.
+ */
+ public static void close() {
+ System.exit(0);
+ }
+
+ public static void main(String[] args) {
+ EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ try {
+ StartScreen frame = new StartScreen();
+ frame.setVisible(true);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ });
+ }
+
+// public static void readInHighscores() {
+// try {
+// combination.clear();
+// // FileReader reads text files in the default encoding.
+// FileReader fileReader = new FileReader(fileName);
+//
+// // Always wrap FileReader in BufferedReader.
+// BufferedReader bufferedReader = new BufferedReader(fileReader);
+//
+// currentIndex = Integer.parseInt(bufferedReader.readLine());
+// for (int i = 0; i < currentIndex; i++) {
+// String[] spielerScore = new String[2];
+// spielerScore[0] = bufferedReader.readLine();
+// spielerScore[1] = bufferedReader.readLine();
+// combination.add(spielerScore);
+// }
+// // Always close files.
+// bufferedReader.close();
+// fileReader.close();
+// } catch (FileNotFoundException ex) {
+// System.out.println("Error 404:File '" + fileName + "' not found");
+//
+// } catch (IOException ex) {
+// System.out.println("Error reading file '" + fileName + "'");
+// ex.printStackTrace();
+//
+// }
+// }
+
+ /**
+ * Create the frame.
+ */
+ public StartScreen() {
+ try {
+// readInHighscores();
+ setTitle("Snake - Startscreen");
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ setBounds(500, 200, 550, 550);
+ contentPane = new JPanel();
+ contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
+ setContentPane(contentPane);
+
+ JButton buPlay = new JButton("Start Game");
+ buPlay.setBounds(158,197, 190, 131);
+ buPlay.setIcon(new ImageIcon(
+ StartScreen.class.getResource("/com/sun/javafx/webkit/prism/resources/mediaPlayDisabled.png")));
+ buPlay.setMnemonic(KeyEvent.VK_ENTER);
+ buPlay.setFont(new Font("Times New Roman", Font.PLAIN, 16));
+
+ buPlay.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent a) {
+
+ Main.startGame();
+ setVisible(false);
+ dispose();
+ System.gc();
+ }
+ });
+ contentPane.setLayout(null);
+
+ } catch (Exception e) {
+
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/resources/1211548-200.png b/src/main/resources/1211548-200.png
new file mode 100644
index 0000000..c9778d8
Binary files /dev/null and b/src/main/resources/1211548-200.png differ
diff --git a/src/main/resources/Try_Again.jpg b/src/main/resources/Try_Again.jpg
new file mode 100644
index 0000000..7490450
Binary files /dev/null and b/src/main/resources/Try_Again.jpg differ