65 Commits

Author SHA1 Message Date
Mat
56ed89d668 Prototype
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-25 14:41:14 +02:00
Mat
a273e7736a Basement for the menu 2023-04-21 22:47:57 +02:00
Mat
d5db1b14af Merge branch 'master' of https://git.herisson.ovh/undefined_name/School_Project 2023-04-21 15:47:23 +02:00
ac368a6d19 Merge pull request 'rajout du prototype de menu pour le jeu' (#26) from interface-du-menu into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #26
Reviewed-by: BrokenBrad <eddyjiofak@gmail.com>
Reviewed-by: Debucquoy Anthony <d.tonitch@gmail.com>
2023-04-18 13:11:42 +02:00
37cc19f49a fixup! Fixing Branch
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-04-06 18:25:04 +02:00
a6fc46a0ea Fixing Branch
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-04-06 18:15:33 +02:00
78e50549d0 Mise à jour de 'app/src/main/java/school_project/Controller.java'
Some checks failed
continuous-integration/drone/pr Build is failing
continuous-integration/drone/push Build is failing
2023-04-04 15:20:40 +02:00
Mat
00f62097f1 fix the issue about the position of the footer
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-04-02 23:37:35 +02:00
d4f254139c Mise à jour de 'app/src/main/java/school_project/Controller.java'
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
2023-03-31 00:20:47 +02:00
fbbda476b4 Mise à jour de 'app/src/main/java/school_project/Controller.java'
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
2023-03-30 23:59:21 +02:00
70fef807d5 Supprimer 'app/src/main/java/school_project/Controller.java'
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
2023-03-30 23:58:42 +02:00
90f25b1c26 Ajouter 'app/src/main/java/school_project/Piece.java'
Some checks failed
continuous-integration/drone/pr Build is failing
continuous-integration/drone/push Build is passing
2023-03-30 23:58:06 +02:00
5bfb2aba9b progress
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-03-30 11:51:47 +02:00
a99a53868b progress
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-03-30 11:47:23 +02:00
Mat
592b179a19 rajout du prototype de menu pour le jeu
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-03-28 13:23:36 +02:00
eeae13b339 Merge pull request 'Shape_Piece_Map' (#15) from Shape_Piece_Map into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #15
Reviewed-by: BrokenBrad <eddyjiofak@gmail.com>
Reviewed-by: Mat_02 <diletomatteo@gmail.com>
2023-03-28 00:31:41 +02:00
b41714c27f Merge pull request 'Story' (#24) from Story into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #24
Reviewed-by: Debucquoy Anthony <d.tonitch@gmail.com>
Reviewed-by: BrokenBrad <eddyjiofak@gmail.com>
2023-03-27 19:39:08 +02:00
bb5e2ff401 new progress , succeded in moving the node with the mouse still not
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
finished tho
2023-03-27 01:19:34 +02:00
895b20b680 new progress , succeded in moving the node with the mouse still not
All checks were successful
continuous-integration/drone/push Build is passing
finished tho
2023-03-27 01:14:05 +02:00
Mat
7527309d79 Correction des fautes, hésité pas si il en reste
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-03-26 20:12:08 +02:00
5911d88918 progress with the rotation system but still not finished , it works tho
All checks were successful
continuous-integration/drone/push Build is passing
2023-03-25 18:22:47 +01:00
49d2c5d7ab WIP:piece graphics
All checks were successful
continuous-integration/drone/push Build is passing
2023-03-23 14:54:45 +01:00
0a72e6e047 Merge branch 'master' into Story
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-03-23 14:46:20 +01:00
Mat
3b6234f4a1 Rajout du meeting du 23 mars
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-03-23 12:02:41 +01:00
Mat
dd01bc96cb rajout de la syntaxe (titre)+modification day3
All checks were successful
continuous-integration/drone/push Build is passing
2023-03-23 11:32:19 +01:00
e7d82b3076 Setting default position of vector to 0.
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-03-23 11:24:34 +01:00
bc2feee03c Merge branch 'master' into Shape_Piece_Map
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-03-21 23:07:32 +01:00
e4478c878c trying to fix drone again
All checks were successful
continuous-integration/drone/push Build is passing
2023-03-21 23:05:39 +01:00
1ef428962f Merge branch 'master' into Shape_Piece_Map
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-03-21 21:28:23 +01:00
c585c54da2 fixing drone
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2023-03-21 14:54:48 +01:00
df457b830a Merge branch 'master' into Shape_Piece_Map
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-03-21 14:30:53 +01:00
bd41d24a36 Merge branch 'master' into Shape_Piece_Map
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-03-21 14:21:13 +01:00
24df4e376c Adding Pieces positions 2023-03-21 14:14:39 +01:00
4854fef677 wip
Signed-off-by: Anthony Debucquoy <debucquoy.anthony@gmail.com>
2023-03-21 09:56:13 +01:00
71beb69c84 Changing addShape to AddPiece
Signed-off-by: Anthony Debucquoy <debucquoy.anthony@gmail.com>
2023-03-20 23:57:10 +01:00
1740ad2e13 Merge pull request 'deplacement du fichier texte de l'histoire' (#21) from Story into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #21
Reviewed-by: Debucquoy Anthony <d.tonitch@gmail.com>
2023-03-17 15:07:48 +01:00
Mat
04fd342a57 deplacement du fichier texte de l'histoire
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2023-03-17 15:03:16 +01:00
dfc6056767 Merge pull request 'story' (#20) from undefined_name/School_Project#8 into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #20
2023-03-17 14:53:46 +01:00
1837d976aa Merge branch 'master' into undefined_name/School_Project#8
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-03-17 13:40:48 +01:00
Mat
f5bd36f4e0 premier test 2023-03-16 11:01:10 +01:00
Mat
716e874b7e test add storie 2023-03-10 11:08:00 +01:00
3ab6ff1bfa Merge branch 'master' of git.herisson.ovh:undefined_name/School_project
All checks were successful
continuous-integration/drone/push Build is passing
2023-03-04 18:59:04 +01:00
f08ed98897 signing 2023-03-04 18:58:14 +01:00
aafb5f5c66 Update 'README.md'
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2023-03-04 16:15:42 +01:00
bbfc5687d9 fix ci
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2023-03-04 15:36:11 +01:00
922497573b fixup! fixup! fixup! fixup! fixup! maybe finishing ci? hopefully
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2023-03-04 15:14:38 +01:00
e55b17fcd8 fixup! fixup! fixup! fixup! maybe finishing ci? hopefully
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2023-03-04 15:13:21 +01:00
08c4a08a01 fixup! fixup! fixup! maybe finishing ci? hopefully
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2023-03-04 15:12:15 +01:00
207195c0c8 fixup! fixup! maybe finishing ci? hopefully
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2023-03-04 15:05:17 +01:00
ec7692f8d3 fixup! maybe finishing ci? hopefully
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2023-03-04 14:59:37 +01:00
5c4dc5c370 maybe finishing ci? hopefully
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2023-03-04 14:53:38 +01:00
bc05260ba7 adding missing wraper
Some checks failed
continuous-integration/drone/push Build is failing
2023-03-04 14:21:14 +01:00
36c79daa4e fixup! fixup! fixup! fixup! adding drone ci
Some checks failed
continuous-integration/drone/push Build is failing
2023-03-04 14:05:59 +01:00
5a45ab43ba fixup! fixup! fixup! adding drone ci
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2023-03-04 14:05:04 +01:00
c70e30b629 fixup! fixup! adding drone ci
Some checks failed
continuous-integration/drone/push Build is failing
2023-03-04 14:00:22 +01:00
a55dcc678a fixup! adding drone ci
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2023-03-04 13:56:10 +01:00
d5b8da4f21 adding drone ci
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2023-03-04 13:49:40 +01:00
2ef6bdb9ed Merge pull request 'pre-commit script for linux' (#17) from pre-commit-linux-script into master
Reviewed-on: #17
2023-03-04 10:50:39 +01:00
2d9a4d2aec pre-commit script for linux 2023-03-04 10:47:07 +01:00
acd786744b Merge pull request 'cleaning up some stuff don't worry' (#16) from test into master
Reviewed-on: #16
2023-03-01 23:58:50 +01:00
8d88f01c9d Removing Position because my brain bugged
Signed-off-by: Anthony Debucquoy <debucquoy.anthony@gmail.com>
2023-03-01 23:44:26 +01:00
Mat
cc11b0d882 final version 2023-02-19 11:50:40 +01:00
Mat
3b6c21f4b4 add turn piece 2023-02-19 11:50:24 +01:00
Mat
4608208b7f add choose level and correct spelling 2023-02-13 19:27:55 +01:00
Mat
29b73a31b3 mon prototype 2023-02-13 16:20:05 +01:00
44 changed files with 1623 additions and 79 deletions

49
.drone.yml Normal file
View File

@ -0,0 +1,49 @@
---
kind: pipeline
type: docker
name: Check_Requirement
steps:
- name: base_check
image: gradle:jdk11-alpine
commands:
- ./gradlew clean
- ./gradlew build
- ./gradlew test
- name: syntax_check
image: gradle:jdk11-alpine
commands:
- ./gradlew check
---
kind: pipeline
type: docker
name: master_build
steps:
- name: make_archive
image: alpine:latest
volumes:
- name: archives
path: /build
commands:
- apk add --no-cache git
- tar cvzf /build/$(git log -n 1 --format="%h")_school_archive.gz.tar app/ gradle/ gradlew/ gradlew.bat README.md settings.gradle
when:
branch:
- master
event:
exclude:
- pull_request
volumes:
- name: archives
host:
path: /srv/drone/school_project/archive/
depends_on:
- Check_Requirement
---
kind: signature
hmac: 9ca9095fdb69d7b89fda6b4db867877e76666c109607cc7b1e513814ad42bb7e
...

View File

@ -3,4 +3,9 @@
# Rapports
- [Première entrevue](./rapports/130223.md)
- [Deuxième entrevue](./rapports/200223.md)
- [Deuxième entrevue](./rapports/200223.md)
- [Troisième entrevue](./rapports/230323.md)
# Histoire
- [Plot Story](./histoire/plot_story.md)

View File

@ -0,0 +1,69 @@
# Intro histoire
Après notre premier quadri à l unif assez compliqué entre calculus, inégalités et physique
et la perte de temps dans les transports en commun.
Je décide de enfin me prendre un kot à Mons pour réussir ce quadri en beauté
# Day 1
## intro à jouer
Faire les cartons de différentes cours
Calculus --> big carton( encombrant pas possible de tourner)
Algo 1 --> pc portable (fragile)
Math elem carton avec une inégalité dessus qui change dès qu on tourne la pièce)
Objet perso à chacun
1. Mat --> poids de sport
2. Eddy --> balle de basket,...
3. Anthony --> tenue de scout
## Déménagement histoire :
Arrivé à l appartement :
La pièce est assez petite mais avec assez d'imagination je serai tout mettre
(j'aurais aimé déjà être en master pour faire une AI qui me aiderai à ranger tous
ça peut-etre que chatgpt pourrait m aider..)
## Déménagement à jouer :
Galère à tout rangé --> (interaction avec le jouer)
--> en repensant c est peut-être pour ça que l ancien propriétaire et partie et que le prix était de si bas
Notion de jour donc cours unifs -> pas le temps de ranger dans le WK on doit terminer en semaine
# Day 2
## continuité histoire
Après un long mardi terminer par le cours d algo 2 il est
tant de ranger le dernier carton dans la buanderie après une 10 minute de marche
j arrive à mon kot mais qlq chose à changer, la couleur de la porte n est plus la même.
De plus il faut tirer et plus poussé pour l ouvrir.
Après être rentré tous les cartons sont refait et l ordre des pièces à changer
## à jouer
----> refaire des niveaux différents pour ranger les cartons
(intercation pendant le jeu)
--> Hormis la fatigue qui me gagne et se sentiment étrange par rapport à ce kot
je defais encore une fois tous mes cartons
(je ne sais pas comment mais tout mes exo en calculus ont été corrigées les cartons sont tous remplie de rouge) Après avoir défait le dernier carton dans le bureau je remarque une Trap mystérieuse mais il est déjà 23h et demain j'ai une longue journée qui m'attend (8-10 et 15h45-17h45)
# Day 3 histoire
La nuit passe --> rien ne bouge
(Level bonus)
(choix entre faire le petit dej ou allez directement en cours)
## Si choix petit dej
Après un bon petit déj --> puzzle cassé les oeuf au bonne endroit dans la poêle
mettre le bacon au bonne endroit
## si choix rien déjeuner
rien ne se passer (peut avoir de l'importance pour la suite ex : fin pendant la journée donc allez faire des courses idée de niveau de remplir le caddie)
La journée se termine je croise les doigts pour que tout reste comme avant
Puis on ouvre la Trap est... space cat avec qlq level
ou reveil devant l examen de calculus

View File

@ -0,0 +1,34 @@
# 23 mars 2023
Nous nous sommes rassemblés ce jeudi afin de parler de plusieurs sujets tel que :
1. L'avancement du travail d'Eddy.
2. Clarifiction sur les tâches.
3. Rassembler notre travail.
## L'avancement du travail d'Eddy
Eddy a commencé à travailler avec javaFX afin de modéliser les premiers mouvements/ déplacement sur les pièces dont nous aurons besoins pour la suite du projet. Il va rajouter son travail sur notre git.
## Clarifiction sur les tâches du projet
En ceux qui concerne Eddy va continuer de :
- Travailler sur les mouvements des pièces
- Faire l'interface graphique pour le jeu.
Anthony va :
- Continuer à travailler sur Map
- Travailler sur son Parser
Pour finir Matteo va :
- S'occuper de faire le menu du jeu
- Faire la musique du jeu
## Rassembler notre travail
Après la mise en commun du travaille d'Eddy avec celle d'Anthony deux points important ont été souligné.
En effet désormais Anthony se consacre sur toutes les propriétés des pièces à l'intérieur du plateau de jeu, tandis que Eddy lui fait en sorte de lier son travail pour les mouvements en dehors du plateau c'est-à-dire la sélection des pièces, la sélections de la texture en bref l'interface graphique.
De plus concernant la position des pièces il a été décidé de se référer au coin en haut à gauche de la matrice une méthode qui pourra nous aider est la méthode Vec2 qui Anthony a rajouté
En ce qui concerne la création du menu pour Matteo, il faudrait créer une classe select level pour que chaque level contiennent : le parser qui est relié à Shape et à Pièce mais aussi à l'interface graphique.

View File

@ -1,3 +1,5 @@
# School_Project
[![Build Status](http://drone.herisson.ovh/api/badges/undefined_name/School_Project/status.svg)](http://drone.herisson.ovh/undefined_name/School_Project)
School Project based on Cats Organized Neatly

View File

@ -1,32 +1,222 @@
/*
* This Java source file was generated by the Gradle 'init' task.
*/
package school_project;
package school_project;
import javafx.application.Application;
import javafx.scene.Node;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.Cursor;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Polygon;
import javafx.scene.transform.Rotate;
import javafx.animation.RotateTransition;
import javafx.stage.Stage;
import javafx.util.Duration;
public class Controller extends Application{
double x;
double y;
public void start(Stage primaryStage) throws Exception {
Polygon piece1 = new Polygon();
Polygon piece2 = new Polygon();
Polygon piece3 = new Polygon();
Polygon piece4 = new Polygon();
Polygon piece5 = new Polygon();
Polygon piece6 = new Polygon();
Polygon piece7 = new Polygon();
public class Controller extends Application {
piece1.getPoints().addAll(new Double [] {
0.0,0.0,
200.0,0.0,
200.0,200.0,
100.0,200.0,
100.0,100.0,
0.0,100.0});
piece2.getPoints().addAll(new Double [] {
100.0,0.0,
200.0,0.0,
200.0,300.0,
100.0,300.0,
});
piece3.getPoints().addAll(new Double [] {
0.0,0.0,
200.0,0.0,
200.0,200.0,
0.0,200.0,
});
piece4.getPoints().addAll(new Double [] {
0.0,0.0,
200.0,0.0,
200.0,300.0,
0.0,300.0,
});
piece5.getPoints().addAll(new Double [] {
0.0,0.0,
100.0,0.0,
100.0,100.0,
0.0,100.0,
});
piece6.getPoints().addAll(new Double [] {
0.0,0.0,
200.0,0.0,
200.0,300.0,
100.0,300.0,
100.0,100.0,
0.0,100.0});
piece7.getPoints().addAll(new Double [] {
100.0,0.0,
200.0,0.0,
200.0,200.0,
100.0,200.0,
});
/*for(int i ; i<tab.lenght ; i++ ) {
for (int j , i<tab.widnth , j++) {
if (tab[0][0]==TRUE;) {
if(tab[
}
}
}*/
Group root = new Group();
root.getChildren().addAll(piece2,piece1,piece3,piece4,piece5,piece6,piece7/*,....,pieceN*/);
Scene scene = new Scene(root,690,650,Color.WHEAT);
root.getChildren().forEach(n -> makeDraggable((Polygon) n));
root.getChildren().forEach(n -> rotation((Polygon) n, scene));
primaryStage.setScene(scene);
primaryStage.setTitle("piece 1");
primaryStage.show();
piece1.setFill(Color.LIMEGREEN);
piece1.setStroke(Color.BLACK);
piece1.setStrokeWidth(3);
piece2.setFill(Color.LIMEGREEN);
piece2.setStroke(Color.BLACK);
piece2.setStrokeWidth(3);
piece3.setFill(Color.LIMEGREEN);
piece3.setStroke(Color.BLACK);
piece3.setStrokeWidth(3);
piece4.setFill(Color.LIMEGREEN);
piece4.setStroke(Color.BLACK);
piece4.setStrokeWidth(3);
piece5.setFill(Color.LIMEGREEN);
piece5.setStroke(Color.BLACK);
piece5.setStrokeWidth(3);
piece6.setFill(Color.LIMEGREEN);
piece6.setStroke(Color.BLACK);
piece6.setStrokeWidth(3);
piece7.setFill(Color.LIMEGREEN);
piece7.setStroke(Color.BLACK);
piece7.setStrokeWidth(3);
}
//double click delayed bug to fix
//ftm just the last piece implemented can be rotated
public static void rotaterght (Node node) {
RotateTransition rotaterght = new RotateTransition();
//setting attributes for the RotateTransition
rotaterght.setByAngle(90);
rotaterght.autoReverseProperty();
rotaterght.setDuration(Duration.millis(1000));
rotaterght.setNode(node);
rotaterght.setAxis(Rotate.Z_AXIS);
rotaterght.play();}
public static void rotatelft (Node node) {
RotateTransition rotatelft = new RotateTransition();
rotatelft.setByAngle(-90);// minus to rotate to the left
rotatelft.autoReverseProperty();
rotatelft.setDuration(Duration.millis(1000));
rotatelft.setNode(node);
rotatelft.setAxis(Rotate.Z_AXIS);
rotatelft.play();}
public void rotation (Polygon node, Scene scene) {
scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
public void handle(KeyEvent event) {// 'event' means corresponds to clicking on the clipboard
switch (event.getCode()) {// 'getCode' gets the code of the key pressed on the clipboard
case RIGHT: rotaterght(node); break;
//args to set
case LEFT: rotatelft(node); break;
default: System.out.println("this case hasn't been taken in charge yet");
}
}
});
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("test");
Button btn = new Button("test");
btn.setOnAction(event -> System.out.println("hey"));
public void makeDraggable(Polygon node) {
node.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
// record a (x,y) distance for the drag and drop operation.
x = node.getLayoutX() - mouseEvent.getSceneX();
y = node.getLayoutY() - mouseEvent.getSceneY();
node.requestFocus();
node.setFocusTraversable(true);
node.focusedProperty();
node.focusVisibleProperty();
/*node.setFocused(true);*/
node.setCursor(Cursor.CLOSED_HAND);
node.setFill(Color.AZURE);
}
});
node.setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
node.setCursor(Cursor.HAND);
node.setFill(Color.LIMEGREEN);
}
});
node.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
node.setLayoutX(mouseEvent.getSceneX() + x);
node.setLayoutY(mouseEvent.getSceneY() + y);
}
});
node.setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
node.setCursor(Cursor.HAND);
}
});
}
Group root = new Group();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300,300);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch();
public static void main(String[] args) {
launch(args);
}
}

