Updated missing Javadoc in whole repository
* reformatted whole repository * fixed bug enabling 180° turnaround
This commit is contained in:
parent
5e879e5a3d
commit
46223d60ca
3
.settings/org.eclipse.jdt.ui.prefs
Normal file
3
.settings/org.eclipse.jdt.ui.prefs
Normal file
File diff suppressed because one or more lines are too long
@ -4,18 +4,42 @@ import java.awt.Color;
|
|||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project: <strong>Snake</strong><br>
|
||||||
|
* File: <strong>Food.java</strong><br>
|
||||||
|
* Created: <strong>11 Mar 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public class Food {
|
public class Food {
|
||||||
|
|
||||||
private Point position;
|
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) {
|
public void render(Graphics g) {
|
||||||
g.setColor(Color.yellow);
|
g.setColor(Color.yellow);
|
||||||
g.fillRect(position.x, position.y, 16, 16);
|
g.fillRect(position.x, position.y, 16, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,108 +6,228 @@ import java.awt.Graphics;
|
|||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
|
|
||||||
|
import dev.lh.ui.GameWindow;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project: <strong>Snake</strong><br>
|
||||||
|
* File: <strong>FoodFactory.java</strong><br>
|
||||||
|
* Created: <strong>11 Mar 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public class FoodFactory {
|
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.<br>
|
||||||
|
* <br>
|
||||||
|
* Project: <strong>Snake</strong><br>
|
||||||
|
* File: <strong>FoodFactory.java</strong><br>
|
||||||
|
* Created: <strong>11 Mar 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @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 static FoodFactory foodFactory = new FoodFactory();
|
||||||
|
|
||||||
private long timeOfNextFood;
|
private long timeOfNextFood;
|
||||||
|
|
||||||
|
|
||||||
Point pFood = null;
|
Point pFood = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private Food nextFood = Food.white;
|
private Food nextFood = Food.white;
|
||||||
|
|
||||||
public int rectangleSize = 6;
|
private int rectangleSize = 6;
|
||||||
|
|
||||||
private FoodFactory() {}
|
private FoodFactory() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the (singleton) instance of FoodFactory
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public static FoodFactory getInstance() { return foodFactory; }
|
public static FoodFactory getInstance() { return foodFactory; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a new {@link Food} object without its position
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public Food generateFood() {
|
public Food generateFood() {
|
||||||
int nextFoodIs = (int) Math.floor(Math.random()*5);
|
int nextFoodIs = (int) Math.floor(Math.random() * 5);
|
||||||
switch (nextFoodIs) {
|
switch (nextFoodIs) {
|
||||||
|
|
||||||
case 0: nextFood =Food.white; break;
|
case 0:
|
||||||
case 1: nextFood =Food.yellow; break;
|
nextFood = Food.white;
|
||||||
case 2: nextFood =Food.orange; break;
|
break;
|
||||||
case 3: nextFood =Food.red; break;
|
case 1:
|
||||||
case 4: nextFood =Food.blue; break;
|
nextFood = Food.yellow;
|
||||||
default: nextFood=generateFood();
|
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();
|
setTimeToNextFoodMillis();
|
||||||
return nextFood;
|
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) {
|
public Point generateFoodLocation(int width, int height) {
|
||||||
pFood=new Point((int) Math.round(Math.random() * width), (int) Math.round(Math.random() * 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) {
|
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.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.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 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) {
|
public void colorOfFood(Graphics g) {
|
||||||
switch(nextFood) {
|
switch (nextFood) {
|
||||||
case white: g.setColor(Color.white); break;
|
case white:
|
||||||
case yellow:g.setColor(Color.yellow); break;
|
g.setColor(Color.white);
|
||||||
case orange:g.setColor(Color.orange); break;
|
break;
|
||||||
case red: g.setColor(Color.red); break;
|
case yellow:
|
||||||
case blue: g.setColor(Color.blue); break;
|
g.setColor(Color.yellow);
|
||||||
}//switch
|
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) {
|
public void paintFood(Graphics g) {
|
||||||
colorOfFood(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) {
|
public boolean checkCollision(Rectangle snakeHead) {
|
||||||
int s = rectangleSize*5;
|
int s = rectangleSize * 5;
|
||||||
Rectangle food = new Rectangle(pFood, new Dimension(s, s));
|
Rectangle food = new Rectangle(pFood, new Dimension(s, s));
|
||||||
return food.intersects(snakeHead);
|
return food.intersects(snakeHead);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the length that will be added to the snake
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public int getAdditionalLength() {
|
public int getAdditionalLength() {
|
||||||
int snakeAdditionalLength = 0;
|
int snakeAdditionalLength = 0;
|
||||||
switch(nextFood) {
|
switch (nextFood) {
|
||||||
case white: snakeAdditionalLength =40;break;
|
case white:
|
||||||
case yellow:snakeAdditionalLength =15;break;
|
snakeAdditionalLength = 40;
|
||||||
case orange:snakeAdditionalLength =6;break;
|
break;
|
||||||
case red: snakeAdditionalLength =2;break;
|
case yellow:
|
||||||
case blue: snakeAdditionalLength =1;break;
|
snakeAdditionalLength = 15;
|
||||||
}//switch
|
break;
|
||||||
|
case orange:
|
||||||
|
snakeAdditionalLength = 6;
|
||||||
|
break;
|
||||||
|
case red:
|
||||||
|
snakeAdditionalLength = 2;
|
||||||
|
break;
|
||||||
|
case blue:
|
||||||
|
snakeAdditionalLength = 1;
|
||||||
|
break;
|
||||||
|
}// switch
|
||||||
return snakeAdditionalLength;
|
return snakeAdditionalLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,10 +3,25 @@ package dev.lh;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The handler handles incoming events in Snake.<br>
|
||||||
|
* <br>
|
||||||
|
* Project: <strong>Snake</strong><br>
|
||||||
|
* File: <strong>Handler.java</strong><br>
|
||||||
|
* Created: <strong>11 Mar 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public class Handler {
|
public class Handler {
|
||||||
|
|
||||||
List<Updateable> targets;
|
List<Updateable> targets;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new {@link Handler}.
|
||||||
|
*
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public Handler() {
|
public Handler() {
|
||||||
targets = new ArrayList<>();
|
targets = new ArrayList<>();
|
||||||
targets.add(new Snake(3));
|
targets.add(new Snake(3));
|
||||||
|
@ -2,21 +2,41 @@ package dev.lh;
|
|||||||
|
|
||||||
import dev.lh.ui.GameWindow;
|
import dev.lh.ui.GameWindow;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project: <strong>Snake</strong><br>
|
||||||
|
* File: <strong>Main.java</strong><br>
|
||||||
|
* Created: <strong>11 Mar 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public class Main {
|
public class Main {
|
||||||
|
|
||||||
private static GameWindow game;
|
private static GameWindow game;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param args the program arguments
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
//if wanted, the StartScreen can be added here
|
// if wanted, the StartScreen can be added here
|
||||||
startGame();
|
startGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts a new game of Snake.
|
||||||
|
*
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public static void startGame() {
|
public static void startGame() {
|
||||||
game = new GameWindow("Snake");
|
game = new GameWindow("Snake");
|
||||||
game.setVisible(true);
|
game.setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static GameWindow getGame() {
|
/**
|
||||||
return game;
|
* @return the currently used game
|
||||||
}
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
|
public static GameWindow getGame() { return game; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,86 +9,136 @@ import java.util.List;
|
|||||||
|
|
||||||
import dev.lh.ui.GameWindow;
|
import dev.lh.ui.GameWindow;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project: <strong>Snake</strong><br>
|
||||||
|
* File: <strong>Snake.java</strong><br>
|
||||||
|
* Created: <strong>11 Mar 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public class Snake implements Updateable {
|
public class Snake implements Updateable {
|
||||||
|
|
||||||
public static enum Direction{
|
/**
|
||||||
Left, Right, Up, Down;
|
* This enum contains all possible directions for the {@link Snake}.<br>
|
||||||
|
* <br>
|
||||||
|
* Project: <strong>Snake</strong><br>
|
||||||
|
* File: <strong>Snake.java</strong><br>
|
||||||
|
* Created: <strong>11 Mar 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @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 Direction Richtung;
|
||||||
private List<Point> tiles = new ArrayList<>();
|
private int length;
|
||||||
private static FoodFactory foodFactory = FoodFactory.getInstance();
|
private List<Point> tiles = new ArrayList<>();
|
||||||
private final int snakeSize = 10;
|
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) {
|
public Snake(int length) {
|
||||||
this.length = length;
|
this.length = length;
|
||||||
Richtung = Direction.Left;
|
Richtung = Direction.Left;
|
||||||
|
|
||||||
for(int i = 0; i<length;i++) {
|
for (int i = 0; i < length; i++)
|
||||||
tiles.add(new Point(320-50*i, 240));
|
tiles.add(new Point(320 - 50 * i, 240));
|
||||||
}
|
|
||||||
|
}// End Constructor
|
||||||
}//End Constructor
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void nextFrame() {
|
||||||
int velX = 0, velY = 0;
|
int velX = 0, velY = 0;
|
||||||
switch(Richtung) {
|
switch (Richtung) {
|
||||||
|
|
||||||
case Up:
|
case Up:
|
||||||
velY=-snakeSize;
|
velY = -snakeSize;
|
||||||
break;
|
break;
|
||||||
case Down:
|
case Down:
|
||||||
velY=snakeSize;
|
velY = snakeSize;
|
||||||
break;
|
break;
|
||||||
case Left:
|
case Left:
|
||||||
velX=-snakeSize;
|
velX = -snakeSize;
|
||||||
break;
|
break;
|
||||||
case Right:
|
case Right:
|
||||||
velX=snakeSize;
|
velX = snakeSize;
|
||||||
break;
|
break;
|
||||||
}//switch
|
}// switch
|
||||||
Point next = (Point) tiles.get(0).clone(), cur;
|
Point next = (Point) tiles.get(0).clone(), cur;
|
||||||
tiles.get(0).x+=velX;
|
tiles.get(0).x += velX;
|
||||||
tiles.get(0).y+=velY;
|
tiles.get(0).y += velY;
|
||||||
|
|
||||||
|
for (int i = 1; i < length; i++) {
|
||||||
for(int i = 1;i<length;i++) {
|
cur = tiles.get(i);
|
||||||
cur = tiles.get(i);
|
tiles.set(i, (Point) next.clone());
|
||||||
tiles.set(i,(Point) next.clone());
|
next = cur;
|
||||||
next = cur;
|
} // for
|
||||||
}//for
|
// if(tiles.get(0).x<=0||tiles.get(0).x>=)
|
||||||
// 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))) {
|
||||||
if(foodFactory.checkCollision(new Rectangle(tiles.get(0).x, tiles.get(0).y, snakeSize, snakeSize))){
|
addLength(foodFactory.getAdditionalLength());
|
||||||
addLength(foodFactory.getAdditionalLength());
|
GameWindow game = Main.getGame();
|
||||||
GameWindow game = Main.getGame();
|
game.newFood();
|
||||||
game.newFood();
|
}
|
||||||
}
|
|
||||||
|
}// End tick
|
||||||
}//End tick
|
|
||||||
@Override
|
@Override
|
||||||
public void render(Graphics g) {
|
public void render(Graphics g) {
|
||||||
g.setColor(Color.green);
|
g.setColor(Color.green);
|
||||||
|
|
||||||
for (int i = 0; i<length;i++) {
|
for (int i = 0; i < length; i++)
|
||||||
g.fillRect(tiles.get(i).x, tiles.get(i).y, snakeSize, snakeSize);
|
g.fillRect(tiles.get(i).x, tiles.get(i).y, snakeSize, snakeSize);
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}//End render
|
|
||||||
|
|
||||||
public Direction getRichtung() {
|
}// End render
|
||||||
return Richtung;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRichtung(Direction richtung) {
|
/**
|
||||||
Richtung = richtung;
|
* @return the current {@link Direction} of the snake
|
||||||
}
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
|
public Direction getRichtung() { return Richtung; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param richtung the new {@link Direction} of the snake
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
|
public void setRichtung(Direction richtung) { Richtung = richtung; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the given length to the current snake object
|
||||||
|
*
|
||||||
|
* @param additional the number of tiles to add
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public void addLength(int additional) {
|
public void addLength(int additional) {
|
||||||
for(int i=0;i<additional;i++) {
|
Point last = tiles.get(tiles.size() - 1);
|
||||||
tiles.add(null);
|
for (int i = 0; i < additional; i++)
|
||||||
}
|
tiles.add(last);
|
||||||
length+=additional;
|
length += additional;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,18 +2,24 @@ package dev.lh;
|
|||||||
|
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
|
|
||||||
public class Spawner implements Updateable{
|
/**
|
||||||
|
* Project: <strong>Snake</strong><br>
|
||||||
|
* File: <strong>Spawner.java</strong><br>
|
||||||
|
* Created: <strong>11 Mar 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
|
public class Spawner implements Updateable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void nextFrame() {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void render(Graphics g) {
|
public void render(Graphics g) {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,32 @@ package dev.lh;
|
|||||||
|
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface contains everything that needs to updated regularly.<br>
|
||||||
|
* <br>
|
||||||
|
* Project: <strong>Snake</strong><br>
|
||||||
|
* File: <strong>Updateable.java</strong><br>
|
||||||
|
* Created: <strong>11 Mar 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public interface Updateable {
|
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);
|
void render(Graphics g);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,6 @@ package dev.lh.ui;
|
|||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
|
|
||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
@ -16,48 +14,32 @@ import javax.swing.border.EmptyBorder;
|
|||||||
|
|
||||||
import dev.lh.Main;
|
import dev.lh.Main;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project: <strong>Snake</strong><br>
|
||||||
|
* File: <strong>Endscreen.java</strong><br>
|
||||||
|
* Created: <strong>11 Mar 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Snake v1.1
|
||||||
|
*/
|
||||||
public class Endscreen extends JDialog {
|
public class Endscreen extends JDialog {
|
||||||
|
|
||||||
|
|
||||||
private static final long serialVersionUID = -4457484397259161063L;
|
private static final long serialVersionUID = -4457484397259161063L;
|
||||||
|
|
||||||
private final JPanel contentPanel = new JPanel();
|
private final JPanel contentPanel = new JPanel();
|
||||||
public static int currentIndex = 0;
|
private static int score = 0;
|
||||||
public static boolean alreadySaved = false;
|
private final int goodOrBadResult = 250;
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create the dialog.
|
* Create the dialog.
|
||||||
|
*
|
||||||
|
* @param score1 the highscore to set
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public Endscreen(int score1) {
|
public Endscreen(int score1) {
|
||||||
setScore(score1);
|
setScore(score1);
|
||||||
try {
|
try {
|
||||||
// readInHighscoresPoints();
|
// readInHighscoresPoints();
|
||||||
// readInHighscoresPlayers();
|
// readInHighscoresPlayers();
|
||||||
|
|
||||||
setTitle("Endscreen");
|
setTitle("Endscreen");
|
||||||
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
|
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
|
||||||
@ -65,157 +47,160 @@ public class Endscreen extends JDialog {
|
|||||||
getContentPane().setLayout(new BorderLayout());
|
getContentPane().setLayout(new BorderLayout());
|
||||||
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
|
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
|
||||||
getContentPane().add(contentPanel, BorderLayout.CENTER);
|
getContentPane().add(contentPanel, BorderLayout.CENTER);
|
||||||
contentPanel.setLayout(null);
|
addWindowListener(new java.awt.event.WindowAdapter() {
|
||||||
// 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");
|
@Override
|
||||||
// lblNewLabel.setFont(new Font("Times New Roman", Font.BOLD | Font.ITALIC, 18));
|
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
|
||||||
// lblNewLabel.setBounds(65, 292, 98, 41);
|
Thread.getAllStackTraces().forEach((thread, stackTraceElement) -> thread.interrupt());
|
||||||
// contentPanel.add(lblNewLabel);
|
System.exit(0);
|
||||||
|
|
||||||
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) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
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
|
* public static void readInHighscoresPoints() { try { // FileReader reads text
|
||||||
* files in the default encoding. FileReader fileReader = new
|
* files in the default encoding. FileReader fileReader = new
|
||||||
* FileReader(fileNamePoints);
|
* FileReader(fileNamePoints);
|
||||||
*
|
|
||||||
* // Always wrap FileReader in BufferedReader. BufferedReader bufferedReader =
|
* // Always wrap FileReader in BufferedReader. BufferedReader bufferedReader =
|
||||||
* new BufferedReader(fileReader);
|
* new BufferedReader(fileReader);
|
||||||
*
|
|
||||||
* currentIndex = Integer.parseInt(bufferedReader.readLine()); for (int i = 0; i
|
* currentIndex = Integer.parseInt(bufferedReader.readLine()); for (int i = 0; i
|
||||||
* < currentIndex; i++) { highscorePoints[i]=
|
* < currentIndex; i++) { highscorePoints[i]=
|
||||||
* Integer.parseInt(bufferedReader.readLine()); } // Always close files.
|
* Integer.parseInt(bufferedReader.readLine()); } // Always close files.
|
||||||
* bufferedReader.close(); fileReader.close(); } catch (FileNotFoundException
|
* bufferedReader.close(); fileReader.close(); } catch (FileNotFoundException
|
||||||
* ex) { System.out.println("Error 404:File '" + fileNamePoints +
|
* ex) { System.out.println("Error 404:File '" + fileNamePoints +
|
||||||
* "' not found");
|
* "' not found");
|
||||||
*
|
|
||||||
* } catch (IOException ex) { System.out.println("Error reading file '" +
|
* } catch (IOException ex) { System.out.println("Error reading file '" +
|
||||||
* fileNamePoints + "'"); ex.printStackTrace(); } } private void
|
* fileNamePoints + "'"); ex.printStackTrace(); } } private void
|
||||||
* readInHighscoresPlayers(){ try { // FileReader reads text files in the
|
* readInHighscoresPlayers(){ try { // FileReader reads text files in the
|
||||||
* default encoding. FileReader fileReader = new FileReader(fileNamePlayers);
|
* default encoding. FileReader fileReader = new FileReader(fileNamePlayers);
|
||||||
*
|
|
||||||
* // Always wrap FileReader in BufferedReader. BufferedReader bufferedReader =
|
* // Always wrap FileReader in BufferedReader. BufferedReader bufferedReader =
|
||||||
* new BufferedReader(fileReader);
|
* new BufferedReader(fileReader);
|
||||||
*
|
|
||||||
* for (int i = 0; i < currentIndex; i++) { highscorePlayers[i]=
|
* for (int i = 0; i < currentIndex; i++) { highscorePlayers[i]=
|
||||||
* bufferedReader.readLine(); } // Always close files. bufferedReader.close();
|
* bufferedReader.readLine(); } // Always close files. bufferedReader.close();
|
||||||
* fileReader.close(); } catch (FileNotFoundException ex) {
|
* fileReader.close(); } catch (FileNotFoundException ex) {
|
||||||
* System.out.println("Error 404:File '" + fileNamePlayers + "' not found");
|
* System.out.println("Error 404:File '" + fileNamePlayers + "' not found");
|
||||||
*
|
|
||||||
*
|
|
||||||
* } catch (IOException ex) { System.out.println("Error reading file '" +
|
* } catch (IOException ex) { System.out.println("Error reading file '" +
|
||||||
* fileNamePlayers + "'"); ex.printStackTrace(); } } /* private void
|
* fileNamePlayers + "'"); ex.printStackTrace(); } } /* private void
|
||||||
* writeFiles() { File dateiPoints = new File("." + File.separator +
|
* writeFiles() { File dateiPoints = new File("." + File.separator +
|
||||||
@ -226,7 +211,6 @@ public class Endscreen extends JDialog {
|
|||||||
* catch (Exception e1) { e1.printStackTrace(); } finally { try {
|
* catch (Exception e1) { e1.printStackTrace(); } finally { try {
|
||||||
* bwpoints.close(); fwpoints.close(); alreadySaved = true; } catch (IOException
|
* bwpoints.close(); fwpoints.close(); alreadySaved = true; } catch (IOException
|
||||||
* e2) { e2.printStackTrace(); } }
|
* e2) { e2.printStackTrace(); } }
|
||||||
*
|
|
||||||
* File dateiPlayers = new File("." + File.separator + fileNamePlayers);
|
* File dateiPlayers = new File("." + File.separator + fileNamePlayers);
|
||||||
* FileWriter fwplayers = null; BufferedWriter bwplayers = null; try { fwplayers
|
* FileWriter fwplayers = null; BufferedWriter bwplayers = null; try { fwplayers
|
||||||
* = new FileWriter(dateiPlayers); bwplayers = new BufferedWriter(fwplayers);
|
* = new FileWriter(dateiPlayers); bwplayers = new BufferedWriter(fwplayers);
|
||||||
@ -234,20 +218,14 @@ public class Endscreen extends JDialog {
|
|||||||
* bwplayers.write(highscorePlayers[i]); } } catch (Exception e1) {
|
* bwplayers.write(highscorePlayers[i]); } } catch (Exception e1) {
|
||||||
* e1.printStackTrace(); } finally { try { bwplayers.close(); fwplayers.close();
|
* e1.printStackTrace(); } finally { try { bwplayers.close(); fwplayers.close();
|
||||||
* alreadySaved = true; } catch (IOException e2) { e2.printStackTrace(); } }
|
* alreadySaved = true; } catch (IOException e2) { e2.printStackTrace(); } }
|
||||||
*
|
|
||||||
*
|
|
||||||
* }
|
* }
|
||||||
*
|
|
||||||
*
|
|
||||||
* /** Launch the application.
|
* /** Launch the application.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* public void relocate(int newScore) {
|
* public void relocate(int newScore) {
|
||||||
*
|
|
||||||
* String newPlayer = new String(tfName.getText()); if (newPlayer.equals("")) {
|
* String newPlayer = new String(tfName.getText()); if (newPlayer.equals("")) {
|
||||||
* txtrBitteErstNamen.setVisible(true); return; } else { sortFiles(newScore,
|
* txtrBitteErstNamen.setVisible(true); return; } else { sortFiles(newScore,
|
||||||
* newPlayer); } }
|
* newPlayer); } }
|
||||||
*
|
|
||||||
* private void sortFiles(int newScore, String newPlayer) { if
|
* private void sortFiles(int newScore, String newPlayer) { if
|
||||||
* (highscorePoints.length==highscorePlayers.length&&
|
* (highscorePoints.length==highscorePlayers.length&&
|
||||||
* highscorePoints.length<=30) { for(int i=0;i<highscorePoints.length;i++) {
|
* highscorePoints.length<=30) { for(int i=0;i<highscorePoints.length;i++) {
|
||||||
@ -276,7 +254,6 @@ public class Endscreen extends JDialog {
|
|||||||
* temp[i]=toCompare; for(int k=i+1;k<temp.length;k++) { int tmp2=temp[k];
|
* temp[i]=toCompare; for(int k=i+1;k<temp.length;k++) { int tmp2=temp[k];
|
||||||
* temp[k]=tmp; tmp=tmp2; } arrange(temp); return; } else { temp[30]=toCompare;
|
* temp[k]=tmp; tmp=tmp2; } arrange(temp); return; } else { temp[30]=toCompare;
|
||||||
* arrange(temp); }
|
* arrange(temp); }
|
||||||
*
|
|
||||||
* } } }
|
* } } }
|
||||||
*/
|
*/
|
||||||
}
|
}
|
@ -16,17 +16,30 @@ import dev.lh.FoodFactory;
|
|||||||
import dev.lh.Snake;
|
import dev.lh.Snake;
|
||||||
import dev.lh.Snake.Direction;
|
import dev.lh.Snake.Direction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project: <strong>Snake</strong><br>
|
||||||
|
* File: <strong>GameWindow.java</strong><br>
|
||||||
|
* Created: <strong>11 Mar 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public class GameWindow extends JFrame {
|
public class GameWindow extends JFrame {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
private Snake s = new Snake(7);
|
private Snake s = new Snake(7);
|
||||||
private FoodFactory foodFactory = FoodFactory.getInstance();
|
private FoodFactory foodFactory = FoodFactory.getInstance();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param title the title of the frame
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public GameWindow(String title) {
|
public GameWindow(String title) {
|
||||||
super(title);
|
super(title);
|
||||||
newFood();
|
newFood();
|
||||||
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
|
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
|
||||||
setBounds(new Rectangle(size));
|
setBounds(new Rectangle(size));
|
||||||
|
setLocation(0, 0);
|
||||||
setLocationRelativeTo(null);
|
setLocationRelativeTo(null);
|
||||||
setMinimumSize(size);
|
setMinimumSize(size);
|
||||||
setPreferredSize(size);
|
setPreferredSize(size);
|
||||||
@ -35,7 +48,6 @@ public class GameWindow extends JFrame {
|
|||||||
setResizable(false);
|
setResizable(false);
|
||||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||||
|
|
||||||
|
|
||||||
add(new JPanel() {
|
add(new JPanel() {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
@ -56,42 +68,48 @@ public class GameWindow extends JFrame {
|
|||||||
public void keyPressed(KeyEvent e) {
|
public void keyPressed(KeyEvent e) {
|
||||||
super.keyPressed(e);
|
super.keyPressed(e);
|
||||||
switch (e.getKeyCode()) {
|
switch (e.getKeyCode()) {
|
||||||
case KeyEvent.VK_W:
|
case KeyEvent.VK_W:
|
||||||
case KeyEvent.VK_UP:
|
case KeyEvent.VK_UP:
|
||||||
s.setRichtung(Direction.Up);
|
if (!s.getRichtung().equals(Direction.Down)) s.setRichtung(Direction.Up);
|
||||||
break;
|
break;
|
||||||
case KeyEvent.VK_A:
|
case KeyEvent.VK_A:
|
||||||
case KeyEvent.VK_LEFT:
|
case KeyEvent.VK_LEFT:
|
||||||
s.setRichtung(Direction.Left);
|
if (!s.getRichtung().equals(Direction.Right)) s.setRichtung(Direction.Left);
|
||||||
break;
|
break;
|
||||||
case KeyEvent.VK_S:
|
case KeyEvent.VK_S:
|
||||||
case KeyEvent.VK_DOWN:
|
case KeyEvent.VK_DOWN:
|
||||||
s.setRichtung(Direction.Down);
|
if (!s.getRichtung().equals(Direction.Up)) s.setRichtung(Direction.Down);
|
||||||
break;
|
break;
|
||||||
case KeyEvent.VK_D:
|
case KeyEvent.VK_D:
|
||||||
case KeyEvent.VK_RIGHT:
|
case KeyEvent.VK_RIGHT:
|
||||||
s.setRichtung(Direction.Right);
|
if (!s.getRichtung().equals(Direction.Left)) s.setRichtung(Direction.Right);
|
||||||
break;
|
break;
|
||||||
}// switch
|
}
|
||||||
}// keypressed
|
}
|
||||||
});// keylistener
|
|
||||||
|
|
||||||
Timer timer = new Timer(50, (evt) -> {
|
|
||||||
s.tick();
|
|
||||||
if(System.currentTimeMillis()>=foodFactory.getTimeOfNextFood()) newFood();
|
|
||||||
repaint();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Timer timer = new Timer(50,
|
||||||
|
(evt) -> { s.nextFrame(); if (System.currentTimeMillis() >= foodFactory.getTimeOfNextFood()) newFood(); repaint(); });
|
||||||
timer.start();
|
timer.start();
|
||||||
|
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates new food
|
||||||
|
*
|
||||||
|
* @since Snake 1.1
|
||||||
|
*/
|
||||||
public void newFood() {
|
public void newFood() {
|
||||||
foodFactory.generateFood();
|
foodFactory.generateFood();
|
||||||
foodFactory.generateFoodLocation(super.getWidth(), super.getHeight());
|
foodFactory.generateFoodLocation(super.getWidth(), super.getHeight());
|
||||||
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close() {
|
/**
|
||||||
dispose();
|
* Disposes this frame
|
||||||
}
|
*
|
||||||
|
* @since Snake 1.1
|
||||||
|
*/
|
||||||
|
public void close() { dispose(); }
|
||||||
}
|
}
|
@ -2,11 +2,7 @@ package dev.lh.ui;
|
|||||||
|
|
||||||
import java.awt.EventQueue;
|
import java.awt.EventQueue;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
@ -16,68 +12,76 @@ import javax.swing.border.EmptyBorder;
|
|||||||
|
|
||||||
import dev.lh.Main;
|
import dev.lh.Main;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project: <strong>Snake</strong><br>
|
||||||
|
* File: <strong>StartScreen.java</strong><br>
|
||||||
|
* Created: <strong>11 Mar 2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Snake 1.0
|
||||||
|
*/
|
||||||
public class StartScreen extends JFrame {
|
public class StartScreen extends JFrame {
|
||||||
|
|
||||||
private static final long serialVersionUID = 6055940532003735543L;
|
private static final long serialVersionUID = 6055940532003735543L;
|
||||||
private JPanel contentPane;
|
private JPanel contentPane;
|
||||||
public static int currentIndex = 0;
|
|
||||||
public static List<String[]> combination = new ArrayList<>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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) {
|
public static void main(String[] args) {
|
||||||
EventQueue.invokeLater(new Runnable() {
|
EventQueue.invokeLater(() -> {
|
||||||
public void run() {
|
try {
|
||||||
try {
|
StartScreen frame = new StartScreen();
|
||||||
StartScreen frame = new StartScreen();
|
frame.setVisible(true);
|
||||||
frame.setVisible(true);
|
} catch (Exception e) {
|
||||||
} catch (Exception e) {
|
e.printStackTrace();
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static void readInHighscores() {
|
// public static void readInHighscores() {
|
||||||
// try {
|
// try {
|
||||||
// combination.clear();
|
// combination.clear();
|
||||||
// // FileReader reads text files in the default encoding.
|
// // FileReader reads text files in the default encoding.
|
||||||
// FileReader fileReader = new FileReader(fileName);
|
// FileReader fileReader = new FileReader(fileName);
|
||||||
//
|
//
|
||||||
// // Always wrap FileReader in BufferedReader.
|
// // Always wrap FileReader in BufferedReader.
|
||||||
// BufferedReader bufferedReader = new BufferedReader(fileReader);
|
// BufferedReader bufferedReader = new BufferedReader(fileReader);
|
||||||
//
|
//
|
||||||
// currentIndex = Integer.parseInt(bufferedReader.readLine());
|
// currentIndex = Integer.parseInt(bufferedReader.readLine());
|
||||||
// for (int i = 0; i < currentIndex; i++) {
|
// for (int i = 0; i < currentIndex; i++) {
|
||||||
// String[] spielerScore = new String[2];
|
// String[] spielerScore = new String[2];
|
||||||
// spielerScore[0] = bufferedReader.readLine();
|
// spielerScore[0] = bufferedReader.readLine();
|
||||||
// spielerScore[1] = bufferedReader.readLine();
|
// spielerScore[1] = bufferedReader.readLine();
|
||||||
// combination.add(spielerScore);
|
// combination.add(spielerScore);
|
||||||
// }
|
// }
|
||||||
// // Always close files.
|
// // Always close files.
|
||||||
// bufferedReader.close();
|
// bufferedReader.close();
|
||||||
// fileReader.close();
|
// fileReader.close();
|
||||||
// } catch (FileNotFoundException ex) {
|
// } catch (FileNotFoundException ex) {
|
||||||
// System.out.println("Error 404:File '" + fileName + "' not found");
|
// System.out.println("Error 404:File '" + fileName + "' not found");
|
||||||
//
|
//
|
||||||
// } catch (IOException ex) {
|
// } catch (IOException ex) {
|
||||||
// System.out.println("Error reading file '" + fileName + "'");
|
// System.out.println("Error reading file '" + fileName + "'");
|
||||||
// ex.printStackTrace();
|
// ex.printStackTrace();
|
||||||
//
|
//
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create the frame.
|
* Create the frame.
|
||||||
*/
|
*/
|
||||||
public StartScreen() {
|
public StartScreen() {
|
||||||
try {
|
try {
|
||||||
// readInHighscores();
|
// readInHighscores();
|
||||||
setTitle("Snake - Startscreen");
|
setTitle("Snake - Startscreen");
|
||||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
setBounds(500, 200, 550, 550);
|
setBounds(500, 200, 550, 550);
|
||||||
@ -86,25 +90,22 @@ public class StartScreen extends JFrame {
|
|||||||
setContentPane(contentPane);
|
setContentPane(contentPane);
|
||||||
|
|
||||||
JButton buPlay = new JButton("Start Game");
|
JButton buPlay = new JButton("Start Game");
|
||||||
buPlay.setBounds(158,197, 190, 131);
|
buPlay.setBounds(158, 197, 190, 131);
|
||||||
buPlay.setIcon(new ImageIcon(
|
buPlay.setIcon(new ImageIcon(StartScreen.class.getResource("/com/sun/javafx/webkit/prism/resources/mediaPlayDisabled.png")));
|
||||||
StartScreen.class.getResource("/com/sun/javafx/webkit/prism/resources/mediaPlayDisabled.png")));
|
|
||||||
buPlay.setMnemonic(KeyEvent.VK_ENTER);
|
buPlay.setMnemonic(KeyEvent.VK_ENTER);
|
||||||
buPlay.setFont(new Font("Times New Roman", Font.PLAIN, 16));
|
buPlay.setFont(new Font("Times New Roman", Font.PLAIN, 16));
|
||||||
|
|
||||||
buPlay.addActionListener(new ActionListener() {
|
buPlay.addActionListener(a -> {
|
||||||
public void actionPerformed(ActionEvent a) {
|
|
||||||
|
|
||||||
Main.startGame();
|
Main.startGame();
|
||||||
setVisible(false);
|
setVisible(false);
|
||||||
dispose();
|
dispose();
|
||||||
System.gc();
|
System.gc();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
contentPane.setLayout(null);
|
contentPane.setLayout(null);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user