Added comments

This commit is contained in:
Julius de Jeu 2017-04-14 16:14:20 +02:00
parent a339a6724b
commit 75a2d24210
12 changed files with 307 additions and 166 deletions

View file

@ -32,26 +32,5 @@
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:xmlgraphics-commons:2.1" level="project" /> <orderEntry type="library" name="Maven: org.apache.xmlgraphics:xmlgraphics-commons:2.1" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:1.3.1" level="project" /> <orderEntry type="library" name="Maven: commons-io:commons-io:1.3.1" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.0.4" level="project" /> <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.0.4" level="project" />
<orderEntry type="library" name="Maven: de.codecentric.centerdevice:javafxsvg:1.2.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-transcoder:1.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-anim:1.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-css:1.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-ext:1.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-parser:1.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-svg-dom:1.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-awt-util:1.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-bridge:1.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-script:1.8" level="project" />
<orderEntry type="library" name="Maven: xalan:xalan:2.7.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-dom:1.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-gvt:1.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-svggen:1.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-util:1.8" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-xml:1.8" level="project" />
<orderEntry type="library" name="Maven: xml-apis:xml-apis:1.3.04" level="project" />
<orderEntry type="library" name="Maven: xml-apis:xml-apis-ext:1.3.04" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:xmlgraphics-commons:2.1" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:1.3.1" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.0.4" level="project" />
</component> </component>
</module> </module>

View file

@ -1,2 +1,11 @@
# Leendert # Leendert
Het spectaculaire tuinavontuur Het spectaculaire tuinavontuur
## Gemaakt door
* Mette Lejeune (afbeeldingen)
* Julius de Jeu (programmeren)
* Jelle Miltenburg (muziek)
* Marleen Peeters (afbeeldingen)
* Jesper de Wilde (programmeren en afbeeldingen)
* Nathan van der Kamp (programmeren)

35
pom.xml
View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -13,12 +13,41 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>RELEASE</version> <version>3.6.1</version>
<configuration> <configuration>
<source>1.8</source> <source>1.8</source>
<target>1.8</target> <target>1.8</target>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<!-- get all project dependencies -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- MainClass in mainfest make a executable jar -->
<archive>
<manifest>
<mainClass>nl.minkema.leendert.Main</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!-- bind to the packaging phase -->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins> </plugins>
</build> </build>

View file