View File

@ -1,20 +1,46 @@
package school_project;
import java.util.ArrayList;
import java.util.Arrays;
/**
* Represent the map with its pieces.
* Every piece has a position element that represent its position on the map
*/
public class Map extends Shape{
private ArrayList<Piece> pieces;
private final ArrayList<Piece> pieces = new ArrayList<>();
public Map(boolean[][] matrix) {
super(matrix);
}
public Map() {
super();
}
// TODO: 2/27/23 Tests for Map
public void AddShape(Piece piece){
public void addPiece(Piece piece){
piece.setLinked_map(this);
pieces.add(piece);
}
/**
* Return a matrix with all used space on the map to see if a piece can fit in a space
*
* @return matrix of boolean with false being the not used space
*/
public boolean[][] getUsedSpace(){
// Copy of the map to avoid side effect
boolean[][] used = new boolean[height][width];
for (int i = 0; i < height; i++) {
used[i] = Arrays.copyOf(matrix[i], width);
}
for (Piece p : pieces) {
for(int x = 0; x < p.height; x++){
for(int y = 0; y < p.width; y++){
if (p.getShape()[x][y]){
used[p.getPosition().x + x][p.getPosition().y + y] = false;
}
}
}
}
return used;
}
}

View File

@ -1,44 +0,0 @@
package school_project;
import java.io.*;
import java.lang.reflect.Array;
import java.util.Arrays;
public class MapParser {
public static Map ParseMapFile(File file) throws IllegalArgumentException, IllegalAccessException, IOException {
System.out.println(file.getAbsolutePath());
FileInputStream fileStream = new FileInputStream(file);
if(!file.isFile()) throw new IllegalArgumentException("The argument should be a file");
if(!file.canRead()) throw new IllegalAccessException("This file can't be read");
byte[] bytes = fileStream.readAllBytes();
int start_position = 0, end_position = 0;
for (int i = 0; i < bytes.length; i++) {
if(bytes[i] == 83 && bytes[i+1] == 77 && bytes[i+2] == 83){ // SMS
start_position = i+3;
break;
}
}
for (int i = start_position; i < bytes.length; i++) {
if(bytes[i] == 83 && bytes[i+1] == 77 && bytes[i+2] == 69){ // SME
end_position = i;
break;
}
}
byte[] map_data = Arrays.copyOfRange(bytes, start_position, end_position); //TODO tonitch cursor
fileStream.close();
return new Map(); //TODO: Send the parsed map
}
// public static void SaveMapFile(File file){
// }
public static void main(String[] args) throws IOException, IllegalAccessException {
ParseMapFile(new File("test.smap"));
}
}

View File

@ -0,0 +1,24 @@
package school_project;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class Menu extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
//set up the page
BorderPane root = new BorderPane();
Scene scene = new Scene(root,300,200);
primaryStage.setScene(scene);
primaryStage.show();
}
}

