From 52327c698e514d0a57e5108466f409d88ff88838 Mon Sep 17 00:00:00 2001 From: Nimrod Abramovich <grumpydormin@gmail.com> Date: Mon, 30 Mar 2020 00:06:47 +0100 Subject: [PATCH] random generator working difficulty-less --- bin/coursework/Cage.class | Bin 5262 -> 5095 bytes bin/coursework/GameState.class | Bin 952 -> 962 bytes bin/coursework/Main.class | Bin 24533 -> 28079 bytes bin/coursework/RandomGenerator.class | Bin 7268 -> 10179 bytes src/coursework/Cage.java | 17 ++- src/coursework/GameState.java | 1 + src/coursework/Main.java | 166 +++++++++++++++++++++++++-- src/coursework/RandomGenerator.java | 128 ++++++++++++++++----- 8 files changed, 262 insertions(+), 50 deletions(-) diff --git a/bin/coursework/Cage.class b/bin/coursework/Cage.class index 4e07610a39165c13072741687aa69b631c7d6493..c6c3ed15e75955038dd209362021099653822e4f 100644 GIT binary patch delta 1547 zcmeCve6G%Q>ff$?3=9k=40kqiIk9q>GBU6fXI7<7KFX@W#F#nxHETwFI}bw#gDE2e zM@C|ChI4*ODhERsBLky02SX1d1EVenLmwjpV+9Ap1V#p?!`rzS7#Sw<FgP(dgIH5| z7-Au;X*>*Z5Y`MHh875G77xR0hB=H3oS7*h`Of+IMJbF7tQwx0(VlD$3=qJ{z_x&4 z5j(@e$v4<!nHMuGnf!xIO@0}}3U-F&j0}Rw`K3k0spa`a+4{kSrHMtUJPa!tR!z2L zH?dpBu!e_WEyF5C2HxV-5}(wxlHih}{OnXNhGh)vc^Ec;WcZ6yOPumcO7e3Na+`P< zHZ!c6yq?`(XD`Ekc7}b73<6n+Wr_NwC7C(;jzvX@mBl;^#S8~PZjJWT3}a_F#K<5% zc>{+y7Z-ys!x0{a6o#Xdy*Z>f4l*3)VGv?CF?l|-ICmHq!$F2qJPfB9&P?v-u$DW> zaE^!JJcB1A14l`Ia7j^SUOE@UMTX1l43`)gq$b{%V&!4D!f;|UJ7*I!=S&7>26hGp zhAET7_>yf|%vhE)h|B7Tvg~9iWnwtM5WJ0{GR3Zig;A76XD34qBg4Y~Ph_>WFi0(6 zU}avzvW9_yfrY`2fq}t^L13~CuX=q5Lo!1sLncEQLlr|PLkB}7!vuyXhDi*u4E78R z40a4`AiEeG7#tZG7&I7U7$O+B85kKj7<w4$85$Uv7~~k#7@`>17?>H784MXB!K^d} zC5A=@HU<`kCI$uu9=Q5u1}27R1_p*u2KN695)AC@42+Xk@mp#rGO)5UFfy<+q%$%y zFbMx*5Mf{fr3?l}1`!4ZMiejCWA$<lkzQtCU`S%%U`S?=V@P4pU`S;!WJqJMXGmvo zV#s80VMu21W5{6$WyoVlX2@sAWGG;$V#sIcU?^soz)-?4iJ^?aK8kjsGI;^NvmutS zU}R`zaE62h!#M^f1||juhAOQs3^I{E+Zfs=D+}n>cWz_wnZ=;BoWWXKs2j}ISk9oY zEz}EUi!WzT))wjqvqhIPh-+<Un7Br3JHuoUF%?8iU&9Pa8qDCNAq9@~Duxt>8iq`U zI)*%k28LpWCWZ=z7I2~fMJNM96*N(RB6RY3ffSCJR-B@&I~Zn8wic9PoI5#8P?3G^ zCWiUj7?w`16I6n-S5ICJXRn)l0nXky`KO>#eJ2AaLl*-VLl1*2Lob5~Lmz_`LqCH9 z!vqF*hDi)T43imR8KyEMF-&L3WthRx!7!7dn_(8iG=|v>8yV&>Y+;zou%BTb!!3sS z40jn8FuY(`$jHpl%gD>n!zjwI4D9wG1`Y-WMlq<{Wf?v&Y++zyU}P|1IM1-vgn^BL zmBE4GFvB(m4hBvJcZNL-+Zi|*xEO*MHZtsBU}NBBh-FyDu#<s}frlZ9VIjjVhTW6T z3C*kDqqT)Wf?3Z-YYT&cw9#&cgOQ*-w}avEc7|i1nA*m0avQ_hZ44JSGB7YeLRpM~ zm4Sg_B?BkJDh2_D)ePbcYZxpT)`DFr299G(s4K-8lo+mpT?q<nW(Gz922N0M2~84l z3@nph3+r-jU|?g|$iTy}X|ke-xac*o1|9|;hU*M$3``7+3^y2VPWBa1k=+Ki0uqTJ R--2>BBf~8Q1_maE+W_O)O!EK$ delta 1592 zcmaE^-lxfR>ff$?3=9k=3{N+5IkDE)Gcs^wmZTOXmgE;PGKgtt`eY@RCF+-!Waj95 zLdC7Q85$Xy*%_J`8H6xpc^Fz4S{WHw@=_~G7#T!hCgddMrR)1AWu+#Ufc3ZYFmy0D zGcvGeBo_ODl?oK+7fp_0RhrzunwBtuhhZXvDI)_%Mq+V>bAC!H2g77W21acThN+AU zjJg~Q(-|2UD>xWtGBPk7-p<9q$S|9S!HK~c#G1>)5DQ_==V6G0uom(#^g>vRc^H;3 zES>DeCeOB#VKqC$s>#`Gvdn83)=utbQ<GoMu#uf%10#cAa(-!1acX&fQMP_?VQFGf zDi6aZhRu^Nu$kDcXV}Wau#I6eBLi=7YKc#3T1jw8QGRwR7sGmn9Xt#>K{EWssU=SN zB_;W}2)W%n40{+hPj+JW*F45>f}P<wBZB}U{2Ysl5-W>&7>XHAGBU7gM0;w6u``^W zyo+6q?JN&N3d6a{_t>R4PBC2IVGv@tIEe$qzRbgLh2iRCB@S!3Qw-O67;Z3lGBR+K z<Oi1&W#*-GG2CLf!_IJ<kwI$WeJNHRhPw<GH_zf|V&>e&z{J4Lz`!tX@)_P_cb%OK zHH-{atjif>C0TbeG%zw8U<lsEP-(^@$|5_TfkRf5CB+UT)5gd!>;HXOtt|{v3m90L z*RZT%U|?Wjuw!6gaAOdhe3VCBGngTnA(Ww(A&jA!A)KLuA(UYfLlna-hG>R43~>zh z3=9l*3~XSV1$l*Sr!jOgbTKe7$T6rfL@}^2Ff$}GSTjU|S+xw@44e#X3@i-Y3=9lB z42%pM3?TJA3``8s3=9k@lM{KJ&D9v#*cliZ*csA6L?Z)(<bMWX1{Sy&0|OH%;u#nj zL>L$tQT$y`guio$@HYbkLox#gLkfc&Ln?y?LmGo2Lpp;!Lk5ErLl%PzLkfc*LoP!o zLmopiLjglALm@*mLlHv<LxBXtB!)7ESq$Y2a~LYAA2h0jgNBizZ*n5P6l4G78h+i3 zN!u8FW-(|jXRy{5ngV8PEN9Ty7MccTi!WzT))txpW{WOo5ZBtyFl&w0c7{11VjhTC zu!b3w9+<)DK?)qpwG1f?^$eK|jSP7V%?!m1tqc_m?UMxss+AX6af-6;U|3|uCCSO6 zC&|U4mtw{($;qrI$;GUfV#XuFux#>r0Y&y@n;2GXV^}x&x_}aty=9UhjJbWXCY-%% za*&`>Y!3q`LoWjtLqCHo!vqEshKUST43iif7$!5gGfZU&VwlDd%P@l>iD4E)F2ihw z4u&}l-3)UXrZLQ8*vK%SVGF|ohW!i+8E!EwVz|q&nBfJ(5=Lf*35>i9{fwdvD<@wR z6t~~Yz{bGHV8U>oVIKn<11p0A!(oQ~3>*xc4DJkj7!ELSFmN#hF>GWw$iT+H%@E75 zjNuRi8v_qR62n4<!wg3zs|(HZI;ypWL4sM&Mr#X$fwa+XhEtKCEVYB-%yx$JT3Z-o zwlQ4V#&B&L!_AEh3=EL)6k}jzU|?9oz{#+dL4aW$gE+%_1`CD_llg_kMec!}1j-Z4 z42%K{oZ#}!O4!_VGXopL76u-Mt>Dz9z`)GFz#sw6XbcQ&3_=X|!5VoOco-fqurV+( kFfu%3cr<yLu!`(XunthBV*vZnk%57Mk>N1|C_6m?01ioQ$N&HU diff --git a/bin/coursework/GameState.class b/bin/coursework/GameState.class index f2191bde75af2628511e506635f2c9a30ca52de6..23910ba3317c7a6b95925d3dac5eff34796fc869 100644 GIT binary patch delta 119 zcmdnNeu#a8HZy+@0}BH)0|SHB4hF%^4C0ebn02G27}yvX7(^J@7(^Ka8N?XG7{nRm z8N?Vg7$g~_7#J87AUYT{8MGJ}7z7z48Q2*(7#JCZ8AKVh8Q2(@7<3pI7`Pai{xXQM TGw3pMGcYpfF)%PNG3WyTHn0k7 delta 109 zcmX@azJq;(HZx}v0}BH)0|SG~WGiOfa4`l}1_lNZ25tsX1_1^!21y1{1|<dw1}O#x z1_g*Z22BPn1_lOh21y2X1`Y;B23`hH25km51||j_1_lN$2ByCZ0_+UBjNA;240;R< I3``9A098K-Z~y=R diff --git a/bin/coursework/Main.class b/bin/coursework/Main.class index 91322a5f64f24da6b9668f57097e6994f74b2337..e11864fcd4a0c4e5737bfec1dfeeafb4b2b6f0e2 100644 GIT binary patch delta 14526 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 delta 11193 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 bk;R$Cl|hn8fk~Fd%|VhWn8}yLok0=+6ovX( diff --git a/bin/coursework/RandomGenerator.class b/bin/coursework/RandomGenerator.class index 3ffd12084d130765e78aa78c13730b35777c3487..1f537e186719638b1e5d09d50f44faca09f7c2df 100644 GIT binary patch literal 10179 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 literal 7268 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 diff --git a/src/coursework/Cage.java b/src/coursework/Cage.java index 6d7ed6a..190e102 100644 --- a/src/coursework/Cage.java +++ b/src/coursework/Cage.java @@ -80,13 +80,12 @@ public class Cage { } } Collections.sort(sortedCageValues, Collections.reverseOrder()); + int cageVal = sortedCageValues.get(0); - - for (int value : sortedCageValues) { - if (value != cageVal) { - cageVal -= value; - } + for (int i = 1; i < sortedCageValues.size(); i++) { + cageVal -= sortedCageValues.get(i); } + if (cageVal == value) { return false; } @@ -107,12 +106,10 @@ public class Cage { } } Collections.sort(sortedCageValues, Collections.reverseOrder()); - int cageVal = sortedCageValues.get(0); - for (int value : sortedCageValues) { - if (value != cageVal) { - cageVal /= value; - } + int cageVal = sortedCageValues.get(0); + for (int i = 1; i < sortedCageValues.size(); i++) { + cageVal /= sortedCageValues.get(i); } if (cageVal == value) { diff --git a/src/coursework/GameState.java b/src/coursework/GameState.java index e38448c..c86ae46 100644 --- a/src/coursework/GameState.java +++ b/src/coursework/GameState.java @@ -17,6 +17,7 @@ public class GameState { } public static String[] getCurrentGameState(TextField[] gridNumbers) { + N = Main.getN(); String[] gridValues = new String[N*N]; for (int k = 0; k < gridValues.length; k++) { gridValues[k] = gridNumbers[k].getText(); diff --git a/src/coursework/Main.java b/src/coursework/Main.java index bc3a1da..39d3351 100644 --- a/src/coursework/Main.java +++ b/src/coursework/Main.java @@ -19,8 +19,11 @@ import javafx.scene.control.Button; import javafx.scene.control.ButtonType; import javafx.scene.control.CheckBox; import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; +import javafx.scene.control.Slider; import javafx.scene.control.TextArea; import javafx.scene.control.TextField; +import javafx.scene.control.ToggleGroup; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.MouseEvent; @@ -49,10 +52,10 @@ public class Main extends Application { private static boolean[][] gridErrors; private static boolean showMistakes = false; - private Pane previousPane = null; - private Square previousSquare = null; - private boolean clearing = false; - private boolean undoing = false; + private static Pane previousPane = null; + private static Square previousSquare = null; + private static boolean clearing = false; + private static boolean undoing = false; private int fontSize; private ConstraintsHandler constraints = new ConstraintsHandler(); @@ -173,11 +176,27 @@ public class Main extends Application { Button loadGameFileButton = new Button("Load game - file"); CheckBox showMistakesCheck = new CheckBox("Show mistakes"); + if (showMistakes) { + showMistakesCheck.setSelected(true); + } Button loadGameTextInputButton = new Button("Load game - text input"); loadGameFileButton.setPrefWidth(200); loadGameTextInputButton.setPrefWidth(loadGameFileButton.getPrefWidth()); - topHBox.getChildren().addAll(loadGameFileButton, showMistakesCheck, loadGameTextInputButton); + Button generateRandomGameButton = new Button("Generate Random Game"); + generateRandomGameButton.setPrefWidth(loadGameFileButton.getPrefWidth()); + Button solveGridButton = new Button("Solve Current Grid"); + solveGridButton.setPrefWidth(loadGameFileButton.getPrefWidth()); + + VBox leftVBox = new VBox(); + leftVBox.setSpacing(5); + leftVBox.getChildren().addAll(loadGameFileButton, loadGameTextInputButton); + + VBox rightVBox = new VBox(); + rightVBox.setSpacing(5); + rightVBox.getChildren().addAll(generateRandomGameButton, solveGridButton); + + topHBox.getChildren().addAll(leftVBox, showMistakesCheck, rightVBox); showMistakesCheck.selectedProperty().addListener((obs, oldVal, newVal) -> { showMistakesCheckEvent(showMistakesCheck); @@ -191,6 +210,10 @@ public class Main extends Application { loadTextButtonClickEvent(); }); + generateRandomGameButton.setOnAction(e -> { + generateRandomGameEvent(); + }); + return topHBox; } @@ -326,6 +349,77 @@ public class Main extends Application { } /////////////////////////////////////////////////////////// + private void generateRandomGameEvent() { + // new popup selecting difficultly and n + Stage popupStage = new Stage(); + popupStage.initModality(Modality.APPLICATION_MODAL); + popupStage.initOwner(stage); + + VBox vbox = new VBox(); + vbox.setSpacing(5); + vbox.setAlignment(Pos.TOP_CENTER); + + HBox hboxBottom = new HBox(); + hboxBottom.setSpacing(86); + hboxBottom.setPadding(new Insets(10)); + + Slider slider = new Slider(2,8,1); + slider.setPrefWidth(150); + slider.setMaxWidth(150); + slider.setShowTickLabels(true); + slider.setShowTickMarks(true); + slider.setMinorTickCount(0); + slider.setMajorTickUnit(1); + slider.setBlockIncrement(1); + slider.setSnapToTicks(true); + slider.setValue(N); + slider.setPadding(new Insets(10, 0, 0, 0)); + + HBox hboxMiddle = new HBox(); + ToggleGroup tg = new ToggleGroup(); + RadioButton easy = new RadioButton("Easy"); + easy.setToggleGroup(tg); + RadioButton medium = new RadioButton("Medium"); + medium.setToggleGroup(tg); + RadioButton hard = new RadioButton("Hard"); + hard.setToggleGroup(tg); + hboxMiddle.setAlignment(Pos.CENTER); + hboxMiddle.setSpacing(10); + VBox radioVBox = new VBox(easy, medium, hard); + radioVBox.setSpacing(5); + hboxMiddle.getChildren().addAll(new Label("Difficulty:"), radioVBox); + + Button generateButton = new Button("Generate"); + generateButton.setAlignment(Pos.TOP_RIGHT); + generateButton.setOnAction(e -> { + popupStage.close(); + if ((int) slider.getValue() != N) { + N = (int) slider.getValue(); + resetGrid(); + } + RandomGenerator rg = new RandomGenerator(N); + gridCages = rg.generate(); + }); + + Button cancelButton = new Button("Cancel"); + cancelButton.setAlignment(Pos.TOP_LEFT); + cancelButton.setOnAction(e -> { + popupStage.hide(); + }); + + HBox hboxTop = new HBox(new Label("Size (NxN):"), slider); + hboxTop.setSpacing(3); + hboxTop.setAlignment(Pos.CENTER); + + + + hboxBottom.getChildren().addAll(cancelButton, generateButton); + vbox.getChildren().addAll(hboxTop, hboxMiddle, hboxBottom); + + popupStage.setScene(new Scene(vbox, 250, 250)); + popupStage.show(); + } + private void loadFileButtonClickEvent() { try { FileChooser fileChooser = new FileChooser(); @@ -541,7 +635,8 @@ public class Main extends Application { //////////////////////////////////////////////////////// @Override - public void start(Stage stage) throws Exception { + public void start(Stage primaryStage) throws Exception { + stage = primaryStage; VBox vBox = new VBox(); int width = 400 + 80 * N; int height = 275 + 80 * N; @@ -549,11 +644,11 @@ public class Main extends Application { scene = new Scene(vBox, width, height); stage.setWidth(width); stage.setHeight(height); - vBox.setSpacing(10); + vBox.setSpacing(5); vBox.setPadding(new Insets(20)); vBox.setAlignment(Pos.CENTER); - GridPane gridPane = setupGrid(width - 200, height - 150); + GridPane gridPane = setupGrid(width - 200, height - 175); undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers))); fontSize = 18; @@ -564,7 +659,7 @@ public class Main extends Application { VBox numbersVBox = setupNumbersVBox(); HBox gridHBox = new HBox(); gridHBox.getChildren().addAll(fontSizeVBox, gridPane, numbersVBox); - gridHBox.setSpacing(20); + gridHBox.setSpacing(10); gridHBox.setAlignment(Pos.CENTER); HBox bottomHBox = setupBottomHBox(); @@ -609,6 +704,53 @@ public class Main extends Application { stage.setScene(scene); stage.setTitle("Mathdoku"); stage.show(); + + } + + private void resetGrid() { + stage.close(); + initialiseVariables(); + VBox vBox = new VBox(); + int width = 300 + 80 * N; + int height = 300 + 80 * N; + + Stage stage = new Stage(); + Scene newScene = new Scene(vBox, width, height); + stage.setWidth(width); + stage.setHeight(height); + vBox.setSpacing(5); + vBox.setPadding(new Insets(20)); + vBox.setAlignment(Pos.CENTER); + + GridPane gridPane = setupGrid(width - 200, height - 120); + undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers))); + + fontSize = 18; + changeFontSizeEvent(fontSize); + HBox topHBox = setupTopHBox(); + + VBox fontSizeVBox = setupFontSizeHBox(); + VBox numbersVBox = setupNumbersVBox(); + HBox gridHBox = new HBox(); + gridHBox.getChildren().addAll(fontSizeVBox, gridPane, numbersVBox); + gridHBox.setSpacing(10); + gridHBox.setAlignment(Pos.CENTER); + + HBox bottomHBox = setupBottomHBox(); + + vBox.getChildren().addAll(topHBox, gridHBox, bottomHBox); + + stageWidthResizeEvent(stage, gridPane); + stageHeightResizeEvent(stage, gridPane); + + stage.setMinWidth(width + 50); + stage.setMinHeight(height + 50); + stage.setScene(newScene); + stage.setTitle("Mathdoku"); + stage.show(); + scene = newScene; + this.stage = stage; + } private static void initialiseVariables() { @@ -618,10 +760,14 @@ public class Main extends Application { gridBoxes = new VBox[N*N]; gridCages = new ArrayList<Cage>(); gridErrors = new boolean[N*N][3]; + previousPane = null; + previousSquare = null; + clearing = false; + undoing = false; } public static void main(String[] args) { - N = Integer.parseInt(args[0]); + N = 4; initialiseVariables(); launch(args); } diff --git a/src/coursework/RandomGenerator.java b/src/coursework/RandomGenerator.java index d0d26ac..fcd6a00 100644 --- a/src/coursework/RandomGenerator.java +++ b/src/coursework/RandomGenerator.java @@ -1,29 +1,35 @@ package coursework; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Random; public class RandomGenerator { - private static int N = 6; - private static int[][] grid = new int[N][N]; + private int N; + private int[][] grid; - private static List<Integer> uncagedGrids = new ArrayList<Integer>(); - private static List<Integer> possibleMoves; + private List<Integer> uncagedGrids = new ArrayList<Integer>(); + private List<Integer> possibleMoves = new ArrayList<Integer>(); + private List<Cage> gridCages = new ArrayList<Cage>(); - public static void main(String[] args) { - generate(); + public RandomGenerator(int N) { + this.N = N; + grid = new int[N][N]; } - private static void generate() { + public List<Cage> generate() { generateGridValues(); shuffleGridValues(); generateCages(); + return gridCages; } - private static void generateCages() { + private void generateCages() { Random random = new Random(); addAllGrids(); while (uncagedGrids.size() > 0) { @@ -102,16 +108,78 @@ public class RandomGenerator { uncagedGrids.remove(uncagedGrids.indexOf(id)); } } + + int cageValue; + String cageOperator; + List<Integer> cageValues = new ArrayList<Integer>(); + HashSet<Integer> hashSetIds = new HashSet<Integer>(); + for (int cageId : cageIds) { + hashSetIds.add(cageId); + } + + if (hashSetIds.size() > 1) { + for (int cageId : hashSetIds) { + int row = cageId / N; + int col = cageId % N; + cageValues.add(grid[row][col]); + } + Collections.sort(cageValues, Collections.reverseOrder()); + + Map<String, Integer> possibleValues = new HashMap<String, Integer>(); + + int additionResult = 0; + for (int value : cageValues) { + additionResult += value; + } + possibleValues.put("+", additionResult); + + int subtractionResult = cageValues.get(0); + for (int i = 1; i < cageValues.size(); i++) { + subtractionResult -= cageValues.get(i); + } + if (subtractionResult > 0) { + possibleValues.put("-", subtractionResult); + } + + int multiplicationResult = 1; + for (int value : cageValues) { + multiplicationResult *= value; + } + possibleValues.put("x", multiplicationResult); + + float divisionResult = cageValues.get(0); + for (int i = 1; i < cageValues.size(); i++) { + divisionResult /= cageValues.get(i); + } + if (divisionResult == (int) divisionResult) { + possibleValues.put("�", (int) divisionResult); + } + + + List<String> keySet = new ArrayList<String>(possibleValues.keySet()); + cageOperator = keySet.get(random.nextInt(keySet.size())); + cageValue = possibleValues.get(cageOperator); + } + else {; + int row = cageIds[0] / N; + int col = cageIds[0] % N; + cageValue = grid[row][col]; + cageOperator = ""; + } - String operator = "+"; - int value = 0; + int[] finalCageIds = new int[hashSetIds.size()]; + int counter = 0; + for (int cageId : hashSetIds) { + finalCageIds[counter] = cageId; + counter++; + } - //Cage cage = new Cage(cageIds, value, operator); + gridCages.add(new Cage(cageIds, cageValue, cageOperator)); } } - private static void centre(int id) { + private void centre(int id) { if (!uncagedGrids.contains(id + N)) possibleMoves.remove(possibleMoves.indexOf(id + N)); if (!uncagedGrids.contains(id - N)) @@ -122,7 +190,7 @@ public class RandomGenerator { possibleMoves.remove(possibleMoves.indexOf(id - 1)); } - private static void topLeftCorner(int id) { + private void topLeftCorner(int id) { possibleMoves.remove(possibleMoves.indexOf(id - 1)); possibleMoves.remove(possibleMoves.indexOf(id - N)); if (!uncagedGrids.contains(id + 1)) @@ -131,7 +199,7 @@ public class RandomGenerator { possibleMoves.remove(possibleMoves.indexOf(id + N)); } - private static void topRightCorner(int id) { + private void topRightCorner(int id) { possibleMoves.remove(possibleMoves.indexOf(id - N)); possibleMoves.remove(possibleMoves.indexOf(id + 1)); if (!uncagedGrids.contains(id - 1)) @@ -140,7 +208,7 @@ public class RandomGenerator { possibleMoves.remove(possibleMoves.indexOf(id + N)); } - private static void bottomRightCorner(int id) { + private void bottomRightCorner(int id) { possibleMoves.remove(possibleMoves.indexOf(id + N)); possibleMoves.remove(possibleMoves.indexOf(id + 1)); if (!uncagedGrids.contains(id - 1)) @@ -149,7 +217,7 @@ public class RandomGenerator { possibleMoves.remove(possibleMoves.indexOf(id - N)); } - private static void bottomLeftCorner(int id) { + private void bottomLeftCorner(int id) { possibleMoves.remove(possibleMoves.indexOf(id + N)); possibleMoves.remove(possibleMoves.indexOf(id - 1)); if (!uncagedGrids.contains(id + 1)) @@ -158,7 +226,7 @@ public class RandomGenerator { possibleMoves.remove(possibleMoves.indexOf(id - N)); } - private static void leftEdge(int id) { + private void leftEdge(int id) { possibleMoves.remove(possibleMoves.indexOf(id - 1)); if (!uncagedGrids.contains(id + N)) possibleMoves.remove(possibleMoves.indexOf(id + N)); @@ -168,7 +236,7 @@ public class RandomGenerator { possibleMoves.remove(possibleMoves.indexOf(id + 1)); } - private static void topEdge(int id) { + private void topEdge(int id) { possibleMoves.remove(possibleMoves.indexOf(id - N)); if (!uncagedGrids.contains(id + N)) possibleMoves.remove(possibleMoves.indexOf(id + N)); @@ -178,7 +246,7 @@ public class RandomGenerator { possibleMoves.remove(possibleMoves.indexOf(id - 1)); } - private static void rightEdge(int id) { + private void rightEdge(int id) { possibleMoves.remove(possibleMoves.indexOf(id + 1)); if (!uncagedGrids.contains(id - N)) possibleMoves.remove(possibleMoves.indexOf(id - N)); @@ -188,7 +256,7 @@ public class RandomGenerator { possibleMoves.remove(possibleMoves.indexOf(id - 1)); } - private static void bottomEdge(int id) { + private void bottomEdge(int id) { possibleMoves.remove(possibleMoves.indexOf(id + N)); if (!uncagedGrids.contains(id - N)) possibleMoves.remove(possibleMoves.indexOf(id - N)); @@ -198,13 +266,13 @@ public class RandomGenerator { possibleMoves.remove(possibleMoves.indexOf(id + 1)); } - private static void addAllGrids() { + private void addAllGrids() { for (int i = 0; i < N*N; i++) { uncagedGrids.add(i); } } - private static int isEdgeGrid(int gridId) { + private int isEdgeGrid(int gridId) { if (gridId % N == 0) // left edge return 0; if (gridId % N == N - 1) // right edge @@ -216,7 +284,7 @@ public class RandomGenerator { return -1; // not an edge grid } - private static int isCornerGrid(int gridId) { + private int isCornerGrid(int gridId) { if ((int) gridId / N == 0 && gridId % N == 0) // top left corner return 0; if ((int) gridId / N == N - 1 && gridId % N == N - 1) // bottom right corner @@ -228,7 +296,7 @@ public class RandomGenerator { return -1; // not a corner } - private static void generateGridValues() { + private void generateGridValues() { int counter = 1; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { @@ -245,7 +313,7 @@ public class RandomGenerator { } } - private static void shuffleGridValues() { + private void shuffleGridValues() { Random random = new Random(); for (int i = 0; i < 15; i++) { int[] colsSwap = new int[2]; @@ -266,11 +334,11 @@ public class RandomGenerator { } } - private static int[] generateValues(Random random) { + private int[] generateValues(Random random) { return new int[] { random.nextInt(N), random.nextInt(N) }; } - private static void swapColumns(int colA, int colB) { + private void swapColumns(int colA, int colB) { int[][] columns = new int[N][2]; for (int i = 0; i < N; i++) { columns[i][0] = grid[i][colA]; @@ -282,7 +350,7 @@ public class RandomGenerator { } } - private static void swapRows(int rowA, int rowB) { + private void swapRows(int rowA, int rowB) { int[][] rows = new int[N][2]; for (int i = 0; i < N; i++) { rows[i][0] = grid[rowA][i]; @@ -294,7 +362,7 @@ public class RandomGenerator { } } - private static void transpose() { + private void transpose() { int[][] temp = new int[N][N]; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { @@ -304,7 +372,7 @@ public class RandomGenerator { grid = temp; } - private static void output() { + private void output() { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { System.out.print(grid[i][j] + " "); -- GitLab