diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..a29b03f
--- /dev/null
+++ b/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.text.custom_code_templates=/**\n * @return the ${bare_field_name}\n * @since Snake 1.0\n *//**\n * @param ${param} the ${bare_field_name} to set\n * @since Snake 1.0\n *//**\n * ${tags}\n * @since Snake 1.0\n *//**\n * Project\: <strong>${project_name}</strong><br>\n * File\: <strong>${file_name}</strong><br>\n * Created\: <strong>${date}</strong><br>\n * \n * @author ${user}\n * @since Snake 1.0\n *//**\n * ${tags}\n * @since Snake 1.0\n *//**\n * @author ${user}\n *\n * ${tags}\n * @since Snake 1.1\n *//**\n * ${tags}\n * ${see_to_target}\n * @since Snake 1.0\n */${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}\n\n\n\n${exception_var}.printStackTrace();${body_statement}${body_statement}return ${field};${field} \= ${param};
diff --git a/src/main/dev/lh/Food.java b/src/main/dev/lh/Food.java
index d8da66a..3a2079e 100644
--- a/src/main/dev/lh/Food.java
+++ b/src/main/dev/lh/Food.java
@@ -4,18 +4,42 @@ import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
+/**
+ * Project: Snake
+ * File: Food.java
+ * Created: 11 Mar 2020
+ *
+ * @author Leon Hofmeister
+ * @since Snake 1.0
+ */
public class Food {
private Point position;
-
- public Food(int x, int y) {
- position = new Point(x,y);
- }
-
+
+ /**
+ * Constructs a new food object.
+ *
+ * @param x the x coordinate of the new food
+ * @param y the y coordinate of the new food
+ * @since Snake 1.0
+ */
+ public Food(int x, int y) { position = new Point(x, y); }
+
+ /**
+ * Constructs a new food object.
+ *
+ * @param position the position of the food
+ * @since Snake 1.1
+ */
+ public Food(Point position) { this.position = position; }
+
+ /**
+ * @param g the {@link Graphics} object used to draw the food
+ * @since Snake 1.0
+ */
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
index ca39968..486511a 100644
--- a/src/main/dev/lh/FoodFactory.java
+++ b/src/main/dev/lh/FoodFactory.java
@@ -6,108 +6,228 @@ import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
+import dev.lh.ui.GameWindow;
+
+/**
+ * Project: Snake
+ * File: FoodFactory.java
+ * Created: 11 Mar 2020
+ *
+ * @author Leon Hofmeister
+ * @since Snake 1.0
+ */
public class FoodFactory {
-
- public static enum Food{
- white, yellow, orange, red, blue
+
+ /**
+ * This enum contains all possible variations of foods. The higher the ordinal
+ * of an element, the less it is worth.
+ *
+ * Project: Snake
+ * File: FoodFactory.java
+ * Created: 11 Mar 2020
+ *
+ * @author Leon Hofmeister
+ * @since Snake 1.0
+ */
+ public static enum Food {
+ /**
+ * Use if white food is wanted.
+ */
+ white,
+
+ /**
+ * Use if yellow food is wanted.
+ */
+ yellow,
+
+ /**
+ * Use if orange food is wanted.
+ */
+ orange,
+
+ /**
+ * Use if red food is wanted.
+ */
+ red,
+
+ /**
+ * Use if blue food is wanted.
+ */
+ blue
}
private static FoodFactory foodFactory = new FoodFactory();
private long timeOfNextFood;
-
-
+
Point pFood = null;
-
-
private Food nextFood = Food.white;
- public int rectangleSize = 6;
+ private int rectangleSize = 6;
private FoodFactory() {}
+ /**
+ * @return the (singleton) instance of FoodFactory
+ * @since Snake 1.0
+ */
public static FoodFactory getInstance() { return foodFactory; }
-
+
+ /**
+ * @return a new {@link Food} object without its position
+ * @since Snake 1.0
+ */
public Food generateFood() {
- int nextFoodIs = (int) Math.floor(Math.random()*5);
+ 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();
+
+ 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;
+ 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;
- }
+ /**
+ * Generates the amount of time that needs to pass before the next food object
+ * will be constructed.
+ *
+ * @since Snake 1.0
+ */
+ public void setTimeToNextFoodMillis() { timeOfNextFood = System.currentTimeMillis() + (int) Math.round(Math.random() * 15000 + 1000); }
- public void setNext(Food nextFood) {
- this.nextFood = nextFood;
- }
+ /**
+ * @return the type of the next food
+ * @since Snake 1.0
+ */
+ public Food getNextFood() { return nextFood; }
- public long getTimeOfNextFood() {
- return timeOfNextFood;
- }
+ /**
+ * @param nextFood the type the next food should have
+ * @since Snake 1.0
+ */
+ public void setNext(Food nextFood) { this.nextFood = nextFood; }
+ /**
+ * @return the time at which a new food object will be automatically created
+ * @since Snake 1.0
+ */
+ public long getTimeOfNextFood() { return timeOfNextFood; }
+
+ /**
+ * @param width the width of the currently used {@link GameWindow}
+ * @param height the height of the currently used {@link GameWindow}
+ * @return the position of the new {@link Food} object
+ * @since Snake 1.0
+ */
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;
+ 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;
}
+ /**
+ * @return the size of the corresponding food (length = width)
+ * @since Snake 1.0
+ */
+ public int getRectangleSize() { return rectangleSize; }
+
+ /**
+ * @return the location of the currently displayed food
+ * @since Snake 1.0
+ */
+ public Point getFoodLocation() { return pFood; }
+
+ /**
+ * Sets the color of the given {@link Graphics} object according to the type of
+ * food.
+ *
+ * @param g the graphics object to paint
+ * @since Snake 1.0
+ */
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
+ 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
}
+ /**
+ * @param g the {@link Graphics} object used to paint the current food object
+ * @since Snake 1.0
+ */
public void paintFood(Graphics g) {
colorOfFood(g);
- g.fillRect(pFood.x, pFood.y, 5*rectangleSize, 5*rectangleSize);
+ g.fillRect(pFood.x, pFood.y, 5 * rectangleSize, 5 * rectangleSize);
}
-
+
+ /**
+ * @param snakeHead the the head of a {@link Snake} object
+ * @return true if the current food intersects with the snakehead
+ * @since Snake 1.0
+ */
public boolean checkCollision(Rectangle snakeHead) {
- int s = rectangleSize*5;
- Rectangle food = new Rectangle(pFood, new Dimension(s, s));
+ int s = rectangleSize * 5;
+ Rectangle food = new Rectangle(pFood, new Dimension(s, s));
return food.intersects(snakeHead);
}
+ /**
+ * @return the length that will be added to the snake
+ * @since Snake 1.0
+ */
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
+ 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
index 1f02d2f..6aebf6b 100644
--- a/src/main/dev/lh/Handler.java
+++ b/src/main/dev/lh/Handler.java
@@ -3,10 +3,25 @@ package dev.lh;
import java.util.ArrayList;
import java.util.List;
+/**
+ * The handler handles incoming events in Snake.
+ *
+ * Project: Snake
+ * File: Handler.java
+ * Created: 11 Mar 2020
+ *
+ * @author Leon Hofmeister
+ * @since Snake 1.0
+ */
public class Handler {
-
+
List targets;
-
+
+ /**
+ * Constructs a new {@link Handler}.
+ *
+ * @since Snake 1.0
+ */
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
index 68c2f14..c446376 100644
--- a/src/main/dev/lh/Main.java
+++ b/src/main/dev/lh/Main.java
@@ -2,21 +2,41 @@ package dev.lh;
import dev.lh.ui.GameWindow;
+/**
+ * Project: Snake
+ * File: Main.java
+ * Created: 11 Mar 2020
+ *
+ * @author Leon Hofmeister
+ * @since Snake 1.0
+ */
public class Main {
private static GameWindow game;
+
+ /**
+ * @param args the program arguments
+ * @since Snake 1.0
+ */
public static void main(String[] args) {
- //if wanted, the StartScreen can be added here
+ // if wanted, the StartScreen can be added here
startGame();
}
+ /**
+ * Starts a new game of Snake.
+ *
+ * @since Snake 1.0
+ */
public static void startGame() {
game = new GameWindow("Snake");
game.setVisible(true);
}
- public static GameWindow getGame() {
- return game;
- }
+ /**
+ * @return the currently used game
+ * @since Snake 1.0
+ */
+ public static GameWindow getGame() { return game; }
}
diff --git a/src/main/dev/lh/Snake.java b/src/main/dev/lh/Snake.java
index dc56eda..2e0a2c1 100644
--- a/src/main/dev/lh/Snake.java
+++ b/src/main/dev/lh/Snake.java
@@ -9,86 +9,136 @@ import java.util.List;
import dev.lh.ui.GameWindow;
+/**
+ * Project: Snake
+ * File: Snake.java
+ * Created: 11 Mar 2020
+ *
+ * @author Leon Hofmeister
+ * @since Snake 1.0
+ */
public class Snake implements Updateable {
- public static enum Direction{
- Left, Right, Up, Down;
+ /**
+ * This enum contains all possible directions for the {@link Snake}.
+ *
+ * Project: Snake
+ * File: Snake.java
+ * Created: 11 Mar 2020
+ *
+ * @author Leon Hofmeister
+ * @since Snake 1.0
+ */
+ public static enum Direction {
+ /**
+ * Use if the snake should head left.
+ */
+ Left,
+
+ /**
+ * Use if the snake should head right.
+ */
+ Right,
+
+ /**
+ * Use if the snake should head up.
+ */
+ Up,
+
+ /**
+ * Use if the snake should head down.
+ */
+ Down;
}
- private Direction Richtung;
- private int length;
- private List tiles = new ArrayList<>();
- private static FoodFactory foodFactory = FoodFactory.getInstance();
- private final int snakeSize = 10;
-
+
+ private Direction Richtung;
+ private int length;
+ private List tiles = new ArrayList<>();
+ private static FoodFactory foodFactory = FoodFactory.getInstance();
+ private final int snakeSize = 10;
+
+ /**
+ * Constructs a new Snake with the given length in tiles.
+ *
+ * @param length the length of the snake in tiles
+ * @since Snake 1.0
+ */
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
+ switch (Richtung) {
+
+ case Up:
+ velY = -snakeSize;
+ break;
+ case Down:
+ velY = snakeSize;
+ break;
+ case Left:
+ velX = -snakeSize;
+ break;
+ case Right:
+ velX = snakeSize;
+ break;
+ }// switch
+ Point next = (Point) tiles.get(0).clone(), cur;
+ tiles.get(0).x += velX;
+ tiles.get(0).y += velY;
+
+ for (int i = 1; i < length; i++) {
+ cur = tiles.get(i);
+ tiles.set(i, (Point) next.clone());
+ next = cur;
+ } // for
+ // if(tiles.get(0).x<=0||tiles.get(0).x>=)
+ 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; iSnake
+ * File: Spawner.java
+ * Created: 11 Mar 2020
+ *
+ * @author Leon Hofmeister
+ * @since Snake 1.0
+ */
+public class Spawner implements Updateable {
@Override
- public void tick() {
+ public void nextFrame() {
-
}
@Override
public void render(Graphics g) {
-
}
}
diff --git a/src/main/dev/lh/Updateable.java b/src/main/dev/lh/Updateable.java
index ccc7b8b..8452686 100644
--- a/src/main/dev/lh/Updateable.java
+++ b/src/main/dev/lh/Updateable.java
@@ -2,10 +2,32 @@ package dev.lh;
import java.awt.Graphics;
+/**
+ * This interface contains everything that needs to updated regularly.
+ *
+ * Project: Snake
+ * File: Updateable.java
+ * Created: 11 Mar 2020
+ *
+ * @author Leon Hofmeister
+ * @since Snake 1.0
+ */
public interface Updateable {
-
- void tick();
-
+
+ /**
+ * Here should the actions be implemented that are supposed to happen when a new
+ * frame gets created.
+ *
+ * @since Snake 1.0
+ */
+ void nextFrame();
+
+ /**
+ * Renders the object.
+ *
+ * @param g the {@link Graphics} object that is used to render this object
+ * @since Snake 1.0
+ */
void render(Graphics g);
}
diff --git a/src/main/dev/lh/ui/Endscreen.java b/src/main/dev/lh/ui/Endscreen.java
index 045dc25..c6cf133 100644
--- a/src/main/dev/lh/ui/Endscreen.java
+++ b/src/main/dev/lh/ui/Endscreen.java
@@ -2,8 +2,6 @@ package dev.lh.ui;
import java.awt.BorderLayout;
import java.awt.Font;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
@@ -16,48 +14,32 @@ import javax.swing.border.EmptyBorder;
import dev.lh.Main;
+/**
+ * Project: Snake
+ * File: Endscreen.java
+ * Created: 11 Mar 2020
+ *
+ * @author Leon Hofmeister
+ * @since Snake v1.1
+ */
public class Endscreen extends JDialog {
-
private static final long serialVersionUID = -4457484397259161063L;
- private final JPanel contentPanel = new JPanel();
- public static int currentIndex = 0;
- public static boolean alreadySaved = false;
- public static int score = 0;
- final int goodOrBadResult = 250;
-
-
-
-
-
- // Beginn der Hauptmethode/Erstellung des JDialogs
- public static void main(String[] args) {
- try {
- Endscreen dialog = new Endscreen(score);
- dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
- dialog.setVisible(true);
- dialog.addWindowListener(new java.awt.event.WindowAdapter() {
- @Override
- public void windowClosing(java.awt.event.WindowEvent windowEvent) {
- Thread.getAllStackTraces().forEach((thread, stackTraceElement) -> thread.interrupt());
- System.exit(0);
- }
- });
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
+ private final JPanel contentPanel = new JPanel();
+ private static int score = 0;
+ private final int goodOrBadResult = 250;
/**
* Create the dialog.
+ *
+ * @param score1 the highscore to set
*/
-
public Endscreen(int score1) {
setScore(score1);
try {
-// readInHighscoresPoints();
-// readInHighscoresPlayers();
+ // readInHighscoresPoints();
+ // readInHighscoresPlayers();
setTitle("Endscreen");
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
@@ -65,157 +47,160 @@ public class Endscreen extends JDialog {
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);
+ addWindowListener(new java.awt.event.WindowAdapter() {
-// 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();
+ @Override
+ public void windowClosing(java.awt.event.WindowEvent windowEvent) {
+ Thread.getAllStackTraces().forEach((thread, stackTraceElement) -> thread.interrupt());
+ System.exit(0);
}
});
-//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();
}
+ 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(e -> { Main.startGame(); setVisible(false); dispose(); });
+ // BLOß NICHT RAUSWERFEN
+ btnNewButton.setIconTextGap(5);
+ btnNewButton.setIcon(new ImageIcon(ClassLoader.getSystemResource("/com/sun/javafx/webkit/prism/resources/mediaPlayDisabled.png")));
+ // 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(ClassLoader.getSystemResource("/dev/lh/snake/1211548-200.png")));
+ chckbxNewCheckBox.setBounds(300, 200, 200, 200);
+ lblDasIstEin.setBounds(10, 100, 212, 50);
+ } else {
+ chckbxNewCheckBox.setIcon(new ImageIcon(ClassLoader.getSystemResource("/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);
+ setVisible(true);
}
- public static int getScore() {
- return score;
- }
+ /**
+ * @return the highscore of the current game
+ * @since Snake 1.0
+ */
+ public static int getScore() { return score; }
- public static void setScore(int score) {
- Endscreen.score = score;
- }
+ /**
+ * @param score the new highscore
+ * @since Snake 1.0
+ */
+ 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 +
@@ -226,7 +211,6 @@ public class Endscreen extends JDialog {
* catch (Exception e1) { e1.printStackTrace(); } finally { try {
* bwpoints.close(); fwpoints.close(); alreadySaved = true; } catch (IOException
* e2) { e2.printStackTrace(); } }
- *
* File dateiPlayers = new File("." + File.separator + fileNamePlayers);
* FileWriter fwplayers = null; BufferedWriter bwplayers = null; try { fwplayers
* = new FileWriter(dateiPlayers); bwplayers = new BufferedWriter(fwplayers);
@@ -234,20 +218,14 @@ public class Endscreen extends JDialog {
* bwplayers.write(highscorePlayers[i]); } } catch (Exception e1) {
* e1.printStackTrace(); } finally { try { bwplayers.close(); fwplayers.close();
* alreadySaved = true; } catch (IOException e2) { e2.printStackTrace(); } }
- *
- *
* }
- *
- *
* /** Launch the application.
*/
/*
* public void relocate(int newScore) {
- *
* String newPlayer = new String(tfName.getText()); if (newPlayer.equals("")) {
* txtrBitteErstNamen.setVisible(true); return; } else { sortFiles(newScore,
* newPlayer); } }
- *
* private void sortFiles(int newScore, String newPlayer) { if
* (highscorePoints.length==highscorePlayers.length&&
* highscorePoints.length<=30) { for(int i=0;iSnake
+ * File: GameWindow.java
+ * Created: 11 Mar 2020
+ *
+ * @author Leon Hofmeister
+ * @since Snake 1.0
+ */
public class GameWindow extends JFrame {
- private static final long serialVersionUID = 1L;
- private Snake s = new Snake(7);
- private FoodFactory foodFactory = FoodFactory.getInstance();
+ private static final long serialVersionUID = 1L;
+ private Snake s = new Snake(7);
+ private FoodFactory foodFactory = FoodFactory.getInstance();
+ /**
+ * @param title the title of the frame
+ * @since Snake 1.0
+ */
public GameWindow(String title) {
super(title);
newFood();
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(new Rectangle(size));
+ setLocation(0, 0);
setLocationRelativeTo(null);
setMinimumSize(size);
setPreferredSize(size);
@@ -35,7 +48,6 @@ public class GameWindow extends JFrame {
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
-
add(new JPanel() {
private static final long serialVersionUID = 1L;
@@ -56,42 +68,48 @@ public class GameWindow extends JFrame {
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
switch (e.getKeyCode()) {
- case KeyEvent.VK_W:
- case KeyEvent.VK_UP:
- s.setRichtung(Direction.Up);
- break;
- case KeyEvent.VK_A:
- case KeyEvent.VK_LEFT:
- s.setRichtung(Direction.Left);
- break;
- case KeyEvent.VK_S:
- case KeyEvent.VK_DOWN:
- s.setRichtung(Direction.Down);
- break;
- case KeyEvent.VK_D:
- case KeyEvent.VK_RIGHT:
- s.setRichtung(Direction.Right);
- break;
- }// switch
- }// keypressed
- });// keylistener
-
- Timer timer = new Timer(50, (evt) -> {
- s.tick();
- if(System.currentTimeMillis()>=foodFactory.getTimeOfNextFood()) newFood();
- repaint();
+ case KeyEvent.VK_W:
+ case KeyEvent.VK_UP:
+ if (!s.getRichtung().equals(Direction.Down)) s.setRichtung(Direction.Up);
+ break;
+ case KeyEvent.VK_A:
+ case KeyEvent.VK_LEFT:
+ if (!s.getRichtung().equals(Direction.Right)) s.setRichtung(Direction.Left);
+ break;
+ case KeyEvent.VK_S:
+ case KeyEvent.VK_DOWN:
+ if (!s.getRichtung().equals(Direction.Up)) s.setRichtung(Direction.Down);
+ break;
+ case KeyEvent.VK_D:
+ case KeyEvent.VK_RIGHT:
+ if (!s.getRichtung().equals(Direction.Left)) s.setRichtung(Direction.Right);
+ break;
+ }
+ }
});
+
+ Timer timer = new Timer(50,
+ (evt) -> { s.nextFrame(); if (System.currentTimeMillis() >= foodFactory.getTimeOfNextFood()) newFood(); repaint(); });
timer.start();
setVisible(true);
}
+ /**
+ * Generates new food
+ *
+ * @since Snake 1.1
+ */
public void newFood() {
foodFactory.generateFood();
foodFactory.generateFoodLocation(super.getWidth(), super.getHeight());
+ repaint();
}
- public void close() {
- dispose();
- }
+ /**
+ * Disposes this frame
+ *
+ * @since Snake 1.1
+ */
+ 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
index 795279f..b62dd68 100644
--- a/src/main/dev/lh/ui/StartScreen.java
+++ b/src/main/dev/lh/ui/StartScreen.java
@@ -2,11 +2,7 @@ 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;
@@ -16,68 +12,76 @@ import javax.swing.border.EmptyBorder;
import dev.lh.Main;
+/**
+ * Project: Snake
+ * File: StartScreen.java
+ * Created: 11 Mar 2020
+ *
+ * @author Leon Hofmeister
+ * @since Snake 1.0
+ */
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<>();
+ private static final long serialVersionUID = 6055940532003735543L;
+ private JPanel contentPane;
/**
- * Launch the application.
+ * closes the application.
+ */
+ public static void close() { System.exit(0); }
+
+ /**
+ * Launches Snake.
+ *
+ * @param args the program arguments
+ * @since Snake 1.0
*/
- 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();
- }
+ EventQueue.invokeLater(() -> {
+ 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();
-//
-// }
-// }
+
+ // 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();
+ // readInHighscores();
setTitle("Snake - Startscreen");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(500, 200, 550, 550);
@@ -86,25 +90,22 @@ public class StartScreen extends JFrame {
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.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) {
+ buPlay.addActionListener(a -> {
- Main.startGame();
- setVisible(false);
- dispose();
- System.gc();
- }
+ Main.startGame();
+ setVisible(false);
+ dispose();
+ System.gc();
});
contentPane.setLayout(null);
} catch (Exception e) {
-
+
e.printStackTrace();
}
}