View File

@ -1,8 +1,16 @@
package school_project;
/**
* Represent a Piece in the game.
* Every Piece should be contained in a Map Object.
* A piece has a position witch is the position of its top-leftest position in its matrix.
* If the piece is not placed in the Map (in a floating state) the position should be null;
*/
public class Piece extends Shape{
private int x,y; // Position in the Map Object
private Vec2 Position;
private Map linked_map;
public Piece() {
super();
}
@ -11,6 +19,26 @@ public class Piece extends Shape{
super(matrix);
}
public Vec2 getPosition() {
return Position;
}
public void setPosition(Vec2 position){
if (linked_map == null) {
return;
}
this.Position = position;
}
/**
* set the map the piece is into the the map argument
* @param map map where to place the piece
*/
public void setLinked_map(Map map){
this.linked_map = map;
}
/**
* Rotate the matrix of the piece. Used when the player right click
*

View File

@ -1,6 +1,10 @@
package school_project;
/**
* Base class for everything that is a shape kind, like map and pieces
* it contain a matrix of boolean where the shape is defined by the true's
*/
public class Shape {
protected boolean[][] matrix;

View File

@ -0,0 +1,19 @@
package school_project;
/**
* This is used to represent a position/vector/... any ensemble of 2 elements that have to work together in
* a plan. This way we can use some basic operations over them.
*/
public class Vec2 {
public int x, y;
public Vec2() {
x = 0;
y = 0;
}
public Vec2(int x, int y ){
this.x = x;
this.y = y;
}
}

View File

@ -0,0 +1,35 @@
package school_project;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class MapTest {
@Test
void getUsedSpace() {
boolean[][] map_matrix = {
{false, true, true, false},
{false, true, true, true},
{true, true, true, false},
{false, true, true, true}
};
Map testMap = new Map(map_matrix);
boolean[][] piece1_matrix = {
{true, true},
{true, true},
};
Piece piece1 = new Piece(piece1_matrix);
testMap.addPiece(piece1);
piece1.setPosition(new Vec2(0,1));
boolean[][] result_matrix = {
{false, false, false, false},
{false, false, false, true},
{true, true, true, false},
{false, true, true, true}
};
assertArrayEquals(result_matrix, testMap.getUsedSpace());
}
}

BIN
gradle/wrapper/gradle-wrapper.jar vendored Normal file

Binary file not shown.

View File

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

4
gradlew vendored
View File

@ -144,7 +144,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
@ -152,7 +152,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac

82
misc/pre-commit.sh Executable file
View File

@ -0,0 +1,82 @@
#!/bin/sh
echo 'Lovely Idea';
BASE_DIR="$(dirname $(readlink -f $0))/.."
cd $BASE_DIR
echo $BASE_DIR
function clean() {
echo "Cleaning the folder"
$BASE_DIR/gradlew clean
}
function build() {
echo "Building the project"
$BASE_DIR/gradlew build
}
function test() {
echo "Testing the project"
$BASE_DIR/gradlew test
}
function run() {
echo "Running the project"
$BASE_DIR/gradlew run &
_PID=$!
sleep 3
killpid $_PID
}
function check_syntax() {
echo "Checking the syntax"
echo 'TODO Tonitch: check syntax script'
}
function make_archive() {
echo "Creating the archive on the parent folder"
tar --create --gzip --exclude-vcs --exclude-vcs-ignores -f ../archive.tar.gz "${BASE_DIR}/{app/, gradle/, gralew, gradlew.bat, settings.gradle}"
}
case $1 in
clean )
clean ;;
build )
build ;;
test )
test ;;
run )
run ;;
syntax )
check_syntax ;;
archive )
clean &&
build &&
test &&
run &&
check_syntax &&
make_archive ;;
all )
clean &&
build &&
test &&
run &&
check_syntax ;;
* )
clean &&
build &&
test &&
check_syntax ;;
esac