@ -25,11 +25,19 @@ public class Dice extends Group {
private Group dotPattern6 = new Group(); private Group dotPattern6 = new Group();
private Group klaver = new Group(); private Group klaver = new Group();
/**
* Dit is de constructor van onze dobbelsteen
* De dobbelsteen is helemaal gemaakt met basisvormen door Nathan, daarna een beetje aangepast door Julius
*
* @param x de x-coördinaat van de dobbelsteen
* @param y de y-coördinaat van de dobbelsteen
*/
public Dice(int x, int y) { public Dice(int x, int y) {
this.r = new Random(System.currentTimeMillis()); this.r = new Random(System.currentTimeMillis());
this.setTranslateX(x); this.setTranslateX(x);
this.setTranslateY(y); this.setTranslateY(y);
Ellipse mainEll = new Ellipse(50, 50, 40, 50); Ellipse mainEll = new Ellipse(50, 50, 40, 50);
mainEll.setFill(Color.DARKRED); mainEll.setFill(Color.DARKRED);
Ellipse headEll1 = new Ellipse(34, 11, 6, 4); Ellipse headEll1 = new Ellipse(34, 11, 6, 4);
@ -136,13 +144,21 @@ public class Dice extends Group {
roll(); roll();
} }
/**
* @return Dit is de functie die het rollen van de dobbelsteen op zich neemt.
*/
public int roll() { public int roll() {
//We willen een getal tussen 0 en 6
int roll = r.nextInt(6); int roll = r.nextInt(6);
//We maken eerst de groep leeg
this.getChildren().clear(); this.getChildren().clear();
//Als er 3 uit de roll komt, en we dus 4 zeggen, willen we een klavertje 4 laten zien
if (roll == 3) { if (roll == 3) {
this.getChildren().add(klaver); this.getChildren().add(klaver);
} else { } else {
//Maar anders gaan we voor een lieveheersbeestje
this.getChildren().add(ladybah); this.getChildren().add(ladybah);
//Dit zijn alle afzonderlijke patronen
switch (roll) { switch (roll) {
case 0: case 0:
this.getChildren().add(dotPattern1); this.getChildren().add(dotPattern1);
@ -159,10 +175,12 @@ public class Dice extends Group {
case 5: case 5:
this.getChildren().add(dotPattern6); this.getChildren().add(dotPattern6);
break; break;
//Dit zou wel heel bijzonder zijn
default: default:
System.out.println("Error drawing die"); System.out.println("Error drawing die");
} }
} }
//En aan het eind nemen we de roll en tellen we er één bij op.
return roll + 1; return roll + 1;
} }

View file

@ -5,11 +5,12 @@ import javafx.scene.control.Label;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent; import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import javafx.scene.media.Media; import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaPlayer;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import java.util.ArrayList; import java.util.ArrayList;
@ -27,23 +28,31 @@ public class Game extends Pane {
public static int[][] locations; public static int[][] locations;
public static ArrayList<Player> players = new ArrayList<>(); public static ArrayList<Player> players = new ArrayList<>();
/**
* De constructor voor de game
*/
public Game() { public Game() {
//We willen dat de volgorde van de spelers willekeurig is.
Collections.shuffle(players); Collections.shuffle(players);
Image bord = new Image("/images/KLAAR.png"); //Dit is de achtergrond met het bord er op.
Image bord = new Image("/images/bord.png");
ImageView view = new ImageView(bord); ImageView view = new ImageView(bord);
view.setPreserveRatio(true); view.setPreserveRatio(true);
view.setFitHeight(800); view.setFitHeight(800);
view.setX(0); view.setX(0);
view.setY(0); view.setY(0);
this.getChildren().add(view); this.getChildren().add(view);
//Dit zorgt voor de nummers in de vakjes
for (int i = 0, locationsLength = locations.length; i < locationsLength; i++) { for (int i = 0, locationsLength = locations.length; i < locationsLength; i++) {
int[] k = locations[i]; int[] k = locations[i];
getChildren().add(new Circle(k[0], k[1], 5, Color.RED)); //getChildren().add(new Circle(k[0], k[1], 5, Color.RED));
getChildren().add(new Text(k[0], k[1], String.valueOf(i))); Text text = new Text(k[0] - 5, k[1] - 10, String.valueOf(i));
text.setFill(Color.GREENYELLOW);
getChildren().add(text);
} }
//Dit was om de locaties van de vakjes te bepalen.
this.setOnMouseClicked(new EventHandler<MouseEvent>() { this.setOnMouseClicked(new EventHandler<MouseEvent>() {
int i = 0; int i = 0;
@ -52,12 +61,14 @@ public class Game extends Pane {
//System.out.printf("%d: %d,%d%n", i++, (int) event.getSceneX(), (int) event.getSceneY()); //System.out.printf("%d: %d,%d%n", i++, (int) event.getSceneX(), (int) event.getSceneY());
} }
}); });
//Dit is de afbeelding van de speler die mag gooien
ImageView playerTurn = new ImageView(); ImageView playerTurn = new ImageView();
playerTurn.setX(1000); playerTurn.setX(1000);
playerTurn.setY(50); playerTurn.setY(50);
playerTurn.setPreserveRatio(true); playerTurn.setPreserveRatio(true);
playerTurn.setFitHeight(400); playerTurn.setFitHeight(400);
//Hier staat de naam van het karaker in.
Label l = new Label(); Label l = new Label();
l.setTranslateX(965); l.setTranslateX(965);
l.setTranslateY(370); l.setTranslateY(370);
@ -66,19 +77,31 @@ public class Game extends Pane {
this.getChildren().add(playerTurn); this.getChildren().add(playerTurn);
this.getChildren().addAll(l); this.getChildren().addAll(l);
//Dit is onze dobbelsteen
Dice dice = new Dice(1100, 700); Dice dice = new Dice(1100, 700);
this.getChildren().add(dice); this.getChildren().add(dice);
//Dit is de knop van de dobbelsteen.
this.getChildren().add(Menu.createButton("Gooi", 1100, 650, e -> { this.getChildren().add(Menu.createButton("Gooi", 1100, 650, e -> {
//We kijken wie de volgende speler is
Player p = players.get(Player.getNextActive()); Player p = players.get(Player.getNextActive());
//En rollen een dobbelsteen
int roll = dice.roll(); int roll = dice.roll();
//Dan verplaatsen we de speler
p.move(roll); p.move(roll);
//Als de speler 4 gooit mag hij/zij nog een keer
if (roll == 4) Player.four(); if (roll == 4) Player.four();
//We zoeken uit wie er hier na mag
int next = players.get(Player.getNextActive()).getCh(); int next = players.get(Player.getNextActive()).getCh();
//Zetten die afbeelding als de speler die mag gooien
playerTurn.setImage(Menu.images[next]); playerTurn.setImage(Menu.images[next]);
//En doen hetzelfde met de naam van de speler
l.setText(Menu.names[next] + " is aan de beurt!"); l.setText(Menu.names[next] + " is aan de beurt!");
//En zetten het weer terug naar de vorige speler
Player.four(); Player.four();
})); }));
//this.setBackground(new Background(new BackgroundFill(Color.RED, null, null))); //Dit is de achtergrond
this.setBackground(new Background(new BackgroundFill(Color.GREENYELLOW, null, null)));
//Dit zijn alle spelers
for (Player p : players) { for (Player p : players) {
this.getChildren().add(p.getImageView()); this.getChildren().add(p.getImageView());
} }
@ -86,6 +109,7 @@ public class Game extends Pane {
playerTurn.setImage(Menu.images[players.get(1).getCh()]); playerTurn.setImage(Menu.images[players.get(1).getCh()]);
l.setText(Menu.names[players.get(1).getCh()] + " is aan de beurt!"); l.setText(Menu.names[players.get(1).getCh()] + " is aan de beurt!");
//En hier is de achtergrondmuziek, die het soms wel en soms niet doet...
String loc = this.getClass().getResource("/music/game.mp3").toString(); String loc = this.getClass().getResource("/music/game.mp3").toString();
Media music = new Media(loc); Media music = new Media(loc);
MediaPlayer menuplayer = new MediaPlayer(music); MediaPlayer menuplayer = new MediaPlayer(music);

View file

@ -14,13 +14,10 @@ import java.util.Properties;
public class Main extends Application { public class Main extends Application {
public static Scene scene; public static Scene scene;
public static boolean memes = false;
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
for (String s : args) {
if (s.equals("-memes")) memes = true;
}
//Je kan properties best goed gebruiken om simpele lijsten in te laden
Properties properties = new Properties(); Properties properties = new Properties();
properties.load(Main.class.getResourceAsStream("/text/locations.properties")); properties.load(Main.class.getResourceAsStream("/text/locations.properties"));
Game.locations = new int[properties.size()][2]; Game.locations = new int[properties.size()][2];

View file

@ -37,32 +37,42 @@ public class Menu extends Group {
private ArrayList<Integer> chosen = new ArrayList<>(); private ArrayList<Integer> chosen = new ArrayList<>();
/**
* De constructor voor het menu
*
* @throws URISyntaxException als de achtergrondmuziek niet gevonden kan worden.
* @throws MalformedURLException gebeurt hopelijk niet...
*/
public Menu() throws URISyntaxException, MalformedURLException { public Menu() throws URISyntaxException, MalformedURLException {
ArrayList<Node> nodes = new ArrayList<>(); ArrayList<Node> nodes = new ArrayList<>();
Image bg = new Image(ModLoader.getFile("/images/background.png")); //achtergrondafbeelding
Image bg = new Image("/images/background.png");
ImageView view = new ImageView(bg); ImageView view = new ImageView(bg);
//zet de x en y naar de linker bovenhoek
view.setX(0); view.setX(0);
view.setY(0); view.setY(0);
//dit is om te zorgen dat de afbeelding past
view.setFitHeight(850); view.setFitHeight(850);
view.setPreserveRatio(false); view.setPreserveRatio(false);
view.setFitWidth(1250); view.setFitWidth(1250);
nodes.add(view);
//De achtergrondmuziek
String loc = this.getClass().getResource("/music/menu.mp4").toString(); String loc = this.getClass().getResource("/music/menu.mp4").toString();
//loc = new File("menu.mp4").toURI().toURL().toString();
//loc = ModLoader.getFile("/music/menu.mp4");
Media music = new Media(loc); Media music = new Media(loc);
MediaPlayer menuplayer = new MediaPlayer(music); MediaPlayer menuplayer = new MediaPlayer(music);
menuplayer.setCycleCount(Integer.MAX_VALUE); menuplayer.setCycleCount(Integer.MAX_VALUE);
menuplayer.setVolume(0.6f); menuplayer.setVolume(0.6f);
//Dit deel is om te garanderen dat de muziek start, hoewel het soms toch niet werkt, iets met codecs enzo
menuplayer.setAutoPlay(true); menuplayer.setAutoPlay(true);
menuplayer.play(); menuplayer.play();
menuplayer.play(); menuplayer.play();
nodes.add(view); //De breedte van de afbeelding
int imagewidth = 100; int imagewidth = 100;
//Een array met speler afbeeldingen
images = new Image[]{ images = new Image[]{
new Image("/svg/p1.svg", imagewidth, 0, true, false), new Image("/svg/p1.svg", imagewidth, 0, true, false),
new Image("/svg/p2.svg", imagewidth, 0, true, false), new Image("/svg/p2.svg", imagewidth, 0, true, false),
@ -70,36 +80,50 @@ public class Menu extends Group {
new Image("/svg/p4.svg", imagewidth, 0, true, false), new Image("/svg/p4.svg", imagewidth, 0, true, false),
new Image("/svg/p5.svg", imagewidth, 0, true, false)}; new Image("/svg/p5.svg", imagewidth, 0, true, false)};
//De namen van de karakters
names = new String[]{"Paulus", "Pinkeltje", "Petunia", "Kwebbel", "Stuart"}; names = new String[]{"Paulus", "Pinkeltje", "Petunia", "Kwebbel", "Stuart"};
int x = 0, y = 0; int x = 0, y = 0;
//Voor elke afbeelding wordt dit uitgevoerd
for (int i1 = 0; i1 < images.length; i1++) { for (int i1 = 0; i1 < images.length; i1++) {
//We maken van de afbeelding een ImageView, zodat het zichtbaar gemaakt kan worden
Image i = images[i1]; Image i = images[i1];
ImageView iv = new ImageView(i); ImageView iv = new ImageView(i);
iv.setX(750 + x); iv.setX(750 + x);
iv.setY(400 + y); iv.setY(400 + y);
//En geven het een tooltip met de naam van de Kabouter
Tooltip.install(iv, new Tooltip(names[i1])); Tooltip.install(iv, new Tooltip(names[i1]));
x += i.getRequestedWidth(); x += i.getRequestedWidth();
//Als we te ver gaan op de x as, gaan we door op een volgende regel
if (x > 200) { if (x > 200) {
y += 150; y += 150;
x = -70; x = -70;
} }
final int ch = i1; final int ch = i1;
//Wat er gebeurt als je op een kabouter klikt
iv.setOnMouseClicked(e -> { iv.setOnMouseClicked(e -> {
//Eerst controleren of het karakter al is gekozen.
if (chosen.contains(ch)) { if (chosen.contains(ch)) {
new Alert(Alert.AlertType.ERROR, "Sorry, dit karakter is al door iemand anders gekozen...").show(); new Alert(Alert.AlertType.ERROR, "Sorry, dit karakter is al door iemand anders gekozen...").show();
return; return;
} }
//Als er nog geen hoeveelheid is gekozen kan dat ook best een probleempje opleveren.
if (hoeveel < 0) { if (hoeveel < 0) {
Alert alert = new Alert(Alert.AlertType.ERROR, "Je moet eerst kiezen hoe veel spelers je wilt!\nDruk links op de juiste hoeveelheid kaboutertjes!", ButtonType.OK); Alert alert = new Alert(Alert.AlertType.ERROR, "Je moet eerst kiezen hoe veel spelers je wilt!\nDruk links op de juiste hoeveelheid kaboutertjes!", ButtonType.OK);
alert.show(); alert.show();
} else { } else {
//Maar verder kunnen we gewoon de karakters vinden
Image image = new Image(i.impl_getUrl(), 0, 50, true, false); Image image = new Image(i.impl_getUrl(), 0, 50, true, false);
//Toevoegen aan de lijst van spelers
Game.players.add(new Player(image, ch)); Game.players.add(new Player(image, ch));
//De hoeveelheid benodigde spelers met één verlagen
hoeveel--; hoeveel--;
//En controleren of iedereen er een gekozen heeft
if (hoeveel == 0) { if (hoeveel == 0) {
//Zo ja: we stoppen het muziekje en starten het spel!
menuplayer.stop(); menuplayer.stop();
Main.scene.setRoot(new Game()); Main.scene.setRoot(new Game());
} else { } else {
//Maar anders laten we mensen nog kiezen.
String een = "Er moet nog 1 persoon kiezen!"; String een = "Er moet nog 1 persoon kiezen!";
String meer = String.format("Er moeten nog %d mensen kiezen!", hoeveel); String meer = String.format("Er moeten nog %d mensen kiezen!", hoeveel);
Alert alert = new Alert(Alert.AlertType.NONE, hoeveel > 1 ? meer : een, ButtonType.OK); Alert alert = new Alert(Alert.AlertType.NONE, hoeveel > 1 ? meer : een, ButtonType.OK);
@ -110,22 +134,24 @@ public class Menu extends Group {
} }
}); });
//Maar we moeten wel het karakter zichtbaar maken.
nodes.add(iv); nodes.add(iv);
} }
int x2 = 30, y2 = 50; int x2 = 30, y2 = 50;
//Dit zijn de knoppen voor de hoeveelheid spelers
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
if (i == 0) continue; if (i == 0) continue;
int number = 1 + i; int number = 1 + i;
int locy = y2 + 150 * i + 10; int locy = y2 + 155 * i + 10;
for (int e = 0; e < number; e++) { for (int e = 0; e < number; e++) {
ImageView view1 = new ImageView(new Image("/svg/p1.svg", 75, 0, true, false)); ImageView view1 = new ImageView(new Image("/svg/p1.svg", 75, 0, true, false));
view1.setX(x2 + 85 * e + 10 * e); view1.setX(x2 + 85 * e + 10 * e);
view1.setY(locy); view1.setY(locy);
nodes.add(view1); nodes.add(view1);
} }
Rectangle clickable = new Rectangle(x2 - 10, locy + 125, 95 + i * 95, 150); Rectangle clickable = new Rectangle(x2 - 10, locy + 125, 95 + i * 95, 152);
clickable.setFill(Color.TRANSPARENT); clickable.setFill(Color.TRANSPARENT);
clickable.setStroke(Color.BLACK); clickable.setStroke(Color.BLACK);
clickable.setArcHeight(50); clickable.setArcHeight(50);
@ -143,6 +169,14 @@ public class Menu extends Group {
getChildren().addAll(nodes); getChildren().addAll(nodes);
} }
/**
* Maakt een knop op een plek, met een willekeurige kleur.
* @param string de tekst van de knop
* @param x de x coördinaat van de knop
* @param y de y coördinaat van de knop
* @param onClick een {@link EventHandler} die wordt uitgevoerd als de knop is ingedrukt
* @return een stackpane met daarin een knop
*/
public static StackPane createButton(String string, double x, double y, EventHandler<MouseEvent> onClick) { public static StackPane createButton(String string, double x, double y, EventHandler<MouseEvent> onClick) {
Text text = createText(string); Text text = createText(string);
Rectangle rectangle = rectangulate(text); Rectangle rectangle = rectangulate(text);
@ -153,6 +187,11 @@ public class Menu extends Group {
return pane; return pane;
} }
/**
* Maakt een text object
* @param string de tekst van het object
* @return een object met de tekst
*/
private static Text createText(String string) { private static Text createText(String string) {
Text text = new Text(string); Text text = new Text(string);
text.setBoundsType(TextBoundsType.VISUAL); text.setBoundsType(TextBoundsType.VISUAL);
@ -165,6 +204,11 @@ public class Menu extends Group {
return text; return text;
} }
/**
* Maakt een rechthoek precies passend om de tekst heen.
* @param text een {@link Text} object
* @return een rechthoek met daar in de tekst
*/
private static Rectangle rectangulate(Text text) { private static Rectangle rectangulate(Text text) {
Rectangle rectangle = new Rectangle(); Rectangle rectangle = new Rectangle();
rectangle.setFill(getRandomColor()); rectangle.setFill(getRandomColor());
@ -176,6 +220,11 @@ public class Menu extends Group {
return rectangle; return rectangle;
} }
/**
* methode die de breedte van een {@link Text} object opvraagt
* @param text het object
* @return de breedte van het object
*/
private static double getWidth(Text text) { private static double getWidth(Text text) {
new Scene(new Group(text)); new Scene(new Group(text));
text.applyCss(); text.applyCss();
@ -183,6 +232,11 @@ public class Menu extends Group {
return text.getLayoutBounds().getWidth(); return text.getLayoutBounds().getWidth();
} }
/**
* methode die de hoogte van een {@link Text} object opvraagt
* @param text het object
* @return de hoogte van het object
*/
private static double getHeight(Text text) { private static double getHeight(Text text) {
new Scene(new Group(text)); new Scene(new Group(text));
text.applyCss(); text.applyCss();
@ -190,6 +244,10 @@ public class Menu extends Group {
return text.getLayoutBounds().getHeight(); return text.getLayoutBounds().getHeight();
} }
/**
* maakt een willekeurige kleur
* @return een willekeurige kleur.
*/
public static Color getRandomColor() { public static Color getRandomColor() {
return Color.hsb(random.nextInt(360), 0.8, 0.8); return Color.hsb(random.nextInt(360), 0.8, 0.8);

View file

@ -8,6 +8,12 @@ import java.io.File;
*/ */
public class ModLoader { public class ModLoader {
/**
* Dit was een leuk idee, maar het werkte 9/10 keer niet goed
*
* @param file de naam van het bestand
* @return het pad, danwel in het .jar bestand of als absoluut bestand
*/
public static String getFile(String file) { public static String getFile(String file) {
File f = new File("mods" + file); File f = new File("mods" + file);
if (f.exists()) { if (f.exists()) {

View file

@ -23,18 +23,28 @@ public class Player {
private int plaats = 0; private int plaats = 0;
private int[] coords = Game.locations[plaats]; private int[] coords = Game.locations[plaats];
/**
* De constructor voor een speler
*
* @param image de afbeelding die bij de speler hoort
* @param ch het hoeveelste karakter de speler is.
*/
public Player(Image image, int ch) { public Player(Image image, int ch) {
this.ch = ch; this.ch = ch;
Random r = new Random(System.currentTimeMillis()); Random r = new Random(System.currentTimeMillis());
this.image = image; this.image = image;
this.view = new ImageView(this.image); this.view = new ImageView(this.image);
//Elke speler staat niet precies op het zelfde punt, ziet er wat leuker uit
this.add = new int[]{r.nextInt(10) - 5 - image.widthProperty().intValue() / 2, r.nextInt(10) - 5 - image.heightProperty().intValue() / 2};// new int[]{r.nextInt(10) - 5, r.nextInt(10) - 5}; this.add = new int[]{r.nextInt(10) - 5 - image.widthProperty().intValue() / 2, r.nextInt(10) - 5 - image.heightProperty().intValue() / 2};// new int[]{r.nextInt(10) - 5, r.nextInt(10) - 5};
coords = new int[]{coords[0] + add[0], coords[1] + add[1]}; coords = new int[]{coords[0] + add[0], coords[1] + add[1]};
getImageView().setTranslateX(coords[0]); getImageView().setTranslateX(coords[0]);
getImageView().setTranslateY(coords[1]); getImageView().setTranslateY(coords[1]);
} }
/**
* Een methode om de volgende speler te verkrijgen
* @return het nummer van de volgende speler, niet verwarren met het character id.
*/
public static int getNextActive() { public static int getNextActive() {
who++; who++;
if (who >= Game.players.size()) { if (who >= Game.players.size()) {
@ -44,10 +54,12 @@ public class Player {
return who; return who;
} }
//Dit zorgt dat de vorige speler geselecteerd wordt
public static void four() { public static void four() {
who -= 1; who -= 1;
} }
//Dit is de afbeelding die bij de speler hoort
public ImageView getImageView() { public ImageView getImageView() {
return view; return view;
} }
@ -56,20 +68,27 @@ public class Player {
return ch; return ch;
} }
/**
* Dit is de methode die wordt gebruikt om de speler te verplaatsen
* @param roll de hoeveelheid die is gegeooid.
*/
public void move(int roll) { public void move(int roll) {
//De standaard tekst
Alert alert = new Alert(Alert.AlertType.NONE, "Je hebt " + roll + " gegooid!", ButtonType.OK); Alert alert = new Alert(Alert.AlertType.NONE, "Je hebt " + roll + " gegooid!", ButtonType.OK);
//Als er 4 is gegooid mag je nog een keer, dus passen we de tekst aan
if (roll == 4) if (roll == 4)
alert.contentTextProperty().setValue("Je hebt " + roll + " gegooid!\nKlavertje 4! Je mag dus nog een keer!"); alert.contentTextProperty().setValue("Je hebt " + roll + " gegooid!\nKlavertje 4! Je mag dus nog een keer!");
//We willen geen titel
alert.titleProperty().setValue(""); alert.titleProperty().setValue("");
if (plaats + roll == 69 && Main.memes) { //Zolang er geen waterval of klimop is laten we het zien
alert.contentTextProperty().setValue("heheheh 69 icksdie\n" + alert.getContentText());
}
if (!Game.specials.containsKey(plaats + roll)) if (!Game.specials.containsKey(plaats + roll))
alert.show(); alert.show();
//We gaan alleen niet over 100 heen...
if (roll + plaats > 100) { if (roll + plaats > 100) {
return; return;
} }
//We gebruiken een TranslateTransition om de speler te verplaatsen
TranslateTransition tt = new TranslateTransition(Duration.millis(200), getImageView()); TranslateTransition tt = new TranslateTransition(Duration.millis(200), getImageView());
tt.setFromX(coords[0]); tt.setFromX(coords[0]);
tt.setFromY(coords[1]); tt.setFromY(coords[1]);
@ -77,16 +96,19 @@ public class Player {
tt.setToY(coords[1] = Game.locations[plaats + 1][1] + add[1]); tt.setToY(coords[1] = Game.locations[plaats + 1][1] + add[1]);
TranslateTransition last = tt; TranslateTransition last = tt;
//Dit is voor alles hoger dan 1
for (int i = plaats + 2; i < roll + plaats + 1; i++) { for (int i = plaats + 2; i < roll + plaats + 1; i++) {
TranslateTransition tl = new TranslateTransition(Duration.millis(200), getImageView()); TranslateTransition tl = new TranslateTransition(Duration.millis(200), getImageView());
tl.setFromX(coords[0]); tl.setFromX(coords[0]);
tl.setFromY(coords[1]); tl.setFromY(coords[1]);
tl.setToX(coords[0] = Game.locations[i][0] + add[0]); tl.setToX(coords[0] = Game.locations[i][0] + add[0]);
tl.setToY(coords[1] = Game.locations[i][1] + add[1]); tl.setToY(coords[1] = Game.locations[i][1] + add[1]);
//Als we meer dan 1 beweging willen moet dat er na afgespeeld worden, anders gaan ze tegelijk
last.setOnFinished(e -> tl.play()); last.setOnFinished(e -> tl.play());
last = tl; last = tl;
} }
plaats += roll; plaats += roll;
//Als er een waterval of klimop is
if (Game.specials.containsKey(plaats)) { if (Game.specials.containsKey(plaats)) {
TranslateTransition tl = new TranslateTransition(Duration.millis(200), getImageView()); TranslateTransition tl = new TranslateTransition(Duration.millis(200), getImageView());
tl.setFromX(coords[0]); tl.setFromX(coords[0]);
@ -96,21 +118,23 @@ public class Player {
last.setOnFinished(e -> tl.play()); last.setOnFinished(e -> tl.play());
String text; String text;
//We passen de tekst aan
if (plaats < Game.specials.get(plaats)) { if (plaats < Game.specials.get(plaats)) {
text = alert.getContentText() + "\n\nRoltrappen!\nJe mag " + (Game.specials.get(plaats) - plaats) + " plaatsen vooruit!"; text = alert.getContentText() + "\n\nKlimop!\nJe mag " + (Game.specials.get(plaats) - plaats) + " plaatsen vooruit!";
} else { } else {
text = alert.getContentText() + "\n\nSlangen!\nJe moet " + (plaats - Game.specials.get(plaats)) + " plaatsen terug!"; text = alert.getContentText() + "\n\nWaterval!\nJe moet " + (plaats - Game.specials.get(plaats)) + " plaatsen terug!";
} }
Alert alert1 = new Alert(Alert.AlertType.NONE, text, ButtonType.OK); Alert alert1 = new Alert(Alert.AlertType.NONE, text, ButtonType.OK);
alert1.show(); alert1.show();
//Laten we de plaats van de speler ook even aanpassen
plaats = Game.specials.get(plaats); plaats = Game.specials.get(plaats);
} }
tt.play(); tt.play();
//Bij 100 heeft er iemand gewonnen!
if (plaats == 100) { if (plaats == 100) {
System.out.println("Een speler heeft gewonnen!"); System.out.println("Een speler heeft gewonnen!");
Alert alert2 = new Alert(Alert.AlertType.WARNING, "Speler " + Menu.names[getCh()], ButtonType.OK); Alert alert2 = new Alert(Alert.AlertType.WARNING, "Speler " + Menu.names[getCh()], ButtonType.OK);

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

View file

@ -1,102 +1,101 @@
#format: nummer:x,y 0=711,718
0:438,52 1=658,716
1:496,53 2=602,713
2:548,53 3=555,713
3:609,52 4=506,711
4:664,53 5=475,656
5:704,111 6=528,663
6:639,109 7=577,663
7:583,110 8=627,665
8:529,110 9=677,666
9:472,107 10=737,661
10:418,105 11=762,619
11:381,166 12=707,614
12:446,173 13=653,608
13:499,168 14=610,608
14:554,169 15=561,608
15:605,168 16=499,607
16:670,167 17=444,606
17:721,168 18=428,558
18:758,220 19=474,557
19:704,228 20=522,557
20:635,226 21=582,559
21:578,223 22=632,562
22:521,223 23=682,558
23:451,222 24=730,557
24:413,222 25=786,559
25:346,224 26=812,505
26:323,281 27=751,505
27:379,281 28=705,508
28:434,281 29=655,508
29:490,281 30=607,508
30:545,281 31=554,509
31:603,280 32=499,508
32:665,281 33=453,506
33:720,280 34=402,508
34:782,280 35=376,460
35:809,330 36=424,457
36:755,335 37=477,459
37:703,336 38=529,457
38:646,337 39=581,458
39:588,337 40=628,458
40:527,338 41=678,458
41:470,339 42=730,455
42:408,336 43=784,456
43:361,336 44=831,457
44:289,339 45=859,410
45:265,399 46=807,409
46:322,397 47=756,408
47:372,395 48=706,407
48:439,395 49=655,406
49:500,393 50=601,406
50:554,393 51=554,406
51:606,396 52=503,406
52:675,396 53=452,406
53:721,396 54=400,406
54:792,396 55=345,406
55:835,397 56=373,351
56:817,452 57=424,349
57:755,455 58=474,352
58:695,457 59=525,356
59:648,457 60=577,357
60:581,455 61=629,356
61:528,454 62=684,357
62:467,454 63=733,358
63:401,454 64=781,359
64:358,452 65=835,355
65:302,453 66=809,307
66:320,511 67=758,304
67:378,515 68=709,304
68:442,513 69=656,303
69:486,512 70=606,303
70:551,513 71=551,303
71:607,514 72=507,301
72:671,515 73=454,303
73:732,515 74=401,303
74:782,514 75=427,253
75:758,572 76=478,253
76:687,573 77=528,254
77:633,572 78=580,252
78:575,573 79=630,252
79:533,574 80=680,255
80:471,572 81=731,255
81:407,570 82=781,255
82:357,570 83=757,204
83:382,639 84=706,204
84:437,636 85=655,204
85:503,633 86=604,203
86:548,631 87=553,202
87:605,630 88=503,202
88:660,627 89=451,203
89:733,628 90=477,152
90:695,681 91=529,151
91:648,681 92=581,151
92:582,682 93=630,152
93:526,682 94=678,153
94:479,682 95=732,154
95:411,683 96=709,99
96:444,736 97=657,99
97:497,751 98=604,102
98:549,749 99=552,102
99:607,748 100=500,102
100:674,746

View file

@ -1,14 +1,12 @@
5=10 1=27
7=4 17=32
18=13 21=4
20=27 22=30
30=24 47=68
42=88 52=59
50=43 61=39
57=65 70=79
63=52 74=53
71=62 76=91
80=82 81=64
88=87 92=71
92=97
98=90