From 9afffd42976bc07976b3da1708c3389c61d15101 Mon Sep 17 00:00:00 2001 From: Lukian LEIZOUR Date: Thu, 28 Mar 2024 14:00:57 +0100 Subject: [PATCH] very major improvements --- images/crossLaser.png | Bin 0 -> 298 bytes images/miror1.png | Bin 0 -> 494 bytes images/miror2.png | Bin 0 -> 520 bytes images/miror3.png | Bin 0 -> 502 bytes images/miror4.png | Bin 0 -> 517 bytes universe/Universe.java | 24 ++++++++++++-- userInterface/Grid.java | 37 ++++++++++++++------- userInterface/Window.java | 67 +++++++++++++++++++++++++++++++++++++- 8 files changed, 112 insertions(+), 16 deletions(-) create mode 100644 images/crossLaser.png create mode 100644 images/miror1.png create mode 100644 images/miror2.png create mode 100644 images/miror3.png create mode 100644 images/miror4.png diff --git a/images/crossLaser.png b/images/crossLaser.png new file mode 100644 index 0000000000000000000000000000000000000000..7a873b07a8783311f2f0293b85711b475ce5670c GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^20(1Y!3HFyPDS(pDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F52SJ!|$HeTnK*6P+E{-7?&TnrRaxobSI9znGZR%Z=u<*Nm z_tvEei`@gR9Aweia{5E$kM%cw&FeR32F=e;-EjL`fL?!fbnTkw-J5LY-^!X3S?xEC z(S$jJ?E=pNNeAPGG={Sbvp@o0cirUQKb2#Do~qH6$63>b1em{fy#IdjQr$uc3%2tz zb`>4}U&ily?=tPBeA0WjL=62vfrP1_m=vEGZGH55zX{O6e5nzhX}-P;T0k}j5QD&_ Q;K?A$)78&qol`;+0N>PUBme*a literal 0 HcmV?d00001 diff --git a/images/miror1.png b/images/miror1.png new file mode 100644 index 0000000000000000000000000000000000000000..971e86a2297d17090e1eed4e008121a7a99e446f GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DkxL735kHCP3xA=A^vF(kwJ?zN41hYSRc6{;JQG;&J(Vym6E z&pOu1SV3)9iH6s2&31;P2X5}${Qg&bj{d~DuD461|8ZUW{VJpA>hVcx$+o>^$qEy4 zIfNVEI0*@yP*V{Uyw}I3D9Mq+J*m^7Oo5dng*m9h;jJQ5#|8;0=N17EiBHbT%8o2q zpVzDQIDFkcjfv@MtA=8LZHE$*p(1Cy#WW+Pm-64ZIF{_*s--wVZiy1pO9w6G2{ua@ znM#-ct$T4jJ4)=BgUmg1lgYmCt|cjzEkCsSkDpQWYD1=}&O8bMl1Dh0p3a}>bL4f7 zpYhF43alMhzZJ*$tczHqd_HyBzO51+%U$;i|Kym$7U(?Xc)N#!$YaMK!HxI%p3ZZY zQMi!YA!lvI6;>1s;*b3=DkxL735kHCP3xq1n^LF(kwJ?v0IphYds=0(Y0N8g6KCNNQ;8 zf1W%;LSmvs1LM@zMy-O*#cE!&Zf%_Z_IPX(zhvJm@tqsb=DRKUzB>BzroUyow{ZSfeGk2FconT_Q${N|Rph`iI zV->Sd=YmfYSU8IBh_tCV1tgvL;9(T)#G=}^=I&RAPQfYvFA6yX{7m$3Sg>h=3&*Dx z7M_jyoPtj{KguNC7gE;vzgV?l!KcIbL>m_rczk{+X6(B+>3Nq+fW?t{yN=G|QaG_M z_Fl{Vrx%}yPx&3by;#+0LaoJqvBocx-6s6l@Z4d7hKhL85d}*@6|*;%f?M9)UVkER zPVIx$yTgAhR{c`1#O9bNVCYiwZ$g*g6ZVxdj_rzE0w(-{O$+`CxN^*D({R2Zu}Hwt zxg&_>twNXJ6{jmo`|eD2e*EnH7BioV`WH>*%33+3oTeycum|=m5L+bUxcYy?f{z=@ zHJvV)xJWh~6KLf~?)k|$)%{p^=hJFtU>xzKMtG+A`Z8z%*&IL&0+)g(gD6i|KbLh* G2~7YCcg}wR literal 0 HcmV?d00001 diff --git a/images/miror3.png b/images/miror3.png new file mode 100644 index 0000000000000000000000000000000000000000..7ee3d2c2bb8b68b1150bd527a65f05e490c2cff3 GIT binary patch literal 502 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=Dh+K$tP>S|=w^L!qaOV@QVc-D?~D4mXUrek?gbUjh~_E&(!Av z#T8284KLkJTc+($?lXM3$@=ILfhPja&J&E!+!uJl@!6im^5C3y1@;+*0x2@aa!owR zpA=4LsO_;|)1m!1b7y7uax*UPyHh$_@7`T3@#NpDT@q^bTa2py{#^I%_3a-keGAUG zD6SB3lWFow=yJFqc)8{%ciORzy;}<&E>}I>KO>G|VP<#wzFXG2>*G`?TfNTyR27yb#lR=cHtDnm{r-UW|g1pJA literal 0 HcmV?d00001 diff --git a/images/miror4.png b/images/miror4.png new file mode 100644 index 0000000000000000000000000000000000000000..f8eaf63b3d9c92024647271f003ba7ec701b6e6d GIT binary patch literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=Dh+L6~vJ#O${~4Go?yjv*P&cW>A>|`u$5*7KO+4txQ`^Wj#&)3~w+IK}!{^s&8qqdhPXU;Hckt~10 zWbpZ-QD5Y_jzk}uH*SWuKQ|e7U)DJp79@nEsSn#O;X8E z6jms@i8V>@1;4UmOBh-Nac$lS+83L!U7_-0$;Aeb*Dmaq7T}wgoCZ#rDgmp1imF lD*ql}1o5Rtc&7RKGH3zW96$^Lmx3pQC{I^Emvv4FO#sJR%ANoK literal 0 HcmV?d00001 diff --git a/universe/Universe.java b/universe/Universe.java index c7bfc2d..d5fc66f 100644 --- a/universe/Universe.java +++ b/universe/Universe.java @@ -79,6 +79,14 @@ public class Universe { break; case 5: + System.out.printf(" /"); + break; + + case 6: + System.out.printf(" \\"); + break; + + case 7: System.out.printf(" \\"); break; @@ -295,16 +303,26 @@ public class Universe { this.grid[i][j] = 3; } } - if ((c == 3 && d == 10) || (c == 3 && d == 11) || (c == 2 && d == 12) || (c == 2 && d == 13)) { + if ((c == 3 && d == 10) || (c == 2 && d == 13)) { this.grid[i][j] = 4; this.filled_boxes ++; this.nb_mirors ++; } - if ((c == 2 && d == 10) || (c == 2 && d == 11) || (c == 3 && d == 12) || (c == 3 && d == 13)) { + if ((c == 2 && d == 12) || (c == 3 && d == 11)) { this.grid[i][j] = 5; this.filled_boxes ++; this.nb_mirors ++; } + if ((c == 2 && d == 10) || (c == 3 && d == 12)) { + this.grid[i][j] = 6; + this.filled_boxes ++; + this.nb_mirors ++; + } + if ((c == 2 && d == 11) || (c == 3 && d == 13)) { + this.grid[i][j] = 7; + this.filled_boxes ++; + this.nb_mirors ++; + } // changing the position of the situation @@ -340,7 +358,7 @@ public class Universe { this.grid[i][j] = 1; } } else { - if (this.grid[i][j] == 4 || this.grid[i][j] == 5) {this.nb_mirors--;} + if (this.grid[i][j] == 4 || this.grid[i][j] == 5 || this.grid[i][j] == 6 || this.grid[i][j] == 7) {this.nb_mirors--;} this.filled_boxes--; this.grid[i][j] = 0; } diff --git a/userInterface/Grid.java b/userInterface/Grid.java index 154330e..ae42f90 100644 --- a/userInterface/Grid.java +++ b/userInterface/Grid.java @@ -32,6 +32,7 @@ public class Grid extends JPanel { private JButton[][] mat; private int selected; private Universe universe; + private int button_width, button_height; public Grid(int width, int height, Universe universe) { super(new GridLayout(height, width)); @@ -39,6 +40,8 @@ public class Grid extends JPanel { this.height = height; this.selected = 0; this.universe = universe; + this.button_width = 600 / this.height; + this.button_height = button_width; this.mat = new JButton[height][width]; @@ -46,7 +49,7 @@ public class Grid extends JPanel { for (int j = 0; j < this.width; j++) { this.mat[i][j] = new JButton(); - this.mat[i][j].setPreferredSize(new Dimension(Math.max(50, 600 / this.height), Math.max(50, (this.width * 600 / this.height) / this.width))); + this.mat[i][j].setPreferredSize(new Dimension(this.button_width, this.button_height)); final int coord_i = i; final int coord_j = j; @@ -118,7 +121,7 @@ public class Grid extends JPanel { Image photo; switch (this.universe.getGrid()[i + 1][j + 1]) { case -1: - photo = new ImageIcon(this.getClass().getResource("../images/wall.png")).getImage(); + photo = new ImageIcon(this.getClass().getResource("../images/wall.png")).getImage().getScaledInstance(this.button_width, this.button_height, Image.SCALE_SMOOTH); this.mat[i][j].setIcon(new ImageIcon(photo)); break; case 0: @@ -126,39 +129,47 @@ public class Grid extends JPanel { this.mat[i][j].setIcon(null); break; case 1: - photo = new ImageIcon(this.getClass().getResource("../images/verticalLaser.png")).getImage(); + photo = new ImageIcon(this.getClass().getResource("../images/verticalLaser.png")).getImage().getScaledInstance(this.button_width, this.button_height, Image.SCALE_SMOOTH); this.mat[i][j].setIcon(new ImageIcon(photo)); break; case 2: - photo = new ImageIcon(this.getClass().getResource("../images/horizontalLaser.png")).getImage(); + photo = new ImageIcon(this.getClass().getResource("../images/horizontalLaser.png")).getImage().getScaledInstance(this.button_width, this.button_height, Image.SCALE_SMOOTH); this.mat[i][j].setIcon(new ImageIcon(photo)); break; case 3: - photo = new ImageIcon(this.getClass().getResource("../images/wall.png")).getImage(); + photo = new ImageIcon(this.getClass().getResource("../images/crossLaser.png")).getImage().getScaledInstance(this.button_width, this.button_height, Image.SCALE_SMOOTH); this.mat[i][j].setIcon(new ImageIcon(photo)); break; - case 4: - photo = new ImageIcon(this.getClass().getResource("../images/wall.png")).getImage(); + case 4: + photo = new ImageIcon(this.getClass().getResource("../images/miror1.png")).getImage().getScaledInstance(this.button_width, this.button_height, Image.SCALE_SMOOTH); this.mat[i][j].setIcon(new ImageIcon(photo)); break; case 5: - photo = new ImageIcon(this.getClass().getResource("../images/wall.png")).getImage(); + photo = new ImageIcon(this.getClass().getResource("../images/miror2.png")).getImage().getScaledInstance(this.button_width, this.button_height, Image.SCALE_SMOOTH); + this.mat[i][j].setIcon(new ImageIcon(photo)); + break; + case 6: + photo = new ImageIcon(this.getClass().getResource("../images/miror3.png")).getImage().getScaledInstance(this.button_width, this.button_height, Image.SCALE_SMOOTH); + this.mat[i][j].setIcon(new ImageIcon(photo)); + break; + case 7: + photo = new ImageIcon(this.getClass().getResource("../images/miror4.png")).getImage().getScaledInstance(this.button_width, this.button_height, Image.SCALE_SMOOTH); this.mat[i][j].setIcon(new ImageIcon(photo)); break; case 10: - photo = new ImageIcon(this.getClass().getResource("../images/startUp.png")).getImage(); + photo = new ImageIcon(this.getClass().getResource("../images/startUp.png")).getImage().getScaledInstance(this.button_width, this.button_height, Image.SCALE_SMOOTH); this.mat[i][j].setIcon(new ImageIcon(photo)); break; case 11: - photo = new ImageIcon(this.getClass().getResource("../images/startBot.png")).getImage(); + photo = new ImageIcon(this.getClass().getResource("../images/startBot.png")).getImage().getScaledInstance(this.button_width, this.button_height, Image.SCALE_SMOOTH); this.mat[i][j].setIcon(new ImageIcon(photo)); break; case 12: - photo = new ImageIcon(this.getClass().getResource("../images/startRight.png")).getImage(); + photo = new ImageIcon(this.getClass().getResource("../images/startRight.png")).getImage().getScaledInstance(this.button_width, this.button_height, Image.SCALE_SMOOTH); this.mat[i][j].setIcon(new ImageIcon(photo)); break; case 13: - photo = new ImageIcon(this.getClass().getResource("../images/startLeft.png")).getImage(); + photo = new ImageIcon(this.getClass().getResource("../images/startLeft.png")).getImage().getScaledInstance(this.button_width, this.button_height, Image.SCALE_SMOOTH); this.mat[i][j].setIcon(new ImageIcon(photo)); break; } @@ -207,6 +218,8 @@ public class Grid extends JPanel { best_filled_boxes = universe.getFilledBoxes(); best_nb_mirrors = universe.getNbMirrors(); + System.out.println(best_filled_boxes + " " + best_nb_mirrors); + printUniverse(); } } diff --git a/userInterface/Window.java b/userInterface/Window.java index f3e7708..a84d6ec 100644 --- a/userInterface/Window.java +++ b/userInterface/Window.java @@ -6,6 +6,13 @@ import java.awt.GridBagConstraints; import java.awt.GridLayout; import java.awt.Insets; +import java.io.FileReader; +import java.io.BufferedReader; +import java.io.File; +import java.util.Set; +import java.util.stream.Stream; +import java.util.stream.Collectors; + import javax.swing.*; import java.awt.event.*; import java.awt.*; @@ -90,6 +97,65 @@ public class Window extends JFrame { menuBar.add(fichierMenu); menuBar.add(aideMenu); menuBar.add(toolsMenu); + + nouveauItem.addActionListener(e -> { + this.universe.changeUniverseDim(5, 5); + this.universe.changeUniverseStart(1, 1, 11); + this.panel.remove(this.grid); + this.grid = new Grid(3, 3, this.universe); + this.panel.add(this.grid); + super.pack(); + super.repaint(); + }); + + enregistrerItem.addActionListener(e -> { + String name = JOptionPane.showInputDialog("Choose the universe name"); + this.universe.save(name); + }); + + ouvrirItem.addActionListener(e -> { + String message = "Choose the universe among those : "; + + Set files = Stream.of(new File("./saves").listFiles()).filter(file -> !file.isDirectory()).map(File::getName).collect(Collectors.toSet()); + + for (String element : files) { + message += "\n- " + element.replace(".txt", ""); + } + + String name = JOptionPane.showInputDialog(message); + + try { + BufferedReader reader = new BufferedReader(new FileReader("./saves/" + name + ".txt")); + int universe_height = Integer.valueOf(reader.readLine()); + int universe_width = Integer.valueOf(reader.readLine()); + int start_dir = Integer.valueOf(reader.readLine()); + int start_i = Integer.valueOf(reader.readLine()); + int start_j = Integer.valueOf(reader.readLine()); + + + this.universe.changeUniverseDim(universe_width + 2, universe_height + 2); + this.universe.changeUniverseStart(start_i, start_j, start_dir); + + while (true) { + try { + int pos1 = Integer.valueOf(reader.readLine()); + int pos2 = Integer.valueOf(reader.readLine()); + + this.universe.addObstacle(pos1, pos2); + } + catch (Exception error) { + break; + } + } + + this.panel.remove(this.grid); + this.grid = new Grid(universe_width, universe_height, this.universe); + this.panel.add(this.grid); + super.pack(); + super.repaint(); + } + catch (Exception error) {} + }); regles.addActionListener(e -> { JOptionPane.showMessageDialog(this, "Définissez la taille du plateau ainsi que l'orientation du laser, enfin ajoutez des obstacles et laissez le programme trouver le bon chemin !"); @@ -119,7 +185,6 @@ public class Window extends JFrame { this.grid.solve(); }); - reset.addActionListener(e -> { this.grid.reset(); });