77
prototypes/cat_puzzle.py Normal file
View File

@ -0,0 +1,77 @@
import os
import rotate_matrix
def turn_piece(piece): #based on a matrix MxN ie [(0,0),(0,0),(0,0)] m = 3 and n = 2
new_piece = rotate_matrix.clockwise(piece)
return new_piece
game = True
while game:
print('Bienvenue dans le jeu cat puzzle')
choose_level = 0
while choose_level == 0:
choose_level = input('Choissisez un niveau à résoudre\n') #choose a level of the game
try:
choose_level = int(choose_level)
except ValueError:
choose_level= 0
print('Il me faut un nombre')
if choose_level!=1:
choose_level = 0
print('Il n\'existe que le niveau 1 pour l\'instant')
print('Découvrons ensemeble le niveau',choose_level) #make a first level
if choose_level ==1: #select the level one and print it
level_one = [(1,1,1),(1,1,0),(1,1,1)]
print(level_one[0])
print(level_one[1])
print(level_one[2])
print('Voilà les pièces que vous disposez pour complèter le puzzle') #make piece for resolve the puzzle
piece_for_level = {
1:[(1,1),(1,0)],2:[(1,0),(1,0),(1,0)],3:[(1,1)]}
print('Voilà la pièce 1:') #show the piece at the player
for i in piece_for_level[1]:
print(i)
print('Voilà la pièce 2:')
for i in piece_for_level[2]:
print(i)
print('Voilà la pièce 3:')
for i in piece_for_level[3]:
print(i)
choose_piece = 0
while choose_piece ==0:
choose_piece = input('Choissisez la pièce que vous voulez bouger ? ') #choice of the piece to move
try:
choose_piece = int(choose_piece)
except ValueError:
choose_piece =0
print('J\'ai besoin d\'un nombre')
move_piece = input('Voulez vous tournez la pièce ? (o/n)\n')
if move_piece== 'o':
print('Voilà la pièce tourner')
piece_turn = turn_piece(piece_for_level[choose_piece])
for i in piece_turn:
print(i)
m = input('A quelle ligne voulez-vous mettre la pièce ? ')
n = input("A quelle colonne voulez-vous mettre la pièce ? ")
m,n=m-1,n-1
game=False
os.system('pause')

42
prototypes/demo/.gitignore vendored Normal file
View File

@ -0,0 +1,42 @@
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

View File

@ -0,0 +1,57 @@
plugins {
id 'java'
id 'application'
id 'org.javamodularity.moduleplugin' version '1.8.12'
id 'org.openjfx.javafxplugin' version '0.0.13'
id 'org.beryx.jlink' version '2.25.0'
}
group 'com.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
ext {
junitVersion = '5.9.1'
}
sourceCompatibility = '17'
targetCompatibility = '17'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
application {
mainModule = 'com.example.demo'
mainClass = 'com.example.demo.HelloApplication'
}
javafx {
version = '17.0.2'
modules = ['javafx.controls', 'javafx.fxml']
}
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
}
test {
useJUnitPlatform()
}
jlink {
imageZip = project.file("${buildDir}/distributions/app-${javafx.platform.classifier}.zip")
options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
launcher {
name = 'app'
}
}
jlinkZip {
group = 'distribution'
}

Binary file not shown.

View File

@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

234
prototypes/demo/gradlew vendored Normal file
View File

@ -0,0 +1,234 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

89
prototypes/demo/gradlew.bat vendored Normal file
View File

@ -0,0 +1,89 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@ -0,0 +1 @@
rootProject.name = "demo"

View File

View File

@ -0,0 +1,184 @@
package com.example.demo;
import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.MenuButton;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.RowConstraints;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import java.io.IOException;
import java.util.Objects;
public class HelloApplication extends Application {
private Stage stage;
//set up scene one
private Scene Menu;
private BorderPane BdP;
private Label title;
private Button Play;
private Button Select_level;
private Button Trophy;
//set up scene 2
private Scene Level_menu;
private GridPane GdP;
private Button bck_menu;
//button for levele
private MenuButton select_day;
private Button _1;
private Button _2;
private Button _3;
private Button _4;
private Button _5;
private Button _6;
private Button _7;
private Button _8;
private Button _9;
private Button _10;
public void start(Stage primaryStage) {
//set up the page
stage = primaryStage;
stage.setTitle("ROAD TO MASTER YOU");
Menu = createMenu();
Level_menu = createLevel_menu();
stage.setScene(Menu);
stage.show();
}
private Scene createMenu(){
Play = new Button("Play");
Trophy = new Button("Trophy");
Select_level = new Button("Select Level");
Select_level.setOnAction(event -> switchScenes(Level_menu));
title = new Label("Welcome to road to master you");
title.setFont(Font.font(20));
title.setTextFill(Color.GOLD);
BdP = new BorderPane(null,title,Select_level,Trophy,Play);
Menu = new Scene(BdP,700,400);
BorderPane.setAlignment(title,Pos.CENTER);
BorderPane.setAlignment(Play,Pos.CENTER);
BorderPane.setAlignment(Select_level,Pos.CENTER);
BorderPane.setAlignment(Trophy,Pos.CENTER);
Menu.getStylesheets().add("style.css");
BdP.setPadding(new Insets(20,60,20,60));
return Menu;
}
private Scene createLevel_menu(){
bck_menu = new Button("Back to the menu");
bck_menu.setOnAction(event -> switchScenes(Menu));
GdP = new GridPane();
Level_menu = new Scene(GdP,700,400);
_1 = new Button("1");
_2 = new Button("2");
_3 = new Button("3");
_4 = new Button("4");
_5 = new Button("5");
_6 = new Button("6");
_7 = new Button("7");
_8 = new Button("8");
_9 = new Button("9");
_10 = new Button("10");
select_day = new MenuButton("Select day");
//set up of the button
GdP.add(select_day,1,0);
GdP.add(_1,0,1);
GdP.add(_2,1,1);
GdP.add(_3,2,1);
GdP.add(_4,0,2);
GdP.add(_5,1,2);
GdP.add(_6,2,2);
GdP.add(_7,0,3);
GdP.add(_8,1,3);
GdP.add(_9,2,3);
GdP.add(_10,1,4);
GdP.add(bck_menu,2,4);
//set up gap and padding and everything else
GdP.setHgap(20);
GdP.setVgap(20);
GdP.setPadding(new Insets(40,20,20,40));
ColumnConstraints col_1 = new ColumnConstraints();
col_1.setPercentWidth(33);
ColumnConstraints col_2 = new ColumnConstraints();
col_2.setPercentWidth(33);
ColumnConstraints col_3 = new ColumnConstraints();
col_3.setPercentWidth(34);
GdP.getColumnConstraints().addAll(col_1,col_2,col_3);
//GdP.setGridLinesVisible(true);
GridPane.setHalignment(_1, HPos.CENTER);
GridPane.setHalignment(_2, HPos.CENTER);
GridPane.setHalignment(_3, HPos.CENTER);
GridPane.setHalignment(_4, HPos.CENTER);
GridPane.setHalignment(_5, HPos.CENTER);
GridPane.setHalignment(_6, HPos.CENTER);
GridPane.setHalignment(_7, HPos.CENTER);
GridPane.setHalignment(_8, HPos.CENTER);
GridPane.setHalignment(_9, HPos.CENTER);
GridPane.setHalignment(_10, HPos.CENTER);
GridPane.setHalignment(select_day, HPos.CENTER);
GridPane.setHalignment(bck_menu, HPos.CENTER);
return Level_menu;
}
public void switchScenes(Scene scene){
stage.setScene(scene);
}
public static void main(String[] args) {
launch(args);
}
}
/***@Override
public void start(Stage primaryStage) {
//set up the page
primaryStage.setTitle("Road to Master You");
BorderPane root = new BorderPane();
Scene scene = new Scene(root,400,300);
primaryStage.setScene(scene);
primaryStage.show();
//set up all the object needed for the menu
Label title = new Label("Welcome to Road to Master You");
Button Play = new Button("Play");
Button Select_level = new Button("Select Level");
Button Trophy = new Button("Trophy");
//put all the object on the page
root.setTop(title);
root.setBottom(Trophy);
root.setRight(Select_level);
root.setLeft(Play);
//adjust everything as I want (position,color)
title.setTextFill(Color.GOLD);
BorderPane.setAlignment(title,Pos.CENTER);
BorderPane.setAlignment(Play,Pos.CENTER);
BorderPane.setAlignment(Select_level,Pos.CENTER);
BorderPane.setAlignment(Trophy,Pos.CENTER);
scene.getStylesheets().add("style.css"); //todo found why there is no link btw file
//Switch scene
Select_level.setOnAction(event -> {
SelectLevel secondWindow = new SelectLevel();
secondWindow.show();
});
}
}
*/

View File

@ -0,0 +1,14 @@
package com.example.demo;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
public class HelloController {
@FXML
private Label welcomeText;
@FXML
protected void onHelloButtonClick() {
welcomeText.setText("Welcome to JavaFX Application!");
}
}

View File

@ -0,0 +1,65 @@
/***package com.example.demo;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import static javafx.application.Application.launch;
public class SelectLevel extends Stage {
private Stage stage;
//set up scene one
private Scene Menu;
private BorderPane BdP;
private Label title;
private Button Play;
private Button Select_level;
private Button Trophy;
//set up scene 2
private Scene Level_menu;
private GridPane GdP;
private Button bck_menu;
public void start(Stage primaryStage) {
//set up the page
primaryStage.setTitle("Select your Level");
Menu = createMenu();
Level_menu = createLevel_menu();
primaryStage.setScene(Menu);
primaryStage.show();
}
private Scene createMenu(){
Play = new Button("Play");
Trophy = new Button("Trophy");
Select_level = new Button("Select Level");
Select_level.setOnAction(event -> switchScenes(Level_menu));
title = new Label("Welcome to road to master you");
BdP = new BorderPane(null,title,Select_level,Trophy,Play);
Menu = new Scene(BdP,700,400);
return Menu;
}
private Scene createLevel_menu(){
bck_menu = new Button("Back to the menu");
bck_menu.setOnAction(event -> switchScenes(Menu));
GdP = new GridPane();
Level_menu = new Scene(GdP,700,400);
return Level_menu;
}
public void switchScenes(Scene scene){
stage.setScene(scene);
}
public static void main(String[] args) {
launch(args);
}
}
***/

View File

@ -0,0 +1,8 @@
module com.example.demo {
requires javafx.controls;
requires javafx.fxml;
opens com.example.demo to javafx.fxml;
exports com.example.demo;
}

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Button?>
<VBox alignment="CENTER" spacing="20.0" xmlns:fx="http://javafx.com/fxml"
fx:controller="com.example.demo.HelloController">
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0"/>
</padding>
<Label fx:id="welcomeText"/>
<Button text="Hello!" onAction="#onHelloButtonClick"/>
</VBox>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 KiB

View File

@ -0,0 +1,32 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Level - Road to masterU</title>
<link href="style-Level.css" rel="stylesheet">
</head>
<body>
<main>
<section class="select-day">
<h1>Day 1</h1>
<a href="" class="lien-icone">></a>
</section>
<section class="select-level">
<div class="level"><a href="">1</a></div>
<div class="level"><a href="">2</a></div>
<div class="level"><a href="">3</a></div>
<div class="level"><a href="">4</a></div>
<div class="level"><a href="">5</a></div>
<div class="level"><a href="">6</a></div>
<div class="level"><a href="">7</a></div>
<div class="level"><a href="">8</a></div>
<div class="level"><a href="">9</a></div>
<div class="level"><a href="">10</a></div>
</section>
</main>
<footer>
<a href="Menu.html" class="back-to-accueil">Menu</a>
</footer>
</body>

View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Menu - Road to masterU</title>
<link href="style-menu.css" rel="stylesheet">
</head>
<body>
<main>
<section class="title">
<h1>ROAD TO MASTERU </h1>
</section>
<section class="setting">
<a href="" class="setting-Play"><h2>Play</h2></a>
<a href="Level.html" class="setting-level"><h2>Level</h2></a>
</section>
</main>
<footer>
<a href="" class="lien-icone"><img src="../Trophee-pic.jpg" alt="trophy"></a>
<a href="" class="lien-icone"><img src="" alt="link-setting"></a>
</footer>
</body>

View File

@ -0,0 +1,45 @@
body{
background-image: url("../Background-select-level.jpg");
background-position: right;
}
h1,.lien-icone,.back-to-accueil{
font-size: 75px;
padding-top: 80px;
color:gold;
}
footer{
text-align: center;
padding:50px
}
a{
text-decoration: none;
color:black;
}
.select-day{
display: flex;
flex-direction: row;
justify-content: center;
align-items: baseline;
}
.select-level{
display:grid;
grid-template-columns: 40px 40px 40px;
grid-gap: 30px;
justify-content: center;
}
.level{
height: 60px;
border:3px solid black;
}
.level>a{
font-size:30px;
display: flex;
justify-content:center;
}
.lien-icone{
padding-left: 10px;
}

View File

@ -0,0 +1,27 @@
body{
background-image: url("../BackGround-menu.jpg");
background-position: center;
}
h1{
font-size: 75px;
padding-top: 80px;
text-decoration: underline;
}
h1,h2{
text-align: center;
color: gold;
}
h2{
font-size: 50px;
padding-top: 40px;
}
footer{
position:absolute;
bottom:0;
padding-bottom: 10px;
right:10px;
}
a{
text-decoration: none;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 KiB

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.MenuButton?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/19">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Label prefHeight="108.0" prefWidth="200.0" style="-fx-alignment: center;" text="Select Level" GridPane.columnIndex="2" />
<Button mnemonicParsing="false" text="1" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="2" />
<Button mnemonicParsing="false" text="2" GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="2" />
<Button mnemonicParsing="false" text="3" GridPane.columnIndex="3" GridPane.halignment="CENTER" GridPane.rowIndex="2" />
<Button mnemonicParsing="false" text="5" GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="3" />
<Button mnemonicParsing="false" text="6" GridPane.columnIndex="3" GridPane.halignment="CENTER" GridPane.rowIndex="3" />
<Button mnemonicParsing="false" text="7" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="4" />
<Button mnemonicParsing="false" text="8" GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="4" />
<Button mnemonicParsing="false" text="4" GridPane.columnIndex="1" GridPane.halignment="CENTER" GridPane.rowIndex="3" />
<Button mnemonicParsing="false" stylesheets="@SelectLevel.css" text="9" GridPane.columnIndex="3" GridPane.halignment="CENTER" GridPane.rowIndex="4" />
<Button mnemonicParsing="false" text="10" GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="5" />
<MenuButton mnemonicParsing="false" text="Select day " GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="1">
<items>
<MenuItem mnemonicParsing="false" text="Action 1" />
<MenuItem mnemonicParsing="false" text="Action 2" />
</items>
</MenuButton>
<Button mnemonicParsing="false" text="Back to menu" GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="6" />
</children>
</GridPane>

View File

@ -0,0 +1,7 @@
.root {
-fx-background-image: url("Background-select-level.jpg");
-fx-background-position: center
}
.button{
-fx-alignment: center;
}

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.text.Font?>
<BorderPane centerShape="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/19" xmlns:fx="http://javafx.com/fxml/1">
<top>
<Label prefHeight="116.0" prefWidth="600.0" style="-fx-alignment: center; -fx-padding: 10;" text="Road to MasterU" textAlignment="CENTER" textFill="GOLD" underline="true" wrapText="true" BorderPane.alignment="CENTER">
<font>
<Font size="26.0" />
</font>
</Label>
</top>
<bottom>
<Button mnemonicParsing="false" style="-fx-alignment: center;" text="Trophy" textAlignment="CENTER" BorderPane.alignment="CENTER">
<BorderPane.margin>
<Insets bottom="100.0" />
</BorderPane.margin></Button>
</bottom>
<right>
<Button mnemonicParsing="false" prefHeight="0.0" prefWidth="153.0" style="-fx-alignment: center;" text="Select Level" BorderPane.alignment="CENTER">
<BorderPane.margin>
<Insets right="100.0" />
</BorderPane.margin></Button>
</right>
<left>
<Button mnemonicParsing="false" prefHeight="10.0" prefWidth="90.0" style="-fx-alignment: center;" text="Play" textAlignment="CENTER" BorderPane.alignment="CENTER">
<BorderPane.margin>
<Insets left="110.0" />
</BorderPane.margin></Button>
</left>
</BorderPane>

View File

@ -0,0 +1,12 @@
.root{
-fx-background-image:url("BackGround-menu.jpg");
-fx-background-position:center;
}
.label{
-fx-font-size: 75;
}
.button {
-fx-start-margin: 20;
-fx-text-alignment: center;
-fx-padding: 10;
}