From e0ee58dc8cc3583525593a1c6d7874a5537935f2 Mon Sep 17 00:00:00 2001 From: Laci Date: Sun, 19 May 2024 22:49:53 +0200 Subject: [PATCH 01/12] After fixes --- .../06786101c6e81d4e175b6d1f0cbf6b55bbe068fc | 2 + .../0fc36c235a22100e0b58abe3d2ecf46b09039f3b | 2 + .../337921b067143f69e89694a9335e877941f50e7c | 2 + .../3b75dd6f2347637f58fb22d37520bdaf8666060f | 4 + .../5251f38072712b04b1168fe13a8b392d6ad27520 | 2 + .../6af08458783265d4d7382281c99354611c009257 | 48 +++ .../769d6629fff0fdb94f1e78aa6735a4b490f81699 | 2 + .../7d40ace53aaeed942375f629948f87787c0198ff | 67 ++++ .../8f13733f346721c3d39f03c75afe8fae5d6fe89f | 8 + .../a1b4f37ef3339681be2392cb551649f7032e1c0a | 2 + .../ae375a6ce4402ef772f382ecf7271f9224176e9b | 2 + .../b0a35953170be4147a2214de1ca272141d33fdfc | 2 + .../b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c | 2 + .../b76bd53b8e23eaba45b5b65d2234253e5bb00c43 | 2 + .../c102106332e2fd2e145a693c49961375b2149e8b | 6 + .../c34016a91f6adc856460a66117f98eb56fa9bc60 | 6 + .../c54a65a8aa872521a49fb1b930e279e872406c5f | 2 + .../cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 | 2 + .../cf351f97bf963cdb89cd3530846681f1431f344f | 3 + .../d0e7750a25948def48006badab655f90e5fe3c1b | 2 + .../dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab | 2 + .../e8ecca94b526deed330be938464b4a8ba804cd8c | 6 + .../eadc31d2a7231b561802e3f88cf817c28dc1f8f7 | 4 + .../.idea/sonarlint/issuestore/index.pb | 47 +++ .../06786101c6e81d4e175b6d1f0cbf6b55bbe068fc | 0 .../0fc36c235a22100e0b58abe3d2ecf46b09039f3b | 0 .../337921b067143f69e89694a9335e877941f50e7c | 0 .../3b75dd6f2347637f58fb22d37520bdaf8666060f | 0 .../5251f38072712b04b1168fe13a8b392d6ad27520 | 0 .../6af08458783265d4d7382281c99354611c009257 | 0 .../769d6629fff0fdb94f1e78aa6735a4b490f81699 | 0 .../7d40ace53aaeed942375f629948f87787c0198ff | 0 .../8f13733f346721c3d39f03c75afe8fae5d6fe89f | 0 .../a1b4f37ef3339681be2392cb551649f7032e1c0a | 0 .../ae375a6ce4402ef772f382ecf7271f9224176e9b | 0 .../b0a35953170be4147a2214de1ca272141d33fdfc | 0 .../b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c | 0 .../b76bd53b8e23eaba45b5b65d2234253e5bb00c43 | 0 .../c102106332e2fd2e145a693c49961375b2149e8b | 0 .../c34016a91f6adc856460a66117f98eb56fa9bc60 | 0 .../c54a65a8aa872521a49fb1b930e279e872406c5f | 0 .../cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 | 0 .../cf351f97bf963cdb89cd3530846681f1431f344f | 0 .../d0e7750a25948def48006badab655f90e5fe3c1b | 0 .../dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab | 0 .../e8ecca94b526deed330be938464b4a8ba804cd8c | 0 .../eadc31d2a7231b561802e3f88cf817c28dc1f8f7 | 0 .../sonarlint/securityhotspotstore/index.pb | 47 +++ .../src/Controll/Controller.java | 0 .../src/Controll/Menu.java | 0 .../src/Controll/ViewGame.java | 0 .../src/Controll/WaterCounter.java | 0 .../src/Drawing/CisternDraw.java | 0 .../src/Drawing/Drawable.java | 0 .../src/Drawing/MechanicDraw.java | 0 .../src/Drawing/PipeDraw.java | 0 .../src/Drawing/PumpDraw.java | 0 .../src/Drawing/SaboteurDraw.java | 0 .../src/Drawing/SpringDraw.java | 0 .../src/Enums/Fluid.java | 0 .../src/Fields/ActiveFields/ActiveFields.java | 0 .../src/Fields/ActiveFields/Cistern.java | 0 .../src/Fields/ActiveFields/Pump.java | 0 .../src/Fields/ActiveFields/Spring.java | 0 .../src/Fields/Field.java | 0 .../src/Fields/Pipe.java | 0 .../src/Interfaces/Steppable.java | 0 .../src/Players/Mechanic.java | 0 .../src/Players/Player.java | 0 .../src/Players/Saboteur.java | 0 .../StringResourceController.java | 24 +- .../src/palya.txt | 0 src/main/java/Controll/Controller.java | 351 ++++++++++-------- src/main/java/Controll/Menu.java | 25 +- src/main/java/Controll/ViewGame.java | 31 +- src/main/java/Drawing/CisternDraw.java | 1 + src/main/java/Drawing/SaboteurDraw.java | 1 + src/main/java/Drawing/SpringDraw.java | 1 + .../Fields/ActiveFields/ActiveFields.java | 2 +- .../java/Fields/ActiveFields/Cistern.java | 9 +- src/main/java/Fields/ActiveFields/Pump.java | 81 ++-- src/main/java/Fields/Field.java | 5 +- src/main/java/Fields/Pipe.java | 29 +- src/main/java/Players/Mechanic.java | 2 +- src/main/java/Players/Player.java | 5 +- src/main/java/Players/Saboteur.java | 5 +- .../StringResourceController.java | 13 + src/main/java/srcTMP/palya.txt | 57 +++ 88 files changed, 638 insertions(+), 278 deletions(-) create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/3/337921b067143f69e89694a9335e877941f50e7c create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/6/a/6af08458783265d4d7382281c99354611c009257 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/d/7d40ace53aaeed942375f629948f87787c0198ff create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/1/c102106332e2fd2e145a693c49961375b2149e8b create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/index.pb create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/3/3/337921b067143f69e89694a9335e877941f50e7c create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/6/a/6af08458783265d4d7382281c99354611c009257 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/7/d/7d40ace53aaeed942375f629948f87787c0198ff create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/1/c102106332e2fd2e145a693c49961375b2149e8b create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 create mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/index.pb rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Controll/Controller.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Controll/Menu.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Controll/ViewGame.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Controll/WaterCounter.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Drawing/CisternDraw.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Drawing/Drawable.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Drawing/MechanicDraw.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Drawing/PipeDraw.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Drawing/PumpDraw.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Drawing/SaboteurDraw.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Drawing/SpringDraw.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Enums/Fluid.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Fields/ActiveFields/ActiveFields.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Fields/ActiveFields/Cistern.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Fields/ActiveFields/Pump.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Fields/ActiveFields/Spring.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Fields/Field.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Fields/Pipe.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Interfaces/Steppable.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Players/Mechanic.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Players/Player.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/Players/Saboteur.java (100%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/StringResource/StringResourceController.java (98%) rename {Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2 => Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2}/src/palya.txt (100%) create mode 100644 src/main/java/StringResource/StringResourceController.java create mode 100644 src/main/java/srcTMP/palya.txt diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc new file mode 100644 index 0000000..295c472 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟J$0034060e-43e6-4c75-bad2-8fc6e90d3632 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b new file mode 100644 index 0000000..824d6f4 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$1b918732-eea1-4375-8e10-bf0416829977 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/3/337921b067143f69e89694a9335e877941f50e7c b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/3/337921b067143f69e89694a9335e877941f50e7c new file mode 100644 index 0000000..db203ad --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/3/337921b067143f69e89694a9335e877941f50e7c @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$619f7f58-d230-4390-a3a2-973ce61c9c90 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f new file mode 100644 index 0000000..cb52d83 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f @@ -0,0 +1,4 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$0064c453-a75e-477c-ab7f-fcbb58ec7b06 + +java:S4144"YUpdate this method so that its implementation is not identical to "getWater" on line 168.(J$e9711a07-4756-4f8e-9880-7aedc7e5893d \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 new file mode 100644 index 0000000..0c8a803 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$13121709-908f-4639-82c8-690110412ea5 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/6/a/6af08458783265d4d7382281c99354611c009257 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/6/a/6af08458783265d4d7382281c99354611c009257 new file mode 100644 index 0000000..8ac8ea1 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/6/a/6af08458783265d4d7382281c99354611c009257 @@ -0,0 +1,48 @@ + +p +java:S1604S"(Make this anonymous inner class a lambda(ڬ81J$d32ae723-3128-46bf-8b30-c200bb33ac9d + +java:S1104""NMake vg a static final constant or non-public and provide accessors if needed.(81J$e77a876c-f7ed-4c9c-8fe9-e674478b2978 + +java:S1104S"ZMake selectListener a static final constant or non-public and provide accessors if needed.(ڬ81J$21ae80f9-73bb-4fb7-a0b7-f23c313df156 +k +java:S1444""(Make this "public static vg" field final(81J$931fa7f9-6c48-42dc-a3e2-109bbc2bcefd +| +java:S1444S"4Make this "public static selectListener" field final(ڬ81J$9ae8ac9f-5fae-432f-bda3-116ba8b78058 + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟81J$366501d7-44cb-4251-b780-e5fac5d70ade +~ +java:S2696b"6Make the enclosing method "static" or remove this set.(í81J$6ed924a3-7b69-4e2b-86a1-e135a04dfc11 +~ +java:S2696k"6Make the enclosing method "static" or remove this set.(í81J$44779747-4400-4290-a87b-66d8f5757af7 +~ +java:S2696s"6Make the enclosing method "static" or remove this set.(í81J$df334617-3b47-42c8-b2a7-95eac1faeb1c + +java:S3776"RRefactor this method to reduce its Cognitive Complexity from 16 to the 15 allowed.(81J$1cb6ee4a-0ca7-4392-b46b-86b09973e82f +r +java:S3010")Remove this assignment of "activePlayer".(81J$d291e22d-b606-419b-b785-a3e80f76bb79 +j +java:S3010"&Remove this assignment of "mecPoints".(81J$e628da6a-be46-4ce7-aaff-fbe51ed46f28 +j +java:S3010"&Remove this assignment of "sabPoints".(81J$cc6ccb71-cf65-4dbe-ae5b-72474c419084 +m +java:S3010")Remove this assignment of "successLabel".(81J$fc9ea60d-c881-475d-ac1a-67d7f3f4dbd4 +c +java:S3010"Remove this assignment of "vg".(81J$2e58df03-cabc-4fa6-8fa3-69f02435b712 + java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ƞ81J$c68f3f4f-652a-479d-9e82-adaee45ba2f4 + +java:S2696"6Make the enclosing method "static" or remove this set.(£81J$6ffeddf3-8d7c-4ed6-a0d0-ebeae0e96d6d +y +java:S2696"6Make the enclosing method "static" or remove this set.( 81J$298bcf03-e40b-49ce-8843-bca4fe47180c + +java:S2696"6Make the enclosing method "static" or remove this set.(í81J$5deda3ea-c800-4a1b-b1b4-e112305b9ce4 +y +java:S2696"6Make the enclosing method "static" or remove this set.( 81J$175ac3bc-1e97-43c4-b23e-7bcd286fea94 + +java:S2696"6Make the enclosing method "static" or remove this set.(í81J$f19db91e-5242-4806-ae6b-026845b5031d + +java:S2696"6Make the enclosing method "static" or remove this set.(í81J$41e4b840-ec4d-442d-ac16-d98b47ead4eb + +java:S2696"6Make the enclosing method "static" or remove this set.(í81J$d33e0b7f-7a67-4099-a59e-2e0238dc88b7 +y +java:S2696"6Make the enclosing method "static" or remove this set.( 81J$90782ea4-0746-4fff-a899-e687dc9b38f3 + java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(81J$e0d1c9e8-6a13-407e-bb0f-5dbaab1846a5 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 new file mode 100644 index 0000000..f01c4b4 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$72b8c3f5-c7c5-4a5f-890c-cfdd38f36a85 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/d/7d40ace53aaeed942375f629948f87787c0198ff b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/d/7d40ace53aaeed942375f629948f87787c0198ff new file mode 100644 index 0000000..13e5dcd --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/d/7d40ace53aaeed942375f629948f87787c0198ff @@ -0,0 +1,67 @@ + + +java:S1104c"QMake pipes a static final constant or non-public and provide accessors if needed.(ݰ8֔1J$edecc7b9-7d04-403a-82e7-040a5ceabdf1 + +java:S1104g"QMake pumps a static final constant or non-public and provide accessors if needed.(橵8֔1J$75e63dc7-d549-46a3-bc94-3e3a4fea445b + +java:S1104m"TMake gameMode a static final constant or non-public and provide accessors if needed.(88֔1J$e51f934c-b82a-4524-beb0-e149f4faaa94 + +java:S1104o"QMake moves a static final constant or non-public and provide accessors if needed.(¡8֔1J$72303250-19b6-4288-80c5-753c8623a382 + +java:S1104p"VMake lastResult a static final constant or non-public and provide accessors if needed.(8֔1J$a3ca2e35-6dbe-4077-8cc4-cfb02196e8dc +n +java:S1444c"+Make this "public static pipes" field final(ݰ8ה1J$3063f2fb-4884-4356-abf8-df81c9402079 +s +java:S1444g"+Make this "public static pumps" field final(橵8ה1J$ef8d91dd-1f30-4662-8ce9-500e6217cab1 +p +java:S1444m".Make this "public static gameMode" field final(88ה1J$43ec576d-0e48-4c7c-b2e3-c3e4cf4252bf +n +java:S1444o"+Make this "public static moves" field final(¡8ה1J$0439958c-8cb3-4210-9dfb-6ff9d8c4d00b +x +java:S1444p"0Make this "public static lastResult" field final(8ה1J$1d847471-8c15-4eed-acf5-58994d8d0f69 +m +java:S2629"$Invoke method(s) only conditionally.(ԡΗ8ٔ1J$9f01ff50-c542-475b-a938-3da848995cc8 +m +java:S2629"$Invoke method(s) only conditionally.(8ٔ1J$d63df651-f13e-4cdc-8bca-a04fb221ea17 + +java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(ѐ8ڔ1J$9fe91241-d784-4c14-af8f-2d35aee689fe + +java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(̋8ڔ1J$58435910-060a-473f-9dc6-d61fe9d74226 + +java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(Ȩ8ڔ1J$5b5a8716-6562-4305-bf1c-78ff13debd5e + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟8ޔ1J$500eb972-cdf7-4fd0-b5e8-4896758b1f22 + +java:S1450J"WRemove the "filePath" field and declare it as a local variable in the relevant methods.(81J$7e1252bd-e84a-43ad-b0be-9b5d736f4c78 +e +java:S23861"Make this member "protected".(81J$721dddbf-9d31-408d-a1e7-d203a8e7de3e +` +java:S23866"Make this member "protected".(81J$5aeb0c91-5bf1-4818-b2a8-10923d10d9a4 +` +java:S2386^"Make this member "protected".(81J$15db5611-51da-4a48-9669-b4b53ee2a712 + java:S100z"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ׇ8Ǖ1J$5ffce165-2044-4fd4-ad86-3118608c3dbe + java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(8ȕ1J$f1ccdc54-cddc-48ea-a245-c58336d8add9 + java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(8͕1J$30f16e1c-8294-4906-aa1f-cdd7c37e298b + +java:S3776"RRefactor this method to reduce its Cognitive Complexity from 51 to the 15 allowed.(81J$9ee8e411-7da8-47fd-a3bb-b359fa5582fa +o +java:S1075"&Remove this hard-coded path-delimiter.(濆81J$0a4bb993-8ebc-4c65-bd2d-377e2a637438 + +java:S1301"KReplace this "switch" statement by "if" statements to increase readability.(81J$0fd3b4a5-a094-4c95-8bdf-1d500e83b0e8 +l java:S108")Either remove or fill this block of code.(81J$c2878e62-aa42-4bef-9c51-539315339c61 +q java:S108")Either remove or fill this block of code.(81J$e04c1d97-f040-424f-9b8c-88868265485a +p +java:S1125"'Remove the unnecessary boolean literal.(β81J$e045e5e0-3762-4368-864f-9d3a30717f3c + +java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(ѐ81J$70904984-a752-44bb-b8c1-368a55743549 + +java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(̋81J$8028503d-ab28-4e19-a233-9c563e01275f + +java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(Ȩ81J$edaf53d4-8380-430f-bc44-cc6767f85c18 +s +java:S1172"*Remove this unused method parameter "cmd".(ȼ81J$a6050208-15b3-46c0-80fd-dc054067e2e4 +s +java:S1172"*Remove this unused method parameter "cmd".(81J$51329dab-e588-41e6-84bd-5c407537ac01 +s +java:S1172"*Remove this unused method parameter "cmd".(81J$020cdaa8-f374-40bd-a950-7680938b51ac +n +java:S1172"*Remove this unused method parameter "cmd".(ű81J$42804a8c-ddce-4717-b691-dae747c81a6e \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f new file mode 100644 index 0000000..b4aa378 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f @@ -0,0 +1,8 @@ + + java:S117"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ě8ܶ1J$865fce0f-3173-4b17-93c3-19664842ddaf + java:S117"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ű8ܶ1J$0e88e062-bd02-42e0-ba74-25109d1c26f2 +` +java:S1643"Use a StringBuilder instead.(熒81J$d44f71dd-928e-46a3-8f19-f07f0223318b +e +java:S1643"Use a StringBuilder instead.(8ܶ1J$aeacf133-bb47-4a87-9a83-74aeb5889b4b + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(8ݶ1J$ca431e5f-ab03-4d67-888b-8a244df82909 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a new file mode 100644 index 0000000..316b540 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$426fce2f-6363-4e16-b327-53102942a12f \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b new file mode 100644 index 0000000..9cc6444 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$3d97ce6e-8771-4101-8a99-4fa5d54cd624 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc new file mode 100644 index 0000000..57bca1d --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$2e443e5c-cfd9-41c3-96fa-9a5b318512ce \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c new file mode 100644 index 0000000..dc2ea4b --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(Ϫ81J$39601be4-c873-46be-a7ec-9de29540d6a2 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 new file mode 100644 index 0000000..a3a325f --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟81J$99f09552-3cd4-43ca-bcb3-51ed04387e10 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/1/c102106332e2fd2e145a693c49961375b2149e8b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/1/c102106332e2fd2e145a693c49961375b2149e8b new file mode 100644 index 0000000..2492b7f --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/1/c102106332e2fd2e145a693c49961375b2149e8b @@ -0,0 +1,6 @@ + +` +java:S1643"Use a StringBuilder instead.(熒81J$8ab095dd-44b8-42af-8892-0184e71ef12c +_ +java:S1643"Use a StringBuilder instead.(l81J$5f930e76-db9d-494f-9888-a0b2fb100108 + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(81J$e8786376-b837-4294-a63f-45d985084621 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 new file mode 100644 index 0000000..697805a --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 @@ -0,0 +1,6 @@ + +X +java:S1643F"Use a StringBuilder instead.(熒J$cada7e70-e9c0-43b3-b625-bcb2fd3cc948 +] +java:S1643P"Use a StringBuilder instead.(J$e16a65b7-7286-4c64-8d5c-285b4aaf14d4 + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$8ca86943-63a6-4a62-891e-1807a4ad3757 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f new file mode 100644 index 0000000..b9ba2b6 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$d3675cda-a534-4026-8b3e-66e8a312f5dc \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 new file mode 100644 index 0000000..cd15237 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(ȕǦJ$7bca2187-fff9-4798-a37c-79360b6226c2 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f new file mode 100644 index 0000000..1ea019c --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f @@ -0,0 +1,3 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$8d9761fb-01bc-4b72-958c-f898040759f3 + java:S100""NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(磛J$ce7d9784-4ef5-4d91-8db2-11738b6b8762 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b new file mode 100644 index 0000000..268fbad --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$582d9493-4fb9-4385-b619-5e1133bafb24 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab new file mode 100644 index 0000000..37b3022 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$6e62672c-1fab-4cdb-8a64-c3b391ce6ba1 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c new file mode 100644 index 0000000..bca93f7 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c @@ -0,0 +1,6 @@ + +X +java:S1643e"Use a StringBuilder instead.(熒J$af867973-615b-44b7-978e-1b355b953b81 +] +java:S1643r"Use a StringBuilder instead.(J$3ec370de-8d3e-43cc-8af1-70c01d045d84 + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$4dd31569-e60c-4f41-b682-549f877ed5ad \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 new file mode 100644 index 0000000..240dbd0 --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 @@ -0,0 +1,4 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$9816f27d-b064-4920-b028-8c788224d51a + +java:S1659,"@Declare "toX" and all following declarations on a separate line.(дJ$08103320-3eed-4490-b6f8-078243417f18 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/index.pb b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/index.pb new file mode 100644 index 0000000..1cc222c --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/index.pb @@ -0,0 +1,47 @@ + +L +src/Controll/Controller.java,7\d\7d40ace53aaeed942375f629948f87787c0198ff +F +src/Controll/Menu.java,b\7\b76bd53b8e23eaba45b5b65d2234253e5bb00c43 +J +src/Controll/ViewGame.java,6\a\6af08458783265d4d7382281c99354611c009257 +N +src/Controll/WaterCounter.java,0\6\06786101c6e81d4e175b6d1f0cbf6b55bbe068fc +L +src/Drawing/CisternDraw.java,d\c\dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab +I +src/Drawing/Drawable.java,c\f\cf351f97bf963cdb89cd3530846681f1431f344f +M +src/Drawing/MechanicDraw.java,0\f\0fc36c235a22100e0b58abe3d2ecf46b09039f3b +I +src/Drawing/PipeDraw.java,e\a\eadc31d2a7231b561802e3f88cf817c28dc1f8f7 +I +src/Drawing/PumpDraw.java,3\3\337921b067143f69e89694a9335e877941f50e7c +M +src/Drawing/SaboteurDraw.java,b\0\b0a35953170be4147a2214de1ca272141d33fdfc +K +src/Drawing/SpringDraw.java,a\1\a1b4f37ef3339681be2392cb551649f7032e1c0a +D +src/Enums/Fluid.java,c\d\cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 +E +src/Fields/Field.java,3\b\3b75dd6f2347637f58fb22d37520bdaf8666060f +D +src/Fields/Pipe.java,c\1\c102106332e2fd2e145a693c49961375b2149e8b +M +src/Interfaces/Steppable.java,d\0\d0e7750a25948def48006badab655f90e5fe3c1b +I +src/Players/Mechanic.java,5\2\5251f38072712b04b1168fe13a8b392d6ad27520 +G +src/Players/Player.java,7\6\769d6629fff0fdb94f1e78aa6735a4b490f81699 +I +src/Players/Saboteur.java,a\e\ae375a6ce4402ef772f382ecf7271f9224176e9b +` +0src/StringResource/StringResourceController.java,b\3\b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c +Y +)src/Fields/ActiveFields/ActiveFields.java,c\5\c54a65a8aa872521a49fb1b930e279e872406c5f +T +$src/Fields/ActiveFields/Cistern.java,e\8\e8ecca94b526deed330be938464b4a8ba804cd8c +Q +!src/Fields/ActiveFields/Pump.java,8\f\8f13733f346721c3d39f03c75afe8fae5d6fe89f +S +#src/Fields/ActiveFields/Spring.java,c\3\c34016a91f6adc856460a66117f98eb56fa9bc60 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/3/3/337921b067143f69e89694a9335e877941f50e7c b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/3/3/337921b067143f69e89694a9335e877941f50e7c new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/6/a/6af08458783265d4d7382281c99354611c009257 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/6/a/6af08458783265d4d7382281c99354611c009257 new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/7/d/7d40ace53aaeed942375f629948f87787c0198ff b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/7/d/7d40ace53aaeed942375f629948f87787c0198ff new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/1/c102106332e2fd2e145a693c49961375b2149e8b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/1/c102106332e2fd2e145a693c49961375b2149e8b new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 new file mode 100644 index 0000000..e69de29 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/index.pb b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/index.pb new file mode 100644 index 0000000..1cc222c --- /dev/null +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/index.pb @@ -0,0 +1,47 @@ + +L +src/Controll/Controller.java,7\d\7d40ace53aaeed942375f629948f87787c0198ff +F +src/Controll/Menu.java,b\7\b76bd53b8e23eaba45b5b65d2234253e5bb00c43 +J +src/Controll/ViewGame.java,6\a\6af08458783265d4d7382281c99354611c009257 +N +src/Controll/WaterCounter.java,0\6\06786101c6e81d4e175b6d1f0cbf6b55bbe068fc +L +src/Drawing/CisternDraw.java,d\c\dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab +I +src/Drawing/Drawable.java,c\f\cf351f97bf963cdb89cd3530846681f1431f344f +M +src/Drawing/MechanicDraw.java,0\f\0fc36c235a22100e0b58abe3d2ecf46b09039f3b +I +src/Drawing/PipeDraw.java,e\a\eadc31d2a7231b561802e3f88cf817c28dc1f8f7 +I +src/Drawing/PumpDraw.java,3\3\337921b067143f69e89694a9335e877941f50e7c +M +src/Drawing/SaboteurDraw.java,b\0\b0a35953170be4147a2214de1ca272141d33fdfc +K +src/Drawing/SpringDraw.java,a\1\a1b4f37ef3339681be2392cb551649f7032e1c0a +D +src/Enums/Fluid.java,c\d\cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 +E +src/Fields/Field.java,3\b\3b75dd6f2347637f58fb22d37520bdaf8666060f +D +src/Fields/Pipe.java,c\1\c102106332e2fd2e145a693c49961375b2149e8b +M +src/Interfaces/Steppable.java,d\0\d0e7750a25948def48006badab655f90e5fe3c1b +I +src/Players/Mechanic.java,5\2\5251f38072712b04b1168fe13a8b392d6ad27520 +G +src/Players/Player.java,7\6\769d6629fff0fdb94f1e78aa6735a4b490f81699 +I +src/Players/Saboteur.java,a\e\ae375a6ce4402ef772f382ecf7271f9224176e9b +` +0src/StringResource/StringResourceController.java,b\3\b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c +Y +)src/Fields/ActiveFields/ActiveFields.java,c\5\c54a65a8aa872521a49fb1b930e279e872406c5f +T +$src/Fields/ActiveFields/Cistern.java,e\8\e8ecca94b526deed330be938464b4a8ba804cd8c +Q +!src/Fields/ActiveFields/Pump.java,8\f\8f13733f346721c3d39f03c75afe8fae5d6fe89f +S +#src/Fields/ActiveFields/Spring.java,c\3\c34016a91f6adc856460a66117f98eb56fa9bc60 \ No newline at end of file diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/Controller.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/Controller.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/Controller.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/Controller.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/Menu.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/Menu.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/Menu.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/Menu.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/ViewGame.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/ViewGame.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/ViewGame.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/ViewGame.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/WaterCounter.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/WaterCounter.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/WaterCounter.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/WaterCounter.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/CisternDraw.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/CisternDraw.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/CisternDraw.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/CisternDraw.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/Drawable.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/Drawable.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/Drawable.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/Drawable.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/MechanicDraw.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/MechanicDraw.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/MechanicDraw.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/MechanicDraw.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/PipeDraw.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/PipeDraw.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/PipeDraw.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/PipeDraw.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/PumpDraw.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/PumpDraw.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/PumpDraw.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/PumpDraw.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/SaboteurDraw.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/SaboteurDraw.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/SaboteurDraw.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/SaboteurDraw.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/SpringDraw.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/SpringDraw.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/SpringDraw.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Drawing/SpringDraw.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Enums/Fluid.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Enums/Fluid.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Enums/Fluid.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Enums/Fluid.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/ActiveFields.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/ActiveFields/ActiveFields.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/ActiveFields.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/ActiveFields/ActiveFields.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Cistern.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/ActiveFields/Cistern.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Cistern.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/ActiveFields/Cistern.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Pump.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/ActiveFields/Pump.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Pump.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/ActiveFields/Pump.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Spring.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/ActiveFields/Spring.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Spring.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/ActiveFields/Spring.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/Field.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/Field.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/Field.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/Field.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/Pipe.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/Pipe.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/Pipe.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/Pipe.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Interfaces/Steppable.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Interfaces/Steppable.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Interfaces/Steppable.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Interfaces/Steppable.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Mechanic.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Players/Mechanic.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Mechanic.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Players/Mechanic.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Player.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Players/Player.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Player.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Players/Player.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Saboteur.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Players/Saboteur.java similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Saboteur.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Players/Saboteur.java diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/StringResource/StringResourceController.java b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/StringResource/StringResourceController.java similarity index 98% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/StringResource/StringResourceController.java rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/StringResource/StringResourceController.java index dd33146..b417d44 100644 --- a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/StringResource/StringResourceController.java +++ b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/StringResource/StringResourceController.java @@ -1,13 +1,13 @@ -package StringResource; - -public final class StringResourceController { - private StringResourceController(){} - public static final String FALSE = "false"; - public static final String FILE_NOT_FOUND = "File not found"; - public static final String WRONG_PLAYER = "Nem te vagy a soron következő játékos!"; - public static final String WRONG_ACTION = "Sikertelen művelet"; - public static final String GOOD_ACTION = "Sikeres művelet"; - public static final String WATER = "water"; - public static final String RANDOM_ON = "A véletlen események be lettek kapcsolva."; - +package StringResource; + +public final class StringResourceController { + private StringResourceController(){} + public static final String FALSE = "false"; + public static final String FILE_NOT_FOUND = "File not found"; + public static final String WRONG_PLAYER = "Nem te vagy a soron következő játékos!"; + public static final String WRONG_ACTION = "Sikertelen művelet"; + public static final String GOOD_ACTION = "Sikeres művelet"; + public static final String WATER = "water"; + public static final String RANDOM_ON = "A véletlen események be lettek kapcsolva."; + } \ No newline at end of file diff --git a/Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/palya.txt b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/palya.txt similarity index 100% rename from Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/palya.txt rename to Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/palya.txt diff --git a/src/main/java/Controll/Controller.java b/src/main/java/Controll/Controller.java index bf5c1d3..be7ecc5 100644 --- a/src/main/java/Controll/Controller.java +++ b/src/main/java/Controll/Controller.java @@ -12,20 +12,21 @@ import Players.Mechanic; import Players.Player; import Players.Saboteur; +import StringResource.StringResourceController; -import javax.swing.text.View; import java.io.*; -import java.lang.reflect.Array; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Scanner; +import java.util.*; +import java.util.logging.Level; +import java.util.logging.Logger; import java.util.regex.Pattern; + @SuppressWarnings("DuplicatedCode") public class Controller { + private Controller() {} + static Logger logger = Logger.getLogger(Controller.class.getName()); /** * If true the game is random * */ @@ -38,16 +39,16 @@ public class Controller { /** * Contains the names of the objects, the keys are the objects. */ - public static HashMap objectNames = new HashMap<>(); + public static final Map objectNames = new HashMap<>(); /** * Contains the objects, the keys are the names of the objects. */ - public static HashMap objectReverseNames = new HashMap<>(); + public static final Map objectReverseNames = new HashMap<>(); /** * WaterCounter of the game * */ - public static WaterCounter waterCounter = new WaterCounter(); + public static final WaterCounter waterCounter = new WaterCounter(); /** * True if the game is tested * */ @@ -78,12 +79,12 @@ public class Controller { /** * Current Player * */ - private static Player currentPlayer; + private static Player currentPlayer; /** * List of the commands * */ - public static ArrayList commandList = new ArrayList<>(); + public static final List commandList = new ArrayList<>(); /** * Number of new pumps with commands @@ -107,9 +108,9 @@ public static String getActivePlayerName(){ return objectReverseNames.get(currentPlayer); } - public static ArrayList getAllPlayers() { return activePlayers; } + public static List getAllPlayers() { return activePlayers; } - public static void SetActivePlayer(Player p) { currentPlayer = p; activePlayers.remove(0); activePlayers.add(currentPlayer); } + public static void setActivePlayer(Player p) { currentPlayer = p; activePlayers.remove(0); activePlayers.add(currentPlayer); } public static Player GetActivePlayer() { return currentPlayer; } @@ -129,8 +130,8 @@ public static boolean changeActivePlayer(){ *Function for controlling the game. *Reads a command than calls a function to execute it. * */ - public static void Run() throws FileNotFoundException { - while(commandList.size() != 0) { + public static void Run() { + while(!commandList.isEmpty()) { String command = commandList.get(0); commandList.remove(0); String[] cmd = command.split(" "); @@ -170,7 +171,7 @@ public static void Run() throws FileNotFoundException { case("setpump"): setpump(cmd); break; case("restart"): restart(cmd); break; case("exit"): return; - default: System.out.println("Hibás parancs."); + default: logger.log(Level.INFO, "Hibás parancs."); } } } @@ -185,7 +186,7 @@ public static void Game() throws FileNotFoundException { activePlayers.remove(0); activePlayers.add(currentPlayer); Scanner stdInScanner = new Scanner(System.in); - if (commandList.size() == 0){ + if (commandList.isEmpty()){ commandList.add(stdInScanner.nextLine()); } String command = commandList.get(0); @@ -194,17 +195,17 @@ public static void Game() throws FileNotFoundException { switch(cmd[0]) { case("show"): show(cmd); break; case("showobject"): showobject(cmd); break; - case("move"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) System.out.println("Nem te vagy a soron következő játékos!"); else move(cmd); break; - case("breakfield"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) System.out.println("Nem te vagy a soron következő játékos!"); else breakfield(cmd); break; - case("repair"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) System.out.println("Nem te vagy a soron következő játékos!"); else repair(cmd); break; - case("placepump"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) System.out.println("Nem te vagy a soron következő játékos!"); else placepump(cmd); break; - case("set"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) System.out.println("Nem te vagy a soron következő játékos!"); else set(cmd); break; - case("disconnect"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) System.out.println("Nem te vagy a soron következő játékos!"); else disconnect(cmd); break; - case("connect"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) System.out.println("Nem te vagy a soron következő játékos!"); else connect(cmd); break; - case("getpump"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) System.out.println("Nem te vagy a soron következő játékos!"); else getpump(cmd); break; - case("pickuppipe"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) System.out.println("Nem te vagy a soron következő játékos!");else pickuppipe(cmd); break; - case("makesticky"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) System.out.println("Nem te vagy a soron következő játékos!"); else makesticky(cmd); break; - case("makeslippery"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) System.out.println("Nem te vagy a soron következő játékos!"); else makeslippery(cmd); break; + case("move"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else move(cmd); break; + case("breakfield"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else breakfield(cmd); break; + case("repair"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else repair(cmd); break; + case("placepump"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else placepump(cmd); break; + case("set"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else set(cmd); break; + case("disconnect"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else disconnect(cmd); break; + case("connect"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else connect(cmd); break; + case("getpump"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else getpump(cmd); break; + case("pickuppipe"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER);else pickuppipe(cmd); break; + case("makesticky"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else makesticky(cmd); break; + case("makeslippery"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else makeslippery(cmd); break; case("save"): save(cmd); break; case("testall"): testAll(cmd); break; case("list"): list(); break; @@ -217,7 +218,7 @@ public static void Game() throws FileNotFoundException { case("setpump"): setpump(cmd); break; case("restart"): restart(cmd); break; case("exit"): return; - default: System.out.println("Hibás parancs."); + default: logger.log(Level.INFO, "Hibás parancs."); } if (moves == activePlayers.size()) { moves = 0; @@ -230,23 +231,23 @@ public static void Game() throws FileNotFoundException { * Function for loading a file. * */ public static void load(String cmd){ - try { + try(Scanner scanner = new Scanner(new File(cmd))) { outResults.clear(); - System.out.println(cmd); - Scanner scanner = new Scanner(new File(cmd)); + logger.log(Level.INFO, cmd); + filePath = cmd; String separator = "\\"; String[] tmp=cmd.replaceAll(Pattern.quote(separator), "\\\\").split("\\\\"); fileName = tmp[tmp.length-1]; while (scanner.hasNextLine()){ commandList.add(scanner.nextLine()); - System.out.println(commandList.get(commandList.size()-1)); + logger.log(Level.INFO, commandList.get(commandList.size()-1)); } if (test) { commandList.add("save " + filePath.replace(".in", ".out")); } } catch (FileNotFoundException e) { - System.out.println("Nem található a fájl!"); + logger.log(Level.INFO, "Nem található a fájl!"); } } @@ -254,20 +255,20 @@ public static void loadFileFromSrcToReader(String fileNameToOpen) { // a text file is located in src folder in the project Path rootDir = Paths.get(".").normalize().toAbsolutePath(); File file = new File(rootDir.toString() + "/" + fileNameToOpen); - try { - Reader input = new FileReader(file); + try( Reader input = new FileReader(file)) { + try (BufferedReader br = new BufferedReader(input)) { + // Checks if reader is ready - BufferedReader br = new BufferedReader(input); + String line = ""; while ((line = br.readLine()) != null) { - System.out.println(line); + logger.log(Level.INFO, line); } - // Closes the reader - input.close(); - } catch (IOException e) { - e.printStackTrace(); } + } catch (IOException e) { + e.printStackTrace(); + } } /** @@ -282,16 +283,17 @@ public static void pump(String[] cmd){ for(int i=0; i neighbors = p.getStandingField().getNeighborFields(); if(neighbors.contains(f)) { - if (p.move(f)) { - if (test) {outResults.add("Sikeres művelet");lastResult = true;} - else {System.out.println("Sikeres művelet");lastResult = true;} - } else { - if (test) {outResults.add("Sikertelen művelet");lastResult = false;} - else { - System.out.println("Sikertelen művelet"); - lastResult = false; - moves--; - } - } + neighborsContains(p,f); } else{ - if (test) {outResults.add("Sikertelen művelet");lastResult = false;} + if (test) {outResults.add(StringResourceController.WRONG_ACTION);lastResult = false;} + else { + logger.log(Level.INFO, StringResourceController.WRONG_ACTION); + lastResult = false; + moves--; + } + } + } + private static void neighborsContains(Player p, Field f){ + if (p.move(f)) { + if (test) {outResults.add(StringResourceController.GOOD_ACTION);lastResult = true;} + else {logger.log(Level.INFO, StringResourceController.GOOD_ACTION);lastResult = true;} + } else { + if (test) {outResults.add(StringResourceController.WRONG_ACTION);lastResult = false;} else { - System.out.println("Sikertelen művelet"); + logger.log(Level.INFO, StringResourceController.WRONG_ACTION); lastResult = false; moves--; } @@ -524,12 +540,12 @@ public static void move(String[] cmd){ public static void breakfield(String[] cmd){ Player p = (Player)objectNames.get(cmd[1]); if(p.breakField()){ - if (test) {outResults.add("Sikeres művelet"); lastResult = true;} - else {System.out.println("Sikeres művelet");lastResult = true;} + if (test) {outResults.add(StringResourceController.GOOD_ACTION); lastResult = true;} + else {logger.log(Level.INFO, StringResourceController.GOOD_ACTION);lastResult = true;} }else { - if (test) {outResults.add("Sikertelen művelet"); lastResult = false;} + if (test) {outResults.add(StringResourceController.WRONG_ACTION); lastResult = false;} else { - System.out.println("Sikertelen művelet"); + logger.log(Level.INFO, StringResourceController.WRONG_ACTION); lastResult = false; moves--; } @@ -542,13 +558,13 @@ public static void repair(String[] cmd){ Player p = (Player)objectNames.get(cmd[1]); if(p.repair()){ lastResult = true; - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); }else { lastResult = false; - if (test) outResults.add("Sikertelen művelet"); + if (test) outResults.add(StringResourceController.WRONG_ACTION); else { - System.out.println("Sikertelen művelet"); + logger.log(Level.INFO, StringResourceController.WRONG_ACTION); moves--; } } @@ -559,7 +575,8 @@ public static void repair(String[] cmd){ public static void placepump(String[] cmd){ // |Pump A|===new=Pipe===|new Pump|===old=Pipe===|Pump B| Player p = (Player)objectNames.get(cmd[1]); //player - ActiveFields pumpA, pumpB; + ActiveFields pumpA; + ActiveFields pumpB; pumpA = pumpB = null; try { pumpA = ((Pipe)p.getStandingField()).getFields().get(0); @@ -602,13 +619,13 @@ public static void placepump(String[] cmd){ //redrawing the old pipe oldPipeD.setCoords(newPumpD, pumpBD); - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); }else { lastResult = false; - if (test) outResults.add("Sikertelen művelet"); + if (test) outResults.add(StringResourceController.WRONG_ACTION); else { - System.out.println("Sikertelen művelet"); + logger.log(Level.INFO, StringResourceController.WRONG_ACTION); moves--; } } @@ -620,13 +637,13 @@ public static void set(String[] cmd){ Player player = (Player)objectNames.get(cmd[1]); if(player.getStandingField().set((Pipe)objectNames.get(cmd[2]), (Pipe)objectNames.get(cmd[3]))){ lastResult = true; - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); }else { lastResult = false; - if (test) outResults.add("Sikertelen művelet"); + if (test) outResults.add(StringResourceController.WRONG_ACTION); else { - System.out.println("Sikertelen művelet"); + logger.log(Level.INFO, StringResourceController.WRONG_ACTION); moves--; } } @@ -638,13 +655,13 @@ public static void disconnect(String[] cmd){ Player player = (Player)objectNames.get(cmd[1]); if(player.disconnect((Pipe)objectNames.get(cmd[2]))){ lastResult = true; - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); }else { lastResult = false; - if (test) outResults.add("Sikertelen művelet"); + if (test) outResults.add(StringResourceController.WRONG_ACTION); else { - System.out.println("Sikertelen művelet"); + logger.log(Level.INFO, StringResourceController.WRONG_ACTION); moves--; } } @@ -669,13 +686,13 @@ public static void connect(String[] cmd){ Drawable fromPumpD = ViewGame.objectDrawReverseNames.get(standing); pd.setCoords(fromPumpD, toPumpD); - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); }else { lastResult = false; - if (test) outResults.add("Sikertelen művelet"); + if (test) outResults.add(StringResourceController.WRONG_ACTION); else { - System.out.println("Sikertelen művelet"); + logger.log(Level.INFO, StringResourceController.WRONG_ACTION); moves--; } } @@ -694,13 +711,13 @@ public static void getpump(String[] cmd){ lastResult = true; - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); }else { lastResult = false; - if (test) outResults.add("Sikertelen művelet"); + if (test) outResults.add(StringResourceController.WRONG_ACTION); else { - System.out.println("Sikertelen művelet"); + logger.log(Level.INFO, StringResourceController.WRONG_ACTION); moves--; } } @@ -719,13 +736,13 @@ public static void pickuppipe(String[] cmd){ ViewGame.setDrawsNames(newPipeD, newPipe); ViewGame.setDrawsReverseNames(newPipe, newPipeD); - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); }else { lastResult = false; - if (test) outResults.add("Sikertelen művelet"); + if (test) outResults.add(StringResourceController.WRONG_ACTION); else { - System.out.println("Sikertelen művelet"); + logger.log(Level.INFO, StringResourceController.WRONG_ACTION); moves--; } } @@ -737,13 +754,13 @@ public static void makesticky(String[] cmd){ Player player = (Player)objectNames.get(cmd[1]); if(player.makeSticky()){ lastResult = true; - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); }else { lastResult = false; - if (test) outResults.add("Sikertelen művelet"); + if (test) outResults.add(StringResourceController.WRONG_ACTION); else { - System.out.println("Sikertelen művelet"); + logger.log(Level.INFO, StringResourceController.WRONG_ACTION); moves--; } } @@ -753,16 +770,16 @@ public static void makesticky(String[] cmd){ * */ public static void makeslippery(String[] cmd){ Player player = (Player)objectNames.get(cmd[1]); - System.out.println(cmd[1]); + logger.log(Level.INFO, cmd[1]); if(player.makeSlippery()){ lastResult = true; - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); }else { lastResult = false; - if (test) outResults.add("Sikertelen művelet"); + if (test) outResults.add(StringResourceController.WRONG_ACTION); else { - System.out.println("Sikertelen művelet"); + logger.log(Level.INFO, StringResourceController.WRONG_ACTION); moves--; } } @@ -779,7 +796,7 @@ public static void save(String[] cmd) { } } catch(FileNotFoundException e) { - + logger.log(Level.WARNING, StringResourceController.FILE_NOT_FOUND); } try { Scanner scannerResult = new Scanner(new File(cmd[1])); @@ -795,25 +812,17 @@ public static void save(String[] cmd) { String separator = "\\"; String[] tmp=cmd[1].replaceAll(Pattern.quote(separator), "\\\\").split("\\\\"); fileName = tmp[tmp.length-1]; - System.out.println("Test name: " + fileName.replace(".out", "")); + logger.log(Level.INFO, "Test name: " + fileName.replace(".out", "")); if (result.size() != expected.size()) { - System.out.println("Test failed. The 2 files do not have the same amount of lines."); + logger.log(Level.INFO, "Test failed. The 2 files do not have the same amount of lines."); return; } - int errors = 0; - if (result.size() > 0 && expected.size() > 0) { - for (int i = 0; i < expected.size(); i++) { - if (!result.get(i).equals(expected.get(i))) { - System.out.println("Error in line " + (i+1) + ".\nExpected: " + expected.get(i) + ", but got: " + result.get(i)); - errors++; - } - } - } - if (errors == 0 && result.size() > 0 && expected.size() > 0) { - System.out.println("Test succeeded.\n"); + int errors = getErros(result, expected); + if (errors == 0 && !result.isEmpty() && !expected.isEmpty()) { + logger.log(Level.INFO, "Test succeeded.\n"); } else { - System.out.println("Test failed.\n"); + logger.log(Level.INFO, "Test failed.\n"); } pipes=pumps=0; waterCounter.reset(); @@ -821,23 +830,35 @@ public static void save(String[] cmd) { objectReverseNames.clear(); } catch(FileNotFoundException e) { - + logger.log(Level.WARNING, StringResourceController.FILE_NOT_FOUND); } outResults.clear(); } + + private static int getErros(ArrayList result, ArrayList expected ){ + int errors = 0; + if (!result.isEmpty() && !expected.isEmpty()) { + for (int i = 0; i < expected.size(); i++) { + if (!result.get(i).equals(expected.get(i))) { + logger.log(Level.INFO, "Error in line " + (i+1) + ".\nExpected: " + expected.get(i) + ", but got: " + result.get(i)); + errors++; + } + } + } + return errors; + } /** * Function for doing all the tests. * */ public static void testAll(String[] cmd) { - try { - Scanner scanner = new Scanner(new File(cmd[1] + "\\Alltests.txt")); + try(Scanner scanner = new Scanner(new File(cmd[1] + "\\Alltests.txt"))) { + while(scanner.hasNextLine()) { String line = scanner.nextLine(); load(cmd[1] + "\\" + line); } } catch (FileNotFoundException e) { - - + logger.log(Level.WARNING, StringResourceController.FILE_NOT_FOUND); } } /** @@ -845,8 +866,8 @@ public static void testAll(String[] cmd) { * */ public static void list(){ for (Object obj : objectNames.values()) { - System.out.print(objectReverseNames.get(obj) + " "); - } System.out.println(); + logger.log(Level.INFO, objectReverseNames.get(obj) + " "); + } logger.log(Level.INFO, ""); } /** * Function for putting a player on a field. @@ -855,19 +876,19 @@ public static void addplayer(String[] cmd) { Field f = (Field) objectNames.get(cmd[1]); Player p = (Player) objectNames.get(cmd[2]); if(f.accept(p) != null) { - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); }else { - if (test) outResults.add("Sikertelen művelet"); - else System.out.println("Sikertelen művelet"); + if (test) outResults.add(StringResourceController.WRONG_ACTION); + else logger.log(Level.INFO, StringResourceController.WRONG_ACTION); } } public static void step(String[] cmd){ Steppable s = (Steppable)objectNames.get(cmd[1]); s.step(); - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); } /** * Function for ending a turn. @@ -885,15 +906,15 @@ public static void endturn(String[] cmd){ value.step(); } } - System.out.println("Sikeres művelet"); + logger.log(Level.INFO, StringResourceController.GOOD_ACTION); } /** * Function for countig the points for the two sides. * */ public static void count(String[] cmd){ waterCounter.count(); - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); } /** * Function for restaring the game. @@ -905,7 +926,7 @@ public static void restart(String[] cmd){ waterCounter.reset(); test = false; pumps=pipes=0; - System.out.println("Sikeres művelet"); + logger.log(Level.INFO, StringResourceController.GOOD_ACTION); if(!test) gameMode = false; } /** @@ -913,16 +934,16 @@ public static void restart(String[] cmd){ * */ public static void test(String[] cmd){ if(cmd[1].equals("true")) test=true; - else if(cmd[1].equals("false")) test=false; - System.out.println("Sikeres művelet"); + else if(cmd[1].equals(StringResourceController.FALSE)) test=false; + logger.log(Level.INFO, StringResourceController.GOOD_ACTION); } /** * Function for signaling to the watercounter that the game ended. * */ public static void setend(String[] cmd){ waterCounter.setEnd(); - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); } /** * Function for setting the in/out pipes of a pump. @@ -930,11 +951,11 @@ public static void setend(String[] cmd){ public static void setpump(String[] cmd){ Pump pump = (Pump)objectNames.get(cmd[1]); if(pump.set((Pipe)objectNames.get(cmd[2]), (Pipe)objectNames.get(cmd[3]))){ - if (test) outResults.add("Sikeres művelet"); - else System.out.println("Sikeres művelet"); + if (test) outResults.add(StringResourceController.GOOD_ACTION); + else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); }else { - if (test) outResults.add("Sikertelen művelet"); - else System.out.println("Sikertelen művelet"); + if (test) outResults.add(StringResourceController.WRONG_ACTION); + else logger.log(Level.INFO, StringResourceController.WRONG_ACTION); } } } diff --git a/src/main/java/Controll/Menu.java b/src/main/java/Controll/Menu.java index 4cfdf93..dae4f42 100644 --- a/src/main/java/Controll/Menu.java +++ b/src/main/java/Controll/Menu.java @@ -1,15 +1,9 @@ package Controll; +import javax.swing.*; +import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.Color; - -import java.io.FileNotFoundException; - -import javax.swing.JFrame; -import javax.swing.JTextField; -import javax.swing.JButton; -import javax.swing.JComboBox; public class Menu extends JFrame implements ActionListener { @@ -30,7 +24,7 @@ public class Menu extends JFrame implements ActionListener { public Menu(String name, String t) { currentTheme = t; setTitle(name); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setResizable(false); setLayout(null); setBounds(700, 250, 500, 500); @@ -52,11 +46,11 @@ public Menu(String name, String t) { add(theme); Integer[] numOfMechanics = {2, 3, 4, 5, 6, 7, 8, 9}; - mechanics = new JComboBox(numOfMechanics); + mechanics = new JComboBox<>(numOfMechanics); mechanics.setBounds(300, 165, 40, 20); Integer[] numOfSaboteurs = {2, 3, 4, 5, 6, 7, 8, 9}; - saboteurs = new JComboBox(numOfSaboteurs); + saboteurs = new JComboBox<>(numOfSaboteurs); saboteurs.setBounds(300, 195, 40, 20); add(mechanics); @@ -133,13 +127,10 @@ public void actionPerformed(ActionEvent e) { Controller.commandList.add("addplayer D Sab" + i); } } - try { - Controller.Run(); // egyszer fut le, felépíti a pályát, utána a függvényeit kell majd hívni - } catch (FileNotFoundException ex) { - throw new RuntimeException(ex); - } + Controller.Run(); // egyszer fut le, felépíti a pályát, utána a függvényeit kell majd hívni + Controller.create(); - Controller.SetActivePlayer(Controller.getAllPlayers().get(0)); + Controller.setActivePlayer(Controller.getAllPlayers().get(0)); this.dispose(); ViewGame vg = new ViewGame(); vg.setBackgroundColor(currentTheme); diff --git a/src/main/java/Controll/ViewGame.java b/src/main/java/Controll/ViewGame.java index e58f8cc..2f07afc 100644 --- a/src/main/java/Controll/ViewGame.java +++ b/src/main/java/Controll/ViewGame.java @@ -1,10 +1,9 @@ package Controll; -import Drawing.*; +import Drawing.Drawable; +import Drawing.PipeDraw; import Enums.Fluid; -import Fields.*; - -import Fields.ActiveFields.*; +import Fields.Pipe; import javax.swing.*; import java.awt.*; @@ -12,21 +11,22 @@ import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; public class ViewGame extends JFrame implements ActionListener { - private Controller controller; private static boolean isChosen = false; private JPanel gameBackground; /** * HashMap for the Drawables */ - public static HashMap objectDrawNames = new HashMap<>(); + public static final Map objectDrawNames = new HashMap<>(); /** * HashMap for the Drawables */ - public static HashMap objectDrawReverseNames = new HashMap<>(); + public static final Map objectDrawReverseNames = new HashMap<>(); public static ViewGame vg; @@ -58,11 +58,11 @@ public class ViewGame extends JFrame implements ActionListener { /** * ArrayList for the selected elements */ - static ArrayList selectSequence = new ArrayList(); //kiválasztott elemek, kiválasztásuk sorrendjében + static final List selectSequence = new ArrayList<>(); //kiválasztott elemek, kiválasztásuk sorrendjében /** * HashMap for the buttons */ - public static HashMap buttonToElement = new HashMap(); //kiválasztó gomb -> kiválasztott rajz + public static final Map buttonToElement = new HashMap<>(); //kiválasztó gomb -> kiválasztott rajz /** * Max number of rounds @@ -153,16 +153,16 @@ public static boolean getChosen(){ */ public ViewGame() { setTitle("Sivatagi vízhálózatok üzemeltetése a gyakorlatban 2"); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setResizable(true); setBounds(400, 150, 1000, 700); setLayout(new BorderLayout()); gameBackground = new JPanel() { + @Override protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D)g; g2d.setColor(Color.black); super.paintComponent(g2d); - int i = 0; for (Drawable draw : objectDrawReverseNames.values()){ if (draw instanceof PipeDraw) { Pipe p = (Pipe)ViewGame.objectDrawNames.get(draw); @@ -233,18 +233,11 @@ protected void paintComponent(Graphics g) { vg = this; } - /** - * Sets the controller - * @param c - */ - public void setController(Controller c){ - controller = c; - } - /** * Paints the objects * @param g */ + @Override public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D) g; diff --git a/src/main/java/Drawing/CisternDraw.java b/src/main/java/Drawing/CisternDraw.java index c0e5515..5dae99d 100644 --- a/src/main/java/Drawing/CisternDraw.java +++ b/src/main/java/Drawing/CisternDraw.java @@ -1,6 +1,7 @@ package Drawing; import Controll.ViewGame; + import javax.swing.*; import java.awt.*; diff --git a/src/main/java/Drawing/SaboteurDraw.java b/src/main/java/Drawing/SaboteurDraw.java index 9bcf1ad..40443b3 100644 --- a/src/main/java/Drawing/SaboteurDraw.java +++ b/src/main/java/Drawing/SaboteurDraw.java @@ -9,6 +9,7 @@ import Fields.Pipe; import Players.Player; import Players.Saboteur; + import javax.swing.*; import java.awt.*; import java.util.ArrayList; diff --git a/src/main/java/Drawing/SpringDraw.java b/src/main/java/Drawing/SpringDraw.java index c10b40d..5642954 100644 --- a/src/main/java/Drawing/SpringDraw.java +++ b/src/main/java/Drawing/SpringDraw.java @@ -1,6 +1,7 @@ package Drawing; import Controll.ViewGame; + import javax.swing.*; import java.awt.*; diff --git a/src/main/java/Fields/ActiveFields/ActiveFields.java b/src/main/java/Fields/ActiveFields/ActiveFields.java index a2a421f..507b7be 100644 --- a/src/main/java/Fields/ActiveFields/ActiveFields.java +++ b/src/main/java/Fields/ActiveFields/ActiveFields.java @@ -16,7 +16,7 @@ public abstract class ActiveFields extends Field { */ private ArrayList pipes = new ArrayList<>(); @Override - public ArrayList getNeighborFields(){ return new ArrayList(pipes);} + public ArrayList getNeighborFields(){ return new ArrayList<>(pipes);} /** * Getter for pipes. Only for child classes. * @return The pipes connected to the active field diff --git a/src/main/java/Fields/ActiveFields/Cistern.java b/src/main/java/Fields/ActiveFields/Cistern.java index b45c6b7..988edc9 100644 --- a/src/main/java/Fields/ActiveFields/Cistern.java +++ b/src/main/java/Fields/ActiveFields/Cistern.java @@ -3,6 +3,7 @@ import Controll.Controller; import Fields.Pipe; import Players.Player; + import java.util.ArrayList; import java.util.Random; @@ -10,7 +11,7 @@ * Class for Cistern * */ public class Cistern extends ActiveFields{ - + private Random random = new Random(); /** * Last created Pipe. Null if the last pump was just taken. */ @@ -36,11 +37,10 @@ public void step() { } } if(createdPipe == null){ - Random r = new Random(); if(Controller.isTest()){ createdPipe = new Pipe(65); } - else createdPipe = new Pipe(30+r.nextInt(41)); + else createdPipe = new Pipe(30+random.nextInt(41)); } } @@ -51,12 +51,11 @@ public void step() { * */ @Override public Pump createNewPump(boolean b) { - Random r = new Random(); if(b){ if(Controller.isTest()){ return new Pump(100); } - else return new Pump(80+r.nextInt(41)); + else return new Pump(80+random.nextInt(41)); } else return null; } diff --git a/src/main/java/Fields/ActiveFields/Pump.java b/src/main/java/Fields/ActiveFields/Pump.java index 86de528..f629375 100644 --- a/src/main/java/Fields/ActiveFields/Pump.java +++ b/src/main/java/Fields/ActiveFields/Pump.java @@ -12,7 +12,7 @@ * */ @SuppressWarnings("UnusedAssignment") public class Pump extends ActiveFields { - + private Random random = new Random(); /** * The amount of water in the tank. Default value is 0. */ @@ -73,23 +73,21 @@ public void setWaterTo(int waterTo) { @Override public void step() { super.step(); - if(!(super.isBroken())) { - if(waterTo != -1 && waterFrom != -1) { - super.setWater((this.getPipes().get(waterTo)).fillInWater(super.getWater())); - int newWater = (this.getPipes().get(waterFrom)).getWater(); - if(newWater < 0) this.getPipes().get(waterFrom).fillInWater(-newWater); - else{ - if(super.getWaterNoChange() + newWater > tank){ - super.setWater(tank); - this.getPipes().get(waterFrom).fillInWater(newWater-tank); - } - else super.setWater(super.getWaterNoChange() + newWater); - } - } + if(!(super.isBroken()) && waterTo != -1 && waterFrom != -1) { + super.setWater((this.getPipes().get(waterTo)).fillInWater(super.getWater())); + int newWater = (this.getPipes().get(waterFrom)).getWater(); + if(newWater < 0) this.getPipes().get(waterFrom).fillInWater(-newWater); + else{ + if(super.getWaterNoChange() + newWater > tank){ + super.setWater(tank); + this.getPipes().get(waterFrom).fillInWater(newWater-tank); + } + else super.setWater(super.getWaterNoChange() + newWater); + } } int r; if (!Controller.isTest()) { - r = new Random().nextInt(31); + r = random.nextInt(31); if(r < 3) { super.setBroken(true); @@ -126,29 +124,13 @@ public boolean repair() { */ @Override public String toString() { - ArrayList players = this.getPlayers(); - String playersNames = "null"; - for (int i = 0; i < players.size(); i++) { - if(i == 0) playersNames = ""; - playersNames += Controller.objectReverseNames.get(players.get(i)); - if (i != players.size() - 1) { - playersNames += ", "; - } - } + String playersNames = getPlayerNames(); - ArrayList pipes = this.getPipes(); - String pipesNames ="null"; - if(pipes != null) { - for (int i = 0; i < pipes.size(); i++) { - if (i == 0) pipesNames = ""; - pipesNames += Controller.objectReverseNames.get(pipes.get(i)); - if (i != pipes.size() - 1) { - pipesNames += ", "; - } - } - } + + + String pipesNames = getPipeNames(); String SWaterFrom=""; @@ -172,4 +154,33 @@ public String toString() { + "\nwaterFrom: " +SWaterFrom + "\nwaterTo: " +SWaterTo + "\n"; } + + private String getPlayerNames() { + ArrayList players = this.getPlayers(); + String playersNames = "null"; + for (int i = 0; i < players.size(); i++) { + if(i == 0) playersNames = ""; + playersNames += Controller.objectReverseNames.get(players.get(i)); + if (i != players.size() - 1) { + playersNames += ", "; + } + } + return playersNames; + } + + + private String getPipeNames(){ + ArrayList pipes = this.getPipes(); + String pipesNames ="null"; + if(pipes != null) { + for (int i = 0; i < pipes.size(); i++) { + if (i == 0) pipesNames = ""; + pipesNames += Controller.objectReverseNames.get(pipes.get(i)); + if (i != pipes.size() - 1) { + pipesNames += ", "; + } + } + } + return pipesNames; + } } diff --git a/src/main/java/Fields/Field.java b/src/main/java/Fields/Field.java index f1a4910..34921db 100644 --- a/src/main/java/Fields/Field.java +++ b/src/main/java/Fields/Field.java @@ -4,6 +4,7 @@ import Fields.ActiveFields.Pump; import Interfaces.Steppable; import Players.Player; + import java.util.ArrayList; /** @@ -52,9 +53,6 @@ public boolean isBroken() { * @return players. */ public ArrayList getPlayers() { //Basic getter if it is needed - /*if (players.size() == 0) { - return null; - }*/ return players; } @@ -177,6 +175,7 @@ public int getWater() { * @return water in field. */ public int getWaterNoChange(){ + //It has different implementaion later return water; } diff --git a/src/main/java/Fields/Pipe.java b/src/main/java/Fields/Pipe.java index 8fda815..9d8a851 100644 --- a/src/main/java/Fields/Pipe.java +++ b/src/main/java/Fields/Pipe.java @@ -5,6 +5,7 @@ import Fields.ActiveFields.ActiveFields; import Fields.ActiveFields.Pump; import Players.Player; + import java.util.ArrayList; import java.util.Random; @@ -12,7 +13,7 @@ * Class for Pipes * */ public class Pipe extends Field { - + private final Random random = new Random(); /** * Capacity of the pipe */ @@ -89,7 +90,7 @@ public void setFluid(Fluid fluid) { * Getter for fields as Field. */ @Override - public ArrayList getNeighborFields(){ return new ArrayList(fields);} + public ArrayList getNeighborFields(){ return new ArrayList<>(fields);} /** * Getter for capacity. */ @@ -133,7 +134,7 @@ public boolean repair() { breakable = 5; } else { - breakable = 3+ new Random().nextInt(8); + breakable = 3+ random.nextInt(8); } return true; } @@ -145,7 +146,7 @@ public boolean repair() { */ @Override public Pipe placePump(Pump newPump) { - if(newPump == null) return null; + if(newPump == null) { return null; } ActiveFields oldPump = (ActiveFields) fields.remove(0); disconnect(oldPump); @@ -154,11 +155,10 @@ public Pipe placePump(Pump newPump) { oldPump.removePipe(this); Pipe newPipe; - Random r = new Random(); if(Controller.isTest()) { newPipe = new Pipe(50); } - else newPipe = new Pipe(30+r.nextInt(41)); + else newPipe = new Pipe(30+random.nextInt(41)); newPipe.connect(newPump); newPipe.connect(oldPump); @@ -240,13 +240,12 @@ public Field accept(Player p) { if(this.isOccupied()) return null; if(fluid == Fluid.SLIPPERY){ - Random r = new Random(); int index; if (Controller.isTest()) { index = 1; } else { - index = new Random().nextInt(2); + index = random.nextInt(2); } fields.get(index).accept(p); return fields.get(index); @@ -265,7 +264,7 @@ public Field accept(Player p) { */ public boolean removePlayer(Player p){ if(fluid == Fluid.STICKY){ - if(leave == true){ + if(leave){ leave = false; setOccupied(false); getPlayers().remove(p); @@ -288,7 +287,7 @@ public boolean makeSlippery(){ remainingFluidTime = 5; } else { - remainingFluidTime = 3+new Random().nextInt(3); + remainingFluidTime = 3+random.nextInt(3); } fluid = Fluid.SLIPPERY; return true; @@ -306,7 +305,7 @@ public boolean makeSticky(){ remainingFluidTime = 5; } else { - remainingFluidTime = 3+new Random().nextInt(3); + remainingFluidTime = 3+random.nextInt(3); } fluid = Fluid.STICKY; return true; @@ -348,12 +347,12 @@ public String toString() { } } - ArrayList fields = this.getFields(); + ArrayList loaclFields = this.getFields(); String fieldsNames ="null"; - for (int i = 0; i < fields.size(); i++) { + for (int i = 0; i < loaclFields.size(); i++) { if(i == 0) fieldsNames = ""; - fieldsNames += Controller.objectReverseNames.get(fields.get(i)); - if (i != fields.size() - 1) { + fieldsNames += Controller.objectReverseNames.get(loaclFields.get(i)); + if (i != loaclFields.size() - 1) { fieldsNames += ", "; } } diff --git a/src/main/java/Players/Mechanic.java b/src/main/java/Players/Mechanic.java index 4c89b8d..02e3881 100644 --- a/src/main/java/Players/Mechanic.java +++ b/src/main/java/Players/Mechanic.java @@ -100,7 +100,7 @@ public boolean disconnect(Pipe p) { public boolean connect() { if(holdingPipe == null) return false; boolean result = super.getStandingField().addPipe(holdingPipe); - if(!result) return false; + if(!result){ return false; } boolean b = holdingPipe.connect((ActiveFields)super.getStandingField()); if(b) holdingPipe = null; return b; diff --git a/src/main/java/Players/Player.java b/src/main/java/Players/Player.java index 798d4e4..526b138 100644 --- a/src/main/java/Players/Player.java +++ b/src/main/java/Players/Player.java @@ -25,7 +25,7 @@ public Field getStandingField() { /** * Constructor for the player. */ - public Player() { + protected Player() { } /** @@ -136,8 +136,7 @@ public boolean pickUpPipe() { * @return boolean - result of making the field sticky. True if successful. * */ public boolean makeSticky(){ - boolean result = standingField.makeSticky(); - return result; + return standingField.makeSticky(); } /** * Method for making the field where the player is standing slippery. diff --git a/src/main/java/Players/Saboteur.java b/src/main/java/Players/Saboteur.java index d7fc764..3458f84 100644 --- a/src/main/java/Players/Saboteur.java +++ b/src/main/java/Players/Saboteur.java @@ -12,6 +12,7 @@ public class Saboteur extends Player { * Constructor for the saboteur. */ public Saboteur() { + //Nothing can be inicialized here } /** @@ -19,8 +20,8 @@ public Saboteur() { * @return boolean - returns true if action was successful. */ public boolean makeSlippery(){ - boolean result = this.getStandingField().makeSlippery(); - return result; + return this.getStandingField().makeSlippery(); + } /** * Method for getting a string containing all the important information about the saboteur. diff --git a/src/main/java/StringResource/StringResourceController.java b/src/main/java/StringResource/StringResourceController.java new file mode 100644 index 0000000..b417d44 --- /dev/null +++ b/src/main/java/StringResource/StringResourceController.java @@ -0,0 +1,13 @@ +package StringResource; + +public final class StringResourceController { + private StringResourceController(){} + public static final String FALSE = "false"; + public static final String FILE_NOT_FOUND = "File not found"; + public static final String WRONG_PLAYER = "Nem te vagy a soron következő játékos!"; + public static final String WRONG_ACTION = "Sikertelen művelet"; + public static final String GOOD_ACTION = "Sikeres művelet"; + public static final String WATER = "water"; + public static final String RANDOM_ON = "A véletlen események be lettek kapcsolva."; + +} \ No newline at end of file diff --git a/src/main/java/srcTMP/palya.txt b/src/main/java/srcTMP/palya.txt new file mode 100644 index 0000000..58fb1c6 --- /dev/null +++ b/src/main/java/srcTMP/palya.txt @@ -0,0 +1,57 @@ +cistern cistern1 water:0 draw:100:350 +cistern cistern2 water:0 draw:100:100 +spring spring1 2500 draw:650:350 +spring spring2 2000 draw:650:100 +pump A 200 water:20 broken:true draw:200:100 +pump B 200 water:10 draw:500:100 +pump C 200 water:50 draw:575:200 +pump D 200 water:10 broken:true draw:500:350 +pump E 200 water:10 draw:350:350 +pump F 200 water:20 draw:200:350 +pipe AC2 100 draw:225:125:125:125 +pipe AB 100 draw:225:125:525:125 +pipe BS2 100 draw:525:125:675:125 +pipe CS2 100 draw:600:225:675:125 +pipe CB 100 draw:600:225:525:125 +pipe CD 100 draw:600:225:525:375 +pipe DS1 100 draw:525:375:675:375 +pipe DE 100 draw:525:375:375:375 +pipe EF 100 draw:375:375:225:375 +pipe FC1 100 draw:225:375:125:375 +pipe AF 100 draw:225:125:225:375 +connectpipe AC2 A +connectpipe AC2 cistern2 +connectpipe AB A +connectpipe AB B +connectpipe BS2 B +connectpipe BS2 spring2 +connectpipe CS2 spring2 +connectpipe CS2 C +connectpipe DS1 spring1 +connectpipe DS1 D +connectpipe CB B +connectpipe CB C +connectpipe CD C +connectpipe CD D +connectpipe DE D +connectpipe DE E +connectpipe EF E +connectpipe EF F +connectpipe FC1 F +connectpipe FC1 cistern1 +connectpipe AF A +connectpipe AF F +setpump A AB AC2 +setpump B BS2 AB +setpump C CS2 CD +setpump D DS1 DE +setpump E DE EF +setpump F EF FC1 +mechanic Mec1 F +addplayer F Mec1 +mechanic Mec2 A +addplayer A Mec2 +saboteur Sab1 C +addplayer C Sab1 +saboteur Sab2 AB +addplayer AB Sab2 From e69ddf031b04be0263fff987da209bfa31ab737f Mon Sep 17 00:00:00 2001 From: Laci Date: Sun, 19 May 2024 22:51:26 +0200 Subject: [PATCH 02/12] initial state --- .../06786101c6e81d4e175b6d1f0cbf6b55bbe068fc | 2 - .../0fc36c235a22100e0b58abe3d2ecf46b09039f3b | 2 - .../337921b067143f69e89694a9335e877941f50e7c | 2 - .../3b75dd6f2347637f58fb22d37520bdaf8666060f | 4 -- .../5251f38072712b04b1168fe13a8b392d6ad27520 | 2 - .../6af08458783265d4d7382281c99354611c009257 | 48 ------------- .../769d6629fff0fdb94f1e78aa6735a4b490f81699 | 2 - .../7d40ace53aaeed942375f629948f87787c0198ff | 67 ------------------- .../8f13733f346721c3d39f03c75afe8fae5d6fe89f | 8 --- .../a1b4f37ef3339681be2392cb551649f7032e1c0a | 2 - .../ae375a6ce4402ef772f382ecf7271f9224176e9b | 2 - .../b0a35953170be4147a2214de1ca272141d33fdfc | 2 - .../b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c | 2 - .../b76bd53b8e23eaba45b5b65d2234253e5bb00c43 | 2 - .../c102106332e2fd2e145a693c49961375b2149e8b | 6 -- .../c34016a91f6adc856460a66117f98eb56fa9bc60 | 6 -- .../c54a65a8aa872521a49fb1b930e279e872406c5f | 2 - .../cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 | 2 - .../cf351f97bf963cdb89cd3530846681f1431f344f | 3 - .../d0e7750a25948def48006badab655f90e5fe3c1b | 2 - .../dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab | 2 - .../e8ecca94b526deed330be938464b4a8ba804cd8c | 6 -- .../eadc31d2a7231b561802e3f88cf817c28dc1f8f7 | 4 -- .../.idea/sonarlint/issuestore/index.pb | 47 ------------- .../06786101c6e81d4e175b6d1f0cbf6b55bbe068fc | 0 .../0fc36c235a22100e0b58abe3d2ecf46b09039f3b | 0 .../337921b067143f69e89694a9335e877941f50e7c | 0 .../3b75dd6f2347637f58fb22d37520bdaf8666060f | 0 .../5251f38072712b04b1168fe13a8b392d6ad27520 | 0 .../6af08458783265d4d7382281c99354611c009257 | 0 .../769d6629fff0fdb94f1e78aa6735a4b490f81699 | 0 .../7d40ace53aaeed942375f629948f87787c0198ff | 0 .../8f13733f346721c3d39f03c75afe8fae5d6fe89f | 0 .../a1b4f37ef3339681be2392cb551649f7032e1c0a | 0 .../ae375a6ce4402ef772f382ecf7271f9224176e9b | 0 .../b0a35953170be4147a2214de1ca272141d33fdfc | 0 .../b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c | 0 .../b76bd53b8e23eaba45b5b65d2234253e5bb00c43 | 0 .../c102106332e2fd2e145a693c49961375b2149e8b | 0 .../c34016a91f6adc856460a66117f98eb56fa9bc60 | 0 .../c54a65a8aa872521a49fb1b930e279e872406c5f | 0 .../cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 | 0 .../cf351f97bf963cdb89cd3530846681f1431f344f | 0 .../d0e7750a25948def48006badab655f90e5fe3c1b | 0 .../dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab | 0 .../e8ecca94b526deed330be938464b4a8ba804cd8c | 0 .../eadc31d2a7231b561802e3f88cf817c28dc1f8f7 | 0 .../sonarlint/securityhotspotstore/index.pb | 47 ------------- 48 files changed, 274 deletions(-) delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/3/337921b067143f69e89694a9335e877941f50e7c delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/6/a/6af08458783265d4d7382281c99354611c009257 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/d/7d40ace53aaeed942375f629948f87787c0198ff delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/1/c102106332e2fd2e145a693c49961375b2149e8b delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/index.pb delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/3/3/337921b067143f69e89694a9335e877941f50e7c delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/6/a/6af08458783265d4d7382281c99354611c009257 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/7/d/7d40ace53aaeed942375f629948f87787c0198ff delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/1/c102106332e2fd2e145a693c49961375b2149e8b delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 delete mode 100644 Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/index.pb diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc deleted file mode 100644 index 295c472..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟J$0034060e-43e6-4c75-bad2-8fc6e90d3632 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b deleted file mode 100644 index 824d6f4..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$1b918732-eea1-4375-8e10-bf0416829977 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/3/337921b067143f69e89694a9335e877941f50e7c b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/3/337921b067143f69e89694a9335e877941f50e7c deleted file mode 100644 index db203ad..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/3/337921b067143f69e89694a9335e877941f50e7c +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$619f7f58-d230-4390-a3a2-973ce61c9c90 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f deleted file mode 100644 index cb52d83..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f +++ /dev/null @@ -1,4 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$0064c453-a75e-477c-ab7f-fcbb58ec7b06 - -java:S4144"YUpdate this method so that its implementation is not identical to "getWater" on line 168.(J$e9711a07-4756-4f8e-9880-7aedc7e5893d \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 deleted file mode 100644 index 0c8a803..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$13121709-908f-4639-82c8-690110412ea5 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/6/a/6af08458783265d4d7382281c99354611c009257 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/6/a/6af08458783265d4d7382281c99354611c009257 deleted file mode 100644 index 8ac8ea1..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/6/a/6af08458783265d4d7382281c99354611c009257 +++ /dev/null @@ -1,48 +0,0 @@ - -p -java:S1604S"(Make this anonymous inner class a lambda(ڬ81J$d32ae723-3128-46bf-8b30-c200bb33ac9d - -java:S1104""NMake vg a static final constant or non-public and provide accessors if needed.(81J$e77a876c-f7ed-4c9c-8fe9-e674478b2978 - -java:S1104S"ZMake selectListener a static final constant or non-public and provide accessors if needed.(ڬ81J$21ae80f9-73bb-4fb7-a0b7-f23c313df156 -k -java:S1444""(Make this "public static vg" field final(81J$931fa7f9-6c48-42dc-a3e2-109bbc2bcefd -| -java:S1444S"4Make this "public static selectListener" field final(ڬ81J$9ae8ac9f-5fae-432f-bda3-116ba8b78058 - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟81J$366501d7-44cb-4251-b780-e5fac5d70ade -~ -java:S2696b"6Make the enclosing method "static" or remove this set.(í81J$6ed924a3-7b69-4e2b-86a1-e135a04dfc11 -~ -java:S2696k"6Make the enclosing method "static" or remove this set.(í81J$44779747-4400-4290-a87b-66d8f5757af7 -~ -java:S2696s"6Make the enclosing method "static" or remove this set.(í81J$df334617-3b47-42c8-b2a7-95eac1faeb1c - -java:S3776"RRefactor this method to reduce its Cognitive Complexity from 16 to the 15 allowed.(81J$1cb6ee4a-0ca7-4392-b46b-86b09973e82f -r -java:S3010")Remove this assignment of "activePlayer".(81J$d291e22d-b606-419b-b785-a3e80f76bb79 -j -java:S3010"&Remove this assignment of "mecPoints".(81J$e628da6a-be46-4ce7-aaff-fbe51ed46f28 -j -java:S3010"&Remove this assignment of "sabPoints".(81J$cc6ccb71-cf65-4dbe-ae5b-72474c419084 -m -java:S3010")Remove this assignment of "successLabel".(81J$fc9ea60d-c881-475d-ac1a-67d7f3f4dbd4 -c -java:S3010"Remove this assignment of "vg".(81J$2e58df03-cabc-4fa6-8fa3-69f02435b712 - java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ƞ81J$c68f3f4f-652a-479d-9e82-adaee45ba2f4 - -java:S2696"6Make the enclosing method "static" or remove this set.(£81J$6ffeddf3-8d7c-4ed6-a0d0-ebeae0e96d6d -y -java:S2696"6Make the enclosing method "static" or remove this set.( 81J$298bcf03-e40b-49ce-8843-bca4fe47180c - -java:S2696"6Make the enclosing method "static" or remove this set.(í81J$5deda3ea-c800-4a1b-b1b4-e112305b9ce4 -y -java:S2696"6Make the enclosing method "static" or remove this set.( 81J$175ac3bc-1e97-43c4-b23e-7bcd286fea94 - -java:S2696"6Make the enclosing method "static" or remove this set.(í81J$f19db91e-5242-4806-ae6b-026845b5031d - -java:S2696"6Make the enclosing method "static" or remove this set.(í81J$41e4b840-ec4d-442d-ac16-d98b47ead4eb - -java:S2696"6Make the enclosing method "static" or remove this set.(í81J$d33e0b7f-7a67-4099-a59e-2e0238dc88b7 -y -java:S2696"6Make the enclosing method "static" or remove this set.( 81J$90782ea4-0746-4fff-a899-e687dc9b38f3 - java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(81J$e0d1c9e8-6a13-407e-bb0f-5dbaab1846a5 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 deleted file mode 100644 index f01c4b4..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$72b8c3f5-c7c5-4a5f-890c-cfdd38f36a85 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/d/7d40ace53aaeed942375f629948f87787c0198ff b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/d/7d40ace53aaeed942375f629948f87787c0198ff deleted file mode 100644 index 13e5dcd..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/7/d/7d40ace53aaeed942375f629948f87787c0198ff +++ /dev/null @@ -1,67 +0,0 @@ - - -java:S1104c"QMake pipes a static final constant or non-public and provide accessors if needed.(ݰ8֔1J$edecc7b9-7d04-403a-82e7-040a5ceabdf1 - -java:S1104g"QMake pumps a static final constant or non-public and provide accessors if needed.(橵8֔1J$75e63dc7-d549-46a3-bc94-3e3a4fea445b - -java:S1104m"TMake gameMode a static final constant or non-public and provide accessors if needed.(88֔1J$e51f934c-b82a-4524-beb0-e149f4faaa94 - -java:S1104o"QMake moves a static final constant or non-public and provide accessors if needed.(¡8֔1J$72303250-19b6-4288-80c5-753c8623a382 - -java:S1104p"VMake lastResult a static final constant or non-public and provide accessors if needed.(8֔1J$a3ca2e35-6dbe-4077-8cc4-cfb02196e8dc -n -java:S1444c"+Make this "public static pipes" field final(ݰ8ה1J$3063f2fb-4884-4356-abf8-df81c9402079 -s -java:S1444g"+Make this "public static pumps" field final(橵8ה1J$ef8d91dd-1f30-4662-8ce9-500e6217cab1 -p -java:S1444m".Make this "public static gameMode" field final(88ה1J$43ec576d-0e48-4c7c-b2e3-c3e4cf4252bf -n -java:S1444o"+Make this "public static moves" field final(¡8ה1J$0439958c-8cb3-4210-9dfb-6ff9d8c4d00b -x -java:S1444p"0Make this "public static lastResult" field final(8ה1J$1d847471-8c15-4eed-acf5-58994d8d0f69 -m -java:S2629"$Invoke method(s) only conditionally.(ԡΗ8ٔ1J$9f01ff50-c542-475b-a938-3da848995cc8 -m -java:S2629"$Invoke method(s) only conditionally.(8ٔ1J$d63df651-f13e-4cdc-8bca-a04fb221ea17 - -java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(ѐ8ڔ1J$9fe91241-d784-4c14-af8f-2d35aee689fe - -java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(̋8ڔ1J$58435910-060a-473f-9dc6-d61fe9d74226 - -java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(Ȩ8ڔ1J$5b5a8716-6562-4305-bf1c-78ff13debd5e - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟8ޔ1J$500eb972-cdf7-4fd0-b5e8-4896758b1f22 - -java:S1450J"WRemove the "filePath" field and declare it as a local variable in the relevant methods.(81J$7e1252bd-e84a-43ad-b0be-9b5d736f4c78 -e -java:S23861"Make this member "protected".(81J$721dddbf-9d31-408d-a1e7-d203a8e7de3e -` -java:S23866"Make this member "protected".(81J$5aeb0c91-5bf1-4818-b2a8-10923d10d9a4 -` -java:S2386^"Make this member "protected".(81J$15db5611-51da-4a48-9669-b4b53ee2a712 - java:S100z"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ׇ8Ǖ1J$5ffce165-2044-4fd4-ad86-3118608c3dbe - java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(8ȕ1J$f1ccdc54-cddc-48ea-a245-c58336d8add9 - java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(8͕1J$30f16e1c-8294-4906-aa1f-cdd7c37e298b - -java:S3776"RRefactor this method to reduce its Cognitive Complexity from 51 to the 15 allowed.(81J$9ee8e411-7da8-47fd-a3bb-b359fa5582fa -o -java:S1075"&Remove this hard-coded path-delimiter.(濆81J$0a4bb993-8ebc-4c65-bd2d-377e2a637438 - -java:S1301"KReplace this "switch" statement by "if" statements to increase readability.(81J$0fd3b4a5-a094-4c95-8bdf-1d500e83b0e8 -l java:S108")Either remove or fill this block of code.(81J$c2878e62-aa42-4bef-9c51-539315339c61 -q java:S108")Either remove or fill this block of code.(81J$e04c1d97-f040-424f-9b8c-88868265485a -p -java:S1125"'Remove the unnecessary boolean literal.(β81J$e045e5e0-3762-4368-864f-9d3a30717f3c - -java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(ѐ81J$70904984-a752-44bb-b8c1-368a55743549 - -java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(̋81J$8028503d-ab28-4e19-a233-9c563e01275f - -java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(Ȩ81J$edaf53d4-8380-430f-bc44-cc6767f85c18 -s -java:S1172"*Remove this unused method parameter "cmd".(ȼ81J$a6050208-15b3-46c0-80fd-dc054067e2e4 -s -java:S1172"*Remove this unused method parameter "cmd".(81J$51329dab-e588-41e6-84bd-5c407537ac01 -s -java:S1172"*Remove this unused method parameter "cmd".(81J$020cdaa8-f374-40bd-a950-7680938b51ac -n -java:S1172"*Remove this unused method parameter "cmd".(ű81J$42804a8c-ddce-4717-b691-dae747c81a6e \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f deleted file mode 100644 index b4aa378..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f +++ /dev/null @@ -1,8 +0,0 @@ - - java:S117"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ě8ܶ1J$865fce0f-3173-4b17-93c3-19664842ddaf - java:S117"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ű8ܶ1J$0e88e062-bd02-42e0-ba74-25109d1c26f2 -` -java:S1643"Use a StringBuilder instead.(熒81J$d44f71dd-928e-46a3-8f19-f07f0223318b -e -java:S1643"Use a StringBuilder instead.(8ܶ1J$aeacf133-bb47-4a87-9a83-74aeb5889b4b - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(8ݶ1J$ca431e5f-ab03-4d67-888b-8a244df82909 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a deleted file mode 100644 index 316b540..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$426fce2f-6363-4e16-b327-53102942a12f \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b deleted file mode 100644 index 9cc6444..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$3d97ce6e-8771-4101-8a99-4fa5d54cd624 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc deleted file mode 100644 index 57bca1d..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$2e443e5c-cfd9-41c3-96fa-9a5b318512ce \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c deleted file mode 100644 index dc2ea4b..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(Ϫ81J$39601be4-c873-46be-a7ec-9de29540d6a2 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 deleted file mode 100644 index a3a325f..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟81J$99f09552-3cd4-43ca-bcb3-51ed04387e10 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/1/c102106332e2fd2e145a693c49961375b2149e8b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/1/c102106332e2fd2e145a693c49961375b2149e8b deleted file mode 100644 index 2492b7f..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/1/c102106332e2fd2e145a693c49961375b2149e8b +++ /dev/null @@ -1,6 +0,0 @@ - -` -java:S1643"Use a StringBuilder instead.(熒81J$8ab095dd-44b8-42af-8892-0184e71ef12c -_ -java:S1643"Use a StringBuilder instead.(l81J$5f930e76-db9d-494f-9888-a0b2fb100108 - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(81J$e8786376-b837-4294-a63f-45d985084621 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 deleted file mode 100644 index 697805a..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 +++ /dev/null @@ -1,6 +0,0 @@ - -X -java:S1643F"Use a StringBuilder instead.(熒J$cada7e70-e9c0-43b3-b625-bcb2fd3cc948 -] -java:S1643P"Use a StringBuilder instead.(J$e16a65b7-7286-4c64-8d5c-285b4aaf14d4 - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$8ca86943-63a6-4a62-891e-1807a4ad3757 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f deleted file mode 100644 index b9ba2b6..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$d3675cda-a534-4026-8b3e-66e8a312f5dc \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 deleted file mode 100644 index cd15237..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(ȕǦJ$7bca2187-fff9-4798-a37c-79360b6226c2 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f deleted file mode 100644 index 1ea019c..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f +++ /dev/null @@ -1,3 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$8d9761fb-01bc-4b72-958c-f898040759f3 - java:S100""NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(磛J$ce7d9784-4ef5-4d91-8db2-11738b6b8762 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b deleted file mode 100644 index 268fbad..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$582d9493-4fb9-4385-b619-5e1133bafb24 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab deleted file mode 100644 index 37b3022..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$6e62672c-1fab-4cdb-8a64-c3b391ce6ba1 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c deleted file mode 100644 index bca93f7..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c +++ /dev/null @@ -1,6 +0,0 @@ - -X -java:S1643e"Use a StringBuilder instead.(熒J$af867973-615b-44b7-978e-1b355b953b81 -] -java:S1643r"Use a StringBuilder instead.(J$3ec370de-8d3e-43cc-8af1-70c01d045d84 - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$4dd31569-e60c-4f41-b682-549f877ed5ad \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 deleted file mode 100644 index 240dbd0..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 +++ /dev/null @@ -1,4 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$9816f27d-b064-4920-b028-8c788224d51a - -java:S1659,"@Declare "toX" and all following declarations on a separate line.(дJ$08103320-3eed-4490-b6f8-078243417f18 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/index.pb b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/index.pb deleted file mode 100644 index 1cc222c..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/issuestore/index.pb +++ /dev/null @@ -1,47 +0,0 @@ - -L -src/Controll/Controller.java,7\d\7d40ace53aaeed942375f629948f87787c0198ff -F -src/Controll/Menu.java,b\7\b76bd53b8e23eaba45b5b65d2234253e5bb00c43 -J -src/Controll/ViewGame.java,6\a\6af08458783265d4d7382281c99354611c009257 -N -src/Controll/WaterCounter.java,0\6\06786101c6e81d4e175b6d1f0cbf6b55bbe068fc -L -src/Drawing/CisternDraw.java,d\c\dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab -I -src/Drawing/Drawable.java,c\f\cf351f97bf963cdb89cd3530846681f1431f344f -M -src/Drawing/MechanicDraw.java,0\f\0fc36c235a22100e0b58abe3d2ecf46b09039f3b -I -src/Drawing/PipeDraw.java,e\a\eadc31d2a7231b561802e3f88cf817c28dc1f8f7 -I -src/Drawing/PumpDraw.java,3\3\337921b067143f69e89694a9335e877941f50e7c -M -src/Drawing/SaboteurDraw.java,b\0\b0a35953170be4147a2214de1ca272141d33fdfc -K -src/Drawing/SpringDraw.java,a\1\a1b4f37ef3339681be2392cb551649f7032e1c0a -D -src/Enums/Fluid.java,c\d\cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 -E -src/Fields/Field.java,3\b\3b75dd6f2347637f58fb22d37520bdaf8666060f -D -src/Fields/Pipe.java,c\1\c102106332e2fd2e145a693c49961375b2149e8b -M -src/Interfaces/Steppable.java,d\0\d0e7750a25948def48006badab655f90e5fe3c1b -I -src/Players/Mechanic.java,5\2\5251f38072712b04b1168fe13a8b392d6ad27520 -G -src/Players/Player.java,7\6\769d6629fff0fdb94f1e78aa6735a4b490f81699 -I -src/Players/Saboteur.java,a\e\ae375a6ce4402ef772f382ecf7271f9224176e9b -` -0src/StringResource/StringResourceController.java,b\3\b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c -Y -)src/Fields/ActiveFields/ActiveFields.java,c\5\c54a65a8aa872521a49fb1b930e279e872406c5f -T -$src/Fields/ActiveFields/Cistern.java,e\8\e8ecca94b526deed330be938464b4a8ba804cd8c -Q -!src/Fields/ActiveFields/Pump.java,8\f\8f13733f346721c3d39f03c75afe8fae5d6fe89f -S -#src/Fields/ActiveFields/Spring.java,c\3\c34016a91f6adc856460a66117f98eb56fa9bc60 \ No newline at end of file diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/0/6/06786101c6e81d4e175b6d1f0cbf6b55bbe068fc deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/0/f/0fc36c235a22100e0b58abe3d2ecf46b09039f3b deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/3/3/337921b067143f69e89694a9335e877941f50e7c b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/3/3/337921b067143f69e89694a9335e877941f50e7c deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/3/b/3b75dd6f2347637f58fb22d37520bdaf8666060f deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/5/2/5251f38072712b04b1168fe13a8b392d6ad27520 deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/6/a/6af08458783265d4d7382281c99354611c009257 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/6/a/6af08458783265d4d7382281c99354611c009257 deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/7/6/769d6629fff0fdb94f1e78aa6735a4b490f81699 deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/7/d/7d40ace53aaeed942375f629948f87787c0198ff b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/7/d/7d40ace53aaeed942375f629948f87787c0198ff deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/8/f/8f13733f346721c3d39f03c75afe8fae5d6fe89f deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/a/1/a1b4f37ef3339681be2392cb551649f7032e1c0a deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/a/e/ae375a6ce4402ef772f382ecf7271f9224176e9b deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/0/b0a35953170be4147a2214de1ca272141d33fdfc deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/3/b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/b/7/b76bd53b8e23eaba45b5b65d2234253e5bb00c43 deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/1/c102106332e2fd2e145a693c49961375b2149e8b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/1/c102106332e2fd2e145a693c49961375b2149e8b deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/3/c34016a91f6adc856460a66117f98eb56fa9bc60 deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/5/c54a65a8aa872521a49fb1b930e279e872406c5f deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/d/cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/c/f/cf351f97bf963cdb89cd3530846681f1431f344f deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/d/0/d0e7750a25948def48006badab655f90e5fe3c1b deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/d/c/dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/e/8/e8ecca94b526deed330be938464b4a8ba804cd8c deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/e/a/eadc31d2a7231b561802e3f88cf817c28dc1f8f7 deleted file mode 100644 index e69de29..0000000 diff --git a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/index.pb b/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/index.pb deleted file mode 100644 index 1cc222c..0000000 --- a/Sivatagi vizhalozatok uzemeltetese a gyakorlatban 2/.idea/sonarlint/securityhotspotstore/index.pb +++ /dev/null @@ -1,47 +0,0 @@ - -L -src/Controll/Controller.java,7\d\7d40ace53aaeed942375f629948f87787c0198ff -F -src/Controll/Menu.java,b\7\b76bd53b8e23eaba45b5b65d2234253e5bb00c43 -J -src/Controll/ViewGame.java,6\a\6af08458783265d4d7382281c99354611c009257 -N -src/Controll/WaterCounter.java,0\6\06786101c6e81d4e175b6d1f0cbf6b55bbe068fc -L -src/Drawing/CisternDraw.java,d\c\dc7d8911a5aacf8bdcdadf03c064b0e20ed754ab -I -src/Drawing/Drawable.java,c\f\cf351f97bf963cdb89cd3530846681f1431f344f -M -src/Drawing/MechanicDraw.java,0\f\0fc36c235a22100e0b58abe3d2ecf46b09039f3b -I -src/Drawing/PipeDraw.java,e\a\eadc31d2a7231b561802e3f88cf817c28dc1f8f7 -I -src/Drawing/PumpDraw.java,3\3\337921b067143f69e89694a9335e877941f50e7c -M -src/Drawing/SaboteurDraw.java,b\0\b0a35953170be4147a2214de1ca272141d33fdfc -K -src/Drawing/SpringDraw.java,a\1\a1b4f37ef3339681be2392cb551649f7032e1c0a -D -src/Enums/Fluid.java,c\d\cda172a0a5ac32b106ace8ccd7f6d63bad586dc3 -E -src/Fields/Field.java,3\b\3b75dd6f2347637f58fb22d37520bdaf8666060f -D -src/Fields/Pipe.java,c\1\c102106332e2fd2e145a693c49961375b2149e8b -M -src/Interfaces/Steppable.java,d\0\d0e7750a25948def48006badab655f90e5fe3c1b -I -src/Players/Mechanic.java,5\2\5251f38072712b04b1168fe13a8b392d6ad27520 -G -src/Players/Player.java,7\6\769d6629fff0fdb94f1e78aa6735a4b490f81699 -I -src/Players/Saboteur.java,a\e\ae375a6ce4402ef772f382ecf7271f9224176e9b -` -0src/StringResource/StringResourceController.java,b\3\b3116ebad5820dd15b51ead91d4bb3ec2a8f4d9c -Y -)src/Fields/ActiveFields/ActiveFields.java,c\5\c54a65a8aa872521a49fb1b930e279e872406c5f -T -$src/Fields/ActiveFields/Cistern.java,e\8\e8ecca94b526deed330be938464b4a8ba804cd8c -Q -!src/Fields/ActiveFields/Pump.java,8\f\8f13733f346721c3d39f03c75afe8fae5d6fe89f -S -#src/Fields/ActiveFields/Spring.java,c\3\c34016a91f6adc856460a66117f98eb56fa9bc60 \ No newline at end of file From 8c0fdc2db7227d1d9564f11faabb47c86cde1322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Muzslai?= <118824862+LaciProg@users.noreply.github.com> Date: Sun, 19 May 2024 22:54:22 +0200 Subject: [PATCH 03/12] Update build.yml --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 966678f..fbac48e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,6 +4,7 @@ on: branches: - main - Manuális-és-statikus-ellenőrzés + - Sonar-Fixes pull_request: types: [opened, synchronize, reopened] jobs: From a9a3659ab45df61ea4cb9e20474cd76e8183eb87 Mon Sep 17 00:00:00 2001 From: Laci Date: Sun, 19 May 2024 23:33:37 +0200 Subject: [PATCH 04/12] Some minor issue fixes in zhe controller --- .idea/.gitignore | 8 + .../069ee105e414a9841cb8a605002bbf1cfaa00396 | 2 + .../0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 | 8 + .../10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb | 4 + .../183ee57b6240ba64168e2521ae0f55603d787183 | 48 ++++++ .../220aac31c25ac4b78869b9f8a1ff0613639ad131 | 2 + .../2b60335603bdec95f59dffa7532676caa0919860 | 67 ++++++++ .../352b43909b0318cb27d832f4b5ed70481d2f0cca | 2 + .../442292b8a7efeabbe4cc176709b833b1792140ec | 0 .../47a8c4a055a3583d897a139c83b071fb9b86e075 | 67 ++++++++ .../5a76d94fe5bcfc7909894e2775644fb8312cf857 | 2 + .../5d99a517d91f07bde864acfa844d8d0fb31fca79 | 2 + .../6228df69a30f95c16312fab771959b29badf8fb7 | 4 + .../6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 | 2 + .../758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e | 2 + .../78f761914534f9f21bd9140a5969897ab2e3386c | 2 + .../79af7c45105e7092ac09211db8604c01db27ba37 | 2 + .../7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d | 2 + .../893092d474271d335e0ebfc18609c779120a4d47 | 0 .../8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d | 0 .../931c5350684925280f17b8ede6696f82e325a460 | 2 + .../a0e6cf65f1b976041121e442b099676208dfdd86 | 6 + .../a3336814fc8d8c0247949af8ada16edfd5a09d83 | 2 + .../abb09e32881b72fada81cb579bc21349aed41f30 | 2 + .../b1aa1bd943e55310ba228c419a6ce4b0548063e6 | 48 ++++++ .../b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e | 6 + .../be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 | 2 + .../bec9864770ca9242f966d45788d8ddc34a9af0d9 | 2 + .../c129e2d645ebbb59c3555a710c6acbda7ed8c870 | 2 + .../cd68b8799a8b53f159baa056d0d376631c4cf68e | 2 + .../cfe37c4dde3d6c0f6902b6867a14449b234af8c3 | 6 + .../d04aeb7041bae9212b8c5335f9accabbf90966ea | 0 .../d2cd76e371a2393a2353862178ab83be5722e2fa | 2 + .../d3d705d1d4cfdaf71d6afe067df995da814be59c | 45 ++++++ .../d61ff4d8e5673eebce5fee9ecffec97ec94ad768 | 3 + .../de3c505999c6726d5945dfdeccc2fa8b4d35ac93 | 2 + .../df267c5ba3709e67f7dd156e18ac3d24613d767d | 2 + .../ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 | 6 + .../f77807875c7235e37ed946a3c0d88ffa578cdaf1 | 4 + .idea/sonarlint/issuestore/index.pb | 77 +++++++++ .../069ee105e414a9841cb8a605002bbf1cfaa00396 | 0 .../0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 | 0 .../10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb | 0 .../183ee57b6240ba64168e2521ae0f55603d787183 | 0 .../220aac31c25ac4b78869b9f8a1ff0613639ad131 | 0 .../2b60335603bdec95f59dffa7532676caa0919860 | 0 .../352b43909b0318cb27d832f4b5ed70481d2f0cca | 0 .../442292b8a7efeabbe4cc176709b833b1792140ec | 0 .../47a8c4a055a3583d897a139c83b071fb9b86e075 | 0 .../5a76d94fe5bcfc7909894e2775644fb8312cf857 | 0 .../5d99a517d91f07bde864acfa844d8d0fb31fca79 | 0 .../6228df69a30f95c16312fab771959b29badf8fb7 | 0 .../6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 | 0 .../758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e | 0 .../78f761914534f9f21bd9140a5969897ab2e3386c | 0 .../79af7c45105e7092ac09211db8604c01db27ba37 | 0 .../7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d | 0 .../893092d474271d335e0ebfc18609c779120a4d47 | 0 .../8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d | 0 .../931c5350684925280f17b8ede6696f82e325a460 | 0 .../a0e6cf65f1b976041121e442b099676208dfdd86 | 0 .../a3336814fc8d8c0247949af8ada16edfd5a09d83 | 0 .../abb09e32881b72fada81cb579bc21349aed41f30 | 0 .../b1aa1bd943e55310ba228c419a6ce4b0548063e6 | 0 .../b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e | 0 .../be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 | 0 .../bec9864770ca9242f966d45788d8ddc34a9af0d9 | 0 .../c129e2d645ebbb59c3555a710c6acbda7ed8c870 | 0 .../cd68b8799a8b53f159baa056d0d376631c4cf68e | 0 .../cfe37c4dde3d6c0f6902b6867a14449b234af8c3 | 0 .../d04aeb7041bae9212b8c5335f9accabbf90966ea | 0 .../d2cd76e371a2393a2353862178ab83be5722e2fa | 0 .../d3d705d1d4cfdaf71d6afe067df995da814be59c | 0 .../d61ff4d8e5673eebce5fee9ecffec97ec94ad768 | 0 .../de3c505999c6726d5945dfdeccc2fa8b4d35ac93 | 0 .../df267c5ba3709e67f7dd156e18ac3d24613d767d | 0 .../ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 | 0 .../f77807875c7235e37ed946a3c0d88ffa578cdaf1 | 0 .idea/sonarlint/securityhotspotstore/index.pb | 77 +++++++++ src/main/java/Controll/Controller.java | 147 +++++++++++------- .../StringResourceController.java | 2 +- 81 files changed, 618 insertions(+), 55 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/sonarlint/issuestore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 create mode 100644 .idea/sonarlint/issuestore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 create mode 100644 .idea/sonarlint/issuestore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb create mode 100644 .idea/sonarlint/issuestore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 create mode 100644 .idea/sonarlint/issuestore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 create mode 100644 .idea/sonarlint/issuestore/2/b/2b60335603bdec95f59dffa7532676caa0919860 create mode 100644 .idea/sonarlint/issuestore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca create mode 100644 .idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec create mode 100644 .idea/sonarlint/issuestore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 create mode 100644 .idea/sonarlint/issuestore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 create mode 100644 .idea/sonarlint/issuestore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 create mode 100644 .idea/sonarlint/issuestore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 create mode 100644 .idea/sonarlint/issuestore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 create mode 100644 .idea/sonarlint/issuestore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e create mode 100644 .idea/sonarlint/issuestore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c create mode 100644 .idea/sonarlint/issuestore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 create mode 100644 .idea/sonarlint/issuestore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d create mode 100644 .idea/sonarlint/issuestore/8/9/893092d474271d335e0ebfc18609c779120a4d47 create mode 100644 .idea/sonarlint/issuestore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d create mode 100644 .idea/sonarlint/issuestore/9/3/931c5350684925280f17b8ede6696f82e325a460 create mode 100644 .idea/sonarlint/issuestore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 create mode 100644 .idea/sonarlint/issuestore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 create mode 100644 .idea/sonarlint/issuestore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 create mode 100644 .idea/sonarlint/issuestore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 create mode 100644 .idea/sonarlint/issuestore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e create mode 100644 .idea/sonarlint/issuestore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 create mode 100644 .idea/sonarlint/issuestore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 create mode 100644 .idea/sonarlint/issuestore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 create mode 100644 .idea/sonarlint/issuestore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e create mode 100644 .idea/sonarlint/issuestore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 create mode 100644 .idea/sonarlint/issuestore/d/0/d04aeb7041bae9212b8c5335f9accabbf90966ea create mode 100644 .idea/sonarlint/issuestore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa create mode 100644 .idea/sonarlint/issuestore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c create mode 100644 .idea/sonarlint/issuestore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 create mode 100644 .idea/sonarlint/issuestore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 create mode 100644 .idea/sonarlint/issuestore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d create mode 100644 .idea/sonarlint/issuestore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 create mode 100644 .idea/sonarlint/issuestore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 create mode 100644 .idea/sonarlint/issuestore/index.pb create mode 100644 .idea/sonarlint/securityhotspotstore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 create mode 100644 .idea/sonarlint/securityhotspotstore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 create mode 100644 .idea/sonarlint/securityhotspotstore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb create mode 100644 .idea/sonarlint/securityhotspotstore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 create mode 100644 .idea/sonarlint/securityhotspotstore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 create mode 100644 .idea/sonarlint/securityhotspotstore/2/b/2b60335603bdec95f59dffa7532676caa0919860 create mode 100644 .idea/sonarlint/securityhotspotstore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca create mode 100644 .idea/sonarlint/securityhotspotstore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec create mode 100644 .idea/sonarlint/securityhotspotstore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 create mode 100644 .idea/sonarlint/securityhotspotstore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 create mode 100644 .idea/sonarlint/securityhotspotstore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 create mode 100644 .idea/sonarlint/securityhotspotstore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 create mode 100644 .idea/sonarlint/securityhotspotstore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 create mode 100644 .idea/sonarlint/securityhotspotstore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e create mode 100644 .idea/sonarlint/securityhotspotstore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c create mode 100644 .idea/sonarlint/securityhotspotstore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 create mode 100644 .idea/sonarlint/securityhotspotstore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d create mode 100644 .idea/sonarlint/securityhotspotstore/8/9/893092d474271d335e0ebfc18609c779120a4d47 create mode 100644 .idea/sonarlint/securityhotspotstore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d create mode 100644 .idea/sonarlint/securityhotspotstore/9/3/931c5350684925280f17b8ede6696f82e325a460 create mode 100644 .idea/sonarlint/securityhotspotstore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 create mode 100644 .idea/sonarlint/securityhotspotstore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 create mode 100644 .idea/sonarlint/securityhotspotstore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 create mode 100644 .idea/sonarlint/securityhotspotstore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 create mode 100644 .idea/sonarlint/securityhotspotstore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e create mode 100644 .idea/sonarlint/securityhotspotstore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 create mode 100644 .idea/sonarlint/securityhotspotstore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 create mode 100644 .idea/sonarlint/securityhotspotstore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 create mode 100644 .idea/sonarlint/securityhotspotstore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e create mode 100644 .idea/sonarlint/securityhotspotstore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 create mode 100644 .idea/sonarlint/securityhotspotstore/d/0/d04aeb7041bae9212b8c5335f9accabbf90966ea create mode 100644 .idea/sonarlint/securityhotspotstore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa create mode 100644 .idea/sonarlint/securityhotspotstore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c create mode 100644 .idea/sonarlint/securityhotspotstore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 create mode 100644 .idea/sonarlint/securityhotspotstore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 create mode 100644 .idea/sonarlint/securityhotspotstore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d create mode 100644 .idea/sonarlint/securityhotspotstore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 create mode 100644 .idea/sonarlint/securityhotspotstore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 create mode 100644 .idea/sonarlint/securityhotspotstore/index.pb diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/sonarlint/issuestore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 b/.idea/sonarlint/issuestore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 new file mode 100644 index 0000000..a98cadc --- /dev/null +++ b/.idea/sonarlint/issuestore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 @@ -0,0 +1,2 @@ + +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(Ϫ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 b/.idea/sonarlint/issuestore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 new file mode 100644 index 0000000..e80e513 --- /dev/null +++ b/.idea/sonarlint/issuestore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 @@ -0,0 +1,8 @@ + +g java:S117"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ě +g java:S117"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ű +3 +java:S1643"Use a StringBuilder instead.(熒 +8 +java:S1643"Use a StringBuilder instead.( +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb b/.idea/sonarlint/issuestore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb new file mode 100644 index 0000000..64c8275 --- /dev/null +++ b/.idea/sonarlint/issuestore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb @@ -0,0 +1,4 @@ + +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋ +[ +java:S1659,"@Declare "toX" and all following declarations on a separate line.(д \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 b/.idea/sonarlint/issuestore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 new file mode 100644 index 0000000..30817dd --- /dev/null +++ b/.idea/sonarlint/issuestore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 @@ -0,0 +1,48 @@ + +C +java:S1604S"(Make this anonymous inner class a lambda(ڬ +d +java:S1104""NMake vg a static final constant or non-public and provide accessors if needed.( +u +java:S1104S"ZMake selectListener a static final constant or non-public and provide accessors if needed.(ڬ +> +java:S1444""(Make this "public static vg" field final( +O +java:S1444S"4Make this "public static selectListener" field final(ڬ +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟ +Q +java:S2696b"6Make the enclosing method "static" or remove this set.(í +Q +java:S2696k"6Make the enclosing method "static" or remove this set.(í +Q +java:S2696s"6Make the enclosing method "static" or remove this set.(í +i +java:S3776"RRefactor this method to reduce its Cognitive Complexity from 16 to the 15 allowed.( +E +java:S3010")Remove this assignment of "activePlayer".( += +java:S3010"&Remove this assignment of "mecPoints".( += +java:S3010"&Remove this assignment of "sabPoints".( +@ +java:S3010")Remove this assignment of "successLabel".( +6 +java:S3010"Remove this assignment of "vg".( +d java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ƞ +R +java:S2696"6Make the enclosing method "static" or remove this set.(£ +L +java:S2696"6Make the enclosing method "static" or remove this set.( +R +java:S2696"6Make the enclosing method "static" or remove this set.(í +L +java:S2696"6Make the enclosing method "static" or remove this set.( +R +java:S2696"6Make the enclosing method "static" or remove this set.(í +R +java:S2696"6Make the enclosing method "static" or remove this set.(í +R +java:S2696"6Make the enclosing method "static" or remove this set.(í +L +java:S2696"6Make the enclosing method "static" or remove this set.( +d java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 b/.idea/sonarlint/issuestore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 new file mode 100644 index 0000000..1e1a9f5 --- /dev/null +++ b/.idea/sonarlint/issuestore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 @@ -0,0 +1,2 @@ + +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/2/b/2b60335603bdec95f59dffa7532676caa0919860 b/.idea/sonarlint/issuestore/2/b/2b60335603bdec95f59dffa7532676caa0919860 new file mode 100644 index 0000000..9ee062e --- /dev/null +++ b/.idea/sonarlint/issuestore/2/b/2b60335603bdec95f59dffa7532676caa0919860 @@ -0,0 +1,67 @@ + + +java:S1104c"QMake pipes a static final constant or non-public and provide accessors if needed.(ݰJ$d2724f33-148a-4688-94bf-0227af42f491 + +java:S1104g"QMake pumps a static final constant or non-public and provide accessors if needed.(橵J$dd93ef59-959c-4abf-9ca4-8f1ec09268dd + +java:S1104m"TMake gameMode a static final constant or non-public and provide accessors if needed.(8J$45c3c2e7-2581-401b-8af8-8104721eb3d8 + +java:S1104o"QMake moves a static final constant or non-public and provide accessors if needed.(¡J$c3ae03a7-17c4-4c2e-b7be-78aec335ef96 + +java:S1104p"VMake lastResult a static final constant or non-public and provide accessors if needed.(J$6a496529-ce4e-4fc1-b855-6c3c07c9463d +g +java:S1444c"+Make this "public static pipes" field final(ݰJ$1b289efd-8827-488c-9e43-30145d828c68 +l +java:S1444g"+Make this "public static pumps" field final(橵J$008650a7-d25c-444d-8af2-103e8e6a20c1 +i +java:S1444m".Make this "public static gameMode" field final(8J$4b07c242-979a-4fc1-8fc1-f1312c03154f +g +java:S1444o"+Make this "public static moves" field final(¡J$a784e847-1a9f-4146-b7f9-4dcde0150c62 +q +java:S1444p"0Make this "public static lastResult" field final(J$dded0159-d70b-417e-80da-9306f6504671 +f +java:S2629"$Invoke method(s) only conditionally.(ԡΗJ$40c14ca6-c2ec-4da8-9463-f13026b9a387 +f +java:S2629"$Invoke method(s) only conditionally.(J$5a53b414-9d2b-4ad1-b6d5-b30a73e7e5cd + +java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(ѐJ$861af3be-1f26-4768-9816-fea6859c71df + +java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(̋J$0f712ca6-cb5e-4d10-9c71-af4d2e06ac00 + +java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(ȨJ$1034e109-68b3-4125-b208-75aa680adcbd + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟J$0e40370e-fe8b-4062-958a-51d17b70ec01 + +java:S1450J"WRemove the "filePath" field and declare it as a local variable in the relevant methods.(J$cadfce98-3ecb-4d4d-be4a-28e791b0b2fe +^ +java:S23861"Make this member "protected".(J$2bb238a3-a311-4ccc-999c-8b473a4c7286 +Y +java:S23866"Make this member "protected".(J$a78003a0-2739-4739-a5af-d6fa37f75359 +Y +java:S2386^"Make this member "protected".(J$aa405d63-cdc2-4612-a6e4-f0e8c8b6318d + java:S100z"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ׇJ$9410d07e-59bc-408c-a480-071d31686741 + java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(J$11f7668c-13ef-45a8-ae47-f903597a036a + java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(J$249a5241-d093-49f9-9db1-d96265793236 + +java:S3776"RRefactor this method to reduce its Cognitive Complexity from 51 to the 15 allowed.(J$c977814c-57be-4efe-90f6-8c1e3628dca2 +h +java:S1075"&Remove this hard-coded path-delimiter.(濆J$4c0b9e83-b213-4f0b-bc96-9d54b3f18d20 + +java:S1301"KReplace this "switch" statement by "if" statements to increase readability.(J$9eb1915c-b1d9-4888-86c9-fa8397e5e9cc +e java:S108")Either remove or fill this block of code.(J$6e4dc083-04c0-4bf2-9831-83ca6d3d11c7 +j java:S108")Either remove or fill this block of code.(J$14bd5955-1a94-46b6-921e-877374468af3 +i +java:S1125"'Remove the unnecessary boolean literal.(βJ$20c68f6e-4dfc-4118-aae8-7464a4bf2a16 + +java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(ѐJ$1d8470c4-26d8-4889-b570-07597ac7f1ad + +java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(̋J$fad2b2b1-6220-49f0-aa5d-6981b34543bc + +java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(ȨJ$9c165e3e-6111-43d3-9718-2d6eac915f6c +l +java:S1172"*Remove this unused method parameter "cmd".(ȼJ$aa9eb9f1-f7d4-4c60-9278-75be8081ebf7 +l +java:S1172"*Remove this unused method parameter "cmd".(J$06d8eab9-ba87-4d10-b603-c3db76e64359 +l +java:S1172"*Remove this unused method parameter "cmd".(J$cc6c7b3d-ecd0-41fe-8fd4-c477599a464f +g +java:S1172"*Remove this unused method parameter "cmd".(űJ$125a60b7-e26f-4b1e-99c3-51488a184c45 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca b/.idea/sonarlint/issuestore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca new file mode 100644 index 0000000..5288211 --- /dev/null +++ b/.idea/sonarlint/issuestore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca @@ -0,0 +1,2 @@ + +o java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec b/.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 b/.idea/sonarlint/issuestore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 new file mode 100644 index 0000000..372d34a --- /dev/null +++ b/.idea/sonarlint/issuestore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 @@ -0,0 +1,67 @@ + + +java:S1104c"QMake pipes a static final constant or non-public and provide accessors if needed.(ݰJ$2d21e2b5-662e-41fa-b61a-adb0f2e14ae1 + +java:S1104g"QMake pumps a static final constant or non-public and provide accessors if needed.(橵J$185d6dad-e691-49cf-be7e-995cf410f1b8 + +java:S1104m"TMake gameMode a static final constant or non-public and provide accessors if needed.(8J$b628fc1d-6a8d-4244-8c4c-977d9c137b66 + +java:S1104o"QMake moves a static final constant or non-public and provide accessors if needed.(¡J$521cdb6a-0c97-494c-b012-6dc1b69224c4 + +java:S1104p"VMake lastResult a static final constant or non-public and provide accessors if needed.(J$ecdb576d-82be-48da-9272-69968a73ee2f +g +java:S1444c"+Make this "public static pipes" field final(ݰJ$5d9c01bb-22fd-4f38-bf42-53f1f40a6f15 +l +java:S1444g"+Make this "public static pumps" field final(橵J$d63021d5-bab0-40e5-96bf-fac904a32b48 +i +java:S1444m".Make this "public static gameMode" field final(8J$e593c92f-dfa2-467d-bf8c-74e96cdb639b +g +java:S1444o"+Make this "public static moves" field final(¡J$0ec9c0d6-f311-4a3e-85dd-f1f2b8fccb26 +q +java:S1444p"0Make this "public static lastResult" field final(J$3b32a184-115c-44e0-84f1-abe3d1194a0d +f +java:S2629"$Invoke method(s) only conditionally.(ԡΗJ$f2db72df-2fcb-48b9-8b27-3b43b5086d85 +f +java:S2629"$Invoke method(s) only conditionally.(J$434c7eb7-22b7-4f98-839a-df1619df6a9f + +java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(ѐJ$a78109cb-1c64-4331-a9b9-1ff3d999f548 + +java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(̋J$45cf2d22-2836-4dc6-98c6-466e79cd1964 + +java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(ȨJ$859491fc-6dbe-4b2f-8788-407383eac292 + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟J$ded1c7e9-b1fc-4156-aa6e-f04fb06a9e71 + +java:S1450J"WRemove the "filePath" field and declare it as a local variable in the relevant methods.(J$2572df8a-0877-4e60-8bfd-13ff982ff1bc +^ +java:S23861"Make this member "protected".(J$23b22a86-be73-4b47-a8be-09cb61210dd6 +Y +java:S23866"Make this member "protected".(J$afc1c0d5-29d3-4366-9012-41d16701ee47 +Y +java:S2386^"Make this member "protected".(J$110adbd8-0b9c-4356-8560-893f4115857b + java:S100z"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ׇJ$21620331-7b54-49ef-a758-4ad36667323a + java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(J$d9e40045-5d61-4484-92be-178459fd4573 + java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(J$d3790e58-1c8e-4fc0-9314-b28cbf61513c + +java:S3776"RRefactor this method to reduce its Cognitive Complexity from 51 to the 15 allowed.(J$b0f6f1b1-bbd3-463d-9c19-170179fa57eb +h +java:S1075"&Remove this hard-coded path-delimiter.(濆J$2b26950d-b1b3-4093-81a1-2998f9aa001b + +java:S1301"KReplace this "switch" statement by "if" statements to increase readability.(J$959c46bc-0d7e-4b06-b9ad-38fe7b3b769a +e java:S108")Either remove or fill this block of code.(J$fdd2fb86-b03d-4e6a-bde3-4613c9fc1823 +j java:S108")Either remove or fill this block of code.(J$2c9dd326-8303-46c8-94f3-557b51e18138 +i +java:S1125"'Remove the unnecessary boolean literal.(βJ$97743466-a53a-4998-83fc-ebe9d47e03d4 + +java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(ѐJ$f780570c-aece-4956-8f59-ac7955ea3742 + +java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(̋J$acb55039-4701-4f60-9978-4d4edcfa6ffc + +java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(ȨJ$97ad6c56-7283-46fe-8ebd-4fed23d3120a +l +java:S1172"*Remove this unused method parameter "cmd".(ȼJ$6472258f-1e0f-4128-80c6-dcb62de21db0 +l +java:S1172"*Remove this unused method parameter "cmd".(J$a9f1e0cf-e0eb-4a1c-bd76-d9c3ea278846 +l +java:S1172"*Remove this unused method parameter "cmd".(J$fd08865c-b943-479a-b858-7d1e2714f84c +g +java:S1172"*Remove this unused method parameter "cmd".(űJ$07ab8a5d-279d-42c3-bfba-4ddaa5aac905 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 b/.idea/sonarlint/issuestore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 new file mode 100644 index 0000000..9218a52 --- /dev/null +++ b/.idea/sonarlint/issuestore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 @@ -0,0 +1,2 @@ + +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(ȕǦ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 b/.idea/sonarlint/issuestore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 new file mode 100644 index 0000000..4f0e752 --- /dev/null +++ b/.idea/sonarlint/issuestore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$308eb91c-47f2-40e4-93c1-5664341c3bc2 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 b/.idea/sonarlint/issuestore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 new file mode 100644 index 0000000..6200b7f --- /dev/null +++ b/.idea/sonarlint/issuestore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 @@ -0,0 +1,4 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$947f0710-832e-43f2-98ea-179e48e76304 + +java:S4144"YUpdate this method so that its implementation is not identical to "getWater" on line 168.(J$9a26acad-d636-470a-b6c1-7ec93675cd0b \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 b/.idea/sonarlint/issuestore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 new file mode 100644 index 0000000..174f2f0 --- /dev/null +++ b/.idea/sonarlint/issuestore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 @@ -0,0 +1,2 @@ + +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e b/.idea/sonarlint/issuestore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e new file mode 100644 index 0000000..1e1a9f5 --- /dev/null +++ b/.idea/sonarlint/issuestore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e @@ -0,0 +1,2 @@ + +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c b/.idea/sonarlint/issuestore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c new file mode 100644 index 0000000..e7fc8d8 --- /dev/null +++ b/.idea/sonarlint/issuestore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$f8d4d55f-7217-4b48-8b8f-bcc22010316e \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 b/.idea/sonarlint/issuestore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 new file mode 100644 index 0000000..809cf56 --- /dev/null +++ b/.idea/sonarlint/issuestore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$235d7b71-41bb-484c-aa3f-8312f59daf13 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d b/.idea/sonarlint/issuestore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d new file mode 100644 index 0000000..da5b52e --- /dev/null +++ b/.idea/sonarlint/issuestore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d @@ -0,0 +1,2 @@ + +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/8/9/893092d474271d335e0ebfc18609c779120a4d47 b/.idea/sonarlint/issuestore/8/9/893092d474271d335e0ebfc18609c779120a4d47 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d b/.idea/sonarlint/issuestore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/9/3/931c5350684925280f17b8ede6696f82e325a460 b/.idea/sonarlint/issuestore/9/3/931c5350684925280f17b8ede6696f82e325a460 new file mode 100644 index 0000000..1e1a9f5 --- /dev/null +++ b/.idea/sonarlint/issuestore/9/3/931c5350684925280f17b8ede6696f82e325a460 @@ -0,0 +1,2 @@ + +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 b/.idea/sonarlint/issuestore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 new file mode 100644 index 0000000..dbb2749 --- /dev/null +++ b/.idea/sonarlint/issuestore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 @@ -0,0 +1,6 @@ + +2 +java:S1643F"Use a StringBuilder instead.(熒 +7 +java:S1643P"Use a StringBuilder instead.( +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 b/.idea/sonarlint/issuestore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 new file mode 100644 index 0000000..5288211 --- /dev/null +++ b/.idea/sonarlint/issuestore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 @@ -0,0 +1,2 @@ + +o java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 b/.idea/sonarlint/issuestore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 new file mode 100644 index 0000000..65f0523 --- /dev/null +++ b/.idea/sonarlint/issuestore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$39bef2b2-e627-417f-9031-9a544b29e4fa \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 b/.idea/sonarlint/issuestore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 new file mode 100644 index 0000000..30817dd --- /dev/null +++ b/.idea/sonarlint/issuestore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 @@ -0,0 +1,48 @@ + +C +java:S1604S"(Make this anonymous inner class a lambda(ڬ +d +java:S1104""NMake vg a static final constant or non-public and provide accessors if needed.( +u +java:S1104S"ZMake selectListener a static final constant or non-public and provide accessors if needed.(ڬ +> +java:S1444""(Make this "public static vg" field final( +O +java:S1444S"4Make this "public static selectListener" field final(ڬ +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟ +Q +java:S2696b"6Make the enclosing method "static" or remove this set.(í +Q +java:S2696k"6Make the enclosing method "static" or remove this set.(í +Q +java:S2696s"6Make the enclosing method "static" or remove this set.(í +i +java:S3776"RRefactor this method to reduce its Cognitive Complexity from 16 to the 15 allowed.( +E +java:S3010")Remove this assignment of "activePlayer".( += +java:S3010"&Remove this assignment of "mecPoints".( += +java:S3010"&Remove this assignment of "sabPoints".( +@ +java:S3010")Remove this assignment of "successLabel".( +6 +java:S3010"Remove this assignment of "vg".( +d java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ƞ +R +java:S2696"6Make the enclosing method "static" or remove this set.(£ +L +java:S2696"6Make the enclosing method "static" or remove this set.( +R +java:S2696"6Make the enclosing method "static" or remove this set.(í +L +java:S2696"6Make the enclosing method "static" or remove this set.( +R +java:S2696"6Make the enclosing method "static" or remove this set.(í +R +java:S2696"6Make the enclosing method "static" or remove this set.(í +R +java:S2696"6Make the enclosing method "static" or remove this set.(í +L +java:S2696"6Make the enclosing method "static" or remove this set.( +d java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e b/.idea/sonarlint/issuestore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e new file mode 100644 index 0000000..3042bb3 --- /dev/null +++ b/.idea/sonarlint/issuestore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e @@ -0,0 +1,6 @@ + +Y +java:S1643"Use a StringBuilder instead.(熒J$374fbc2c-6889-496a-aaf0-0fb444626d16 +X +java:S1643"Use a StringBuilder instead.(lJ$08bbff28-d4f1-44f5-8dbf-a1cd6dae936e + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$8112444f-4e08-4598-b2f2-03e9e2f23aa0 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 b/.idea/sonarlint/issuestore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 new file mode 100644 index 0000000..5f8c230 --- /dev/null +++ b/.idea/sonarlint/issuestore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$03517d3f-a980-48a4-abf9-524a6a499805 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 b/.idea/sonarlint/issuestore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 new file mode 100644 index 0000000..5288211 --- /dev/null +++ b/.idea/sonarlint/issuestore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 @@ -0,0 +1,2 @@ + +o java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 b/.idea/sonarlint/issuestore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 new file mode 100644 index 0000000..2b9e28a --- /dev/null +++ b/.idea/sonarlint/issuestore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 @@ -0,0 +1,2 @@ + +{ java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(Ϫ81 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e b/.idea/sonarlint/issuestore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e new file mode 100644 index 0000000..1e1a9f5 --- /dev/null +++ b/.idea/sonarlint/issuestore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e @@ -0,0 +1,2 @@ + +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 b/.idea/sonarlint/issuestore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 new file mode 100644 index 0000000..f90a953 --- /dev/null +++ b/.idea/sonarlint/issuestore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 @@ -0,0 +1,6 @@ + +Y +java:S1643"Use a StringBuilder instead.(熒J$f16d855f-0e3d-4c00-b401-731199eeb762 +X +java:S1643"Use a StringBuilder instead.(lJ$7d2147ca-33a0-405d-9c75-877f39c8be81 + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$56550a6f-c989-457d-9094-c6518c2c43b5 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/d/0/d04aeb7041bae9212b8c5335f9accabbf90966ea b/.idea/sonarlint/issuestore/d/0/d04aeb7041bae9212b8c5335f9accabbf90966ea new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa b/.idea/sonarlint/issuestore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa new file mode 100644 index 0000000..4656916 --- /dev/null +++ b/.idea/sonarlint/issuestore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$9341df6e-9817-406d-b241-24a9474f7a83 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c b/.idea/sonarlint/issuestore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c new file mode 100644 index 0000000..d3cd872 --- /dev/null +++ b/.idea/sonarlint/issuestore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c @@ -0,0 +1,45 @@ + + +java:S1104\"QMake pipes a static final constant or non-public and provide accessors if needed.(ݰ8ْȕ1J$df39d551-021b-43da-afaa-225c85c6e54a + +java:S1104`"QMake pumps a static final constant or non-public and provide accessors if needed.(橵8ْȕ1J$dd241379-a2f3-42f4-b1e7-6b6dba8c37ee + +java:S1104f"TMake gameMode a static final constant or non-public and provide accessors if needed.(88ڒȕ1J$f5292ee6-d3d8-4286-9288-3450c7c9c61d + +java:S1104h"QMake moves a static final constant or non-public and provide accessors if needed.(¡8ڒȕ1J$2d211d90-1681-45f9-b3fc-e2bc0d90ba4b + +java:S1104i"VMake lastResult a static final constant or non-public and provide accessors if needed.(8ڒȕ1J$d005561a-92fa-4379-9c30-ca16881f29a3 +n +java:S1444\"+Make this "public static pipes" field final(ݰ8ےȕ1J$2d22150a-13d8-4b6d-8546-4167981fd537 +s +java:S1444`"+Make this "public static pumps" field final(橵8ےȕ1J$31ef74c8-bc81-4d6d-82e5-1d28a8752c88 +p +java:S1444f".Make this "public static gameMode" field final(88ےȕ1J$82c51209-55bb-437c-8818-8e89675e371e +n +java:S1444h"+Make this "public static moves" field final(¡8ےȕ1J$f7ea622e-0d02-4974-9f3c-9a77c3a8519b +x +java:S1444i"0Make this "public static lastResult" field final(8ےȕ1J$7ee6dd06-4fcd-41a5-86b7-7a0fd38ee65d + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟8ȕ1J$f1bfc6cb-ddee-4dc4-a35b-1d8eb2073764 + +java:S1450C"WRemove the "filePath" field and declare it as a local variable in the relevant methods.(8ȕ1J$5e5b81c0-01be-4319-b548-c0dc8d09b9bb +e +java:S2386*"Make this member "protected".(8ȕ1J$7a1fdb8b-1fc5-44bc-9e2f-65bd33270336 +` +java:S2386/"Make this member "protected".(8ȕ1J$4dd85920-1464-444f-9d14-5baae5112c60 +` +java:S2386W"Make this member "protected".(8ȕ1J$63fd3f34-2cdc-4731-b1a7-1e5304aa5f02 + java:S100s"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ׇ8ȕ1J$196b9249-9fb9-4a54-91ae-8b2f83b4b698 + java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(8ȕ1J$e3dd4df9-d285-4441-971e-cdbb1319d802 + java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(8ȕ1J$d89d14cc-ba03-4097-8bdd-d71e7c3e0dea + +java:S3776"RRefactor this method to reduce its Cognitive Complexity from 51 to the 15 allowed.(8ȕ1J$458f7c52-c993-420b-b123-0e51e356e070 +o +java:S1075"&Remove this hard-coded path-delimiter.(濆8ȕ1J$600355cb-185c-4c75-99e3-14b1706911d6 +s +java:S1172"*Remove this unused method parameter "cmd".(ȼ8ڕ1J$f0d2ce88-b581-48a0-990a-3f12fa82f57b +s +java:S1172"*Remove this unused method parameter "cmd".(8ڕ1J$a68e7b30-1973-4f9b-9b42-5922d8c3f2bc +s +java:S1172"*Remove this unused method parameter "cmd".(8ڕ1J$9d93d394-f599-4f90-8495-a7eed8a8f545 +n +java:S1172"*Remove this unused method parameter "cmd".(ű8ڕ1J$8dccf156-989b-493a-9c9e-dea2484097bd \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 b/.idea/sonarlint/issuestore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 new file mode 100644 index 0000000..dd95715 --- /dev/null +++ b/.idea/sonarlint/issuestore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 @@ -0,0 +1,3 @@ + +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋ +c java:S100""NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(磛 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 b/.idea/sonarlint/issuestore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 new file mode 100644 index 0000000..f69ba4a --- /dev/null +++ b/.idea/sonarlint/issuestore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$3e5ac008-3e52-40c1-be45-14b764a0ed22 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d b/.idea/sonarlint/issuestore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d new file mode 100644 index 0000000..e8ea3a0 --- /dev/null +++ b/.idea/sonarlint/issuestore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$addee9fa-75f6-424b-8990-5e55b911f73c \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 b/.idea/sonarlint/issuestore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 new file mode 100644 index 0000000..d7926ee --- /dev/null +++ b/.idea/sonarlint/issuestore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 @@ -0,0 +1,6 @@ + +2 +java:S1643e"Use a StringBuilder instead.(熒 +7 +java:S1643r"Use a StringBuilder instead.( +t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 b/.idea/sonarlint/issuestore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 new file mode 100644 index 0000000..fe36650 --- /dev/null +++ b/.idea/sonarlint/issuestore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 @@ -0,0 +1,4 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$d4c747e4-24fb-467c-a3a3-8c434de76dff + +java:S4144"YUpdate this method so that its implementation is not identical to "getWater" on line 168.(J$e6501619-7f3b-471c-aaaf-23bb27aa2b3a \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb new file mode 100644 index 0000000..4aae1d8 --- /dev/null +++ b/.idea/sonarlint/issuestore/index.pb @@ -0,0 +1,77 @@ + +9 + README.md,8\e\8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d += + src/palya.txt,8\9\893092d474271d335e0ebfc18609c779120a4d47 +z +JSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/Menu.java,2\2\220aac31c25ac4b78869b9f8a1ff0613639ad131 + +QSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Interfaces/Steppable.java,b\e\be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 +} +MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Saboteur.java,a\3\a3336814fc8d8c0247949af8ada16edfd5a09d83 +{ +KSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Player.java,b\e\bec9864770ca9242f966d45788d8ddc34a9af0d9 +} +MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/Drawable.java,d\6\d61ff4d8e5673eebce5fee9ecffec97ec94ad768 + +OSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/SpringDraw.java,7\9\79af7c45105e7092ac09211db8604c01db27ba37 +~ +NSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/ViewGame.java,b\1\b1aa1bd943e55310ba228c419a6ce4b0548063e6 + +dSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/StringResource/StringResourceController.java,0\6\069ee105e414a9841cb8a605002bbf1cfaa00396 + +RSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/WaterCounter.java,c\d\cd68b8799a8b53f159baa056d0d376631c4cf68e +} +MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Mechanic.java,d\2\d2cd76e371a2393a2353862178ab83be5722e2fa + +PSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/Controller.java,4\7\47a8c4a055a3583d897a139c83b071fb9b86e075 + +XSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Cistern.java,e\d\ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 +} +MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/PumpDraw.java,5\d\5d99a517d91f07bde864acfa844d8d0fb31fca79 + +]Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/ActiveFields.java,7\d\7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d + +WSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Spring.java,a\0\a0e6cf65f1b976041121e442b099676208dfdd86 +} +MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/PipeDraw.java,1\0\10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb + +QSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/MechanicDraw.java,d\f\df267c5ba3709e67f7dd156e18ac3d24613d767d + +PSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/CisternDraw.java,6\f\6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 + +QSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/SaboteurDraw.java,d\e\de3c505999c6726d5945dfdeccc2fa8b4d35ac93 +x +HSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Enums/Fluid.java,5\a\5a76d94fe5bcfc7909894e2775644fb8312cf857 +q +ASivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/palya.txt,d\0\d04aeb7041bae9212b8c5335f9accabbf90966ea +y +ISivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/Field.java,f\7\f77807875c7235e37ed946a3c0d88ffa578cdaf1 + +USivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Pump.java,0\e\0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 +x +HSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/Pipe.java,c\f\cfe37c4dde3d6c0f6902b6867a14449b234af8c3 +z +JSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/Menu.java,7\5\758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e +~ +NSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/ViewGame.java,1\8\183ee57b6240ba64168e2521ae0f55603d787183 + +RSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/WaterCounter.java,9\3\931c5350684925280f17b8ede6696f82e325a460 +7 +pom.xml,4\4\442292b8a7efeabbe4cc176709b833b1792140ec + +PSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/Controller.java,2\b\2b60335603bdec95f59dffa7532676caa0919860 +} +MSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Players/Mechanic.java,a\b\abb09e32881b72fada81cb579bc21349aed41f30 + +QSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Interfaces/Steppable.java,7\8\78f761914534f9f21bd9140a5969897ab2e3386c +x +HSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/Pipe.java,b\5\b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e +y +ISivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/Field.java,6\2\6228df69a30f95c16312fab771959b29badf8fb7 +V +&src/main/java/Controll/Controller.java,d\3\d3d705d1d4cfdaf71d6afe067df995da814be59c +S +#src/main/java/Players/Mechanic.java,3\5\352b43909b0318cb27d832f4b5ed70481d2f0cca +j +:src/main/java/StringResource/StringResourceController.java,c\1\c129e2d645ebbb59c3555a710c6acbda7ed8c870 \ No newline at end of file diff --git a/.idea/sonarlint/securityhotspotstore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 b/.idea/sonarlint/securityhotspotstore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 b/.idea/sonarlint/securityhotspotstore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb b/.idea/sonarlint/securityhotspotstore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 b/.idea/sonarlint/securityhotspotstore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 b/.idea/sonarlint/securityhotspotstore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/2/b/2b60335603bdec95f59dffa7532676caa0919860 b/.idea/sonarlint/securityhotspotstore/2/b/2b60335603bdec95f59dffa7532676caa0919860 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca b/.idea/sonarlint/securityhotspotstore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec b/.idea/sonarlint/securityhotspotstore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 b/.idea/sonarlint/securityhotspotstore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 b/.idea/sonarlint/securityhotspotstore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 b/.idea/sonarlint/securityhotspotstore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 b/.idea/sonarlint/securityhotspotstore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 b/.idea/sonarlint/securityhotspotstore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e b/.idea/sonarlint/securityhotspotstore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c b/.idea/sonarlint/securityhotspotstore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 b/.idea/sonarlint/securityhotspotstore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d b/.idea/sonarlint/securityhotspotstore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/8/9/893092d474271d335e0ebfc18609c779120a4d47 b/.idea/sonarlint/securityhotspotstore/8/9/893092d474271d335e0ebfc18609c779120a4d47 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d b/.idea/sonarlint/securityhotspotstore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/9/3/931c5350684925280f17b8ede6696f82e325a460 b/.idea/sonarlint/securityhotspotstore/9/3/931c5350684925280f17b8ede6696f82e325a460 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 b/.idea/sonarlint/securityhotspotstore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 b/.idea/sonarlint/securityhotspotstore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 b/.idea/sonarlint/securityhotspotstore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 b/.idea/sonarlint/securityhotspotstore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e b/.idea/sonarlint/securityhotspotstore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 b/.idea/sonarlint/securityhotspotstore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 b/.idea/sonarlint/securityhotspotstore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 b/.idea/sonarlint/securityhotspotstore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e b/.idea/sonarlint/securityhotspotstore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 b/.idea/sonarlint/securityhotspotstore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/d/0/d04aeb7041bae9212b8c5335f9accabbf90966ea b/.idea/sonarlint/securityhotspotstore/d/0/d04aeb7041bae9212b8c5335f9accabbf90966ea new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa b/.idea/sonarlint/securityhotspotstore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c b/.idea/sonarlint/securityhotspotstore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 b/.idea/sonarlint/securityhotspotstore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 b/.idea/sonarlint/securityhotspotstore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d b/.idea/sonarlint/securityhotspotstore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 b/.idea/sonarlint/securityhotspotstore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 b/.idea/sonarlint/securityhotspotstore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/index.pb b/.idea/sonarlint/securityhotspotstore/index.pb new file mode 100644 index 0000000..4aae1d8 --- /dev/null +++ b/.idea/sonarlint/securityhotspotstore/index.pb @@ -0,0 +1,77 @@ + +9 + README.md,8\e\8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d += + src/palya.txt,8\9\893092d474271d335e0ebfc18609c779120a4d47 +z +JSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/Menu.java,2\2\220aac31c25ac4b78869b9f8a1ff0613639ad131 + +QSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Interfaces/Steppable.java,b\e\be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 +} +MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Saboteur.java,a\3\a3336814fc8d8c0247949af8ada16edfd5a09d83 +{ +KSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Player.java,b\e\bec9864770ca9242f966d45788d8ddc34a9af0d9 +} +MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/Drawable.java,d\6\d61ff4d8e5673eebce5fee9ecffec97ec94ad768 + +OSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/SpringDraw.java,7\9\79af7c45105e7092ac09211db8604c01db27ba37 +~ +NSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/ViewGame.java,b\1\b1aa1bd943e55310ba228c419a6ce4b0548063e6 + +dSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/StringResource/StringResourceController.java,0\6\069ee105e414a9841cb8a605002bbf1cfaa00396 + +RSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/WaterCounter.java,c\d\cd68b8799a8b53f159baa056d0d376631c4cf68e +} +MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Mechanic.java,d\2\d2cd76e371a2393a2353862178ab83be5722e2fa + +PSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/Controller.java,4\7\47a8c4a055a3583d897a139c83b071fb9b86e075 + +XSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Cistern.java,e\d\ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 +} +MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/PumpDraw.java,5\d\5d99a517d91f07bde864acfa844d8d0fb31fca79 + +]Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/ActiveFields.java,7\d\7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d + +WSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Spring.java,a\0\a0e6cf65f1b976041121e442b099676208dfdd86 +} +MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/PipeDraw.java,1\0\10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb + +QSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/MechanicDraw.java,d\f\df267c5ba3709e67f7dd156e18ac3d24613d767d + +PSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/CisternDraw.java,6\f\6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 + +QSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/SaboteurDraw.java,d\e\de3c505999c6726d5945dfdeccc2fa8b4d35ac93 +x +HSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Enums/Fluid.java,5\a\5a76d94fe5bcfc7909894e2775644fb8312cf857 +q +ASivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/palya.txt,d\0\d04aeb7041bae9212b8c5335f9accabbf90966ea +y +ISivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/Field.java,f\7\f77807875c7235e37ed946a3c0d88ffa578cdaf1 + +USivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Pump.java,0\e\0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 +x +HSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/Pipe.java,c\f\cfe37c4dde3d6c0f6902b6867a14449b234af8c3 +z +JSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/Menu.java,7\5\758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e +~ +NSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/ViewGame.java,1\8\183ee57b6240ba64168e2521ae0f55603d787183 + +RSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/WaterCounter.java,9\3\931c5350684925280f17b8ede6696f82e325a460 +7 +pom.xml,4\4\442292b8a7efeabbe4cc176709b833b1792140ec + +PSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/Controller.java,2\b\2b60335603bdec95f59dffa7532676caa0919860 +} +MSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Players/Mechanic.java,a\b\abb09e32881b72fada81cb579bc21349aed41f30 + +QSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Interfaces/Steppable.java,7\8\78f761914534f9f21bd9140a5969897ab2e3386c +x +HSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/Pipe.java,b\5\b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e +y +ISivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/Field.java,6\2\6228df69a30f95c16312fab771959b29badf8fb7 +V +&src/main/java/Controll/Controller.java,d\3\d3d705d1d4cfdaf71d6afe067df995da814be59c +S +#src/main/java/Players/Mechanic.java,3\5\352b43909b0318cb27d832f4b5ed70481d2f0cca +j +:src/main/java/StringResource/StringResourceController.java,c\1\c129e2d645ebbb59c3555a710c6acbda7ed8c870 \ No newline at end of file diff --git a/src/main/java/Controll/Controller.java b/src/main/java/Controll/Controller.java index be7ecc5..2975a96 100644 --- a/src/main/java/Controll/Controller.java +++ b/src/main/java/Controll/Controller.java @@ -241,7 +241,7 @@ public static void load(String cmd){ fileName = tmp[tmp.length-1]; while (scanner.hasNextLine()){ commandList.add(scanner.nextLine()); - logger.log(Level.INFO, commandList.get(commandList.size()-1)); + logger.log(Level.INFO, ()-> commandList.get(commandList.size()-1)); } if (test) { commandList.add("save " + filePath.replace(".in", ".out")); @@ -267,7 +267,7 @@ public static void loadFileFromSrcToReader(String fileNameToOpen) { } } } catch (IOException e) { - e.printStackTrace(); + logger.log(Level.WARNING, StringResourceController.FILE_NOT_FOUND); } } @@ -281,13 +281,21 @@ public static void pump(String[] cmd){ commands[i-3] = cmd[i].split(":"); } - for(int i=0; i "Test name: " + fileName.replace(".out", "")); if (result.size() != expected.size()) { logger.log(Level.INFO, "Test failed. The 2 files do not have the same amount of lines."); return; @@ -840,7 +879,8 @@ private static int getErros(ArrayList result, ArrayList expected if (!result.isEmpty() && !expected.isEmpty()) { for (int i = 0; i < expected.size(); i++) { if (!result.get(i).equals(expected.get(i))) { - logger.log(Level.INFO, "Error in line " + (i+1) + ".\nExpected: " + expected.get(i) + ", but got: " + result.get(i)); + int finalI = i; + logger.log(Level.INFO, () -> "Error in line " + (finalI +1) + ".\nExpected: " + expected.get(finalI) + ", but got: " + result.get(finalI)); errors++; } } @@ -866,7 +906,7 @@ public static void testAll(String[] cmd) { * */ public static void list(){ for (Object obj : objectNames.values()) { - logger.log(Level.INFO, objectReverseNames.get(obj) + " "); + logger.log(Level.INFO, () -> objectReverseNames.get(obj) + " "); } logger.log(Level.INFO, ""); } /** @@ -901,8 +941,7 @@ public static void endturn(String[] cmd){ waterCounter.count(); //léptetés for (Object obj : objectNames.values()) { - if(obj instanceof Steppable) { - Steppable value = (Steppable)obj; + if(obj instanceof Steppable value) { value.step(); } } diff --git a/src/main/java/StringResource/StringResourceController.java b/src/main/java/StringResource/StringResourceController.java index b417d44..e8414b0 100644 --- a/src/main/java/StringResource/StringResourceController.java +++ b/src/main/java/StringResource/StringResourceController.java @@ -9,5 +9,5 @@ private StringResourceController(){} public static final String GOOD_ACTION = "Sikeres művelet"; public static final String WATER = "water"; public static final String RANDOM_ON = "A véletlen események be lettek kapcsolva."; - + public static final String INVALID_ACTION = "A műveletet nem lehet végrehajtani"; } \ No newline at end of file From 0b7d58edd953101468b00eab159a97f6b4027874 Mon Sep 17 00:00:00 2001 From: Laci Date: Sun, 19 May 2024 23:35:34 +0200 Subject: [PATCH 05/12] Some minor issue fixes in the controller --- .gitignore | 1 + .../069ee105e414a9841cb8a605002bbf1cfaa00396 | 2 - .../0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 | 8 -- .../10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb | 4 - .../183ee57b6240ba64168e2521ae0f55603d787183 | 48 ------------ .../220aac31c25ac4b78869b9f8a1ff0613639ad131 | 2 - .../2b60335603bdec95f59dffa7532676caa0919860 | 67 ---------------- .../352b43909b0318cb27d832f4b5ed70481d2f0cca | 2 - .../442292b8a7efeabbe4cc176709b833b1792140ec | 0 .../47a8c4a055a3583d897a139c83b071fb9b86e075 | 67 ---------------- .../5a76d94fe5bcfc7909894e2775644fb8312cf857 | 2 - .../5d99a517d91f07bde864acfa844d8d0fb31fca79 | 2 - .../6228df69a30f95c16312fab771959b29badf8fb7 | 4 - .../6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 | 2 - .../758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e | 2 - .../78f761914534f9f21bd9140a5969897ab2e3386c | 2 - .../79af7c45105e7092ac09211db8604c01db27ba37 | 2 - .../7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d | 2 - .../893092d474271d335e0ebfc18609c779120a4d47 | 0 .../8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d | 0 .../931c5350684925280f17b8ede6696f82e325a460 | 2 - .../a0e6cf65f1b976041121e442b099676208dfdd86 | 6 -- .../a3336814fc8d8c0247949af8ada16edfd5a09d83 | 2 - .../abb09e32881b72fada81cb579bc21349aed41f30 | 2 - .../b1aa1bd943e55310ba228c419a6ce4b0548063e6 | 48 ------------ .../b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e | 6 -- .../be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 | 2 - .../bec9864770ca9242f966d45788d8ddc34a9af0d9 | 2 - .../c129e2d645ebbb59c3555a710c6acbda7ed8c870 | 2 - .../cd68b8799a8b53f159baa056d0d376631c4cf68e | 2 - .../cfe37c4dde3d6c0f6902b6867a14449b234af8c3 | 6 -- .../d04aeb7041bae9212b8c5335f9accabbf90966ea | 0 .../d2cd76e371a2393a2353862178ab83be5722e2fa | 2 - .../d3d705d1d4cfdaf71d6afe067df995da814be59c | 45 ----------- .../d61ff4d8e5673eebce5fee9ecffec97ec94ad768 | 3 - .../de3c505999c6726d5945dfdeccc2fa8b4d35ac93 | 2 - .../df267c5ba3709e67f7dd156e18ac3d24613d767d | 2 - .../ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 | 6 -- .../f77807875c7235e37ed946a3c0d88ffa578cdaf1 | 4 - .idea/sonarlint/issuestore/index.pb | 77 ------------------- .../069ee105e414a9841cb8a605002bbf1cfaa00396 | 0 .../0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 | 0 .../10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb | 0 .../183ee57b6240ba64168e2521ae0f55603d787183 | 0 .../220aac31c25ac4b78869b9f8a1ff0613639ad131 | 0 .../2b60335603bdec95f59dffa7532676caa0919860 | 0 .../352b43909b0318cb27d832f4b5ed70481d2f0cca | 0 .../442292b8a7efeabbe4cc176709b833b1792140ec | 0 .../47a8c4a055a3583d897a139c83b071fb9b86e075 | 0 .../5a76d94fe5bcfc7909894e2775644fb8312cf857 | 0 .../5d99a517d91f07bde864acfa844d8d0fb31fca79 | 0 .../6228df69a30f95c16312fab771959b29badf8fb7 | 0 .../6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 | 0 .../758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e | 0 .../78f761914534f9f21bd9140a5969897ab2e3386c | 0 .../79af7c45105e7092ac09211db8604c01db27ba37 | 0 .../7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d | 0 .../893092d474271d335e0ebfc18609c779120a4d47 | 0 .../8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d | 0 .../931c5350684925280f17b8ede6696f82e325a460 | 0 .../a0e6cf65f1b976041121e442b099676208dfdd86 | 0 .../a3336814fc8d8c0247949af8ada16edfd5a09d83 | 0 .../abb09e32881b72fada81cb579bc21349aed41f30 | 0 .../b1aa1bd943e55310ba228c419a6ce4b0548063e6 | 0 .../b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e | 0 .../be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 | 0 .../bec9864770ca9242f966d45788d8ddc34a9af0d9 | 0 .../c129e2d645ebbb59c3555a710c6acbda7ed8c870 | 0 .../cd68b8799a8b53f159baa056d0d376631c4cf68e | 0 .../cfe37c4dde3d6c0f6902b6867a14449b234af8c3 | 0 .../d04aeb7041bae9212b8c5335f9accabbf90966ea | 0 .../d2cd76e371a2393a2353862178ab83be5722e2fa | 0 .../d3d705d1d4cfdaf71d6afe067df995da814be59c | 0 .../d61ff4d8e5673eebce5fee9ecffec97ec94ad768 | 0 .../de3c505999c6726d5945dfdeccc2fa8b4d35ac93 | 0 .../df267c5ba3709e67f7dd156e18ac3d24613d767d | 0 .../ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 | 0 .../f77807875c7235e37ed946a3c0d88ffa578cdaf1 | 0 .idea/sonarlint/securityhotspotstore/index.pb | 77 ------------------- 79 files changed, 1 insertion(+), 516 deletions(-) delete mode 100644 .idea/sonarlint/issuestore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 delete mode 100644 .idea/sonarlint/issuestore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 delete mode 100644 .idea/sonarlint/issuestore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb delete mode 100644 .idea/sonarlint/issuestore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 delete mode 100644 .idea/sonarlint/issuestore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 delete mode 100644 .idea/sonarlint/issuestore/2/b/2b60335603bdec95f59dffa7532676caa0919860 delete mode 100644 .idea/sonarlint/issuestore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca delete mode 100644 .idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec delete mode 100644 .idea/sonarlint/issuestore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 delete mode 100644 .idea/sonarlint/issuestore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 delete mode 100644 .idea/sonarlint/issuestore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 delete mode 100644 .idea/sonarlint/issuestore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 delete mode 100644 .idea/sonarlint/issuestore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 delete mode 100644 .idea/sonarlint/issuestore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e delete mode 100644 .idea/sonarlint/issuestore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c delete mode 100644 .idea/sonarlint/issuestore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 delete mode 100644 .idea/sonarlint/issuestore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d delete mode 100644 .idea/sonarlint/issuestore/8/9/893092d474271d335e0ebfc18609c779120a4d47 delete mode 100644 .idea/sonarlint/issuestore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d delete mode 100644 .idea/sonarlint/issuestore/9/3/931c5350684925280f17b8ede6696f82e325a460 delete mode 100644 .idea/sonarlint/issuestore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 delete mode 100644 .idea/sonarlint/issuestore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 delete mode 100644 .idea/sonarlint/issuestore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 delete mode 100644 .idea/sonarlint/issuestore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 delete mode 100644 .idea/sonarlint/issuestore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e delete mode 100644 .idea/sonarlint/issuestore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 delete mode 100644 .idea/sonarlint/issuestore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 delete mode 100644 .idea/sonarlint/issuestore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 delete mode 100644 .idea/sonarlint/issuestore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e delete mode 100644 .idea/sonarlint/issuestore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 delete mode 100644 .idea/sonarlint/issuestore/d/0/d04aeb7041bae9212b8c5335f9accabbf90966ea delete mode 100644 .idea/sonarlint/issuestore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa delete mode 100644 .idea/sonarlint/issuestore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c delete mode 100644 .idea/sonarlint/issuestore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 delete mode 100644 .idea/sonarlint/issuestore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 delete mode 100644 .idea/sonarlint/issuestore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d delete mode 100644 .idea/sonarlint/issuestore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 delete mode 100644 .idea/sonarlint/issuestore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 delete mode 100644 .idea/sonarlint/issuestore/index.pb delete mode 100644 .idea/sonarlint/securityhotspotstore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 delete mode 100644 .idea/sonarlint/securityhotspotstore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 delete mode 100644 .idea/sonarlint/securityhotspotstore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb delete mode 100644 .idea/sonarlint/securityhotspotstore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 delete mode 100644 .idea/sonarlint/securityhotspotstore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 delete mode 100644 .idea/sonarlint/securityhotspotstore/2/b/2b60335603bdec95f59dffa7532676caa0919860 delete mode 100644 .idea/sonarlint/securityhotspotstore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca delete mode 100644 .idea/sonarlint/securityhotspotstore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec delete mode 100644 .idea/sonarlint/securityhotspotstore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 delete mode 100644 .idea/sonarlint/securityhotspotstore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 delete mode 100644 .idea/sonarlint/securityhotspotstore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 delete mode 100644 .idea/sonarlint/securityhotspotstore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 delete mode 100644 .idea/sonarlint/securityhotspotstore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 delete mode 100644 .idea/sonarlint/securityhotspotstore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e delete mode 100644 .idea/sonarlint/securityhotspotstore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c delete mode 100644 .idea/sonarlint/securityhotspotstore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 delete mode 100644 .idea/sonarlint/securityhotspotstore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d delete mode 100644 .idea/sonarlint/securityhotspotstore/8/9/893092d474271d335e0ebfc18609c779120a4d47 delete mode 100644 .idea/sonarlint/securityhotspotstore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d delete mode 100644 .idea/sonarlint/securityhotspotstore/9/3/931c5350684925280f17b8ede6696f82e325a460 delete mode 100644 .idea/sonarlint/securityhotspotstore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 delete mode 100644 .idea/sonarlint/securityhotspotstore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 delete mode 100644 .idea/sonarlint/securityhotspotstore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 delete mode 100644 .idea/sonarlint/securityhotspotstore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 delete mode 100644 .idea/sonarlint/securityhotspotstore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e delete mode 100644 .idea/sonarlint/securityhotspotstore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 delete mode 100644 .idea/sonarlint/securityhotspotstore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 delete mode 100644 .idea/sonarlint/securityhotspotstore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 delete mode 100644 .idea/sonarlint/securityhotspotstore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e delete mode 100644 .idea/sonarlint/securityhotspotstore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 delete mode 100644 .idea/sonarlint/securityhotspotstore/d/0/d04aeb7041bae9212b8c5335f9accabbf90966ea delete mode 100644 .idea/sonarlint/securityhotspotstore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa delete mode 100644 .idea/sonarlint/securityhotspotstore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c delete mode 100644 .idea/sonarlint/securityhotspotstore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 delete mode 100644 .idea/sonarlint/securityhotspotstore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 delete mode 100644 .idea/sonarlint/securityhotspotstore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d delete mode 100644 .idea/sonarlint/securityhotspotstore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 delete mode 100644 .idea/sonarlint/securityhotspotstore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 delete mode 100644 .idea/sonarlint/securityhotspotstore/index.pb diff --git a/.gitignore b/.gitignore index 72f5951..c09ce96 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ *.out *.OUT /bin/ +.idea/* diff --git a/.idea/sonarlint/issuestore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 b/.idea/sonarlint/issuestore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 deleted file mode 100644 index a98cadc..0000000 --- a/.idea/sonarlint/issuestore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 +++ /dev/null @@ -1,2 +0,0 @@ - -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(Ϫ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 b/.idea/sonarlint/issuestore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 deleted file mode 100644 index e80e513..0000000 --- a/.idea/sonarlint/issuestore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 +++ /dev/null @@ -1,8 +0,0 @@ - -g java:S117"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ě -g java:S117"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ű -3 -java:S1643"Use a StringBuilder instead.(熒 -8 -java:S1643"Use a StringBuilder instead.( -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb b/.idea/sonarlint/issuestore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb deleted file mode 100644 index 64c8275..0000000 --- a/.idea/sonarlint/issuestore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb +++ /dev/null @@ -1,4 +0,0 @@ - -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋ -[ -java:S1659,"@Declare "toX" and all following declarations on a separate line.(д \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 b/.idea/sonarlint/issuestore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 deleted file mode 100644 index 30817dd..0000000 --- a/.idea/sonarlint/issuestore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 +++ /dev/null @@ -1,48 +0,0 @@ - -C -java:S1604S"(Make this anonymous inner class a lambda(ڬ -d -java:S1104""NMake vg a static final constant or non-public and provide accessors if needed.( -u -java:S1104S"ZMake selectListener a static final constant or non-public and provide accessors if needed.(ڬ -> -java:S1444""(Make this "public static vg" field final( -O -java:S1444S"4Make this "public static selectListener" field final(ڬ -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟ -Q -java:S2696b"6Make the enclosing method "static" or remove this set.(í -Q -java:S2696k"6Make the enclosing method "static" or remove this set.(í -Q -java:S2696s"6Make the enclosing method "static" or remove this set.(í -i -java:S3776"RRefactor this method to reduce its Cognitive Complexity from 16 to the 15 allowed.( -E -java:S3010")Remove this assignment of "activePlayer".( -= -java:S3010"&Remove this assignment of "mecPoints".( -= -java:S3010"&Remove this assignment of "sabPoints".( -@ -java:S3010")Remove this assignment of "successLabel".( -6 -java:S3010"Remove this assignment of "vg".( -d java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ƞ -R -java:S2696"6Make the enclosing method "static" or remove this set.(£ -L -java:S2696"6Make the enclosing method "static" or remove this set.( -R -java:S2696"6Make the enclosing method "static" or remove this set.(í -L -java:S2696"6Make the enclosing method "static" or remove this set.( -R -java:S2696"6Make the enclosing method "static" or remove this set.(í -R -java:S2696"6Make the enclosing method "static" or remove this set.(í -R -java:S2696"6Make the enclosing method "static" or remove this set.(í -L -java:S2696"6Make the enclosing method "static" or remove this set.( -d java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 b/.idea/sonarlint/issuestore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 deleted file mode 100644 index 1e1a9f5..0000000 --- a/.idea/sonarlint/issuestore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 +++ /dev/null @@ -1,2 +0,0 @@ - -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/2/b/2b60335603bdec95f59dffa7532676caa0919860 b/.idea/sonarlint/issuestore/2/b/2b60335603bdec95f59dffa7532676caa0919860 deleted file mode 100644 index 9ee062e..0000000 --- a/.idea/sonarlint/issuestore/2/b/2b60335603bdec95f59dffa7532676caa0919860 +++ /dev/null @@ -1,67 +0,0 @@ - - -java:S1104c"QMake pipes a static final constant or non-public and provide accessors if needed.(ݰJ$d2724f33-148a-4688-94bf-0227af42f491 - -java:S1104g"QMake pumps a static final constant or non-public and provide accessors if needed.(橵J$dd93ef59-959c-4abf-9ca4-8f1ec09268dd - -java:S1104m"TMake gameMode a static final constant or non-public and provide accessors if needed.(8J$45c3c2e7-2581-401b-8af8-8104721eb3d8 - -java:S1104o"QMake moves a static final constant or non-public and provide accessors if needed.(¡J$c3ae03a7-17c4-4c2e-b7be-78aec335ef96 - -java:S1104p"VMake lastResult a static final constant or non-public and provide accessors if needed.(J$6a496529-ce4e-4fc1-b855-6c3c07c9463d -g -java:S1444c"+Make this "public static pipes" field final(ݰJ$1b289efd-8827-488c-9e43-30145d828c68 -l -java:S1444g"+Make this "public static pumps" field final(橵J$008650a7-d25c-444d-8af2-103e8e6a20c1 -i -java:S1444m".Make this "public static gameMode" field final(8J$4b07c242-979a-4fc1-8fc1-f1312c03154f -g -java:S1444o"+Make this "public static moves" field final(¡J$a784e847-1a9f-4146-b7f9-4dcde0150c62 -q -java:S1444p"0Make this "public static lastResult" field final(J$dded0159-d70b-417e-80da-9306f6504671 -f -java:S2629"$Invoke method(s) only conditionally.(ԡΗJ$40c14ca6-c2ec-4da8-9463-f13026b9a387 -f -java:S2629"$Invoke method(s) only conditionally.(J$5a53b414-9d2b-4ad1-b6d5-b30a73e7e5cd - -java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(ѐJ$861af3be-1f26-4768-9816-fea6859c71df - -java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(̋J$0f712ca6-cb5e-4d10-9c71-af4d2e06ac00 - -java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(ȨJ$1034e109-68b3-4125-b208-75aa680adcbd - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟J$0e40370e-fe8b-4062-958a-51d17b70ec01 - -java:S1450J"WRemove the "filePath" field and declare it as a local variable in the relevant methods.(J$cadfce98-3ecb-4d4d-be4a-28e791b0b2fe -^ -java:S23861"Make this member "protected".(J$2bb238a3-a311-4ccc-999c-8b473a4c7286 -Y -java:S23866"Make this member "protected".(J$a78003a0-2739-4739-a5af-d6fa37f75359 -Y -java:S2386^"Make this member "protected".(J$aa405d63-cdc2-4612-a6e4-f0e8c8b6318d - java:S100z"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ׇJ$9410d07e-59bc-408c-a480-071d31686741 - java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(J$11f7668c-13ef-45a8-ae47-f903597a036a - java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(J$249a5241-d093-49f9-9db1-d96265793236 - -java:S3776"RRefactor this method to reduce its Cognitive Complexity from 51 to the 15 allowed.(J$c977814c-57be-4efe-90f6-8c1e3628dca2 -h -java:S1075"&Remove this hard-coded path-delimiter.(濆J$4c0b9e83-b213-4f0b-bc96-9d54b3f18d20 - -java:S1301"KReplace this "switch" statement by "if" statements to increase readability.(J$9eb1915c-b1d9-4888-86c9-fa8397e5e9cc -e java:S108")Either remove or fill this block of code.(J$6e4dc083-04c0-4bf2-9831-83ca6d3d11c7 -j java:S108")Either remove or fill this block of code.(J$14bd5955-1a94-46b6-921e-877374468af3 -i -java:S1125"'Remove the unnecessary boolean literal.(βJ$20c68f6e-4dfc-4118-aae8-7464a4bf2a16 - -java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(ѐJ$1d8470c4-26d8-4889-b570-07597ac7f1ad - -java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(̋J$fad2b2b1-6220-49f0-aa5d-6981b34543bc - -java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(ȨJ$9c165e3e-6111-43d3-9718-2d6eac915f6c -l -java:S1172"*Remove this unused method parameter "cmd".(ȼJ$aa9eb9f1-f7d4-4c60-9278-75be8081ebf7 -l -java:S1172"*Remove this unused method parameter "cmd".(J$06d8eab9-ba87-4d10-b603-c3db76e64359 -l -java:S1172"*Remove this unused method parameter "cmd".(J$cc6c7b3d-ecd0-41fe-8fd4-c477599a464f -g -java:S1172"*Remove this unused method parameter "cmd".(űJ$125a60b7-e26f-4b1e-99c3-51488a184c45 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca b/.idea/sonarlint/issuestore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca deleted file mode 100644 index 5288211..0000000 --- a/.idea/sonarlint/issuestore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca +++ /dev/null @@ -1,2 +0,0 @@ - -o java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec b/.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/issuestore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 b/.idea/sonarlint/issuestore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 deleted file mode 100644 index 372d34a..0000000 --- a/.idea/sonarlint/issuestore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 +++ /dev/null @@ -1,67 +0,0 @@ - - -java:S1104c"QMake pipes a static final constant or non-public and provide accessors if needed.(ݰJ$2d21e2b5-662e-41fa-b61a-adb0f2e14ae1 - -java:S1104g"QMake pumps a static final constant or non-public and provide accessors if needed.(橵J$185d6dad-e691-49cf-be7e-995cf410f1b8 - -java:S1104m"TMake gameMode a static final constant or non-public and provide accessors if needed.(8J$b628fc1d-6a8d-4244-8c4c-977d9c137b66 - -java:S1104o"QMake moves a static final constant or non-public and provide accessors if needed.(¡J$521cdb6a-0c97-494c-b012-6dc1b69224c4 - -java:S1104p"VMake lastResult a static final constant or non-public and provide accessors if needed.(J$ecdb576d-82be-48da-9272-69968a73ee2f -g -java:S1444c"+Make this "public static pipes" field final(ݰJ$5d9c01bb-22fd-4f38-bf42-53f1f40a6f15 -l -java:S1444g"+Make this "public static pumps" field final(橵J$d63021d5-bab0-40e5-96bf-fac904a32b48 -i -java:S1444m".Make this "public static gameMode" field final(8J$e593c92f-dfa2-467d-bf8c-74e96cdb639b -g -java:S1444o"+Make this "public static moves" field final(¡J$0ec9c0d6-f311-4a3e-85dd-f1f2b8fccb26 -q -java:S1444p"0Make this "public static lastResult" field final(J$3b32a184-115c-44e0-84f1-abe3d1194a0d -f -java:S2629"$Invoke method(s) only conditionally.(ԡΗJ$f2db72df-2fcb-48b9-8b27-3b43b5086d85 -f -java:S2629"$Invoke method(s) only conditionally.(J$434c7eb7-22b7-4f98-839a-df1619df6a9f - -java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(ѐJ$a78109cb-1c64-4331-a9b9-1ff3d999f548 - -java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(̋J$45cf2d22-2836-4dc6-98c6-466e79cd1964 - -java:S2629"\Invoke method(s) only conditionally. Use the built-in formatting to construct this argument.(ȨJ$859491fc-6dbe-4b2f-8788-407383eac292 - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟J$ded1c7e9-b1fc-4156-aa6e-f04fb06a9e71 - -java:S1450J"WRemove the "filePath" field and declare it as a local variable in the relevant methods.(J$2572df8a-0877-4e60-8bfd-13ff982ff1bc -^ -java:S23861"Make this member "protected".(J$23b22a86-be73-4b47-a8be-09cb61210dd6 -Y -java:S23866"Make this member "protected".(J$afc1c0d5-29d3-4366-9012-41d16701ee47 -Y -java:S2386^"Make this member "protected".(J$110adbd8-0b9c-4356-8560-893f4115857b - java:S100z"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ׇJ$21620331-7b54-49ef-a758-4ad36667323a - java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(J$d9e40045-5d61-4484-92be-178459fd4573 - java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(J$d3790e58-1c8e-4fc0-9314-b28cbf61513c - -java:S3776"RRefactor this method to reduce its Cognitive Complexity from 51 to the 15 allowed.(J$b0f6f1b1-bbd3-463d-9c19-170179fa57eb -h -java:S1075"&Remove this hard-coded path-delimiter.(濆J$2b26950d-b1b3-4093-81a1-2998f9aa001b - -java:S1301"KReplace this "switch" statement by "if" statements to increase readability.(J$959c46bc-0d7e-4b06-b9ad-38fe7b3b769a -e java:S108")Either remove or fill this block of code.(J$fdd2fb86-b03d-4e6a-bde3-4613c9fc1823 -j java:S108")Either remove or fill this block of code.(J$2c9dd326-8303-46c8-94f3-557b51e18138 -i -java:S1125"'Remove the unnecessary boolean literal.(βJ$97743466-a53a-4998-83fc-ebe9d47e03d4 - -java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(ѐJ$f780570c-aece-4956-8f59-ac7955ea3742 - -java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(̋J$acb55039-4701-4f60-9978-4d4edcfa6ffc - -java:S3457"KFormat specifiers or lambda should be used instead of string concatenation.(ȨJ$97ad6c56-7283-46fe-8ebd-4fed23d3120a -l -java:S1172"*Remove this unused method parameter "cmd".(ȼJ$6472258f-1e0f-4128-80c6-dcb62de21db0 -l -java:S1172"*Remove this unused method parameter "cmd".(J$a9f1e0cf-e0eb-4a1c-bd76-d9c3ea278846 -l -java:S1172"*Remove this unused method parameter "cmd".(J$fd08865c-b943-479a-b858-7d1e2714f84c -g -java:S1172"*Remove this unused method parameter "cmd".(űJ$07ab8a5d-279d-42c3-bfba-4ddaa5aac905 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 b/.idea/sonarlint/issuestore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 deleted file mode 100644 index 9218a52..0000000 --- a/.idea/sonarlint/issuestore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 +++ /dev/null @@ -1,2 +0,0 @@ - -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(ȕǦ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 b/.idea/sonarlint/issuestore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 deleted file mode 100644 index 4f0e752..0000000 --- a/.idea/sonarlint/issuestore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$308eb91c-47f2-40e4-93c1-5664341c3bc2 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 b/.idea/sonarlint/issuestore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 deleted file mode 100644 index 6200b7f..0000000 --- a/.idea/sonarlint/issuestore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 +++ /dev/null @@ -1,4 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$947f0710-832e-43f2-98ea-179e48e76304 - -java:S4144"YUpdate this method so that its implementation is not identical to "getWater" on line 168.(J$9a26acad-d636-470a-b6c1-7ec93675cd0b \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 b/.idea/sonarlint/issuestore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 deleted file mode 100644 index 174f2f0..0000000 --- a/.idea/sonarlint/issuestore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 +++ /dev/null @@ -1,2 +0,0 @@ - -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e b/.idea/sonarlint/issuestore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e deleted file mode 100644 index 1e1a9f5..0000000 --- a/.idea/sonarlint/issuestore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e +++ /dev/null @@ -1,2 +0,0 @@ - -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c b/.idea/sonarlint/issuestore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c deleted file mode 100644 index e7fc8d8..0000000 --- a/.idea/sonarlint/issuestore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$f8d4d55f-7217-4b48-8b8f-bcc22010316e \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 b/.idea/sonarlint/issuestore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 deleted file mode 100644 index 809cf56..0000000 --- a/.idea/sonarlint/issuestore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$235d7b71-41bb-484c-aa3f-8312f59daf13 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d b/.idea/sonarlint/issuestore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d deleted file mode 100644 index da5b52e..0000000 --- a/.idea/sonarlint/issuestore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d +++ /dev/null @@ -1,2 +0,0 @@ - -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/8/9/893092d474271d335e0ebfc18609c779120a4d47 b/.idea/sonarlint/issuestore/8/9/893092d474271d335e0ebfc18609c779120a4d47 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/issuestore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d b/.idea/sonarlint/issuestore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/issuestore/9/3/931c5350684925280f17b8ede6696f82e325a460 b/.idea/sonarlint/issuestore/9/3/931c5350684925280f17b8ede6696f82e325a460 deleted file mode 100644 index 1e1a9f5..0000000 --- a/.idea/sonarlint/issuestore/9/3/931c5350684925280f17b8ede6696f82e325a460 +++ /dev/null @@ -1,2 +0,0 @@ - -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 b/.idea/sonarlint/issuestore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 deleted file mode 100644 index dbb2749..0000000 --- a/.idea/sonarlint/issuestore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 +++ /dev/null @@ -1,6 +0,0 @@ - -2 -java:S1643F"Use a StringBuilder instead.(熒 -7 -java:S1643P"Use a StringBuilder instead.( -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 b/.idea/sonarlint/issuestore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 deleted file mode 100644 index 5288211..0000000 --- a/.idea/sonarlint/issuestore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 +++ /dev/null @@ -1,2 +0,0 @@ - -o java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 b/.idea/sonarlint/issuestore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 deleted file mode 100644 index 65f0523..0000000 --- a/.idea/sonarlint/issuestore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$39bef2b2-e627-417f-9031-9a544b29e4fa \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 b/.idea/sonarlint/issuestore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 deleted file mode 100644 index 30817dd..0000000 --- a/.idea/sonarlint/issuestore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 +++ /dev/null @@ -1,48 +0,0 @@ - -C -java:S1604S"(Make this anonymous inner class a lambda(ڬ -d -java:S1104""NMake vg a static final constant or non-public and provide accessors if needed.( -u -java:S1104S"ZMake selectListener a static final constant or non-public and provide accessors if needed.(ڬ -> -java:S1444""(Make this "public static vg" field final( -O -java:S1444S"4Make this "public static selectListener" field final(ڬ -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟ -Q -java:S2696b"6Make the enclosing method "static" or remove this set.(í -Q -java:S2696k"6Make the enclosing method "static" or remove this set.(í -Q -java:S2696s"6Make the enclosing method "static" or remove this set.(í -i -java:S3776"RRefactor this method to reduce its Cognitive Complexity from 16 to the 15 allowed.( -E -java:S3010")Remove this assignment of "activePlayer".( -= -java:S3010"&Remove this assignment of "mecPoints".( -= -java:S3010"&Remove this assignment of "sabPoints".( -@ -java:S3010")Remove this assignment of "successLabel".( -6 -java:S3010"Remove this assignment of "vg".( -d java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ƞ -R -java:S2696"6Make the enclosing method "static" or remove this set.(£ -L -java:S2696"6Make the enclosing method "static" or remove this set.( -R -java:S2696"6Make the enclosing method "static" or remove this set.(í -L -java:S2696"6Make the enclosing method "static" or remove this set.( -R -java:S2696"6Make the enclosing method "static" or remove this set.(í -R -java:S2696"6Make the enclosing method "static" or remove this set.(í -R -java:S2696"6Make the enclosing method "static" or remove this set.(í -L -java:S2696"6Make the enclosing method "static" or remove this set.( -d java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e b/.idea/sonarlint/issuestore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e deleted file mode 100644 index 3042bb3..0000000 --- a/.idea/sonarlint/issuestore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e +++ /dev/null @@ -1,6 +0,0 @@ - -Y -java:S1643"Use a StringBuilder instead.(熒J$374fbc2c-6889-496a-aaf0-0fb444626d16 -X -java:S1643"Use a StringBuilder instead.(lJ$08bbff28-d4f1-44f5-8dbf-a1cd6dae936e - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$8112444f-4e08-4598-b2f2-03e9e2f23aa0 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 b/.idea/sonarlint/issuestore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 deleted file mode 100644 index 5f8c230..0000000 --- a/.idea/sonarlint/issuestore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$03517d3f-a980-48a4-abf9-524a6a499805 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 b/.idea/sonarlint/issuestore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 deleted file mode 100644 index 5288211..0000000 --- a/.idea/sonarlint/issuestore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 +++ /dev/null @@ -1,2 +0,0 @@ - -o java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 b/.idea/sonarlint/issuestore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 deleted file mode 100644 index 2b9e28a..0000000 --- a/.idea/sonarlint/issuestore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 +++ /dev/null @@ -1,2 +0,0 @@ - -{ java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(Ϫ81 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e b/.idea/sonarlint/issuestore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e deleted file mode 100644 index 1e1a9f5..0000000 --- a/.idea/sonarlint/issuestore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e +++ /dev/null @@ -1,2 +0,0 @@ - -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 b/.idea/sonarlint/issuestore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 deleted file mode 100644 index f90a953..0000000 --- a/.idea/sonarlint/issuestore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 +++ /dev/null @@ -1,6 +0,0 @@ - -Y -java:S1643"Use a StringBuilder instead.(熒J$f16d855f-0e3d-4c00-b401-731199eeb762 -X -java:S1643"Use a StringBuilder instead.(lJ$7d2147ca-33a0-405d-9c75-877f39c8be81 - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$56550a6f-c989-457d-9094-c6518c2c43b5 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/d/0/d04aeb7041bae9212b8c5335f9accabbf90966ea b/.idea/sonarlint/issuestore/d/0/d04aeb7041bae9212b8c5335f9accabbf90966ea deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/issuestore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa b/.idea/sonarlint/issuestore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa deleted file mode 100644 index 4656916..0000000 --- a/.idea/sonarlint/issuestore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$9341df6e-9817-406d-b241-24a9474f7a83 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c b/.idea/sonarlint/issuestore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c deleted file mode 100644 index d3cd872..0000000 --- a/.idea/sonarlint/issuestore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c +++ /dev/null @@ -1,45 +0,0 @@ - - -java:S1104\"QMake pipes a static final constant or non-public and provide accessors if needed.(ݰ8ْȕ1J$df39d551-021b-43da-afaa-225c85c6e54a - -java:S1104`"QMake pumps a static final constant or non-public and provide accessors if needed.(橵8ْȕ1J$dd241379-a2f3-42f4-b1e7-6b6dba8c37ee - -java:S1104f"TMake gameMode a static final constant or non-public and provide accessors if needed.(88ڒȕ1J$f5292ee6-d3d8-4286-9288-3450c7c9c61d - -java:S1104h"QMake moves a static final constant or non-public and provide accessors if needed.(¡8ڒȕ1J$2d211d90-1681-45f9-b3fc-e2bc0d90ba4b - -java:S1104i"VMake lastResult a static final constant or non-public and provide accessors if needed.(8ڒȕ1J$d005561a-92fa-4379-9c30-ca16881f29a3 -n -java:S1444\"+Make this "public static pipes" field final(ݰ8ےȕ1J$2d22150a-13d8-4b6d-8546-4167981fd537 -s -java:S1444`"+Make this "public static pumps" field final(橵8ےȕ1J$31ef74c8-bc81-4d6d-82e5-1d28a8752c88 -p -java:S1444f".Make this "public static gameMode" field final(88ےȕ1J$82c51209-55bb-437c-8818-8e89675e371e -n -java:S1444h"+Make this "public static moves" field final(¡8ےȕ1J$f7ea622e-0d02-4974-9f3c-9a77c3a8519b -x -java:S1444i"0Make this "public static lastResult" field final(8ےȕ1J$7ee6dd06-4fcd-41a5-86b7-7a0fd38ee65d - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(؟8ȕ1J$f1bfc6cb-ddee-4dc4-a35b-1d8eb2073764 - -java:S1450C"WRemove the "filePath" field and declare it as a local variable in the relevant methods.(8ȕ1J$5e5b81c0-01be-4319-b548-c0dc8d09b9bb -e -java:S2386*"Make this member "protected".(8ȕ1J$7a1fdb8b-1fc5-44bc-9e2f-65bd33270336 -` -java:S2386/"Make this member "protected".(8ȕ1J$4dd85920-1464-444f-9d14-5baae5112c60 -` -java:S2386W"Make this member "protected".(8ȕ1J$63fd3f34-2cdc-4731-b1a7-1e5304aa5f02 - java:S100s"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ׇ8ȕ1J$196b9249-9fb9-4a54-91ae-8b2f83b4b698 - java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(8ȕ1J$e3dd4df9-d285-4441-971e-cdbb1319d802 - java:S100"NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(8ȕ1J$d89d14cc-ba03-4097-8bdd-d71e7c3e0dea - -java:S3776"RRefactor this method to reduce its Cognitive Complexity from 51 to the 15 allowed.(8ȕ1J$458f7c52-c993-420b-b123-0e51e356e070 -o -java:S1075"&Remove this hard-coded path-delimiter.(濆8ȕ1J$600355cb-185c-4c75-99e3-14b1706911d6 -s -java:S1172"*Remove this unused method parameter "cmd".(ȼ8ڕ1J$f0d2ce88-b581-48a0-990a-3f12fa82f57b -s -java:S1172"*Remove this unused method parameter "cmd".(8ڕ1J$a68e7b30-1973-4f9b-9b42-5922d8c3f2bc -s -java:S1172"*Remove this unused method parameter "cmd".(8ڕ1J$9d93d394-f599-4f90-8495-a7eed8a8f545 -n -java:S1172"*Remove this unused method parameter "cmd".(ű8ڕ1J$8dccf156-989b-493a-9c9e-dea2484097bd \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 b/.idea/sonarlint/issuestore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 deleted file mode 100644 index dd95715..0000000 --- a/.idea/sonarlint/issuestore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 +++ /dev/null @@ -1,3 +0,0 @@ - -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋ -c java:S100""NRename this method name to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(磛 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 b/.idea/sonarlint/issuestore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 deleted file mode 100644 index f69ba4a..0000000 --- a/.idea/sonarlint/issuestore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$3e5ac008-3e52-40c1-be45-14b764a0ed22 \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d b/.idea/sonarlint/issuestore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d deleted file mode 100644 index e8ea3a0..0000000 --- a/.idea/sonarlint/issuestore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d +++ /dev/null @@ -1,2 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(̋J$addee9fa-75f6-424b-8990-5e55b911f73c \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 b/.idea/sonarlint/issuestore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 deleted file mode 100644 index d7926ee..0000000 --- a/.idea/sonarlint/issuestore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 +++ /dev/null @@ -1,6 +0,0 @@ - -2 -java:S1643e"Use a StringBuilder instead.(熒 -7 -java:S1643r"Use a StringBuilder instead.( -t java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 b/.idea/sonarlint/issuestore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 deleted file mode 100644 index fe36650..0000000 --- a/.idea/sonarlint/issuestore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 +++ /dev/null @@ -1,4 +0,0 @@ - - java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$d4c747e4-24fb-467c-a3a3-8c434de76dff - -java:S4144"YUpdate this method so that its implementation is not identical to "getWater" on line 168.(J$e6501619-7f3b-471c-aaaf-23bb27aa2b3a \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb deleted file mode 100644 index 4aae1d8..0000000 --- a/.idea/sonarlint/issuestore/index.pb +++ /dev/null @@ -1,77 +0,0 @@ - -9 - README.md,8\e\8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d -= - src/palya.txt,8\9\893092d474271d335e0ebfc18609c779120a4d47 -z -JSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/Menu.java,2\2\220aac31c25ac4b78869b9f8a1ff0613639ad131 - -QSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Interfaces/Steppable.java,b\e\be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 -} -MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Saboteur.java,a\3\a3336814fc8d8c0247949af8ada16edfd5a09d83 -{ -KSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Player.java,b\e\bec9864770ca9242f966d45788d8ddc34a9af0d9 -} -MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/Drawable.java,d\6\d61ff4d8e5673eebce5fee9ecffec97ec94ad768 - -OSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/SpringDraw.java,7\9\79af7c45105e7092ac09211db8604c01db27ba37 -~ -NSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/ViewGame.java,b\1\b1aa1bd943e55310ba228c419a6ce4b0548063e6 - -dSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/StringResource/StringResourceController.java,0\6\069ee105e414a9841cb8a605002bbf1cfaa00396 - -RSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/WaterCounter.java,c\d\cd68b8799a8b53f159baa056d0d376631c4cf68e -} -MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Mechanic.java,d\2\d2cd76e371a2393a2353862178ab83be5722e2fa - -PSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/Controller.java,4\7\47a8c4a055a3583d897a139c83b071fb9b86e075 - -XSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Cistern.java,e\d\ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 -} -MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/PumpDraw.java,5\d\5d99a517d91f07bde864acfa844d8d0fb31fca79 - -]Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/ActiveFields.java,7\d\7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d - -WSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Spring.java,a\0\a0e6cf65f1b976041121e442b099676208dfdd86 -} -MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/PipeDraw.java,1\0\10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb - -QSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/MechanicDraw.java,d\f\df267c5ba3709e67f7dd156e18ac3d24613d767d - -PSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/CisternDraw.java,6\f\6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 - -QSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/SaboteurDraw.java,d\e\de3c505999c6726d5945dfdeccc2fa8b4d35ac93 -x -HSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Enums/Fluid.java,5\a\5a76d94fe5bcfc7909894e2775644fb8312cf857 -q -ASivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/palya.txt,d\0\d04aeb7041bae9212b8c5335f9accabbf90966ea -y -ISivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/Field.java,f\7\f77807875c7235e37ed946a3c0d88ffa578cdaf1 - -USivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Pump.java,0\e\0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 -x -HSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/Pipe.java,c\f\cfe37c4dde3d6c0f6902b6867a14449b234af8c3 -z -JSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/Menu.java,7\5\758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e -~ -NSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/ViewGame.java,1\8\183ee57b6240ba64168e2521ae0f55603d787183 - -RSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/WaterCounter.java,9\3\931c5350684925280f17b8ede6696f82e325a460 -7 -pom.xml,4\4\442292b8a7efeabbe4cc176709b833b1792140ec - -PSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/Controller.java,2\b\2b60335603bdec95f59dffa7532676caa0919860 -} -MSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Players/Mechanic.java,a\b\abb09e32881b72fada81cb579bc21349aed41f30 - -QSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Interfaces/Steppable.java,7\8\78f761914534f9f21bd9140a5969897ab2e3386c -x -HSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/Pipe.java,b\5\b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e -y -ISivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/Field.java,6\2\6228df69a30f95c16312fab771959b29badf8fb7 -V -&src/main/java/Controll/Controller.java,d\3\d3d705d1d4cfdaf71d6afe067df995da814be59c -S -#src/main/java/Players/Mechanic.java,3\5\352b43909b0318cb27d832f4b5ed70481d2f0cca -j -:src/main/java/StringResource/StringResourceController.java,c\1\c129e2d645ebbb59c3555a710c6acbda7ed8c870 \ No newline at end of file diff --git a/.idea/sonarlint/securityhotspotstore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 b/.idea/sonarlint/securityhotspotstore/0/6/069ee105e414a9841cb8a605002bbf1cfaa00396 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 b/.idea/sonarlint/securityhotspotstore/0/e/0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb b/.idea/sonarlint/securityhotspotstore/1/0/10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 b/.idea/sonarlint/securityhotspotstore/1/8/183ee57b6240ba64168e2521ae0f55603d787183 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 b/.idea/sonarlint/securityhotspotstore/2/2/220aac31c25ac4b78869b9f8a1ff0613639ad131 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/2/b/2b60335603bdec95f59dffa7532676caa0919860 b/.idea/sonarlint/securityhotspotstore/2/b/2b60335603bdec95f59dffa7532676caa0919860 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca b/.idea/sonarlint/securityhotspotstore/3/5/352b43909b0318cb27d832f4b5ed70481d2f0cca deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec b/.idea/sonarlint/securityhotspotstore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 b/.idea/sonarlint/securityhotspotstore/4/7/47a8c4a055a3583d897a139c83b071fb9b86e075 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 b/.idea/sonarlint/securityhotspotstore/5/a/5a76d94fe5bcfc7909894e2775644fb8312cf857 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 b/.idea/sonarlint/securityhotspotstore/5/d/5d99a517d91f07bde864acfa844d8d0fb31fca79 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 b/.idea/sonarlint/securityhotspotstore/6/2/6228df69a30f95c16312fab771959b29badf8fb7 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 b/.idea/sonarlint/securityhotspotstore/6/f/6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e b/.idea/sonarlint/securityhotspotstore/7/5/758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c b/.idea/sonarlint/securityhotspotstore/7/8/78f761914534f9f21bd9140a5969897ab2e3386c deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 b/.idea/sonarlint/securityhotspotstore/7/9/79af7c45105e7092ac09211db8604c01db27ba37 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d b/.idea/sonarlint/securityhotspotstore/7/d/7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/8/9/893092d474271d335e0ebfc18609c779120a4d47 b/.idea/sonarlint/securityhotspotstore/8/9/893092d474271d335e0ebfc18609c779120a4d47 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d b/.idea/sonarlint/securityhotspotstore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/9/3/931c5350684925280f17b8ede6696f82e325a460 b/.idea/sonarlint/securityhotspotstore/9/3/931c5350684925280f17b8ede6696f82e325a460 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 b/.idea/sonarlint/securityhotspotstore/a/0/a0e6cf65f1b976041121e442b099676208dfdd86 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 b/.idea/sonarlint/securityhotspotstore/a/3/a3336814fc8d8c0247949af8ada16edfd5a09d83 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 b/.idea/sonarlint/securityhotspotstore/a/b/abb09e32881b72fada81cb579bc21349aed41f30 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 b/.idea/sonarlint/securityhotspotstore/b/1/b1aa1bd943e55310ba228c419a6ce4b0548063e6 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e b/.idea/sonarlint/securityhotspotstore/b/5/b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 b/.idea/sonarlint/securityhotspotstore/b/e/be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 b/.idea/sonarlint/securityhotspotstore/b/e/bec9864770ca9242f966d45788d8ddc34a9af0d9 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 b/.idea/sonarlint/securityhotspotstore/c/1/c129e2d645ebbb59c3555a710c6acbda7ed8c870 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e b/.idea/sonarlint/securityhotspotstore/c/d/cd68b8799a8b53f159baa056d0d376631c4cf68e deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 b/.idea/sonarlint/securityhotspotstore/c/f/cfe37c4dde3d6c0f6902b6867a14449b234af8c3 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/d/0/d04aeb7041bae9212b8c5335f9accabbf90966ea b/.idea/sonarlint/securityhotspotstore/d/0/d04aeb7041bae9212b8c5335f9accabbf90966ea deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa b/.idea/sonarlint/securityhotspotstore/d/2/d2cd76e371a2393a2353862178ab83be5722e2fa deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c b/.idea/sonarlint/securityhotspotstore/d/3/d3d705d1d4cfdaf71d6afe067df995da814be59c deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 b/.idea/sonarlint/securityhotspotstore/d/6/d61ff4d8e5673eebce5fee9ecffec97ec94ad768 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 b/.idea/sonarlint/securityhotspotstore/d/e/de3c505999c6726d5945dfdeccc2fa8b4d35ac93 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d b/.idea/sonarlint/securityhotspotstore/d/f/df267c5ba3709e67f7dd156e18ac3d24613d767d deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 b/.idea/sonarlint/securityhotspotstore/e/d/ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 b/.idea/sonarlint/securityhotspotstore/f/7/f77807875c7235e37ed946a3c0d88ffa578cdaf1 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/index.pb b/.idea/sonarlint/securityhotspotstore/index.pb deleted file mode 100644 index 4aae1d8..0000000 --- a/.idea/sonarlint/securityhotspotstore/index.pb +++ /dev/null @@ -1,77 +0,0 @@ - -9 - README.md,8\e\8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d -= - src/palya.txt,8\9\893092d474271d335e0ebfc18609c779120a4d47 -z -JSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/Menu.java,2\2\220aac31c25ac4b78869b9f8a1ff0613639ad131 - -QSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Interfaces/Steppable.java,b\e\be68dbc93bd5c46e8b2824bfda261fe8fb77e7a4 -} -MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Saboteur.java,a\3\a3336814fc8d8c0247949af8ada16edfd5a09d83 -{ -KSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Player.java,b\e\bec9864770ca9242f966d45788d8ddc34a9af0d9 -} -MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/Drawable.java,d\6\d61ff4d8e5673eebce5fee9ecffec97ec94ad768 - -OSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/SpringDraw.java,7\9\79af7c45105e7092ac09211db8604c01db27ba37 -~ -NSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/ViewGame.java,b\1\b1aa1bd943e55310ba228c419a6ce4b0548063e6 - -dSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/StringResource/StringResourceController.java,0\6\069ee105e414a9841cb8a605002bbf1cfaa00396 - -RSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/WaterCounter.java,c\d\cd68b8799a8b53f159baa056d0d376631c4cf68e -} -MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Players/Mechanic.java,d\2\d2cd76e371a2393a2353862178ab83be5722e2fa - -PSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Controll/Controller.java,4\7\47a8c4a055a3583d897a139c83b071fb9b86e075 - -XSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Cistern.java,e\d\ed83e4f07c2e82ccf0dd533e7beef6dbc937e2e5 -} -MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/PumpDraw.java,5\d\5d99a517d91f07bde864acfa844d8d0fb31fca79 - -]Sivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/ActiveFields.java,7\d\7d8a2d4b7ac70a7960d0b3aafce1146380a47e3d - -WSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Spring.java,a\0\a0e6cf65f1b976041121e442b099676208dfdd86 -} -MSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/PipeDraw.java,1\0\10a6cfd1b43d872a083c49d04c1c91b7ee1e01eb - -QSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/MechanicDraw.java,d\f\df267c5ba3709e67f7dd156e18ac3d24613d767d - -PSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/CisternDraw.java,6\f\6fb596c5f649cb5acc3060fb5f7fd8e22ff621d3 - -QSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Drawing/SaboteurDraw.java,d\e\de3c505999c6726d5945dfdeccc2fa8b4d35ac93 -x -HSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Enums/Fluid.java,5\a\5a76d94fe5bcfc7909894e2775644fb8312cf857 -q -ASivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/palya.txt,d\0\d04aeb7041bae9212b8c5335f9accabbf90966ea -y -ISivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/Field.java,f\7\f77807875c7235e37ed946a3c0d88ffa578cdaf1 - -USivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/ActiveFields/Pump.java,0\e\0ef8f42ed7c3e3ec6a69518a393b91d21eb72d14 -x -HSivatagi_vizhalozatok_uzemeltetese_a_gyakorlatban_2/src/Fields/Pipe.java,c\f\cfe37c4dde3d6c0f6902b6867a14449b234af8c3 -z -JSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/Menu.java,7\5\758f1cf23b3cb69bc5891ebf2a7bbc764e7adf5e -~ -NSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/ViewGame.java,1\8\183ee57b6240ba64168e2521ae0f55603d787183 - -RSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/WaterCounter.java,9\3\931c5350684925280f17b8ede6696f82e325a460 -7 -pom.xml,4\4\442292b8a7efeabbe4cc176709b833b1792140ec - -PSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Controll/Controller.java,2\b\2b60335603bdec95f59dffa7532676caa0919860 -} -MSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Players/Mechanic.java,a\b\abb09e32881b72fada81cb579bc21349aed41f30 - -QSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Interfaces/Steppable.java,7\8\78f761914534f9f21bd9140a5969897ab2e3386c -x -HSivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/Pipe.java,b\5\b5021a2be81d5ae1c7c6fb5d1d081a352ee1715e -y -ISivatagi vizhalozatok uzemeltetese a gyakorlatban 2/src/Fields/Field.java,6\2\6228df69a30f95c16312fab771959b29badf8fb7 -V -&src/main/java/Controll/Controller.java,d\3\d3d705d1d4cfdaf71d6afe067df995da814be59c -S -#src/main/java/Players/Mechanic.java,3\5\352b43909b0318cb27d832f4b5ed70481d2f0cca -j -:src/main/java/StringResource/StringResourceController.java,c\1\c129e2d645ebbb59c3555a710c6acbda7ed8c870 \ No newline at end of file From 339276c1f1fe2f2b0c26810a2b44ab5a98a650e5 Mon Sep 17 00:00:00 2001 From: Laci Date: Mon, 20 May 2024 00:29:33 +0200 Subject: [PATCH 06/12] String builder usages --- src/main/java/Controll/Controller.java | 25 +++++++------- src/main/java/Drawing/PipeDraw.java | 7 ++-- .../java/Fields/ActiveFields/Cistern.java | 22 ++++++------ src/main/java/Fields/ActiveFields/Pump.java | 34 +++++++++---------- src/main/java/Fields/ActiveFields/Spring.java | 31 +++++++++-------- src/main/java/Fields/Pipe.java | 28 +++++++-------- src/{main/java/srcTMP => }/palya.txt | 0 7 files changed, 76 insertions(+), 71 deletions(-) rename src/{main/java/srcTMP => }/palya.txt (100%) diff --git a/src/main/java/Controll/Controller.java b/src/main/java/Controll/Controller.java index 2975a96..6931376 100644 --- a/src/main/java/Controll/Controller.java +++ b/src/main/java/Controll/Controller.java @@ -195,17 +195,17 @@ public static void Game() throws FileNotFoundException { switch(cmd[0]) { case("show"): show(cmd); break; case("showobject"): showobject(cmd); break; - case("move"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else move(cmd); break; - case("breakfield"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else breakfield(cmd); break; - case("repair"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else repair(cmd); break; - case("placepump"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else placepump(cmd); break; - case("set"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else set(cmd); break; - case("disconnect"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else disconnect(cmd); break; - case("connect"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else connect(cmd); break; - case("getpump"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else getpump(cmd); break; - case("pickuppipe"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER);else pickuppipe(cmd); break; - case("makesticky"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else makesticky(cmd); break; - case("makeslippery"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else makeslippery(cmd); break; + case("move"): moves++; if (!objectNames.get(cmd[1]).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else move(cmd); break; + case("breakfield"): moves++; if (!objectNames.get(cmd[1]).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else breakfield(cmd); break; + case("repair"): moves++; if (!objectNames.get(cmd[1]).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else repair(cmd); break; + case("placepump"): moves++; if (!objectNames.get(cmd[1]).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else placepump(cmd); break; + case("set"): moves++; if (!objectNames.get(cmd[1]).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else set(cmd); break; + case("disconnect"): moves++; if (!objectNames.get(cmd[1]).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else disconnect(cmd); break; + case("connect"): moves++; if (!objectNames.get(cmd[1]).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else connect(cmd); break; + case("getpump"): moves++; if (!objectNames.get(cmd[1]).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else getpump(cmd); break; + case("pickuppipe"): moves++; if (!objectNames.get(cmd[1]).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER);else pickuppipe(cmd); break; + case("makesticky"): moves++; if (!objectNames.get(cmd[1]).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else makesticky(cmd); break; + case("makeslippery"): moves++; if (!objectNames.get(cmd[1]).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else makeslippery(cmd); break; case("save"): save(cmd); break; case("testall"): testAll(cmd); break; case("list"): list(); break; @@ -941,7 +941,8 @@ public static void endturn(String[] cmd){ waterCounter.count(); //léptetés for (Object obj : objectNames.values()) { - if(obj instanceof Steppable value) { + if(obj instanceof Steppable) { + Steppable value = (Steppable) obj; value.step(); } } diff --git a/src/main/java/Drawing/PipeDraw.java b/src/main/java/Drawing/PipeDraw.java index 06ab9cb..8d2b945 100644 --- a/src/main/java/Drawing/PipeDraw.java +++ b/src/main/java/Drawing/PipeDraw.java @@ -41,8 +41,11 @@ public PipeDraw(int x1, int y1, int x2, int y2) { pipeB.addActionListener(ViewGame.selectListener); } public void setCoords(Drawable pumpFrom, Drawable pumpTo) { - int fromX, toX, fromY, toY; - + int fromX; + int toX; + int fromY; + int toY; + fromX = pumpFrom.getX(); fromY = pumpFrom.getY(); toX = pumpTo.getX(); diff --git a/src/main/java/Fields/ActiveFields/Cistern.java b/src/main/java/Fields/ActiveFields/Cistern.java index 988edc9..5505de8 100644 --- a/src/main/java/Fields/ActiveFields/Cistern.java +++ b/src/main/java/Fields/ActiveFields/Cistern.java @@ -93,26 +93,26 @@ public Pipe pickUpPipe() { @Override public String toString() { ArrayList players = this.getPlayers(); - String playersNames = "null"; - + StringBuilder playerBuilder = new StringBuilder("null"); for (int i = 0; i < players.size(); i++) { - if(i == 0) playersNames = ""; - playersNames += Controller.objectReverseNames.get(players.get(i)); + if(i == 0) playerBuilder.delete(0,3); + playerBuilder.append(Controller.objectReverseNames.get(players.get(i))); if (i != players.size() - 1) { - playersNames += ", "; + playerBuilder.append(", "); } } + ArrayList pipes = this.getPipes(); - String pipesNames ="null"; + StringBuilder pipeBuilder = new StringBuilder("null"); if(pipes != null) { for (int i = 0; i < pipes.size(); i++) { - if (i == 0) pipesNames = ""; - pipesNames += Controller.objectReverseNames.get(pipes.get(i)); + if (i == 0) pipeBuilder.delete(0,3); + pipeBuilder.append(Controller.objectReverseNames.get(pipes.get(i))); if (i != pipes.size() - 1) { - pipesNames += ", "; + pipeBuilder.append(", "); } } } @@ -121,7 +121,7 @@ public String toString() { + "\noccupied: " + this.isOccupied() + "\nwater: " + getWaterNoChange() + "\nbroken: " + this.isBroken() - + "\nplayers: " + playersNames - + "\npipes: " + pipesNames + "\n"; + + "\nplayers: " + playerBuilder + + "\npipes: " + pipeBuilder + "\n"; } } diff --git a/src/main/java/Fields/ActiveFields/Pump.java b/src/main/java/Fields/ActiveFields/Pump.java index f629375..59c2d13 100644 --- a/src/main/java/Fields/ActiveFields/Pump.java +++ b/src/main/java/Fields/ActiveFields/Pump.java @@ -133,14 +133,14 @@ public String toString() { String pipesNames = getPipeNames(); - String SWaterFrom=""; - String SWaterTo=""; + String sWaterFrom=""; + String sWaterTo=""; if(getWaterFrom() == -1 && getWaterTo() == -1 ){ - SWaterFrom = SWaterTo = "null"; + sWaterFrom = sWaterTo = "null"; } else{ - SWaterFrom = ""+Controller.objectReverseNames.get(getPipes().get(getWaterFrom())); - SWaterTo = ""+Controller.objectReverseNames.get(getPipes().get(getWaterTo())); + sWaterFrom = ""+Controller.objectReverseNames.get(getPipes().get(getWaterFrom())); + sWaterTo = ""+Controller.objectReverseNames.get(getPipes().get(getWaterTo())); } @@ -151,36 +151,36 @@ public String toString() { + "\nplayers: " + playersNames + "\npipes: " + pipesNames + "\ntank: " + this.getTank() - + "\nwaterFrom: " +SWaterFrom - + "\nwaterTo: " +SWaterTo + "\n"; + + "\nwaterFrom: " +sWaterFrom + + "\nwaterTo: " +sWaterTo + "\n"; } private String getPlayerNames() { ArrayList players = this.getPlayers(); - String playersNames = "null"; + StringBuilder playerBuilder = new StringBuilder("null"); for (int i = 0; i < players.size(); i++) { - if(i == 0) playersNames = ""; - playersNames += Controller.objectReverseNames.get(players.get(i)); + if(i == 0) playerBuilder.delete(0,3); + playerBuilder.append(Controller.objectReverseNames.get(players.get(i))); if (i != players.size() - 1) { - playersNames += ", "; + playerBuilder.append(", "); } } - return playersNames; + return playerBuilder.toString(); } private String getPipeNames(){ ArrayList pipes = this.getPipes(); - String pipesNames ="null"; + StringBuilder pipeBuilder = new StringBuilder("null"); if(pipes != null) { for (int i = 0; i < pipes.size(); i++) { - if (i == 0) pipesNames = ""; - pipesNames += Controller.objectReverseNames.get(pipes.get(i)); + if (i == 0) pipeBuilder.delete(0,3); + pipeBuilder.append(Controller.objectReverseNames.get(pipes.get(i))); if (i != pipes.size() - 1) { - pipesNames += ", "; + pipeBuilder.append(", "); } } } - return pipesNames; + return pipeBuilder.toString(); } } diff --git a/src/main/java/Fields/ActiveFields/Spring.java b/src/main/java/Fields/ActiveFields/Spring.java index 44dd54c..a47c5d8 100644 --- a/src/main/java/Fields/ActiveFields/Spring.java +++ b/src/main/java/Fields/ActiveFields/Spring.java @@ -60,32 +60,35 @@ public void step() { @Override public String toString() { ArrayList players = this.getPlayers(); - - String playersNames = "null"; - + StringBuilder playerBuilder = new StringBuilder("null"); for (int i = 0; i < players.size(); i++) { - if(i == 0) playersNames = ""; - playersNames += Controller.objectReverseNames.get(players.get(i)); + if(i == 0) playerBuilder.delete(0,3); + playerBuilder.append(Controller.objectReverseNames.get(players.get(i))); if (i != players.size() - 1) { - playersNames += ", "; + playerBuilder.append(", "); } } + + + ArrayList pipes = this.getPipes(); - String pipesNames ="null"; - for (int i = 0; i < pipes.size(); i++) { - if(i == 0) pipesNames = ""; - pipesNames += Controller.objectReverseNames.get(pipes.get(i)); - if (i != pipes.size() - 1) { - pipesNames += ", "; + StringBuilder pipeBuilder = new StringBuilder("null"); + if(pipes != null) { + for (int i = 0; i < pipes.size(); i++) { + if (i == 0) pipeBuilder.delete(0,3); + pipeBuilder.append(Controller.objectReverseNames.get(pipes.get(i))); + if (i != pipes.size() - 1) { + pipeBuilder.append(", "); + } } } return "name: "+ Controller.objectReverseNames.get(this) + "\noccupied: " + this.isOccupied() + "\nwater: " + getWaterNoChange() + "\nbroken: " + this.isBroken() - + "\nplayers: " + playersNames - + "\npipes: " + pipesNames + + "\nplayers: " + playerBuilder + + "\npipes: " + pipeBuilder + "\nwaterOut: " + this.getWaterOut() + "\nmaxOutWater: " + this.getMaxOutWater() + "\n"; } diff --git a/src/main/java/Fields/Pipe.java b/src/main/java/Fields/Pipe.java index 9d8a851..658306f 100644 --- a/src/main/java/Fields/Pipe.java +++ b/src/main/java/Fields/Pipe.java @@ -336,24 +336,22 @@ public void step(){ @Override public String toString() { ArrayList players = this.getPlayers(); - - String playersNames = "null"; - + StringBuilder playerBuilder = new StringBuilder("null"); for (int i = 0; i < players.size(); i++) { - if(i == 0) playersNames = ""; - playersNames += Controller.objectReverseNames.get(players.get(i)); + if(i == 0) playerBuilder.delete(0,3); + playerBuilder.append(Controller.objectReverseNames.get(players.get(i))); if (i != players.size() - 1) { - playersNames += ", "; + playerBuilder.append(", "); } } - ArrayList loaclFields = this.getFields(); - String fieldsNames ="null"; - for (int i = 0; i < loaclFields.size(); i++) { - if(i == 0) fieldsNames = ""; - fieldsNames += Controller.objectReverseNames.get(loaclFields.get(i)); - if (i != loaclFields.size() - 1) { - fieldsNames += ", "; + ArrayList localFields = this.getFields(); + StringBuilder fieldBuilder = new StringBuilder("null"); + for (int i = 0; i < localFields.size(); i++) { + if(i == 0) fieldBuilder.delete(0,3); + fieldBuilder.append(Controller.objectReverseNames.get(localFields.get(i))); + if (i != localFields.size() - 1) { + fieldBuilder.append(", "); } } @@ -361,8 +359,8 @@ public String toString() { + "\noccupied: " + this.isOccupied() + "\nwater: " + getWaterNoChange() + "\nbroken: " + this.isBroken() - + "\nplayers: " + playersNames - + "\nfields: " + fieldsNames + + "\nplayers: " + playerBuilder + + "\nfields: " + fieldBuilder + "\ncapacity: " + this.getCapacity() + "\nbreakable: " + this.getBreakable() + "\nrfluidtime: " + this.getRemainingFluidTime() diff --git a/src/main/java/srcTMP/palya.txt b/src/palya.txt similarity index 100% rename from src/main/java/srcTMP/palya.txt rename to src/palya.txt From b2d6b32fbe1045a07950eaafb568cac109c60648 Mon Sep 17 00:00:00 2001 From: Laci Date: Mon, 20 May 2024 00:51:20 +0200 Subject: [PATCH 07/12] minor changes --- src/main/java/Controll/Controller.java | 2 +- src/main/java/Drawing/CisternDraw.java | 1 + src/main/java/Drawing/PumpDraw.java | 1 + src/main/java/Fields/ActiveFields/ActiveFields.java | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/Controll/Controller.java b/src/main/java/Controll/Controller.java index 6931376..69d8d17 100644 --- a/src/main/java/Controll/Controller.java +++ b/src/main/java/Controll/Controller.java @@ -520,7 +520,7 @@ public static void show(String[] cmd){ switch (commands[1]){ case "player": if (test) outResults.add(p.toString()); - else logger.log(Level.INFO, p.toString()); + else logger.log(Level.INFO, p::toString); break; case "field": if (test) outResults.add(objectReverseNames.get(p.getStandingField())); diff --git a/src/main/java/Drawing/CisternDraw.java b/src/main/java/Drawing/CisternDraw.java index 5dae99d..477c67a 100644 --- a/src/main/java/Drawing/CisternDraw.java +++ b/src/main/java/Drawing/CisternDraw.java @@ -32,6 +32,7 @@ public CisternDraw(int tmpX, int tmpY) { * @param panel * @param g */ + @Override public void Draw(JPanel panel, Graphics2D g) { cistern.setBounds(x, y, 50, 50); cistern.setBorder(BorderFactory.createLineBorder(Color.blue, 5)); diff --git a/src/main/java/Drawing/PumpDraw.java b/src/main/java/Drawing/PumpDraw.java index 5f3837d..ea3bfaa 100644 --- a/src/main/java/Drawing/PumpDraw.java +++ b/src/main/java/Drawing/PumpDraw.java @@ -31,6 +31,7 @@ public PumpDraw(int tmpX, int tmpY) { * @param panel The panel to draw on. * @param g The graphics to draw with. * */ + @Override public void Draw(JPanel panel, Graphics2D g) { pump.setBounds(x, y, 50, 50); Pump p = (Pump)ViewGame.objectDrawNames.get(this); diff --git a/src/main/java/Fields/ActiveFields/ActiveFields.java b/src/main/java/Fields/ActiveFields/ActiveFields.java index 507b7be..2720f18 100644 --- a/src/main/java/Fields/ActiveFields/ActiveFields.java +++ b/src/main/java/Fields/ActiveFields/ActiveFields.java @@ -22,7 +22,7 @@ public abstract class ActiveFields extends Field { * @return The pipes connected to the active field */ public ArrayList getPipes() { - if (pipes.size() == 0) return null; + if (pipes.isEmpty()) return null; return pipes; } From fcb04cd19643af2f5778a14799bbfdd4dea3157e Mon Sep 17 00:00:00 2001 From: Laci Date: Mon, 20 May 2024 01:08:59 +0200 Subject: [PATCH 08/12] minor changes --- src/main/java/Controll/Controller.java | 57 +++++++++++++------------- src/main/java/Fields/Pipe.java | 4 ++ src/main/java/Players/Saboteur.java | 1 + 3 files changed, 33 insertions(+), 29 deletions(-) diff --git a/src/main/java/Controll/Controller.java b/src/main/java/Controll/Controller.java index 69d8d17..dfdf962 100644 --- a/src/main/java/Controll/Controller.java +++ b/src/main/java/Controll/Controller.java @@ -837,36 +837,35 @@ public static void save(String[] cmd) { catch(FileNotFoundException e) { logger.log(Level.WARNING, StringResourceController.FILE_NOT_FOUND); } - try { - Scanner scannerResult = new Scanner(new File(cmd[1])); - Scanner scannerExpected = new Scanner((new File(cmd[1].replace(".out", ".test")))); - ArrayList result = new ArrayList<>(); - ArrayList expected = new ArrayList<>(); - while (scannerResult.hasNextLine()){ - result.add(scannerResult.nextLine().strip()); - } - while (scannerExpected.hasNextLine()){ - expected.add(scannerExpected.nextLine().strip()); - } - String separator = "\\"; - String[] tmp=cmd[1].replaceAll(Pattern.quote(separator), "\\\\").split("\\\\"); - fileName = tmp[tmp.length-1]; - logger.log(Level.INFO, () -> "Test name: " + fileName.replace(".out", "")); - if (result.size() != expected.size()) { - logger.log(Level.INFO, "Test failed. The 2 files do not have the same amount of lines."); - return; - } - int errors = getErros(result, expected); - if (errors == 0 && !result.isEmpty() && !expected.isEmpty()) { - logger.log(Level.INFO, "Test succeeded.\n"); - } - else { - logger.log(Level.INFO, "Test failed.\n"); + try(Scanner scannerResult = new Scanner(new File(cmd[1]))) { + try(Scanner scannerExpected = new Scanner((new File(cmd[1].replace(".out", ".test"))));) { + ArrayList result = new ArrayList<>(); + ArrayList expected = new ArrayList<>(); + while (scannerResult.hasNextLine()) { + result.add(scannerResult.nextLine().strip()); + } + while (scannerExpected.hasNextLine()) { + expected.add(scannerExpected.nextLine().strip()); + } + String separator = "\\"; + String[] tmp = cmd[1].replaceAll(Pattern.quote(separator), "\\\\").split("\\\\"); + fileName = tmp[tmp.length - 1]; + logger.log(Level.INFO, () -> "Test name: " + fileName.replace(".out", "")); + if (result.size() != expected.size()) { + logger.log(Level.INFO, "Test failed. The 2 files do not have the same amount of lines."); + return; + } + int errors = getErros(result, expected); + if (errors == 0 && !result.isEmpty() && !expected.isEmpty()) { + logger.log(Level.INFO, "Test succeeded.\n"); + } else { + logger.log(Level.INFO, "Test failed.\n"); + } + pipes = pumps = 0; + waterCounter.reset(); + objectNames.clear(); + objectReverseNames.clear(); } - pipes=pumps=0; - waterCounter.reset(); - objectNames.clear(); - objectReverseNames.clear(); } catch(FileNotFoundException e) { logger.log(Level.WARNING, StringResourceController.FILE_NOT_FOUND); diff --git a/src/main/java/Fields/Pipe.java b/src/main/java/Fields/Pipe.java index 658306f..1801a81 100644 --- a/src/main/java/Fields/Pipe.java +++ b/src/main/java/Fields/Pipe.java @@ -262,6 +262,7 @@ public Field accept(Player p) { * @param p The player to be removed. * @return True if the player was removed. */ + @Override public boolean removePlayer(Player p){ if(fluid == Fluid.STICKY){ if(leave){ @@ -280,6 +281,7 @@ public boolean removePlayer(Player p){ * Methods for making the pipe slippery. * @return True if the pipe successfully became slippery. */ + @Override public boolean makeSlippery(){ if(fluid == Fluid.STICKY) return false; if(remainingFluidTime == 0){ @@ -298,6 +300,7 @@ public boolean makeSlippery(){ * Methods for making the pipe sticky. * @return True if the pipe successfully became sticky. */ + @Override public boolean makeSticky(){ if(fluid == Fluid.SLIPPERY) return false; if(remainingFluidTime == 0){ @@ -317,6 +320,7 @@ public boolean makeSticky(){ * Reduces the amount of time left until the pipe becomes dry. * If the time is 0 makes the pipe dry. */ + @Override public void step(){ if(breakable > 0){ breakable--; diff --git a/src/main/java/Players/Saboteur.java b/src/main/java/Players/Saboteur.java index 3458f84..960ae4f 100644 --- a/src/main/java/Players/Saboteur.java +++ b/src/main/java/Players/Saboteur.java @@ -19,6 +19,7 @@ public Saboteur() { * Method for making standingField slippery * @return boolean - returns true if action was successful. */ + @Override public boolean makeSlippery(){ return this.getStandingField().makeSlippery(); From a8645f89d718a46c33f0589525c84acf5ddbb504 Mon Sep 17 00:00:00 2001 From: Laci Date: Mon, 20 May 2024 01:35:25 +0200 Subject: [PATCH 09/12] reduce duplicated code --- .../java/Fields/ActiveFields/Cistern.java | 24 +++--------------- src/main/java/Fields/ActiveFields/Pump.java | 25 +++---------------- src/main/java/Fields/ActiveFields/Spring.java | 24 +++--------------- src/main/java/Fields/Pipe.java | 20 +++------------ .../StringResourceController.java | 18 +++++++++++++ 5 files changed, 31 insertions(+), 80 deletions(-) diff --git a/src/main/java/Fields/ActiveFields/Cistern.java b/src/main/java/Fields/ActiveFields/Cistern.java index 5505de8..02e099d 100644 --- a/src/main/java/Fields/ActiveFields/Cistern.java +++ b/src/main/java/Fields/ActiveFields/Cistern.java @@ -3,6 +3,7 @@ import Controll.Controller; import Fields.Pipe; import Players.Player; +import StringResource.StringResourceController; import java.util.ArrayList; import java.util.Random; @@ -93,29 +94,10 @@ public Pipe pickUpPipe() { @Override public String toString() { ArrayList players = this.getPlayers(); - StringBuilder playerBuilder = new StringBuilder("null"); - for (int i = 0; i < players.size(); i++) { - if(i == 0) playerBuilder.delete(0,3); - playerBuilder.append(Controller.objectReverseNames.get(players.get(i))); - if (i != players.size() - 1) { - playerBuilder.append(", "); - } - } - - - + String playerBuilder = StringResourceController.stingBuilder(players); ArrayList pipes = this.getPipes(); - StringBuilder pipeBuilder = new StringBuilder("null"); - if(pipes != null) { - for (int i = 0; i < pipes.size(); i++) { - if (i == 0) pipeBuilder.delete(0,3); - pipeBuilder.append(Controller.objectReverseNames.get(pipes.get(i))); - if (i != pipes.size() - 1) { - pipeBuilder.append(", "); - } - } - } + String pipeBuilder = StringResourceController.stingBuilder(pipes); return "name: "+ Controller.objectReverseNames.get(this) + "\noccupied: " + this.isOccupied() diff --git a/src/main/java/Fields/ActiveFields/Pump.java b/src/main/java/Fields/ActiveFields/Pump.java index 59c2d13..69e9327 100644 --- a/src/main/java/Fields/ActiveFields/Pump.java +++ b/src/main/java/Fields/ActiveFields/Pump.java @@ -3,6 +3,7 @@ import Controll.Controller; import Fields.Pipe; import Players.Player; +import StringResource.StringResourceController; import java.util.ArrayList; import java.util.Random; @@ -128,8 +129,6 @@ public String toString() { String playersNames = getPlayerNames(); - - String pipesNames = getPipeNames(); @@ -157,30 +156,12 @@ public String toString() { private String getPlayerNames() { ArrayList players = this.getPlayers(); - StringBuilder playerBuilder = new StringBuilder("null"); - for (int i = 0; i < players.size(); i++) { - if(i == 0) playerBuilder.delete(0,3); - playerBuilder.append(Controller.objectReverseNames.get(players.get(i))); - if (i != players.size() - 1) { - playerBuilder.append(", "); - } - } - return playerBuilder.toString(); + return StringResourceController.stingBuilder(players); } private String getPipeNames(){ ArrayList pipes = this.getPipes(); - StringBuilder pipeBuilder = new StringBuilder("null"); - if(pipes != null) { - for (int i = 0; i < pipes.size(); i++) { - if (i == 0) pipeBuilder.delete(0,3); - pipeBuilder.append(Controller.objectReverseNames.get(pipes.get(i))); - if (i != pipes.size() - 1) { - pipeBuilder.append(", "); - } - } - } - return pipeBuilder.toString(); + return StringResourceController.stingBuilder(pipes); } } diff --git a/src/main/java/Fields/ActiveFields/Spring.java b/src/main/java/Fields/ActiveFields/Spring.java index a47c5d8..b6e842f 100644 --- a/src/main/java/Fields/ActiveFields/Spring.java +++ b/src/main/java/Fields/ActiveFields/Spring.java @@ -3,6 +3,7 @@ import Controll.Controller; import Fields.Pipe; import Players.Player; +import StringResource.StringResourceController; import java.util.ArrayList; @@ -60,29 +61,12 @@ public void step() { @Override public String toString() { ArrayList players = this.getPlayers(); - StringBuilder playerBuilder = new StringBuilder("null"); - for (int i = 0; i < players.size(); i++) { - if(i == 0) playerBuilder.delete(0,3); - playerBuilder.append(Controller.objectReverseNames.get(players.get(i))); - if (i != players.size() - 1) { - playerBuilder.append(", "); - } - } - - + String playerBuilder = StringResourceController.stingBuilder(players); ArrayList pipes = this.getPipes(); - StringBuilder pipeBuilder = new StringBuilder("null"); - if(pipes != null) { - for (int i = 0; i < pipes.size(); i++) { - if (i == 0) pipeBuilder.delete(0,3); - pipeBuilder.append(Controller.objectReverseNames.get(pipes.get(i))); - if (i != pipes.size() - 1) { - pipeBuilder.append(", "); - } - } - } + String pipeBuilder = StringResourceController.stingBuilder(pipes); + return "name: "+ Controller.objectReverseNames.get(this) + "\noccupied: " + this.isOccupied() + "\nwater: " + getWaterNoChange() diff --git a/src/main/java/Fields/Pipe.java b/src/main/java/Fields/Pipe.java index 1801a81..e82f050 100644 --- a/src/main/java/Fields/Pipe.java +++ b/src/main/java/Fields/Pipe.java @@ -5,6 +5,7 @@ import Fields.ActiveFields.ActiveFields; import Fields.ActiveFields.Pump; import Players.Player; +import StringResource.StringResourceController; import java.util.ArrayList; import java.util.Random; @@ -340,25 +341,10 @@ public void step(){ @Override public String toString() { ArrayList players = this.getPlayers(); - StringBuilder playerBuilder = new StringBuilder("null"); - for (int i = 0; i < players.size(); i++) { - if(i == 0) playerBuilder.delete(0,3); - playerBuilder.append(Controller.objectReverseNames.get(players.get(i))); - if (i != players.size() - 1) { - playerBuilder.append(", "); - } - } + String playerBuilder = StringResourceController.stingBuilder(players); ArrayList localFields = this.getFields(); - StringBuilder fieldBuilder = new StringBuilder("null"); - for (int i = 0; i < localFields.size(); i++) { - if(i == 0) fieldBuilder.delete(0,3); - fieldBuilder.append(Controller.objectReverseNames.get(localFields.get(i))); - if (i != localFields.size() - 1) { - fieldBuilder.append(", "); - } - } - + String fieldBuilder = StringResourceController.stingBuilder(localFields); return "name: " + Controller.objectReverseNames.get(this) + "\noccupied: " + this.isOccupied() + "\nwater: " + getWaterNoChange() diff --git a/src/main/java/StringResource/StringResourceController.java b/src/main/java/StringResource/StringResourceController.java index e8414b0..2e94262 100644 --- a/src/main/java/StringResource/StringResourceController.java +++ b/src/main/java/StringResource/StringResourceController.java @@ -1,5 +1,9 @@ package StringResource; +import Controll.Controller; + +import java.util.List; + public final class StringResourceController { private StringResourceController(){} public static final String FALSE = "false"; @@ -10,4 +14,18 @@ private StringResourceController(){} public static final String WATER = "water"; public static final String RANDOM_ON = "A véletlen események be lettek kapcsolva."; public static final String INVALID_ACTION = "A műveletet nem lehet végrehajtani"; + + public static String stingBuilder(List collection){ + StringBuilder builder = new StringBuilder("null"); + if(collection != null) { + for (int i = 0; i < collection.size(); i++) { + if (i == 0) builder.delete(0,3); + builder.append(Controller.objectReverseNames.get(collection.get(i))); + if (i != collection.size() - 1) { + builder.append(", "); + } + } + } + return builder.toString(); + } } \ No newline at end of file From 92637881782b80e6159b24a53a085da341f39a50 Mon Sep 17 00:00:00 2001 From: Laci Date: Mon, 20 May 2024 01:59:16 +0200 Subject: [PATCH 10/12] minor changes --- src/main/java/Controll/Controller.java | 5 ++--- src/main/java/Fields/ActiveFields/ActiveFields.java | 2 +- src/main/java/Fields/ActiveFields/Cistern.java | 12 +----------- src/main/java/Fields/Pipe.java | 11 ++++++----- 4 files changed, 10 insertions(+), 20 deletions(-) diff --git a/src/main/java/Controll/Controller.java b/src/main/java/Controll/Controller.java index dfdf962..1b09cd0 100644 --- a/src/main/java/Controll/Controller.java +++ b/src/main/java/Controll/Controller.java @@ -178,9 +178,8 @@ public static void Run() { /** * Game mode after "create" you cannot create new objects in this mode. - * @throws FileNotFoundException */ - public static void Game() throws FileNotFoundException { + public static void Game(){ while(gameMode) { currentPlayer = activePlayers.get(0); // az első játékos a sor végére rakom, jelenleg ő az aktív activePlayers.remove(0); @@ -543,7 +542,7 @@ public static void showobject(String[] cmd){ public static void move(String[] cmd){ Player p = (Player)objectNames.get(cmd[1]); Field f = (Field)objectNames.get(cmd[2]); - ArrayList neighbors = p.getStandingField().getNeighborFields(); + List neighbors = p.getStandingField().getNeighborFields(); if(neighbors.contains(f)) { neighborsContains(p,f); } diff --git a/src/main/java/Fields/ActiveFields/ActiveFields.java b/src/main/java/Fields/ActiveFields/ActiveFields.java index 2720f18..521183e 100644 --- a/src/main/java/Fields/ActiveFields/ActiveFields.java +++ b/src/main/java/Fields/ActiveFields/ActiveFields.java @@ -22,7 +22,7 @@ public abstract class ActiveFields extends Field { * @return The pipes connected to the active field */ public ArrayList getPipes() { - if (pipes.isEmpty()) return null; + if (pipes.isEmpty()) return new ArrayList<>(); return pipes; } diff --git a/src/main/java/Fields/ActiveFields/Cistern.java b/src/main/java/Fields/ActiveFields/Cistern.java index 02e099d..148126c 100644 --- a/src/main/java/Fields/ActiveFields/Cistern.java +++ b/src/main/java/Fields/ActiveFields/Cistern.java @@ -32,7 +32,7 @@ public Cistern() { */ @Override public void step() { - if (getPipes() != null) { + if (!getPipes().isEmpty()) { for (Pipe pipe : getPipes()) { super.setWater(super.getWater() + pipe.getWater()); } @@ -61,16 +61,6 @@ public Pump createNewPump(boolean b) { else return null; } - /** - * Method for getting the water from the field. - * Prints the amount of water taken. - * @return The amount of water in the field. - */ - @Override - public int getWater() { - return super.getWater(); - } - /** * Method for picking up a (new) pipe from the field. * @return The new pipe. diff --git a/src/main/java/Fields/Pipe.java b/src/main/java/Fields/Pipe.java index e82f050..bd3bf9d 100644 --- a/src/main/java/Fields/Pipe.java +++ b/src/main/java/Fields/Pipe.java @@ -8,6 +8,7 @@ import StringResource.StringResourceController; import java.util.ArrayList; +import java.util.List; import java.util.Random; /** @@ -39,7 +40,7 @@ public class Pipe extends Field { /** * The ends of the pipe. Default is empty. */ - private ArrayList fields = new ArrayList<>(); + private List fields = new ArrayList<>(); /** * Constructor for Pipe @@ -52,7 +53,7 @@ public Pipe(int capacity) { /** * Setter for capacity. Only for initialization. */ - public void setFields(ArrayList fields) { + public void setFields(List fields) { this.fields = fields; } /** @@ -86,7 +87,7 @@ public void setFluid(Fluid fluid) { /** * Getter for fields as ActiveFields. */ - public ArrayList getFields() { return fields; } + public List getFields() { return fields; } /** * Getter for fields as Field. */ @@ -148,7 +149,7 @@ public boolean repair() { @Override public Pipe placePump(Pump newPump) { if(newPump == null) { return null; } - ActiveFields oldPump = (ActiveFields) fields.remove(0); + ActiveFields oldPump = fields.remove(0); disconnect(oldPump); @@ -343,7 +344,7 @@ public String toString() { ArrayList players = this.getPlayers(); String playerBuilder = StringResourceController.stingBuilder(players); - ArrayList localFields = this.getFields(); + List localFields = this.getFields(); String fieldBuilder = StringResourceController.stingBuilder(localFields); return "name: " + Controller.objectReverseNames.get(this) + "\noccupied: " + this.isOccupied() From 55a94a4da6c82b389e54529c162478c89b242218 Mon Sep 17 00:00:00 2001 From: Laci Date: Mon, 20 May 2024 21:01:20 +0200 Subject: [PATCH 11/12] Delete srcTep --- srcTMP/main/java/Controll/Controller.java | 968 ------------------ srcTMP/main/java/Controll/Menu.java | 156 --- srcTMP/main/java/Controll/ViewGame.java | 365 ------- srcTMP/main/java/Controll/WaterCounter.java | 124 --- srcTMP/main/java/Drawing/CisternDraw.java | 52 - srcTMP/main/java/Drawing/Drawable.java | 36 - srcTMP/main/java/Drawing/MechanicDraw.java | 81 -- srcTMP/main/java/Drawing/PipeDraw.java | 107 -- srcTMP/main/java/Drawing/PumpDraw.java | 56 - srcTMP/main/java/Drawing/SaboteurDraw.java | 82 -- srcTMP/main/java/Drawing/SpringDraw.java | 41 - srcTMP/main/java/Enums/Fluid.java | 5 - .../Fields/ActiveFields/ActiveFields.java | 78 -- .../java/Fields/ActiveFields/Cistern.java | 126 --- .../main/java/Fields/ActiveFields/Pump.java | 186 ---- .../main/java/Fields/ActiveFields/Spring.java | 92 -- srcTMP/main/java/Fields/Field.java | 256 ----- srcTMP/main/java/Fields/Pipe.java | 371 ------- srcTMP/main/java/Interfaces/Steppable.java | 13 - srcTMP/main/java/Players/Mechanic.java | 141 --- srcTMP/main/java/Players/Player.java | 148 --- srcTMP/main/java/Players/Saboteur.java | 35 - .../StringResourceController.java | 13 - srcTMP/palya.txt | 57 -- 24 files changed, 3589 deletions(-) delete mode 100644 srcTMP/main/java/Controll/Controller.java delete mode 100644 srcTMP/main/java/Controll/Menu.java delete mode 100644 srcTMP/main/java/Controll/ViewGame.java delete mode 100644 srcTMP/main/java/Controll/WaterCounter.java delete mode 100644 srcTMP/main/java/Drawing/CisternDraw.java delete mode 100644 srcTMP/main/java/Drawing/Drawable.java delete mode 100644 srcTMP/main/java/Drawing/MechanicDraw.java delete mode 100644 srcTMP/main/java/Drawing/PipeDraw.java delete mode 100644 srcTMP/main/java/Drawing/PumpDraw.java delete mode 100644 srcTMP/main/java/Drawing/SaboteurDraw.java delete mode 100644 srcTMP/main/java/Drawing/SpringDraw.java delete mode 100644 srcTMP/main/java/Enums/Fluid.java delete mode 100644 srcTMP/main/java/Fields/ActiveFields/ActiveFields.java delete mode 100644 srcTMP/main/java/Fields/ActiveFields/Cistern.java delete mode 100644 srcTMP/main/java/Fields/ActiveFields/Pump.java delete mode 100644 srcTMP/main/java/Fields/ActiveFields/Spring.java delete mode 100644 srcTMP/main/java/Fields/Field.java delete mode 100644 srcTMP/main/java/Fields/Pipe.java delete mode 100644 srcTMP/main/java/Interfaces/Steppable.java delete mode 100644 srcTMP/main/java/Players/Mechanic.java delete mode 100644 srcTMP/main/java/Players/Player.java delete mode 100644 srcTMP/main/java/Players/Saboteur.java delete mode 100644 srcTMP/main/java/StringResource/StringResourceController.java delete mode 100644 srcTMP/palya.txt diff --git a/srcTMP/main/java/Controll/Controller.java b/srcTMP/main/java/Controll/Controller.java deleted file mode 100644 index 12d6f29..0000000 --- a/srcTMP/main/java/Controll/Controller.java +++ /dev/null @@ -1,968 +0,0 @@ -package Controll; - -import Drawing.*; -import Enums.Fluid; -import Fields.ActiveFields.ActiveFields; -import Fields.ActiveFields.Cistern; -import Fields.ActiveFields.Pump; -import Fields.ActiveFields.Spring; -import Fields.Field; -import Fields.Pipe; -import Interfaces.Steppable; -import Players.Mechanic; -import Players.Player; -import Players.Saboteur; -import StringResource.StringResourceController; - -import javax.swing.text.View; -import java.io.*; -import java.lang.reflect.Array; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; -import java.util.HashMap; -import java.util.Map; -import java.util.Iterator; -import java.util.Scanner; -import java.util.regex.Pattern; -import java.util.logging.Level; -import java.util.logging.Logger; - - -@SuppressWarnings("DuplicatedCode") -public class Controller { - private Controller() {} - static Logger logger = Logger.getLogger(Controller.class.getName()); - /** - * If true the game is random - * */ - private static boolean random = true; - /** - * Getter for random - * */ - public static boolean isRandom() {return random; } - - /** - * Contains the names of the objects, the keys are the objects. - */ - public static final Map objectNames = new HashMap<>(); - - /** - * Contains the objects, the keys are the names of the objects. - */ - public static final Map objectReverseNames = new HashMap<>(); - /** - * WaterCounter of the game - * */ - public static final WaterCounter waterCounter = new WaterCounter(); - /** - * True if the game is tested - * */ - private static boolean test = false; - /** - * Getter for test - * */ - public static boolean isTest() {return test;} - /** - * Name of the used file - * */ - private static String fileName=""; - /** - * Path of the used file - * */ - private static String filePath=""; - - /** - * List of the test result - * */ - private static final ArrayList outResults = new ArrayList<>(); - - /** - * List of the activePlayers - * */ - private static final ArrayList activePlayers = new ArrayList<>(); - - /** - * Current Player - * */ - private static Player currentPlayer; - - /** - * List of the commands - * */ - public static final List commandList = new ArrayList<>(); - - /** - * Number of new pumps with commands - */ - public static int pipes=0; - /** - * Number of new pipes with commands - */ - public static int pumps=0; - - /** - * True after the command "create", you cannot create new objects after this - * Resets after the restart command - */ - public static boolean gameMode = false; - - public static int moves = 0; - public static boolean lastResult = true; - private static int turncount = 0; - public static String getActivePlayerName(){ - return objectReverseNames.get(currentPlayer); - } - - public static List getAllPlayers() { return activePlayers; } - - public static void setActivePlayer(Player p) { currentPlayer = p; activePlayers.remove(0); activePlayers.add(currentPlayer); } - - public static Player GetActivePlayer() { return currentPlayer; } - - public static boolean getLastResult() { return lastResult;} - public static boolean changeActivePlayer(){ - currentPlayer = activePlayers.get(0); // az első játékos a sor végére rakom, jelenleg ő az aktív - activePlayers.remove(0); - activePlayers.add(currentPlayer); - turncount++; - if(turncount == activePlayers.size()){ - turncount = 0; - return true; - } - else return false; - } - /** - *Function for controlling the game. - *Reads a command than calls a function to execute it. - * */ - public static void Run() { - while(!commandList.isEmpty()) { - String command = commandList.get(0); - commandList.remove(0); - String[] cmd = command.split(" "); - switch(cmd[0]) { - case("load"): load(cmd[1]); break; - case("pipe"): pipe(cmd); break; - case("pump"): pump(cmd); break; - case("cistern"): cistern(cmd); break; - case("spring"): spring(cmd); break; - case("mechanic"): mechanic(cmd); break; - case("saboteur"): saboteur(cmd); break; - case("connectpipe"): connectpipe(cmd); break; - case("random"): random(cmd); break; - case("create"): create(); break; - case("show"): show(cmd); break; - case("showobject"): showobject(cmd); break; - case("move"): move(cmd); break; - case("breakfield"): breakfield(cmd); break; - case("repair"): repair(cmd); break; - case("placepump"): placepump(cmd); break; - case("set"): set(cmd); break; - case("disconnect"): disconnect(cmd); break; - case("connect"): connect(cmd); break; - case("getpump"): getpump(cmd); break; - case("pickuppipe"): pickuppipe(cmd); break; - case("makesticky"): makesticky(cmd); break; - case("makeslippery"): makeslippery(cmd); break; - case("save"): save(cmd); break; - case("testall"): testAll(cmd); break; - case("list"): list(); break; - case("addplayer"): addplayer(cmd); break; - case("step"): step(cmd); break; - case("endturn"): endturn(cmd); break; - case("count"): count(cmd); break; - case("test"): test(cmd); break; - case("setend"): setend(cmd); break; - case("setpump"): setpump(cmd); break; - case("restart"): restart(cmd); break; - case("exit"): return; - default: logger.log(Level.INFO, "Hibás parancs."); - } - } - } - - /** - * Game mode after "create" you cannot create new objects in this mode. - * @throws FileNotFoundException - */ - public static void Game() throws FileNotFoundException { - while(gameMode) { - currentPlayer = activePlayers.get(0); // az első játékos a sor végére rakom, jelenleg ő az aktív - activePlayers.remove(0); - activePlayers.add(currentPlayer); - Scanner stdInScanner = new Scanner(System.in); - if (commandList.isEmpty()){ - commandList.add(stdInScanner.nextLine()); - } - String command = commandList.get(0); - commandList.remove(0); - String[] cmd = command.split(" "); - switch(cmd[0]) { - case("show"): show(cmd); break; - case("showobject"): showobject(cmd); break; - case("move"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else move(cmd); break; - case("breakfield"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else breakfield(cmd); break; - case("repair"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else repair(cmd); break; - case("placepump"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else placepump(cmd); break; - case("set"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else set(cmd); break; - case("disconnect"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else disconnect(cmd); break; - case("connect"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else connect(cmd); break; - case("getpump"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else getpump(cmd); break; - case("pickuppipe"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER);else pickuppipe(cmd); break; - case("makesticky"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else makesticky(cmd); break; - case("makeslippery"): moves++; if (!((Player)objectNames.get(cmd[1])).equals(currentPlayer)) logger.log(Level.INFO, StringResourceController.WRONG_PLAYER); else makeslippery(cmd); break; - case("save"): save(cmd); break; - case("testall"): testAll(cmd); break; - case("list"): list(); break; - case("addplayer"): addplayer(cmd); break; - case("step"): step(cmd); break; - case("endturn"): endturn(cmd); break; - case("count"): count(cmd); break; - case("test"): test(cmd); break; - case("setend"): setend(cmd); break; - case("setpump"): setpump(cmd); break; - case("restart"): restart(cmd); break; - case("exit"): return; - default: logger.log(Level.INFO, "Hibás parancs."); - } - if (moves == activePlayers.size()) { - moves = 0; - endturn(cmd); - } - } - Run(); - } - /** - * Function for loading a file. - * */ - public static void load(String cmd){ - try(Scanner scanner = new Scanner(new File(cmd))) { - outResults.clear(); - logger.log(Level.INFO, cmd); - - filePath = cmd; - String separator = "\\"; - String[] tmp=cmd.replaceAll(Pattern.quote(separator), "\\\\").split("\\\\"); - fileName = tmp[tmp.length-1]; - while (scanner.hasNextLine()){ - commandList.add(scanner.nextLine()); - logger.log(Level.INFO, commandList.get(commandList.size()-1)); - } - if (test) { - commandList.add("save " + filePath.replace(".in", ".out")); - } - } catch (FileNotFoundException e) { - logger.log(Level.INFO, "Nem található a fájl!"); - } - } - - public static void loadFileFromSrcToReader(String fileNameToOpen) { - // a text file is located in src folder in the project - Path rootDir = Paths.get(".").normalize().toAbsolutePath(); - File file = new File(rootDir.toString() + "/" + fileNameToOpen); - try( Reader input = new FileReader(file)) { - try (BufferedReader br = new BufferedReader(input)) { - - // Checks if reader is ready - - String line = ""; - - while ((line = br.readLine()) != null) { - logger.log(Level.INFO, line); - } - } - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** - * Function for creating a pump. - * */ - public static void pump(String[] cmd){ - Pump tmp = new Pump(Integer.parseInt(cmd[2])); - String[][] commands = new String[cmd.length-3][2]; - for(int i=3; i neighbors = p.getStandingField().getNeighborFields(); - if(neighbors.contains(f)) { - neighborsContains(p,f); - } - else{ - if (test) {outResults.add(StringResourceController.WRONG_ACTION);lastResult = false;} - else { - logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - lastResult = false; - moves--; - } - } - } - private static void neighborsContains(Player p, Field f){ - if (p.move(f)) { - if (test) {outResults.add(StringResourceController.GOOD_ACTION);lastResult = true;} - else {logger.log(Level.INFO, StringResourceController.GOOD_ACTION);lastResult = true;} - } else { - if (test) {outResults.add(StringResourceController.WRONG_ACTION);lastResult = false;} - else { - logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - lastResult = false; - moves--; - } - } - } - /** - * Function for breaking a field by a player. - * */ - public static void breakfield(String[] cmd){ - Player p = (Player)objectNames.get(cmd[1]); - if(p.breakField()){ - if (test) {outResults.add(StringResourceController.GOOD_ACTION); lastResult = true;} - else {logger.log(Level.INFO, StringResourceController.GOOD_ACTION);lastResult = true;} - }else { - if (test) {outResults.add(StringResourceController.WRONG_ACTION); lastResult = false;} - else { - logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - lastResult = false; - moves--; - } - } - } - /** - * Function for repairing a field by a player. - * */ - public static void repair(String[] cmd){ - Player p = (Player)objectNames.get(cmd[1]); - if(p.repair()){ - lastResult = true; - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - }else { - lastResult = false; - if (test) outResults.add(StringResourceController.WRONG_ACTION); - else { - logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - moves--; - } - } - } - /** - * Function for placing a pump by a player. - * */ - public static void placepump(String[] cmd){ - // |Pump A|===new=Pipe===|new Pump|===old=Pipe===|Pump B| - Player p = (Player)objectNames.get(cmd[1]); //player - ActiveFields pumpA; - ActiveFields pumpB; - pumpA = pumpB = null; - try { - pumpA = ((Pipe)p.getStandingField()).getFields().get(0); - pumpB = ((Pipe)p.getStandingField()).getFields().get(1); - } catch(Exception e) { - - } - - Pump hp = ((Mechanic)p).getHoldingPump(); //new pump - Pipe pipe = p.placePump(); //new pipe - if(pipe != null ){ - pipes++; - String s = "newPipe"+pipes; - objectNames.put(s, pipe); - objectReverseNames.put(pipe, s); - waterCounter.addPipe(pipe); - lastResult = true; - - //elements according to drawing - Pipe oldPipe = hp.getPipes().get(0); - - //___notes:___ - //the new pump is at: mecD.getX()+25, mecD.getY()+25 - //Drawables fo thoose who have - PipeDraw oldPipeD = (PipeDraw)ViewGame.objectDrawReverseNames.get(oldPipe); - Drawable pumpAD = ViewGame.objectDrawReverseNames.get(pumpA); - Drawable pumpBD = ViewGame.objectDrawReverseNames.get(pumpB); - - //drawing the new pump - MechanicDraw mecD = (MechanicDraw)ViewGame.objectDrawReverseNames.get(p); - PumpDraw newPumpD = new PumpDraw(mecD.getX(), mecD.getY()); - ViewGame.setDrawsNames(newPumpD, hp); - ViewGame.setDrawsReverseNames(hp, newPumpD); - //drawing the new pipe - PipeDraw newPipeD = new PipeDraw(0,0,0,0); - newPipeD.setCoords(newPumpD, pumpAD); - ViewGame.setDrawsNames(newPipeD, pipe); - ViewGame.setDrawsReverseNames(pipe, newPipeD); - - //redrawing the old pipe - oldPipeD.setCoords(newPumpD, pumpBD); - - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - }else { - lastResult = false; - if (test) outResults.add(StringResourceController.WRONG_ACTION); - else { - logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - moves--; - } - } - } - /** - * Function for setting a pump by a player. - * */ - public static void set(String[] cmd){ - Player player = (Player)objectNames.get(cmd[1]); - if(player.getStandingField().set((Pipe)objectNames.get(cmd[2]), (Pipe)objectNames.get(cmd[3]))){ - lastResult = true; - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - }else { - lastResult = false; - if (test) outResults.add(StringResourceController.WRONG_ACTION); - else { - logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - moves--; - } - } - } - /** - * Function for disconnecting a pipe by a player. - * */ - public static void disconnect(String[] cmd){ - Player player = (Player)objectNames.get(cmd[1]); - if(player.disconnect((Pipe)objectNames.get(cmd[2]))){ - lastResult = true; - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - }else { - lastResult = false; - if (test) outResults.add(StringResourceController.WRONG_ACTION); - else { - logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - moves--; - } - } - } - /** - * Function for connecting a pipe by a player. - * */ - public static void connect(String[] cmd){ - Player player = (Player)objectNames.get(cmd[1]); - - Pipe holdedPipe = null; - Pump standing = null; - try { - holdedPipe = ((Mechanic)player).getHoldingPipe(); - standing = (Pump)player.getStandingField(); - } catch(Exception e) {} - if(player.connect()){ - lastResult = true; - - PipeDraw pd = (PipeDraw)ViewGame.objectDrawReverseNames.get(holdedPipe); - Drawable toPumpD = ViewGame.objectDrawReverseNames.get(holdedPipe.getFields().get(0)); - Drawable fromPumpD = ViewGame.objectDrawReverseNames.get(standing); - pd.setCoords(fromPumpD, toPumpD); - - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - }else { - lastResult = false; - if (test) outResults.add(StringResourceController.WRONG_ACTION); - else { - logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - moves--; - } - } - } - /** - * Function for getting a pump by a player. - * */ - public static void getpump(String[] cmd){ - Player p = (Player)objectNames.get(cmd[1]); - Pump pump = p.getPump(); - if(pump != null ){ - pumps++; - String s = "newPump"+pumps; - objectNames.put(s, pump); - objectReverseNames.put(pump, s); - lastResult = true; - - - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - }else { - lastResult = false; - if (test) outResults.add(StringResourceController.WRONG_ACTION); - else { - logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - moves--; - } - } - } - /** - * Function picking up a pipe by a player. - * */ - public static void pickuppipe(String[] cmd){ - Player player = (Player)objectNames.get(cmd[1]); - if(player.pickUpPipe()){ - lastResult = lastResult && true; - - //legyen már az új csőnek drawable-je is - Pipe newPipe = ((Mechanic)player).getHoldingPipe(); - PipeDraw newPipeD = new PipeDraw(-100,0,0,0); - ViewGame.setDrawsNames(newPipeD, newPipe); - ViewGame.setDrawsReverseNames(newPipe, newPipeD); - - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - }else { - lastResult = false; - if (test) outResults.add(StringResourceController.WRONG_ACTION); - else { - logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - moves--; - } - } - } - /** - * Function for making a pipe sticky by a player. - * */ - public static void makesticky(String[] cmd){ - Player player = (Player)objectNames.get(cmd[1]); - if(player.makeSticky()){ - lastResult = true; - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - }else { - lastResult = false; - if (test) outResults.add(StringResourceController.WRONG_ACTION); - else { - logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - moves--; - } - } - } - /** - * Function for making a pipe slippery by a player. - * */ - public static void makeslippery(String[] cmd){ - Player player = (Player)objectNames.get(cmd[1]); - logger.log(Level.INFO, cmd[1]); - if(player.makeSlippery()){ - lastResult = true; - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - }else { - lastResult = false; - if (test) outResults.add(StringResourceController.WRONG_ACTION); - else { - logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - moves--; - } - } - } - /** - * Function for saving the results of a test. - * The fuction compares the output of the game to the expected output. - * The result of the comparison is shown on the console. - * */ - public static void save(String[] cmd) { - try (PrintWriter out = new PrintWriter(cmd[1].replace(".in", ".out"))) { - for (int i = 0; i < outResults.size(); i++) { - out.println(outResults.get(i)); - } - } - catch(FileNotFoundException e) { - logger.log(Level.WARNING, StringResourceController.FILE_NOT_FOUND); - } - try { - Scanner scannerResult = new Scanner(new File(cmd[1])); - Scanner scannerExpected = new Scanner((new File(cmd[1].replace(".out", ".test")))); - ArrayList result = new ArrayList<>(); - ArrayList expected = new ArrayList<>(); - while (scannerResult.hasNextLine()){ - result.add(scannerResult.nextLine().strip()); - } - while (scannerExpected.hasNextLine()){ - expected.add(scannerExpected.nextLine().strip()); - } - String separator = "\\"; - String[] tmp=cmd[1].replaceAll(Pattern.quote(separator), "\\\\").split("\\\\"); - fileName = tmp[tmp.length-1]; - logger.log(Level.INFO, "Test name: " + fileName.replace(".out", "")); - if (result.size() != expected.size()) { - logger.log(Level.INFO, "Test failed. The 2 files do not have the same amount of lines."); - return; - } - int errors = getErros(result, expected); - if (errors == 0 && !result.isEmpty() && !expected.isEmpty()) { - logger.log(Level.INFO, "Test succeeded.\n"); - } - else { - logger.log(Level.INFO, "Test failed.\n"); - } - pipes=pumps=0; - waterCounter.reset(); - objectNames.clear(); - objectReverseNames.clear(); - } - catch(FileNotFoundException e) { - logger.log(Level.WARNING, StringResourceController.FILE_NOT_FOUND); - } - outResults.clear(); - } - - private static int getErros(ArrayList result, ArrayList expected ){ - int errors = 0; - if (!result.isEmpty() && !expected.isEmpty()) { - for (int i = 0; i < expected.size(); i++) { - if (!result.get(i).equals(expected.get(i))) { - logger.log(Level.INFO, "Error in line " + (i+1) + ".\nExpected: " + expected.get(i) + ", but got: " + result.get(i)); - errors++; - } - } - } - return errors; - } - /** - * Function for doing all the tests. - * */ - public static void testAll(String[] cmd) { - try(Scanner scanner = new Scanner(new File(cmd[1] + "\\Alltests.txt"))) { - - while(scanner.hasNextLine()) { - String line = scanner.nextLine(); - load(cmd[1] + "\\" + line); - } - } catch (FileNotFoundException e) { - logger.log(Level.WARNING, StringResourceController.FILE_NOT_FOUND); - } - } - /** - * Function for listing all objects in the game. - * */ - public static void list(){ - for (Object obj : objectNames.values()) { - logger.log(Level.INFO, objectReverseNames.get(obj) + " "); - } logger.log(Level.INFO, ""); - } - /** - * Function for putting a player on a field. - * */ - public static void addplayer(String[] cmd) { - Field f = (Field) objectNames.get(cmd[1]); - Player p = (Player) objectNames.get(cmd[2]); - if(f.accept(p) != null) { - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - }else { - if (test) outResults.add(StringResourceController.WRONG_ACTION); - else logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - } - } - - public static void step(String[] cmd){ - Steppable s = (Steppable)objectNames.get(cmd[1]); - s.step(); - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - } - /** - * Function for ending a turn. - * Responsible for calling the step function for all steppable objects. - * */ - public static void endturn(String[] cmd){ - //elvégzi a kör végével járó lépéseket (vízszámolás, objektumok step függvényének hívása stb…) - //vízszámlálás - //water counter lehet hogy üres - waterCounter.count(); - //léptetés - for (Object obj : objectNames.values()) { - if(obj instanceof Steppable) { - Steppable value = (Steppable)obj; - value.step(); - } - } - logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - } - /** - * Function for countig the points for the two sides. - * */ - public static void count(String[] cmd){ - waterCounter.count(); - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - } - /** - * Function for restaring the game. - * */ - public static void restart(String[] cmd){ - random = true; - objectNames.clear(); - objectReverseNames.clear(); - waterCounter.reset(); - test = false; - pumps=pipes=0; - logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - if(!test) gameMode = false; - } - /** - * Function for putting the game into test mode. - * */ - public static void test(String[] cmd){ - if(cmd[1].equals("true")) test=true; - else if(cmd[1].equals(StringResourceController.FALSE)) test=false; - logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - } - /** - * Function for signaling to the watercounter that the game ended. - * */ - public static void setend(String[] cmd){ - waterCounter.setEnd(); - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - } - /** - * Function for setting the in/out pipes of a pump. - * */ - public static void setpump(String[] cmd){ - Pump pump = (Pump)objectNames.get(cmd[1]); - if(pump.set((Pipe)objectNames.get(cmd[2]), (Pipe)objectNames.get(cmd[3]))){ - if (test) outResults.add(StringResourceController.GOOD_ACTION); - else logger.log(Level.INFO, StringResourceController.GOOD_ACTION); - }else { - if (test) outResults.add(StringResourceController.WRONG_ACTION); - else logger.log(Level.INFO, StringResourceController.WRONG_ACTION); - } - } -} diff --git a/srcTMP/main/java/Controll/Menu.java b/srcTMP/main/java/Controll/Menu.java deleted file mode 100644 index bc1e2ae..0000000 --- a/srcTMP/main/java/Controll/Menu.java +++ /dev/null @@ -1,156 +0,0 @@ -package Controll; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.Color; -import javax.swing.WindowConstants; - -import java.io.FileNotFoundException; - -import javax.swing.JFrame; -import javax.swing.JTextField; -import javax.swing.JButton; -import javax.swing.JComboBox; - - -public class Menu extends JFrame implements ActionListener { - private String currentTheme; - private JButton newGame; - private JButton exitGame; - private JButton theme; - private JComboBox mechanics; - private JComboBox saboteurs; - private JTextField mechanic; - private JTextField saboteur; - - /** - * konstruktor - * @param name az ablak neve - * @param t a játék témája - */ - public Menu(String name, String t) { - currentTheme = t; - setTitle(name); - setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); - setResizable(false); - setLayout(null); - setBounds(700, 250, 500, 500); - - newGame = new JButton("New Game"); - newGame.setBounds(140, 95, 200, 60); - newGame.addActionListener(this); - - exitGame = new JButton("Exit"); - exitGame.setBounds(140, 300, 200, 60); - exitGame.addActionListener(this); - - theme = new JButton("Change theme"); - theme.setBounds(140, 225, 200, 60); - theme.addActionListener(this); - - add(newGame); - add(exitGame); - add(theme); - - Integer[] numOfMechanics = {2, 3, 4, 5, 6, 7, 8, 9}; - mechanics = new JComboBox<>(numOfMechanics); - mechanics.setBounds(300, 165, 40, 20); - - Integer[] numOfSaboteurs = {2, 3, 4, 5, 6, 7, 8, 9}; - saboteurs = new JComboBox<>(numOfSaboteurs); - saboteurs.setBounds(300, 195, 40, 20); - - add(mechanics); - add(saboteurs); - - mechanic = new JTextField("Number of mechanics:"); - mechanic.setBounds(140, 165, 160, 20); - mechanic.setEditable(false); - - saboteur = new JTextField("Number of saboteurs:"); - saboteur.setBounds(140, 195, 160, 20); - saboteur.setEditable(false); - - add(mechanic); - add(saboteur); - - if (currentTheme.equals("Black")) changeTheme(currentTheme); - setVisible(false); - } - - /** - * láthatóvá válik a menü - */ - public void showMenu() { - setVisible(true); - } - - /** - * sötét téma be/ki kapcsolása - */ - public void changeTheme(String s) { - if (s.equals("White")) { - currentTheme = "Black"; - getContentPane().setBackground(Color.darkGray); - newGame.setBackground(Color.gray); - exitGame.setBackground(Color.gray); - theme.setBackground(Color.gray); - mechanics.setBackground(Color.gray); - saboteurs.setBackground(Color.gray); - mechanic.setBackground(Color.gray); - saboteur.setBackground(Color.gray); - } - else { - currentTheme = "White"; - getContentPane().setBackground(null); - newGame.setBackground(null); - exitGame.setBackground(null); - theme.setBackground(null); - mechanics.setBackground(null); - saboteurs.setBackground(null); - mechanic.setBackground(null); - saboteur.setBackground(null); - } - } - - @Override - public void actionPerformed(ActionEvent e) { - - // új játék elkezdése a kiválasztott adatokkal - if (e.getSource() == newGame) { - - Controller.load("src/palya.txt"); - - - if ((int)mechanics.getSelectedItem() > 2) { - for (int i = 3; i <= (int)mechanics.getSelectedItem(); i++) { - Controller.commandList.add("mechanic Mec" + i + " E"); - Controller.commandList.add("addplayer E Mec" + i); - } - } - if ((int)saboteurs.getSelectedItem() > 2) { - for (int i = 3; i <= (int)saboteurs.getSelectedItem(); i++) { - Controller.commandList.add("saboteur Sab" + i + " D"); - Controller.commandList.add("addplayer D Sab" + i); - } - } - Controller.Run(); // egyszer fut le, felépíti a pályát, utána a függvényeit kell majd hívni - - Controller.create(); - Controller.setActivePlayer(Controller.getAllPlayers().get(0)); - this.dispose(); - ViewGame vg = new ViewGame(); - vg.setBackgroundColor(currentTheme); - } - - // téma változtatása - if (e.getSource() == theme) { - changeTheme(currentTheme); - } - - // kilépés a játékból - if (e.getSource() == exitGame) { - System.exit(0); - } - } -} \ No newline at end of file diff --git a/srcTMP/main/java/Controll/ViewGame.java b/srcTMP/main/java/Controll/ViewGame.java deleted file mode 100644 index e09e536..0000000 --- a/srcTMP/main/java/Controll/ViewGame.java +++ /dev/null @@ -1,365 +0,0 @@ -package Controll; - -import Drawing.*; -import Enums.Fluid; -import Fields.*; - -import Fields.ActiveFields.*; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.List; -import java.util.HashMap; -import java.util.Map; -import javax.swing.WindowConstants; - -public class ViewGame extends JFrame implements ActionListener { - - private static boolean isChosen = false; - private JPanel gameBackground; - - /** - * HashMap for the Drawables - */ - public static final Map objectDrawNames = new HashMap<>(); - /** - * HashMap for the Drawables - */ - public static final Map objectDrawReverseNames = new HashMap<>(); - - - public static ViewGame vg; - - /** - * Infos - */ - static JLabel activePlayer; - JLabel labelPoints; - static JLabel mecPoints; - static JLabel sabPoints; - static JLabel successLabel; - /** - * Controll buttons - */ - JButton moveButton; - JButton repairButton; - JButton breakButton; - JButton makeSlipperyButton; - JButton makeStickyButton; - JButton pickUpButton; - JButton putDownButton; - JButton setPumpButton; - - /** - * Last action - */ - static JButton lastAction; //utoljára megnyomott gomb - /** - * ArrayList for the selected elements - */ - static final List selectSequence = new ArrayList<>(); //kiválasztott elemek, kiválasztásuk sorrendjében - /** - * HashMap for the buttons - */ - public static final Map buttonToElement = new HashMap<>(); //kiválasztó gomb -> kiválasztott rajz - - /** - * Max number of rounds - */ - private static int maxRounds = 20; - /** - * Number of rounds - */ - private static int round = 1; - - - // Ez hívodik, amikor kiválasztunk egy elemet - /** - * Action listener for the buttons - */ - public static ActionListener selectListener = new ActionListener() { - public void actionPerformed(ActionEvent e) { - Drawable selectedDrawing = buttonToElement.get(e.getSource()); - Object selected = objectDrawNames.get(selectedDrawing); //a kiválasztott elem - selectSequence.add(selected); - String[] cmd = new String[10]; - - - //Ez egy nagyon szar módja a feltételnek - //De így megússzuk, hogy az összes gombot static-á tegyük - if(lastAction.getText().equals("Pick up")) { - cmd[1] = Controller.getActivePlayerName(); - //ezzel még lesz munka - - //Ha elvégeztük a teendőt, ezzel kell befejezni - isChosen = false; - selectSequence.clear(); - changeText(cmd); - } - if(lastAction.getText().equals("Set pump") && selectSequence.size() == 2) { - cmd[1] = Controller.getActivePlayerName(); - cmd[2] = Controller.objectReverseNames.get(selectSequence.get(0)); - cmd[3] = Controller.objectReverseNames.get(selectSequence.get(1)); - Controller.set(cmd); - isChosen = false; - selectSequence.clear(); - changeText(cmd); - } - if(lastAction.getText().equals("Move")){ - cmd[1] = Controller.getActivePlayerName(); - cmd[2] = Controller.objectReverseNames.get(selectSequence.get(0)); - Controller.move(cmd); - isChosen = false; - selectSequence.clear(); - changeText(cmd); - } - - vg.repaint(); - } - }; - - /** - * Main method - * @param args - */ - public static void main(String[] args){ - Menu menu = new Menu("Menu", "White"); - menu.showMenu(); - } - - /** - * Setter for the objectDrawNames - */ - public static void setDrawsNames(Drawable d, Object o) { objectDrawNames.put(d, o); } - - /** - * Setter for the reverse of the objectDrawNames - * @param o - * @param d - */ - public static void setDrawsReverseNames(Object o, Drawable d) { objectDrawReverseNames.put(o, d); } - - /** - * Get chosen method - */ - public static boolean getChosen(){ - return isChosen; - } - - - /** - * Constructor responsible for the game window initialization - */ - public ViewGame() { - setTitle("Sivatagi vízhálózatok üzemeltetése a gyakorlatban 2"); - setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); - setResizable(true); - setBounds(400, 150, 1000, 700); - setLayout(new BorderLayout()); - gameBackground = new JPanel() { - @Override - protected void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D)g; - g2d.setColor(Color.black); - super.paintComponent(g2d); - for (Drawable draw : objectDrawReverseNames.values()){ - if (draw instanceof PipeDraw) { - Pipe p = (Pipe)ViewGame.objectDrawNames.get(draw); - float[] dash1 = { 2f, 0f, 2f }; - if (p.isBroken()) g2d.setStroke(new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 3.0f, dash1, 2f)); - else g2d.setStroke(new BasicStroke(5)); - if (p.getFluid().equals(Fluid.DRY)) g2d.setColor(Color.black); - else if (p.getFluid().equals(Fluid.SLIPPERY)) g2d.setColor(Color.blue); - else if (p.getFluid().equals(Fluid.STICKY)) g2d.setColor(Color.yellow); - g2d.drawLine(((PipeDraw) draw).getxFrom(), ((PipeDraw) draw).getYFrom(), ((PipeDraw) draw).getxTo(), ((PipeDraw) draw).getYTo()); - } - } - } - }; - gameBackground.setBounds(0,0, 800, 500); - gameBackground.setLayout(null); - add(gameBackground, BorderLayout.CENTER); - - - JPanel controllButtons = new JPanel(); - controllButtons.setLayout(new GridLayout(1,7)); - moveButton = new JButton("Move"); - repairButton = new JButton("Repair"); - setPumpButton = new JButton("Set pump"); - breakButton = new JButton("Break"); - makeSlipperyButton = new JButton("Make Slippery"); - makeStickyButton = new JButton("Make Sticky"); - pickUpButton = new JButton("Pick up"); - putDownButton = new JButton("Put down"); - moveButton.addActionListener(this); - repairButton.addActionListener(this); - setPumpButton.addActionListener(this); - breakButton.addActionListener(this); - makeSlipperyButton.addActionListener(this); - makeStickyButton.addActionListener(this); - pickUpButton.addActionListener(this); - putDownButton.addActionListener(this); - controllButtons.add(moveButton); - controllButtons.add(repairButton); - controllButtons.add(setPumpButton); - controllButtons.add(breakButton); - controllButtons.add(makeSlipperyButton); - controllButtons.add(makeStickyButton); - controllButtons.add(pickUpButton); - controllButtons.add(putDownButton); - add(controllButtons,BorderLayout.SOUTH); - - JPanel text = new JPanel(); - text.setLayout(new GridLayout(4,1)); - activePlayer = new JLabel("Active Player: "); - labelPoints = new JLabel("Points: "); - mecPoints = new JLabel("Mechanic: "); - sabPoints = new JLabel("Saboteur: "); - successLabel= new JLabel("Last Action: "); - text.add(activePlayer); - JPanel points = new JPanel(); - points.setLayout(new GridLayout(3,1)); - points.add(labelPoints); - points.add(mecPoints); - points.add(sabPoints); - text.add(successLabel); - text.add(points); - add(text,BorderLayout.EAST); - activePlayer.setText("Active Player: "+ Controller.getActivePlayerName()); - gameBackground.setBackground(new Color(150, 75, 0)); - setVisible(true); - repaint(); - vg = this; - } - - /** - * Paints the objects - * @param g - */ - @Override - public void paint(Graphics g) { - super.paint(g); - Graphics2D g2d = (Graphics2D) g; - DrawAll(g2d); - } - - /** - * Changes the background color - * @param theme - */ - public void setBackgroundColor(String theme) { - if (theme.equals("Black")) getContentPane().setBackground(Color.darkGray); - } - - /** - * Draws all the objects - * @param g - */ - public void DrawAll(Graphics2D g) { - for (Drawable draw : objectDrawReverseNames.values()) { - draw.Draw(gameBackground, g); - } - } - - /** - * Action handler method - * @param e - */ - public void actionPerformed(ActionEvent e) { - String[] cmd = new String[10]; - lastAction = (JButton)e.getSource(); //innen tudjuk, melyik gombot lett utoljára nyomva - boolean successful = false; - if(e.getSource() == moveButton){ - isChosen = true; - } - if(e.getSource() == repairButton){ - isChosen = false; - cmd[1] = Controller.getActivePlayerName(); - Controller.repair(cmd); - successful = true; - } - if(e.getSource() == setPumpButton){ - //e gombra kattintva kéne a pumpát átállítani - //Úgy lenne a legkényelmesebb, ha először kiválasztjuk honnan, aztán hová - isChosen = true; - } - if(e.getSource() == breakButton){ - isChosen = false; - cmd[1] = Controller.getActivePlayerName(); - Controller.breakfield(cmd); - successful = true; - } - if(e.getSource() == makeSlipperyButton){ - isChosen = false; - cmd[1] = Controller.getActivePlayerName(); - Controller.makeslippery(cmd); - successful = true; - } - if(e.getSource() == makeStickyButton){ - isChosen = false; - cmd[1] = Controller.getActivePlayerName(); - Controller.makesticky(cmd); - successful = true; - } - if(e.getSource() == pickUpButton){ - isChosen = true; - } - if(e.getSource() == putDownButton){ - cmd[1] = Controller.getActivePlayerName(); - if(Controller.GetActivePlayer().getStandingField() instanceof Pipe) Controller.placepump(cmd); - else Controller.connect(cmd); - successful = true; - } - if(successful) { - changeText(cmd); - } - this.repaint(); - } - - /** - * A function that changes the text on the right side of the screen. - * @param cmd - */ - public static void changeText(String[] cmd){ - boolean b = Controller.changeActivePlayer(); - activePlayer.setText("Active Player: " + Controller.getActivePlayerName()); - if (b) { - Controller.endturn(cmd); - mecPoints.setText("Mechanic: " + Controller.waterCounter.getMechanic()); - sabPoints.setText("Saboteur: " + Controller.waterCounter.getSaboteur()); - ++round; - if(round == maxRounds){ - Controller.setend(cmd); - Controller.endturn(cmd); - mecPoints.setText("Mechanic: " + Controller.waterCounter.getMechanic()); - sabPoints.setText("Saboteur: " + Controller.waterCounter.getSaboteur()); - vg.THE_END(); - } - - } - if(Controller.getLastResult()){ - successLabel.setText("Last Action: Successful"); - }else{ - successLabel.setText("Last Action: Unsuccessful"); - } - } - - /** - * A function called at the end of the game that disables the buttons and prints the name of the winning player. - */ - public void THE_END(){ - moveButton.setEnabled(false); - repairButton.setEnabled(false); - breakButton.setEnabled(false); - makeSlipperyButton.setEnabled(false); - makeStickyButton.setEnabled(false); - pickUpButton.setEnabled(false); - putDownButton.setEnabled(false); - setPumpButton.setEnabled(false); - JOptionPane.showMessageDialog(this, "The game has ended! The winner is: " + Controller.waterCounter.winner()); - this.repaint(); - } -} diff --git a/srcTMP/main/java/Controll/WaterCounter.java b/srcTMP/main/java/Controll/WaterCounter.java deleted file mode 100644 index bb9156f..0000000 --- a/srcTMP/main/java/Controll/WaterCounter.java +++ /dev/null @@ -1,124 +0,0 @@ -package Controll; - -import Fields.ActiveFields.Cistern; -import Fields.Pipe; - -import java.util.ArrayList; - -import static java.lang.Math.abs; - -/** - *WaterCounter class. - * Responsible for counting the water. - */ -public class WaterCounter { - - /** - *Saboteur's water count. Default value is 0. - */ - private int saboteur; - /** - *Mechanic's water count. Default value is 0. - */ - private int mechanic; - - /** - * All cisterns in the game. - */ - private final ArrayList cisterns = new ArrayList<>(); - /** - * All pipes in the game. - */ - private final ArrayList pipes = new ArrayList<>(); - /** - * Shows if the game ended. Default value false. - */ - private boolean end = false; - - /** - *WaterCounter constructor. - * Responsible for initializing the water counter. - */ - - public WaterCounter() { - this.saboteur = 0; - this.mechanic = 0; - } - /** - *Method for resetting the watercounter. - */ - public void reset(){ - saboteur=0; mechanic=0; end = false; - cisterns.clear(); pipes.clear(); - } - /** - *Getter for saboteur. - * @return saboteur - Points of the saboteurs. - */ - public int getSaboteur() { return saboteur; } - /** - *Getter for mechanic. - * @return mechanic - Points of the mechanics. - */ - public int getMechanic() { return mechanic; } - /** - *Adds new Cistern to cisterns. - * @param c Cistern that is to be added to cisterns. - */ - public void addCistern(Cistern c){ - cisterns.add(c); - } - - /** - *Adds new Pipe to pipes. - * @param p Pipe that is to be added to pipes. - */ - public void addPipe(Pipe p){ - pipes.add(p); - } - - /** - * Method that changes end to true. - */ - public void setEnd(){ - end = true; - } - /** - *Count method. - * Responsible for counting the water for both team. - */ - public void count(){ - for (Pipe pipe : pipes) { - int w = pipe.getWater(); - if (w > 0) { - pipe.fillInWater(w); - } else - saboteur += abs(w); - } - if(end) { - for (Cistern cistern : cisterns) { - int w = cistern.getWater(); - mechanic += w; - } - } - } - /** - * Method for getting a string containing all the important information about the watercounter. - * @return String - returns the important information. - */ - @Override - public String toString() { - return "saboteur: "+ this.getSaboteur() - + "\nmechanic: " + this.getMechanic() - +"\n"; - } - - public String winner(){ - if(saboteur > mechanic) - return "Saboteur"; - else if(saboteur < mechanic) - return "Mechanic"; - else - return "Döntetlen"; - } -} diff --git a/srcTMP/main/java/Drawing/CisternDraw.java b/srcTMP/main/java/Drawing/CisternDraw.java deleted file mode 100644 index c0e5515..0000000 --- a/srcTMP/main/java/Drawing/CisternDraw.java +++ /dev/null @@ -1,52 +0,0 @@ -package Drawing; - -import Controll.ViewGame; -import javax.swing.*; -import java.awt.*; - -/** - * CisternDraw class - */ -public class CisternDraw extends Drawable { - JButton cistern = new JButton(); - JButton cisternB = new JButton(); - - /** - * CisternDraw constructor - * @param tmpX - * @param tmpY - */ - public CisternDraw(int tmpX, int tmpY) { - x = tmpX; - y = tmpY; - cistern.setVisible(true); - cistern.setBackground(new Color(150, 75, 0)); - - ViewGame.buttonToElement.put(cisternB, this); - cisternB.addActionListener(ViewGame.selectListener); - } - - /** - * Draw method - * @param panel - * @param g - */ - public void Draw(JPanel panel, Graphics2D g) { - cistern.setBounds(x, y, 50, 50); - cistern.setBorder(BorderFactory.createLineBorder(Color.blue, 5)); - - if(ViewGame.getChosen()) { - cisternB.setVisible(true); - cisternB.setBackground(new Color(255, 0, 0)); - cisternB.setBounds(x, y, 50, 50); - cisternB.setBorder(BorderFactory.createLineBorder(Color.blue, 5)); - panel.add(cisternB); - } else { - cisternB.setVisible(false); - panel.remove(cisternB); - } - - panel.add(cistern); - panel.repaint(); - } -} diff --git a/srcTMP/main/java/Drawing/Drawable.java b/srcTMP/main/java/Drawing/Drawable.java deleted file mode 100644 index 1e042a9..0000000 --- a/srcTMP/main/java/Drawing/Drawable.java +++ /dev/null @@ -1,36 +0,0 @@ -package Drawing; - -import javax.swing.*; -import java.awt.*; - -/** - * Drawable class - */ -public abstract class Drawable { - protected int x; - protected int y; - - /** - * Get X method - * @return - */ - public int getX() { - return x; - } - - /** - * Get Y method - * @return - */ - public int getY() { - return y; - } - - /** - * Draw method - * @param panel - * @param g - */ - public void Draw(JPanel panel, Graphics2D g) { - } -} diff --git a/srcTMP/main/java/Drawing/MechanicDraw.java b/srcTMP/main/java/Drawing/MechanicDraw.java deleted file mode 100644 index ff16063..0000000 --- a/srcTMP/main/java/Drawing/MechanicDraw.java +++ /dev/null @@ -1,81 +0,0 @@ -package Drawing; - -import Controll.Controller; -import Controll.ViewGame; -import Fields.ActiveFields.Cistern; -import Fields.ActiveFields.Pump; -import Fields.ActiveFields.Spring; -import Fields.Field; -import Fields.Pipe; -import Players.Mechanic; -import Players.Player; - -import javax.swing.*; -import java.awt.*; -import java.util.ArrayList; - -/** - * Class for drawing the mechanic. - * */ -public class MechanicDraw extends Drawable { - String mecName = ""; - JButton mec = new JButton(); - - /** - * Constructor for the mechanic. - * @param tmpX X coordinate of the mechanic. - * @param tmpY Y coordinate of the mechanic. - * */ - public MechanicDraw(int tmpX, int tmpY) { - x = tmpX; - y = tmpY; - mec.setVisible(true); - } - - /** - * Draw method for the mechanic. - * @param panel - * @param g - */ - @Override - public void Draw(JPanel panel, Graphics2D g) { - Mechanic m = (Mechanic)ViewGame.objectDrawNames.get(this); - Player current = Controller.GetActivePlayer(); - mecName = Controller.objectReverseNames.get(m); - mec.setText(mecName); - Field f = m.getStandingField(); - if (f instanceof Pipe) { - PipeDraw pd = (PipeDraw)ViewGame.objectDrawReverseNames.get(f); - ArrayList players = f.getPlayers(); - int i = players.indexOf(m); - x = (pd.getxFrom()+pd.getxTo())/2-25; - y = (pd.getYFrom()+pd.getYTo())/2 - (i+1)*25; - } - else if (f instanceof Pump) { - PumpDraw pd = (PumpDraw)ViewGame.objectDrawReverseNames.get(f); - ArrayList players = f.getPlayers(); - int i = players.indexOf(m); - x = pd.getX(); - y = pd.getY() - (i+1)*25; - } - else if (f instanceof Cistern) { - CisternDraw pd = (CisternDraw)ViewGame.objectDrawReverseNames.get(f); - ArrayList players = f.getPlayers(); - int i = players.indexOf(m); - x = pd.getX(); - y = pd.getY() - (i+1)*25; - } - else if (f instanceof Spring) { - SpringDraw pd = (SpringDraw)ViewGame.objectDrawReverseNames.get(f); - ArrayList players = f.getPlayers(); - int i = players.indexOf(m); - x = pd.getX(); - y = pd.getY() - (i+1)*25; - } - mec.setBounds(x, y, 50, 20); - if (m.equals(current)) mec.setBorder(BorderFactory.createLineBorder(Color.green, 5)); - else mec.setBorder(BorderFactory.createLineBorder(Color.red, 5)); - panel.add(mec); - panel.repaint(); - } -} diff --git a/srcTMP/main/java/Drawing/PipeDraw.java b/srcTMP/main/java/Drawing/PipeDraw.java deleted file mode 100644 index 06ab9cb..0000000 --- a/srcTMP/main/java/Drawing/PipeDraw.java +++ /dev/null @@ -1,107 +0,0 @@ -package Drawing; - -import Controll.ViewGame; - -import javax.swing.*; -import java.awt.*; - -/** - * PipeDraw class - */ -public class PipeDraw extends Drawable { - private int xFrom; - private int xTo; - private int yFrom; - private int yTo; - JButton pipeB = new JButton(); - - /** - * Getters - * @return xFrom, xTo, yFrom, yTo - */ - public int getxFrom() { return xFrom; } - public int getxTo() { return xTo; } - public int getYFrom() { return yFrom; } - public int getYTo() { return yTo; } - - /** - * Constructor for PipeDraw - * @param x1 - * @param y1 - * @param x2 - * @param y2 - */ - public PipeDraw(int x1, int y1, int x2, int y2) { - xFrom = x1; - yFrom = y1; - xTo = x2; - yTo = y2; - - ViewGame.buttonToElement.put(pipeB, this); - pipeB.addActionListener(ViewGame.selectListener); - } - public void setCoords(Drawable pumpFrom, Drawable pumpTo) { - int fromX, toX, fromY, toY; - - fromX = pumpFrom.getX(); - fromY = pumpFrom.getY(); - toX = pumpTo.getX(); - toY = pumpTo.getY(); - - //A cél pumpa - if(toY < fromY) { - //felettünk van - toY += 50; - } else if(toY > fromY) { - //alattunk - fromY += 50; - } else { - //velünk egy magasságban - toY += 25; - fromY += 25; - - } - if(toX < fromX) { - //balra - toX += 50; - } else if(fromX > toX) { - //jobbra - fromX += 50; - } else { - //egy oszlopban - toX += 25; - fromX += 25; - } - setCoords(fromX, fromY, toX, toY); - - - } - public void setCoords(int x1, int y1, int x2, int y2) { - xFrom = x1; - yFrom = y1; - xTo = x2; - yTo = y2; - } - - /** - * Draw method - * @param panel - * @param g2d - */ - @Override - public void Draw(JPanel panel, Graphics2D g2d) { - - if(ViewGame.getChosen()) { - pipeB.setVisible(true); - pipeB.setBackground(new Color(255, 0, 0)); - pipeB.setBounds(xFrom + (xTo - xFrom) / 2 - 25, yFrom + (yTo - yFrom) / 2 - 12, 50, 25); - pipeB.setBorder(BorderFactory.createLineBorder(Color.black, 5)); - panel.add(pipeB); - } else { - pipeB.setVisible(false); - panel.remove(pipeB); - } - - panel.repaint(); - } -} diff --git a/srcTMP/main/java/Drawing/PumpDraw.java b/srcTMP/main/java/Drawing/PumpDraw.java deleted file mode 100644 index 5f3837d..0000000 --- a/srcTMP/main/java/Drawing/PumpDraw.java +++ /dev/null @@ -1,56 +0,0 @@ -package Drawing; - -import Controll.ViewGame; -import Fields.ActiveFields.Pump; - -import javax.swing.*; -import java.awt.*; - -/** - * Class for drawing the mechanic. - * */ -public class PumpDraw extends Drawable { - JButton pump = new JButton(); - JButton pumpB = new JButton(); - /** - * Constructor for the mechanic. - * @param tmpX X coordinate of the mechanic. - * @param tmpY Y coordinate of the mechanic. - * */ - public PumpDraw(int tmpX, int tmpY) { - x = tmpX; - y = tmpY; - pump.setVisible(true); - pump.setBackground(new Color(150, 75, 0)); - - ViewGame.buttonToElement.put(pumpB, this); - pumpB.addActionListener(ViewGame.selectListener); - } - /** - * Draws the mechanic. - * @param panel The panel to draw on. - * @param g The graphics to draw with. - * */ - public void Draw(JPanel panel, Graphics2D g) { - pump.setBounds(x, y, 50, 50); - Pump p = (Pump)ViewGame.objectDrawNames.get(this); - - if (p.isBroken()) pump.setBorder(BorderFactory.createDashedBorder(Color.black, 5, 2, 2, false)); - else pump.setBorder(BorderFactory.createLineBorder(Color.black, 5)); - - if(ViewGame.getChosen()) { - pumpB.setVisible(true); - pumpB.setBackground(new Color(255, 0, 0)); - pumpB.setBounds(x, y, 50, 50); - if (p.isBroken()) pumpB.setBorder(BorderFactory.createDashedBorder(Color.black, 5, 2, 2, false)); - else pumpB.setBorder(BorderFactory.createLineBorder(Color.black, 5)); - panel.add(pumpB); - } else { - pumpB.setVisible(false); - panel.remove(pumpB); - } - - panel.add(pump); - panel.repaint(); - } -} diff --git a/srcTMP/main/java/Drawing/SaboteurDraw.java b/srcTMP/main/java/Drawing/SaboteurDraw.java deleted file mode 100644 index 9bcf1ad..0000000 --- a/srcTMP/main/java/Drawing/SaboteurDraw.java +++ /dev/null @@ -1,82 +0,0 @@ -package Drawing; - -import Controll.Controller; -import Controll.ViewGame; -import Fields.ActiveFields.Cistern; -import Fields.ActiveFields.Pump; -import Fields.ActiveFields.Spring; -import Fields.Field; -import Fields.Pipe; -import Players.Player; -import Players.Saboteur; -import javax.swing.*; -import java.awt.*; -import java.util.ArrayList; - -/** - * Class for drawing the mechanic. - * */ -public class SaboteurDraw extends Drawable { - String sabName = ""; - JButton sab = new JButton(); - - /** - * Constructor for the mechanic. - * @param tmpX X coordinate of the mechanic. - * @param tmpY Y coordinate of the mechanic. - * @param tmpX - * @param tmpY - */ - public SaboteurDraw(int tmpX, int tmpY) { - x = tmpX; - y = tmpY; - sab.setVisible(true); - } - - /** - * Draw method for the mechanic. - * @param panel - * @param g - */ - @Override - public void Draw(JPanel panel, Graphics2D g) { - Saboteur s = (Saboteur)ViewGame.objectDrawNames.get(this); - Player current = Controller.GetActivePlayer(); - sabName = Controller.objectReverseNames.get(s); - sab.setText(sabName); - Field f = s.getStandingField(); - if (f instanceof Pipe) { - PipeDraw pd = (PipeDraw)ViewGame.objectDrawReverseNames.get(f); - ArrayList players = f.getPlayers(); - int i = players.indexOf(s); - x = (pd.getxFrom()+pd.getxTo())/2-25; - y = (pd.getYFrom()+pd.getYTo())/2 - (i+1)*25; - } - else if (f instanceof Pump) { - PumpDraw pd = (PumpDraw)ViewGame.objectDrawReverseNames.get(f); - ArrayList players = f.getPlayers(); - int i = players.indexOf(s); - x = pd.getX(); - y = pd.getY() - (i+1)*25; - } - else if (f instanceof Cistern) { - CisternDraw pd = (CisternDraw)ViewGame.objectDrawReverseNames.get(f); - ArrayList players = f.getPlayers(); - int i = players.indexOf(s); - x = pd.getX(); - y = pd.getY() - (i+1)*25; - } - else if (f instanceof Spring) { - SpringDraw pd = (SpringDraw)ViewGame.objectDrawReverseNames.get(f); - ArrayList players = f.getPlayers(); - int i = players.indexOf(s); - x = pd.getX(); - y = pd.getY() - (i+1)*25; - } - sab.setBounds(x, y, 50, 20); - if (s.equals(current)) sab.setBorder(BorderFactory.createLineBorder(Color.green, 5)); - else sab.setBorder(BorderFactory.createLineBorder(Color.red, 5)); - panel.add(sab); - panel.repaint(); - } -} diff --git a/srcTMP/main/java/Drawing/SpringDraw.java b/srcTMP/main/java/Drawing/SpringDraw.java deleted file mode 100644 index c10b40d..0000000 --- a/srcTMP/main/java/Drawing/SpringDraw.java +++ /dev/null @@ -1,41 +0,0 @@ -package Drawing; - -import Controll.ViewGame; -import javax.swing.*; -import java.awt.*; - -public class SpringDraw extends Drawable { - JButton spring = new JButton(); - JButton springB = new JButton(); - - public SpringDraw(int tmpX, int tmpY) { - x = tmpX; - y = tmpY; - spring.setVisible(true); - spring.setBackground(new Color(150, 75, 0)); - - ViewGame.buttonToElement.put(springB, this); - springB.addActionListener(ViewGame.selectListener); - - } - - @Override - public void Draw(JPanel panel, Graphics2D g) { - spring.setBounds(x, y, 50, 50); - spring.setBorder(BorderFactory.createLineBorder(Color.white, 5)); - - if(ViewGame.getChosen()) { - springB.setVisible(true); - springB.setBackground(new Color(255, 0, 0)); - springB.setBounds(x, y, 50, 50); - springB.setBorder(BorderFactory.createLineBorder(Color.white, 5)); - panel.add(springB); - } else { - springB.setVisible(false); - panel.remove(springB); - } - - panel.add(spring); - panel.repaint(); - } -} diff --git a/srcTMP/main/java/Enums/Fluid.java b/srcTMP/main/java/Enums/Fluid.java deleted file mode 100644 index a30e57e..0000000 --- a/srcTMP/main/java/Enums/Fluid.java +++ /dev/null @@ -1,5 +0,0 @@ -package Enums; - -public enum Fluid { - DRY, STICKY, SLIPPERY -} \ No newline at end of file diff --git a/srcTMP/main/java/Fields/ActiveFields/ActiveFields.java b/srcTMP/main/java/Fields/ActiveFields/ActiveFields.java deleted file mode 100644 index 507b7be..0000000 --- a/srcTMP/main/java/Fields/ActiveFields/ActiveFields.java +++ /dev/null @@ -1,78 +0,0 @@ -package Fields.ActiveFields; - -import Fields.Field; -import Fields.Pipe; -import Players.Player; - -import java.util.ArrayList; - -/** - * Abstract class for active fields. - * */ -public abstract class ActiveFields extends Field { - - /** - * Pipes connected to the active field. Default is empty. - */ - private ArrayList pipes = new ArrayList<>(); - @Override - public ArrayList getNeighborFields(){ return new ArrayList<>(pipes);} - /** - * Getter for pipes. Only for child classes. - * @return The pipes connected to the active field - */ - public ArrayList getPipes() { - if (pipes.size() == 0) return null; - return pipes; - } - - /** - * Setter for pipes. Only for initialization. - */ - public void setPipes(ArrayList pipes) { //Basic setter if it is needed - this.pipes = pipes; - } - - /** - * Method for adding a pipe to the active field. - * @param p The pipe to be added - * @return True if the pipe was added - */ - @Override - public boolean addPipe(Pipe p) { - pipes.add(p); - return true; - } - - /** - * Method for removing a pipe from the active field. - * @param p The pipe to be removed - * @return True if the pipe was removed - */ - @Override - public boolean removePipe(Pipe p) { - pipes.remove(p); - return true; - } - - /** - * Method for the game controlled events. - */ - @Override - public void step() { - } - - /** - * Methods for accepting players. - * - * @param p The player to be accepted. - * @return - */ - @Override - public Field accept(Player p) { - this.setOccupied(false); - this.setPlayers(p); - return this; - } - -} diff --git a/srcTMP/main/java/Fields/ActiveFields/Cistern.java b/srcTMP/main/java/Fields/ActiveFields/Cistern.java deleted file mode 100644 index c7c6dda..0000000 --- a/srcTMP/main/java/Fields/ActiveFields/Cistern.java +++ /dev/null @@ -1,126 +0,0 @@ -package Fields.ActiveFields; - -import Controll.Controller; -import Fields.Pipe; -import Players.Player; -import java.util.ArrayList; -import java.util.Random; - -/** - * Class for Cistern - * */ -public class Cistern extends ActiveFields{ - private Random random = new Random(); - /** - * Last created Pipe. Null if the last pump was just taken. - */ - private Pipe createdPipe; - /** - * Constructor for the cistern. - */ - public Cistern() { - createdPipe = null; - super.setWater(0); - } - - /** - * Method for the game controlled events. - * Gets the water from the pipes and stores it. - * Creates a new pipe - */ - @Override - public void step() { - if (getPipes() != null) { - for (Pipe pipe : getPipes()) { - super.setWater(super.getWater() + pipe.getWater()); - } - } - if(createdPipe == null){ - if(Controller.isTest()){ - createdPipe = new Pipe(65); - } - else createdPipe = new Pipe(30+random.nextInt(41)); - } - } - - /** - * Method for creating a new pump. - * @param b True if the player get a new pump. - * @return The new pump. - * */ - @Override - public Pump createNewPump(boolean b) { - if(b){ - if(Controller.isTest()){ - return new Pump(100); - } - else return new Pump(80+random.nextInt(41)); - } - else return null; - } - - /** - * Method for getting the water from the field. - * Prints the amount of water taken. - * @return The amount of water in the field. - */ - @Override - public int getWater() { - return super.getWater(); - } - - /** - * Method for picking up a (new) pipe from the field. - * @return The new pipe. - */ - @Override - public Pipe pickUpPipe() { - Controller.waterCounter.addPipe(createdPipe); - Controller.pipes++; - Controller.objectNames.put("newPipe"+Controller.pipes, createdPipe); - Controller.objectReverseNames.put(createdPipe, "newPipe"+Controller.pipes); - this.addPipe(createdPipe); - createdPipe.connect(this); - Pipe tmp = createdPipe; - createdPipe = null; - return tmp; - } - /** - * Method for getting a string containing all the important information about the cistern. - * @return String - returns the important information. - */ - @Override - public String toString() { - ArrayList players = this.getPlayers(); - String playersNames = "null"; - - for (int i = 0; i < players.size(); i++) { - if(i == 0) playersNames = ""; - playersNames += Controller.objectReverseNames.get(players.get(i)); - if (i != players.size() - 1) { - playersNames += ", "; - } - } - - - - ArrayList pipes = this.getPipes(); - String pipesNames ="null"; - if(pipes != null) { - for (int i = 0; i < pipes.size(); i++) { - if (i == 0) pipesNames = ""; - pipesNames += Controller.objectReverseNames.get(pipes.get(i)); - if (i != pipes.size() - 1) { - pipesNames += ", "; - } - } - } - - return "name: "+ Controller.objectReverseNames.get(this) - + "\noccupied: " + this.isOccupied() - + "\nwater: " + getWaterNoChange() - + "\nbroken: " + this.isBroken() - + "\nplayers: " + playersNames - + "\npipes: " + pipesNames + "\n"; - } -} diff --git a/srcTMP/main/java/Fields/ActiveFields/Pump.java b/srcTMP/main/java/Fields/ActiveFields/Pump.java deleted file mode 100644 index f629375..0000000 --- a/srcTMP/main/java/Fields/ActiveFields/Pump.java +++ /dev/null @@ -1,186 +0,0 @@ -package Fields.ActiveFields; - -import Controll.Controller; -import Fields.Pipe; -import Players.Player; - -import java.util.ArrayList; -import java.util.Random; - -/** - * Class for Pump - * */ -@SuppressWarnings("UnusedAssignment") -public class Pump extends ActiveFields { - private Random random = new Random(); - /** - * The amount of water in the tank. Default value is 0. - */ - private final int tank; - - /** - * The index of the pipe from which the pump gets water. - */ - private int waterFrom; - - /** - * The index of the pipe to which the pump gives water. - */ - private int waterTo; - - /** - * Constructor for the pump. - */ - public Pump(int tank) { - this.tank = tank; - this.waterFrom = -1; - this.waterTo = -1; - } - /** - * Getter for the tank. - * @return tank - returns tank. - */ - public int getTank() { return tank; } - - /** - * Setter for the waterFrom. - * @param waterFrom The index of the pipe from which the pump gets water. Only for initialization. - */ - public void setWaterFrom(int waterFrom) { - this.waterFrom = waterFrom; - } - /** - * Getter for the waterFrom. - * @return waterFrom - returns waterFrom. - */ - public int getWaterFrom() { return waterFrom; } - /** - * Setter for the waterTo. - * @param waterTo The index of the pipe to which the pump gives water. Only for initialization. - */ - public void setWaterTo(int waterTo) { - this.waterTo = waterTo; - } - /** - * Getter for the waterTo. - * @return waterTo - returns waterTo. - */ - public int getWaterTo() { return waterTo; } - /** - * Method for the game controlled events. - * Gets the water pumps the water from the tank to the pipe and gets the water from the input and store it. - */ - @Override - public void step() { - super.step(); - if(!(super.isBroken()) && waterTo != -1 && waterFrom != -1) { - super.setWater((this.getPipes().get(waterTo)).fillInWater(super.getWater())); - int newWater = (this.getPipes().get(waterFrom)).getWater(); - if(newWater < 0) this.getPipes().get(waterFrom).fillInWater(-newWater); - else{ - if(super.getWaterNoChange() + newWater > tank){ - super.setWater(tank); - this.getPipes().get(waterFrom).fillInWater(newWater-tank); - } - else super.setWater(super.getWaterNoChange() + newWater); - } - } - int r; - if (!Controller.isTest()) { - r = random.nextInt(31); - - if(r < 3) { - super.setBroken(true); - } - } - } - /** - * Method for setting the water flow in the pump. - * @param input Pipe - The input pipe of the pump. - * @param output Pipe - The output pipe of the pump. - * @return True if the water flow was set. - always false. - * */ - @Override - public boolean set(Pipe input, Pipe output) { - int newWaterFrom = this.getPipes().indexOf(input); - int newWaterTo = this.getPipes().indexOf(output); - if(newWaterFrom == -1 || newWaterTo == -1) return false; - this.setWaterFrom(newWaterFrom); - this.setWaterTo(newWaterTo); - return true; - } - /** - * Method for repairing the pump. - * @return true - Always true. - * */ - @Override - public boolean repair() { - super.setBroken(false); - return true; - } - /** - * Method for getting a string containing all the important information about the pump. - * @return String - returns the important information. - */ - @Override - public String toString() { - - - String playersNames = getPlayerNames(); - - - - String pipesNames = getPipeNames(); - - - String SWaterFrom=""; - String SWaterTo=""; - if(getWaterFrom() == -1 && getWaterTo() == -1 ){ - SWaterFrom = SWaterTo = "null"; - } - else{ - SWaterFrom = ""+Controller.objectReverseNames.get(getPipes().get(getWaterFrom())); - SWaterTo = ""+Controller.objectReverseNames.get(getPipes().get(getWaterTo())); - } - - - return "name: "+ Controller.objectReverseNames.get(this) - + "\noccupied: " + this.isOccupied() - + "\nwater: " + getWaterNoChange() - + "\nbroken: " + this.isBroken() - + "\nplayers: " + playersNames - + "\npipes: " + pipesNames - + "\ntank: " + this.getTank() - + "\nwaterFrom: " +SWaterFrom - + "\nwaterTo: " +SWaterTo + "\n"; - } - - private String getPlayerNames() { - ArrayList players = this.getPlayers(); - String playersNames = "null"; - for (int i = 0; i < players.size(); i++) { - if(i == 0) playersNames = ""; - playersNames += Controller.objectReverseNames.get(players.get(i)); - if (i != players.size() - 1) { - playersNames += ", "; - } - } - return playersNames; - } - - - private String getPipeNames(){ - ArrayList pipes = this.getPipes(); - String pipesNames ="null"; - if(pipes != null) { - for (int i = 0; i < pipes.size(); i++) { - if (i == 0) pipesNames = ""; - pipesNames += Controller.objectReverseNames.get(pipes.get(i)); - if (i != pipes.size() - 1) { - pipesNames += ", "; - } - } - } - return pipesNames; - } -} diff --git a/srcTMP/main/java/Fields/ActiveFields/Spring.java b/srcTMP/main/java/Fields/ActiveFields/Spring.java deleted file mode 100644 index 44dd54c..0000000 --- a/srcTMP/main/java/Fields/ActiveFields/Spring.java +++ /dev/null @@ -1,92 +0,0 @@ -package Fields.ActiveFields; - -import Controll.Controller; -import Fields.Pipe; -import Players.Player; - -import java.util.ArrayList; - -/** - * Class for Spring - * */ -public class Spring extends ActiveFields{ - - /** - * The amount of water that the spring gives out. Default value is maxOutWater. - */ - int waterOut; - /** - * The maximum amount of water that the spring can give out. - */ - int maxOutWater; - - /** - * Constructor for Spring. - * @param maxOutWater The maximum amount of water that the spring can give out. - */ - public Spring(int maxOutWater) { - this.waterOut = maxOutWater; - this.maxOutWater = maxOutWater; - } - /** - * Getter for waterOut. - * @return waterOut - returns waterOut. - */ - public int getWaterOut() { return waterOut; } - /** - * Getter for maxOutWater. - * @return maxOutWater - returns maxOutWater. - */ - public int getMaxOutWater() { return maxOutWater; } - - /** - * Method for the game controlled events. - * Give the water to the pipes. - */ - @Override - public void step() { - waterOut = maxOutWater; - for(int i = 0; i < this.getPipes().size(); i++){ - waterOut = getPipes().get(i).fillInWater(waterOut); - if(waterOut <= 0){ - break; - } - } - } - /** - * Method for getting a string containing all the important information about the spring. - * @return String - returns the important information. - */ - @Override - public String toString() { - ArrayList players = this.getPlayers(); - - String playersNames = "null"; - - for (int i = 0; i < players.size(); i++) { - if(i == 0) playersNames = ""; - playersNames += Controller.objectReverseNames.get(players.get(i)); - if (i != players.size() - 1) { - playersNames += ", "; - } - } - - ArrayList pipes = this.getPipes(); - String pipesNames ="null"; - for (int i = 0; i < pipes.size(); i++) { - if(i == 0) pipesNames = ""; - pipesNames += Controller.objectReverseNames.get(pipes.get(i)); - if (i != pipes.size() - 1) { - pipesNames += ", "; - } - } - return "name: "+ Controller.objectReverseNames.get(this) - + "\noccupied: " + this.isOccupied() - + "\nwater: " + getWaterNoChange() - + "\nbroken: " + this.isBroken() - + "\nplayers: " + playersNames - + "\npipes: " + pipesNames - + "\nwaterOut: " + this.getWaterOut() - + "\nmaxOutWater: " + this.getMaxOutWater() + "\n"; - } -} \ No newline at end of file diff --git a/srcTMP/main/java/Fields/Field.java b/srcTMP/main/java/Fields/Field.java deleted file mode 100644 index b1eec75..0000000 --- a/srcTMP/main/java/Fields/Field.java +++ /dev/null @@ -1,256 +0,0 @@ -package Fields; - -import Fields.ActiveFields.ActiveFields; -import Fields.ActiveFields.Pump; -import Interfaces.Steppable; -import Players.Player; -import java.util.ArrayList; - -/** - * Abstract class for the fields. - * */ -public abstract class Field implements Steppable { - - /** - * True if the field is cannot accept more player. - * */ - private boolean occupied; - - /** - * The amount of water in the field. - * */ - private int water; - - /** - * True if the field is broken. - * */ - private boolean broken; - - /** - * Players on the field. - * */ - private ArrayList players = new ArrayList<>(); - - /** - * Getter for the occupied variable. Only for child classes. - * @return occupied variable. - * */ - public boolean isOccupied() { - return occupied; - } - - /** - * Getter for the broken variable. Only for child classes. - * @return broken variable. - */ - public boolean isBroken() { - return broken; - } - - /** - * Getter for the players. Only for child classes. - * @return players. - */ - public ArrayList getPlayers() { //Basic getter if it is needed - return players; - } - - public ArrayList getNeighborFields(){ return new ArrayList<>();} - /** - * Setter for players list. - */ - public void setPlayers(Player p) { - players.add(p); - } - - /** - * Setter for the broken variable. - */ - public void setBroken(boolean broken) { - this.broken = broken; - } - - /** - * Setter for the occupied variable. Only for child classes. - * */ - public void setOccupied(boolean occupied) { - this.occupied = occupied; - } - - /** - * Setter for the water variable. Only for child classes. - * */ - public void setWater(int water) { - this.water = water; - } - - /** - * Methods for accepting players. - * - * @param p The player to be accepted. - * @return True if the player was accepted. - always false. - */ - public Field accept(Player p) { - return this; - } - - - /** - * Method for checking if the field is neighbour of the given field. - * @param f The field to be checked. - * @return True if the field is neighbour. - always false. - * */ - public boolean checkNeighbour(Field f) { //Not used in the skeleton. Probably it will be removed from Proto. - return false; - } - - /** - * Method for removing a player from the field. - * @param p The player to be removed. - * The player must be on the field. - * @return True if the player was removed. - always false. - * */ - public boolean removePlayer(Player p) { - setOccupied(false); - players.remove(p); - return true; - } - - /** - * Method for breaking the field. - * @return True if the field was broken. - always false. - * */ - public boolean breakField() { - return false; - } - - /** - * Method for setting the water flow in the pump. - * @param input Pipe - The input pipe of the pump. - * @param output Pipe - The output pipe of the pump. - * @return True if the water flow was set. - always false. - * */ - public boolean set(Pipe input, Pipe output) { - return false; - } - - /** - * Method for repairing the field. - * @return True if the field was repaired. - always false. - * */ - public boolean repair() { - return false; - } - - /** - * Method for placing a pump on the field. - * @param p The pump to be placed. - * @return True if the pump was placed. - always false. - * */ - public Pipe placePump(Pump p) { - return null; - } - - /** - * Method for creating a new pump. - * @param b True if the player get a new pump. - * @return The new pump. - always null. - * */ - public Pump createNewPump(boolean b) { - return null; - } - - /** - * Method for getting the water from the field. - * Prints the amount of water taken. - * @return The amount of water in the field. - always 0. - * */ - public int getWater() { - return water; - } - - /** - * Method for getting the amount of water in field without removing it. - * @return water in field. - */ - public int getWaterNoChange(){ - //It has different implementaion later - return water; - } - - /** - * Method for adding a pipe to the field. - * @param p The pipe to be added. - * @return True if the pipe was added. - always false. - * */ - public boolean addPipe(Pipe p) { - return false; - } - - /** - * Method for removing a pipe from the field. - * @param p The pipe to be removed. - * @return True if the pipe was removed. - always false. - * */ - public boolean removePipe(Pipe p) { - return false; - } - - /** - * Method for getting a new pipe from the field. - * @return The new pipe. - always null. - * */ - public Pipe pickUpPipe() { - return null; - } - - /** - * Method for filling the field with water. - * @param i The amount of water to be filled. - * @return The amount of water that was not filled. - always 0. - * */ - public int fillInWater(int i) { - return 0; - } - - /** - * Method for setting the end of the pipe at a pump. - * @param p The pump to be set on. - * @return True if the end was set. - always false. - * */ - public boolean setEnd(Pump p) { - return false; - } - - /** - * Method for connecting the field to the active fields. - * @param a The active fields to be connected. - * @return True if the field was connected. - always false. - * */ - public boolean connect(ActiveFields a) { - return false; - } - - /** - * Method for disconnecting the field from the active fields. - * @param a The active fields to be disconnected. - * @return True if the field was disconnected. - always false. - * */ - public boolean disconnect(ActiveFields a) { - return false; - } - /** - * Method for making the field slippery. - * @return True if the field became slippery. - always false. - * */ - public boolean makeSlippery(){ - return false; - } - /** - * Method for making the field sticky. - * @return True if the field became sticky. - always false. - * */ - public boolean makeSticky(){ - return false; - } -} diff --git a/srcTMP/main/java/Fields/Pipe.java b/srcTMP/main/java/Fields/Pipe.java deleted file mode 100644 index eba8320..0000000 --- a/srcTMP/main/java/Fields/Pipe.java +++ /dev/null @@ -1,371 +0,0 @@ -package Fields; - -import Controll.Controller; -import Enums.Fluid; -import Fields.ActiveFields.ActiveFields; -import Fields.ActiveFields.Pump; -import Players.Player; -import java.util.ArrayList; -import java.util.Random; - -/** - * Class for Pipes - * */ -public class Pipe extends Field { - private final Random random = new Random(); - /** - * Capacity of the pipe - */ - private final int capacity; - /** - * Time left until the pipe can be broken - */ - private int breakable = 0; - /** - * Time left until the pipe is sticky or slippery - */ - private int remainingFluidTime = 0; - /** - * If true the player can leave the pipe. Is false they can't - */ - private boolean leave = true; - /** - * Fluid state of pipe - */ - private Fluid fluid = Fluid.DRY; - - /** - * The ends of the pipe. Default is empty. - */ - private ArrayList fields = new ArrayList<>(); - - /** - * Constructor for Pipe - * @param capacity Capacity of the pipe - */ - public Pipe(int capacity) { - this.capacity = capacity; - } - - /** - * Setter for capacity. Only for initialization. - */ - public void setFields(ArrayList fields) { - this.fields = fields; - } - /** - * Setter for field. - */ - public void setFields(ActiveFields a){fields.add(a);} - /** - * Setter for breakable. - */ - public void setBreakable(int breakable) { - this.breakable = breakable; - } - /** - * Setter for remainingFluidTime. - */ - public void setFluidTime(int remainingFluidTime) { - this.remainingFluidTime = remainingFluidTime; - } - /** - * Setter for leave. - */ - public void setLeave(boolean leave) { - this.leave = leave; - } - /** - * Setter for fluid. - */ - public void setFluid(Fluid fluid) { - this.fluid = fluid; - } - /** - * Getter for fields as ActiveFields. - */ - public ArrayList getFields() { return fields; } - /** - * Getter for fields as Field. - */ - @Override - public ArrayList getNeighborFields(){ return new ArrayList<>(fields);} - /** - * Getter for capacity. - */ - public int getCapacity() { return capacity; } - /** - * Getter for breakable. - */ - public int getBreakable() { return breakable; } - /** - * Getter for remainingFluidTime. - */ - public int getRemainingFluidTime() { return remainingFluidTime; } - /** - * Getter for leave. - */ - public boolean getLeave() { return leave; } - /** - * Getter for fluid. - */ - public Fluid getFluid() { return fluid; } - - /** - * Method for breaking the pipe. - * @return True if the pipe is broken - */ - @Override - public boolean breakField() { - if(this.breakable > 0) return false; - this.setBroken(true); - return true; - } - - /** - * Method for repairing the pipe. - * @return True if the pipe is repaired - */ - @Override - public boolean repair() { - super.setBroken(false); - if (Controller.isTest()) { - breakable = 5; - } - else { - breakable = 3+ random.nextInt(8); - } - return true; - } - - /** - * Method for placing a pump on the pipe. - * @param newPump The pump to be placed - * @return True if the pump was placed - */ - @Override - public Pipe placePump(Pump newPump) { - if(newPump == null) { return null; } - ActiveFields oldPump = (ActiveFields) fields.remove(0); - - disconnect(oldPump); - - connect(newPump); - - oldPump.removePipe(this); - Pipe newPipe; - if(Controller.isTest()) { - newPipe = new Pipe(50); - } - else newPipe = new Pipe(30+random.nextInt(41)); - newPipe.connect(newPump); - - newPipe.connect(oldPump); - - newPump.addPipe(this); - newPump.addPipe(newPipe); - - oldPump.addPipe(newPipe); - - newPump.set(newPipe, this); - - return newPipe; - } - - - /** - * Method for getting the water from the pipe. - * Prints the amount of water taken. - * @return The amount of water in the pipe - */ - @Override - public int getWater() { - int w = super.getWaterNoChange(); - super.setWater(0); - return ((super.isBroken()) || (this.fields.size() < 2)) ? -w : w; - } - - /** - * Method for filling the pipe with water. - * Prints the amount of water returned. - * @param i The amount of water to be filled in - * @return The amount of water that was not filled in - */ - @Override - public int fillInWater(int i) { - int waterRightNow = super.getWaterNoChange(); - if(waterRightNow == capacity) return i; - if (i - (capacity- waterRightNow) > 0) { - super.setWater(capacity - waterRightNow); - return i - (capacity-waterRightNow); - } - else { - super.setWater(i); - return 0; - } - } - - - /** - * Method for connecting the pipe to an ActiveField. - * @param a The ActiveField to be connected to the pipe - * @return True if the pipe was connected to the ActiveField - */ - @Override - public boolean connect(ActiveFields a) { - fields.add(a); - return true; - } - - /** - * Method for disconnecting the pipe to an ActiveField. - * @param a The ActiveField to be disconnected to the pipe - * @return True if the pipe was disconnected to the ActiveField - */ - @Override - public boolean disconnect(ActiveFields a) { - fields.remove(a); - return true; - } - - /** - * Methods for accepting players. - * - * @param p The player to be accepted. - * @return True if the player was accepted. - */ - @Override - public Field accept(Player p) { - if(this.isOccupied()) - return null; - if(fluid == Fluid.SLIPPERY){ - int index; - if (Controller.isTest()) { - index = 1; - } - else { - index = random.nextInt(2); - } - fields.get(index).accept(p); - return fields.get(index); - } - else { - this.setOccupied(true); - this.setPlayers(p); - } - return this; - } - /** - * Methods for removing players. - * - * @param p The player to be removed. - * @return True if the player was removed. - */ - public boolean removePlayer(Player p){ - if(fluid == Fluid.STICKY){ - if(leave){ - leave = false; - setOccupied(false); - getPlayers().remove(p); - return true; - } - return false; - } - setOccupied(false); - getPlayers().remove(p); - return true; - } - /** - * Methods for making the pipe slippery. - * @return True if the pipe successfully became slippery. - */ - public boolean makeSlippery(){ - if(fluid == Fluid.STICKY) return false; - if(remainingFluidTime == 0){ - if (Controller.isTest()) { - remainingFluidTime = 5; - } - else { - remainingFluidTime = 3+random.nextInt(3); - } - fluid = Fluid.SLIPPERY; - return true; - } - return false; - } - /** - * Methods for making the pipe sticky. - * @return True if the pipe successfully became sticky. - */ - public boolean makeSticky(){ - if(fluid == Fluid.SLIPPERY) return false; - if(remainingFluidTime == 0){ - if (Controller.isTest()) { - remainingFluidTime = 5; - } - else { - remainingFluidTime = 3+random.nextInt(3); - } - fluid = Fluid.STICKY; - return true; - } - return false; - } - /** - * Method for the game controlled events. - * Reduces the amount of time left until the pipe becomes dry. - * If the time is 0 makes the pipe dry. - */ - public void step(){ - if(breakable > 0){ - breakable--; - } - if(remainingFluidTime > 0){ - remainingFluidTime--; - if(remainingFluidTime == 0){ - fluid = Fluid.DRY; - leave = true; - } - } - } - /** - * Method for getting a string containing all the important information about the pipe. - * @return String - returns the important information. - */ - @Override - public String toString() { - ArrayList players = this.getPlayers(); - - String playersNames = "null"; - - for (int i = 0; i < players.size(); i++) { - if(i == 0) playersNames = ""; - playersNames += Controller.objectReverseNames.get(players.get(i)); - if (i != players.size() - 1) { - playersNames += ", "; - } - } - - ArrayList loaclFields = this.getFields(); - String fieldsNames ="null"; - for (int i = 0; i < loaclFields.size(); i++) { - if(i == 0) fieldsNames = ""; - fieldsNames += Controller.objectReverseNames.get(loaclFields.get(i)); - if (i != loaclFields.size() - 1) { - fieldsNames += ", "; - } - } - - return "name: " + Controller.objectReverseNames.get(this) - + "\noccupied: " + this.isOccupied() - + "\nwater: " + getWaterNoChange() - + "\nbroken: " + this.isBroken() - + "\nplayers: " + playersNames - + "\nfields: " + fieldsNames - + "\ncapacity: " + this.getCapacity() - + "\nbreakable: " + this.getBreakable() - + "\nrfluidtime: " + this.getRemainingFluidTime() - + "\nleave: " + this.getLeave() - + "\nfluid: " + this.getFluid().toString().toLowerCase() + "\n"; - } -} \ No newline at end of file diff --git a/srcTMP/main/java/Interfaces/Steppable.java b/srcTMP/main/java/Interfaces/Steppable.java deleted file mode 100644 index bdfa6da..0000000 --- a/srcTMP/main/java/Interfaces/Steppable.java +++ /dev/null @@ -1,13 +0,0 @@ -package Interfaces; - -/** - * Steppable interface. - * Provide a method for the game controlled events. - * */ -public interface Steppable { - - /** - * Method for the game controlled events. - * */ - void step(); -} \ No newline at end of file diff --git a/srcTMP/main/java/Players/Mechanic.java b/srcTMP/main/java/Players/Mechanic.java deleted file mode 100644 index 02e3881..0000000 --- a/srcTMP/main/java/Players/Mechanic.java +++ /dev/null @@ -1,141 +0,0 @@ -package Players; - -import Controll.Controller; -import Fields.ActiveFields.ActiveFields; -import Fields.ActiveFields.Pump; -import Fields.Pipe; - - -/** - * Class for the mechanic player. - * */ -public class Mechanic extends Player { - - /** - *The pump that the mechanic is holding. Default is null. - */ - private Pump holdingPump; - /** - *The pipe that the mechanic is holding. Default is null. - */ - private Pipe holdingPipe; - - /** - * Constructor for the mechanic. - * holdingPipe = null; - * holdingPump = null; - */ - public Mechanic() { - this.holdingPipe = null; - this.holdingPump = null; - } - - /** - * Setter for the holdingPump. - * @param holdingPump The pump that the mechanic is holding. - */ - public void setHoldingPump(Pump holdingPump) { - this.holdingPump = holdingPump; - } - /** - * Getter for the holdingPump. - * @return holdingPump - */ - public Pump getHoldingPump() { return holdingPump; } - - /** - * Setter for the holdingPipe. - * @param holdingPipe The pipe that the mechanic is holding. - */ - public void setHoldingPipe(Pipe holdingPipe) { //Basic setter for the holdingPipe. - this.holdingPipe = holdingPipe; - } - /** - * Getter for the holdingPipe. - * @return holdingPipe - */ - public Pipe getHoldingPipe() { return holdingPipe; } - /** - *Method for repairing the field where the player is standing. - * @return boolean - returns true if the field is repaired. - */ - @Override - public boolean repair() { - return getStandingField().repair(); - } - - /** - *Method for placing a pump on the field where the player is standing. - * @return Pipe - The other (new) half of the pipe. - */ - @Override - public Pipe placePump() { - Pipe p = getStandingField().placePump(holdingPump); - if(p != null) holdingPump = null; - return p; - } - - /** - * Method for disconnecting a pipe from a pump. - * @param p Pipe - * The pipe that will be disconnected. - * @return boolean - returns true if the pipe is disconnected. - */ - @Override - public boolean disconnect(Pipe p) { - boolean result = super.getStandingField().removePipe(p); - boolean result2 = false; - if(result) { - result2 = p.disconnect((ActiveFields) super.getStandingField()); - if(result2) holdingPipe = p; - } - return result && result2; - } - - /** - * Method for connecting the holdingPipe to a pump. - * @return boolean - returns true if the pipe is connected. - */ - @Override - public boolean connect() { - if(holdingPipe == null) return false; - boolean result = super.getStandingField().addPipe(holdingPipe); - if(!result){ return false; } - boolean b = holdingPipe.connect((ActiveFields)super.getStandingField()); - if(b) holdingPipe = null; - return b; - } - - /** - * Method for getting a pump from the field where the player is standing. - * @return Pump - The new pump. - */ - @Override - public Pump getPump() { - boolean b = false; - if(holdingPump == null) b = true; - holdingPump = getStandingField().createNewPump(b); - return holdingPump; // mechanic can get a new pump - } - - /** - * Method for picking up a new pipe from the field where the player is standing. - * @return boolean - returns true if the pipe is picked up. - */ - @Override - public boolean pickUpPipe() { - holdingPipe = super.getStandingField().pickUpPipe(); - return holdingPipe != null; - } - /** - * Method for getting a string containing all the important information about the mechanic. - * @return String - returns the important information. - */ - @Override - public String toString() { - return "name: "+ Controller.objectReverseNames.get(this) - + "\nstandingField: " + Controller.objectReverseNames.get(this.getStandingField()) - + "\nholdingPipe: " + Controller.objectReverseNames.get(this.getHoldingPipe()) - + "\nholdingPump: " + Controller.objectReverseNames.get(this.getHoldingPump()) + "\n"; - } -} \ No newline at end of file diff --git a/srcTMP/main/java/Players/Player.java b/srcTMP/main/java/Players/Player.java deleted file mode 100644 index 526b138..0000000 --- a/srcTMP/main/java/Players/Player.java +++ /dev/null @@ -1,148 +0,0 @@ -package Players; - -import Fields.ActiveFields.Pump; -import Fields.Field; -import Fields.Pipe; - -/** - * Abstract class for the players. - * */ -public abstract class Player { - - /** - * The field where the player is standing. - * */ - private Field standingField; - - /** - * Getter for the standingField. Only for child classes. - * @return standingField - */ - public Field getStandingField() { - return standingField; - } - - /** - * Constructor for the player. - */ - protected Player() { - } - - /** - * Setter for the standingField. Only for child classes. - * @param standingField The field where the player is standing. - */ - public void setStandingField(Field standingField) { - this.standingField = standingField; - } - - /** - * Method for moving the player to a new field. - * @param f Field - The field where the player wants to move. - * @return boolean - always false. - * */ - public boolean move(Field f) { - Field result = f.accept(this); - if(result == null) { - return false; - } - else if(result != f ) { - if (result != standingField) { - boolean result2 = standingField.removePlayer(this); - if (result2) standingField = result; - return result2; - } - return standingField.removePlayer(this); - } - if(result == f){ - boolean result2 = standingField.removePlayer(this); - if(result2){ standingField = result;} - else{ - f.removePlayer(this); - } - return result2; - } - else{ return false;} - } - - /** - * Method for breaking the field where the player is standing. - * @return boolean - always false. - * */ - public boolean breakField() { - return getStandingField().breakField(); - } - - /** - * Method for repairing the field where the player is standing. - * @return boolean - always false. - * */ - public boolean repair() { - return false; - } - - /** - * Method for placing a pump on the field where the player is standing. - * @return Pipe - The other (new) half of the pipe. - always null. - * */ - public Pipe placePump() { - return null; - } - - /** - * Method for setting the water flow in the pump. - * @param input Pipe - The input pipe of the pump. - * @param output Pipe - The output pipe of the pump. - * @return boolean - always false. - * */ - public boolean set(Pipe input, Pipe output) { - return standingField.set(input, output); - } - - /** - * Method for disconnecting a pipe from a pump. - * @param p Pipe - The pipe to be disconnected. - * @return boolean - always false. - * */ - public boolean disconnect(Pipe p) { - return false; - } - - /** - * Method for connecting the holdingPipe to a pump. - * @return boolean - always false. - * */ - public boolean connect() { - return false; - } - - /** - * Method for getting a pump from the field where the player is standing. - * @return Pump - The new pump. - always null. - * */ - public Pump getPump() { - return null; - } - - /** - * Method for picking up a new pipe from the field where the player is standing. - * @return boolean - always false. - * */ - public boolean pickUpPipe() { - return false; - } - /** - * Method for making the field where the player is standing sticky. - * @return boolean - result of making the field sticky. True if successful. - * */ - public boolean makeSticky(){ - return standingField.makeSticky(); - } - /** - * Method for making the field where the player is standing slippery. - * @return boolean - always false. - * */ - public boolean makeSlippery(){ - return false; - } -} \ No newline at end of file diff --git a/srcTMP/main/java/Players/Saboteur.java b/srcTMP/main/java/Players/Saboteur.java deleted file mode 100644 index 3458f84..0000000 --- a/srcTMP/main/java/Players/Saboteur.java +++ /dev/null @@ -1,35 +0,0 @@ -package Players; - -import Controll.Controller; - - -/** - * Class for the saboteur player. - * */ -public class Saboteur extends Player { - - /** - * Constructor for the saboteur. - */ - public Saboteur() { - //Nothing can be inicialized here - } - - /** - * Method for making standingField slippery - * @return boolean - returns true if action was successful. - */ - public boolean makeSlippery(){ - return this.getStandingField().makeSlippery(); - - } - /** - * Method for getting a string containing all the important information about the saboteur. - * @return String - returns the important information. - */ - @Override - public String toString() { - return "name: "+ Controller.objectReverseNames.get(this) - + "\nstandingField: " + Controller.objectReverseNames.get(this.getStandingField()) + "\n"; - } -} diff --git a/srcTMP/main/java/StringResource/StringResourceController.java b/srcTMP/main/java/StringResource/StringResourceController.java deleted file mode 100644 index b417d44..0000000 --- a/srcTMP/main/java/StringResource/StringResourceController.java +++ /dev/null @@ -1,13 +0,0 @@ -package StringResource; - -public final class StringResourceController { - private StringResourceController(){} - public static final String FALSE = "false"; - public static final String FILE_NOT_FOUND = "File not found"; - public static final String WRONG_PLAYER = "Nem te vagy a soron következő játékos!"; - public static final String WRONG_ACTION = "Sikertelen művelet"; - public static final String GOOD_ACTION = "Sikeres művelet"; - public static final String WATER = "water"; - public static final String RANDOM_ON = "A véletlen események be lettek kapcsolva."; - -} \ No newline at end of file diff --git a/srcTMP/palya.txt b/srcTMP/palya.txt deleted file mode 100644 index 58fb1c6..0000000 --- a/srcTMP/palya.txt +++ /dev/null @@ -1,57 +0,0 @@ -cistern cistern1 water:0 draw:100:350 -cistern cistern2 water:0 draw:100:100 -spring spring1 2500 draw:650:350 -spring spring2 2000 draw:650:100 -pump A 200 water:20 broken:true draw:200:100 -pump B 200 water:10 draw:500:100 -pump C 200 water:50 draw:575:200 -pump D 200 water:10 broken:true draw:500:350 -pump E 200 water:10 draw:350:350 -pump F 200 water:20 draw:200:350 -pipe AC2 100 draw:225:125:125:125 -pipe AB 100 draw:225:125:525:125 -pipe BS2 100 draw:525:125:675:125 -pipe CS2 100 draw:600:225:675:125 -pipe CB 100 draw:600:225:525:125 -pipe CD 100 draw:600:225:525:375 -pipe DS1 100 draw:525:375:675:375 -pipe DE 100 draw:525:375:375:375 -pipe EF 100 draw:375:375:225:375 -pipe FC1 100 draw:225:375:125:375 -pipe AF 100 draw:225:125:225:375 -connectpipe AC2 A -connectpipe AC2 cistern2 -connectpipe AB A -connectpipe AB B -connectpipe BS2 B -connectpipe BS2 spring2 -connectpipe CS2 spring2 -connectpipe CS2 C -connectpipe DS1 spring1 -connectpipe DS1 D -connectpipe CB B -connectpipe CB C -connectpipe CD C -connectpipe CD D -connectpipe DE D -connectpipe DE E -connectpipe EF E -connectpipe EF F -connectpipe FC1 F -connectpipe FC1 cistern1 -connectpipe AF A -connectpipe AF F -setpump A AB AC2 -setpump B BS2 AB -setpump C CS2 CD -setpump D DS1 DE -setpump E DE EF -setpump F EF FC1 -mechanic Mec1 F -addplayer F Mec1 -mechanic Mec2 A -addplayer A Mec2 -saboteur Sab1 C -addplayer C Sab1 -saboteur Sab2 AB -addplayer AB Sab2 From 64955c1d675dd288b518dc14ee2789e4f9fc0efc Mon Sep 17 00:00:00 2001 From: Laci Date: Tue, 21 May 2024 00:34:58 +0200 Subject: [PATCH 12/12] Docs --- doc/SONAR.md | 29 +++++++++++++++++++++++++++++ doc/git | 0 doc/images/image-1.png | Bin 0 -> 34242 bytes doc/images/image-2.png | Bin 0 -> 17740 bytes doc/images/image-3.png | Bin 0 -> 58685 bytes doc/images/image-4.png | Bin 0 -> 34346 bytes doc/images/image-5.png | Bin 0 -> 20010 bytes doc/images/image.png | Bin 0 -> 68920 bytes 8 files changed, 29 insertions(+) create mode 100644 doc/SONAR.md create mode 100644 doc/git create mode 100644 doc/images/image-1.png create mode 100644 doc/images/image-2.png create mode 100644 doc/images/image-3.png create mode 100644 doc/images/image-4.png create mode 100644 doc/images/image-5.png create mode 100644 doc/images/image.png diff --git a/doc/SONAR.md b/doc/SONAR.md new file mode 100644 index 0000000..ad1e5c3 --- /dev/null +++ b/doc/SONAR.md @@ -0,0 +1,29 @@ +# Statikus és manuális ellenőrzés +## Eszközök +* Manuális ellenérzés IntelliJ környeztben +* SonarLint plugin használatával +* SonarCloud segítségével + +## Tevékenység +* Első lépés a kódbázis megismerése és futtatása volt. +* Második lépés a Sonar rendszerrel való összektése a projektnek. Ekkor még nem jelentek meg az issuk a felületen, azt csak később sikerült megoldani a projektstuktúra megváltoztatásával. +* Következő lépés a néhány feltűnő hiba javítása ami a kódbázis megismerése közben feltűnt. +* Ezt követően több lépésben a SonarLint segítségével a különböző issukat javítottam. Nem minden került javításra, például a pacakgek nevei, illetve a tervek szerint megvalósított propertyk publikusak maradtak, mivel a getterek és setterek nem valósítanának meg egyéb funkciót a változók beállítása és visszaadásán kívül. +* A végső lépés a SonarCloud segítségével részletsebb vizsgálat és javítás. A program használt random szám generálást, ami nem egy játék környezetben seed nélkül biztonsági kockázat lenne, de itt elhanyagolható. Ezen kívül a duplikált kódsorok számát is csökkentettem, továbbá olyan issukat is javítottam amit nem jelett a SonarLint. + +## Illusztáció +### Javítások előtt + +

+ + + +

+ +### Javítások után + +

+ + + +

diff --git a/doc/git b/doc/git new file mode 100644 index 0000000..e69de29 diff --git a/doc/images/image-1.png b/doc/images/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9ea976b89600f32d6ba5e6f13b949c838c2004c6 GIT binary patch literal 34242 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 R2D$@!`dIl9M#kjT{{WCM{lowO literal 0 HcmV?d00001 diff --git a/doc/images/image-2.png b/doc/images/image-2.png new file mode 100644 index 0000000000000000000000000000000000000000..fb8ebe66876fa9dd2e0349f30c8d5ad032fa571b GIT binary patch literal 17740 zcmdVCcT|&G*DtEuttg6Y6-1HpT0n|`G?A{LARrwQ2u)CGC;|o~p;%G6bP2taKoTjT z2NWsNTM7gMNEJdr2ni5ME^haGzI*TY*B$qqGv2etNV1+hYdp`KbIn!eZ_c?QOpJ87 zIQcmb9XiCN_u!t{p+iS?4(hANj~#q#c$}U(_&MxvrmJ-b-6ybkaPg<>UBkPF4wc89 z+;u#9aDC$G18e_7hfaU}^*P+(Q}X1{p?lx;?%lO`Zcn3}2<9bF*lRNP&pMwtp1}Y0 z?7h4T$iH|@|2lg2{-?ic9tocpzVqq$`+>+U4y@Mws#iw~Ub!8uN?6i%vTZm%4QA+5|fdcD>W^o6(2Q!4nwL=M3vUb^rOEy3Kt*7jNwHvOwwqJ-^E5 zyP=QS+`sFGV(&iU`CWZ6^Vfx6Bp;Ni+kfgD{$0I&`ladb+M!tO|G!NM6_x(B%;35L z=L`V3({s+kGw`2h^OY|VN)b%w)RKT+er5u)Q0t|sq!?6!%16LZOZii8{`iN=J9mpK z!v+V>rPbpXlq}_LgK|rX6wQ)y#C|{M#k5tqwq&?l+u71Q&il7eV+$uD|M-1NEP_|N z3>i0lt^UOCKR){&kN)T0Q-MG7|Di^c~X1*H+_c|bbH~76mw^lj~|Qfu)BIIJ?Q#FtayfZ9THUKio0SypvAc8MdOo?nIN4kGoO>>0JLBr#9do;rxDBlW z3ipnA6w?I;8nbGCRQr}DJIN@oCIG<+;-!}MoA|H{`<+LL38nbdR*MkjP6?Yg%uxeB zTDnqe5)9dNqg*SD2w&*g_YW9Z^p}Cg2H_R}lA}g^f5|(9fFMI}<`6-QRd30O?wFn= zi^780WBTS;7u)OD+Q9vbke{XB9t^;hXB6-hqj0yDjL7PE&a5bX*q+n#Y>w4!|I0z| z&Ns`oH_f-ZwO?;YUYE4@5$|T_je*{}+ecr|4C<+>TtB8CwK${ixjEq{m+WM}Y0Hr> z@yv5BsY20Ae%~$AKz`2`nL=B)Z8n~0y?Bror>ThXUf`+tQz zlJo`5&_Z`%FW|d(*#lC*(e80GtUm=x>+?WXlPrekxhIIl5nO~T41X!xTF_V+bC^J~ zy*xRd%lj_SZLL{js2;-ctfd(NCu}lq^y^vflG`G;`WMK%+9|uQ;U#Dsa(pO&Ivm(! zLebo}lQ~^)?xhMLNMSWd(aNbMW9BtW$XWuN-tSZJ0Z`usjY$#&-KJg@u_GAuE?F;9 zK(~ByiQXD{^-|J<)z-p4sQgldF7oZU7sTM*mjLuc0q!CfpM#b?FBwRzv6&u#$7CwHpZ2#NL4JePANdB+t5qR!9`b^nk=NeOY)Df(=g6lEgR1| zCg-I#F%7`({cVSk?brBg*G#bbh|R`5>CwElRbh+QHW&aUBO4nu*ui?X4W&J-wRlO| zCuSNu;cX&s`xPG>Pe3~R=)y@i7Z&;bvphaV4>8>-3u8$XJpQ{#7HhMH9OA)G{5fg;tw{&hShf+wJ+MyNuoFP}kg~4nSu@y< ztqS?h0csdCC#CLRD2(gfrg(PwW5wedXhC+WN4wk|II`$diavJD$s@5?+7WfN>*g~1 zR4J|>BU&U1G|t;29%T@_)yY0TtWoBre;X47!487$zJtw9faJZJLImgS`HIHh0e`$^ zG?%pTo?xw0h3CeQh_jme@6KZ=#YdVm%ut?T*qfwQHFMYN>+1UXA z6-k@%8`~SOmr@^_7wqfN9lE$$|4%P~&@v(!G5|#4!;DA7Xp&2~kHXc+&Pr z8#B=!sy{Xma@O`v-go^u&4J=I9r+dHDsKA3U0^RwN*$!A#T#aOX3*M~4a>18sKH~laV(m1NVM^QYUvtv9Q3lnR=L(z=LejM%Q<7Q&t$5J=& zg?zW5>YXVZ$<|{9aigh zVurtcp>K>XoX{`VVN=E|wf93lm-U)$EbrHEMmTTRoDsH0k+L!{A&VzieoIdwKb)6( z`5hPR-c3Z>c+)kq61pz##ofe)+|U|a6g_hZak+*;YPr3M@lR3h8CW7b8g4V8tNPOYzL!Ti~(@df|dW-s;vm2C3)p8JMO6L-Kg^m*;hn# zPXiacXR3(&T<4n~UNuZlE5{C8EM2_LhMUcn)i9hh7MS4X^cKb0#hY)fd`|^l%Eagy z<8ov+mx(Q%UkN)1S@@&O$q_Nbu%hM=yS*}J<5>sQHFikFhAAd_A{Jv}V_tlw@+xo0 zNMg6*CKu_$89~BGPwF#!b%>%4JEC{!gugv|9M$X+3|_yTPZ2PEwgUMGv)hH#>gRd`=RP<-e1>*`!2D6kn*)Sjrf~jCh6YPJM?rU(;XHmFHFOt)IBc>jTIhQE_mz zdj}qMlqL0*+m95o4+ z*`2&Gn22t#X{M1E$t!RnzkKQh0wC0m&_=&57e||qW<9ABk@n+~b;fq3E2;0+gS8uR z6CpQ@>#v-nRpD?DPrayzX>f*rNNvA;jZZH4g|*Ub{*zR2_bH%T<&N!e&2vCzB>M~G zr`yV)MGt}@(?HJ<^ePN}8nOj5CpN0AAB+s2>*-Yu8Yj{IGBry>=*rCDRr!v!dg|C& zs(PSirCq&irsPf%^v}(w7b3O%vRp^|k9(5xP8Q+p zsmg|3q3sTHGv!1(1CDgs!v=jnVTVZSRMQhu1Sb&Z?n6}G`}rYLV>m*j|GXNYK``1O z!KvnTK-Nrk0VdE;fkyI|ZVK#e+S4Ju*bMzyCf}4f-bZ*oE3pIr7U%VWg-xg6Oi!Di^|FlJ&swCrlHa{+zHdWPx>sf*GaAWmp=_7T)KHhbN;HA^swLz} zIm0t`QX(b#IqCp&o?E1sh2qnJHa8HNWa@fXq8DqE z<6-D)Lrp*qo0%o^9WIvZqfyz*7r(Hvs$N>A){zb^-vMj}+;4IP1~l9F0&bL-T$tI; zx*+?@BFk}$`Gd9qC&Y(Myl*@bx!<~511%D&4C`^4U8W7??y_DetM8 zN%2U4l?A9;)i1nA*jxovcmqnQ%as;%6|BcX8sYmYcKgF9d(W52UA-|lxere9QJ)gp zo9|V+{cuKe4+N``8mws6lx7Q>^D;SB2eW`B=mo8zLTs6?)K(X1FJV4xXMgo-L$x>= zZ`bP94_0S=?v7OGZjLed>1mSWKM=d;Em$_1UgN%+8V}l<4$+tG5Z+HxgrnZj>q+K7 zCCWgL_i9r;ZS*bcX>dmcmOVA^VcV{e=M~q%TLHn{5>Cm>zrsrqeJJRMS<}*K^kQ7x z9)=xR=4F<@d85z`^L{+@fjB>@7&)=3$7cdkpB$IN>}Cb$Rmq?e9P%5-=eF;z-RIU; z(3j3`$ZEF9d1v(=p&f1V@XZ(h zmg}YR5tbDd+^@m0w{k!HZ|nMn-_Ll=b_=0k(jUGzF_yJBX>g!h{!1p^!F8u$c9)tQ zFkHe-B|kr}GC*u0_!&TY;%>xuk6KqG>scnUw=hIjDq=Ne>E|cRP5`To=(V8;EB)Fl^5?C_ zF3>Fz63kJ&+rf0pymU@!3evmZY)Re?sKvFP54*T@n-2A4H7%r~B&{_k?|6 zP`}j_F+RS&f$@(=n%Bt!sON*|4yo})`+jkcJ0)nl#+q-RS3m6@=SL_HU#S|k$iX<| zXsxVbfDTKmr(?rhDRQmg@E??DB)Q>f29;O#vqwi;$!vfpB~sOu>=F30bF<5( zo|ZcZzulCX0Q4E2=sDX*<;|+s*I)Cvf3e80kf(_-@`>8qf?h58q+<#?&s(^vVPKNV zp;oiaH#bxd$d1>X)1;30-x$=tg-Hj~oN5&_olqpxk8#~(;7j86lg5rsq+^`ZN!0#8Yg)~R zBm#Wn^KB`*Jn7A-cQ5ne(qqheLks81UYR)&Me&|%X7&N}@e)!5uBD6}TQ{HkRm11p z?P;S+^8DM2X2weonX)_(!z8j2U-5f2W9Rh!?y8z`%|@PLza2^x_ur`7=aCeVeMk#l)#DPZv{+j-g`$8Tv$nTfx6@^a6d1(v z)94HyA?IpekVKgrnTsB3QR4H6*_Im{fR^NJ=Us4W+U-xrJ=|fg4zw)NlP|sY3ibzL zE#KI~M9c;!X~b!gOTF%twVY-)Qnw+-^vOCeXB}OGLL%^=NJ8}ZaY*8}m#T%ndpvh5 z(%E;e;b+ov$JYOlZCbCKKDOFF*yzLUHo24rFCVBZTGlVwyrMJa>~c-g8bx5v-`OVU z6X1nJD=C?G6U619hUDNLR(yOK9BBI@=K*s~K+kfhyk()fz)xtPjm2zc_F(vM@1 zuq}=L%G2~b(wy^Bc+k_#+??M z8|jY>4Qo0Ne@uh8%5PK1dLdPM^oa+WN54B|~g9#%|sUyJ;c zPKL~;H|i&{)X}5qk-}{@qqLDpCF@F8wPMnK`ByvP&dK{8eX8jNw}7SPJ|`9!e#UlE zFxMtxt2N{kC~*a6_gz@v+sXMxB^dhFs%DPjuq&J;BWe88NY~J&kE;TpH23_rNq3R) ztp#L0bTU~LidIwW$a_o2-fmCY{OK(fOvxMo1|8dO^J*D?z{^75wh|Uk1;$;YH%kTgd z*Y-cWZjqj^2Nr3{N@@$OSOw=0HNx}I5eYlRw{6DrRx0-t z_GulsKhk*d^BP>(CVUq#4uboF`<5SDzZ+D++R|}vx$4OO*QhPd|D^fpHev&A!saV1 z{6{}YhVU3=Q`#BxmDf&kQ^RsB(-_%3$OrKm6M`;Zb>K>K?{X!$r{PWCg}x>@vMnG! zJ9)(CT#*$#4t*}1FqX!4sDdr(;f~u7Q<+AkziNMHd9BvDGSqFcl8-0lTyAdMhUunm zySt;2kD~z2VbE{f)+*i7j}f7Z8%2mG^1LbZ;Eh^m?Po596r`2=bq@gM;IUZNtaI4yPi3wmd7--u!8>FJM5TCsF7}h3M6A-I
RV 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 CoDG=( literal 0 HcmV?d00001 diff --git a/doc/images/image-3.png b/doc/images/image-3.png new file mode 100644 index 0000000000000000000000000000000000000000..f417345ef152d434adbca22387059bbc69a19666 GIT binary patch literal 58685 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 DmV)yZ literal 0 HcmV?d00001 diff --git a/doc/images/image-4.png b/doc/images/image-4.png new file mode 100644 index 0000000000000000000000000000000000000000..e1b573e14d91d52c67cb75e1f25afe987098a3e6 GIT binary patch literal 34346 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 Mpne}E_vqRG0(5Qe+W-In literal 0 HcmV?d00001 diff --git a/doc/images/image-5.png b/doc/images/image-5.png new file mode 100644 index 0000000000000000000000000000000000000000..fda4679ee07bad1559c4b672d72159e213ddeac4 GIT binary patch literal 20010 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


J&+OSW6_lF8 zE( zd(!%#*lyjWXRP0@Fw>7td9v3@yWVG`SX9xZFMGG^DISJkWP-M4KG>WbU!s%gG8aQcI;TfgU@|C-vgbIXoT6)PN%hUotLH{tVEukLHN zz8XetJl&P0Mu0+==De%zXaGXitur4H{Ov?he}d{~&70 zhRAri+-1k*GZ!x_m0pp0-oQ2>d%IFu>gnAd*K)1Wth`^bIxqj8!_+m?r`+mfIePbk z$J@I54);oDzifPX`0J0{xNBaTD}Mj|<($B5%JpuQ{ar=ZzcWILDw}4n%q!{PlU{Et zEW7-SnOoI=#lJ~Qg85}a!wQN`i=NF{zF=MAt4llfP5fS4wV8FAnt$5LRHUZ=)BID|r_LgdBUgDt--{hL`TXAaOaDy4Uq$Yd&h1>AS8C>UW&kXp__ABogPj7AUG&ldAkg(}-RR^v|)oa#? zFPOISe&(B&NVj{&Uv5e1^X~bs^l*Ro)a8Z6ci&B2zU=Jm$d?SPPg7S1av$mf8XCR| zGR!XrWM7|Sle#o@b<);Vt3vM82c0_^@+wllGJIQc<=0dlP?sw9?a-i`! h6$sDK!XlNw^-^=?nCx#ZjsONFgQu&X%Q~loCIHOs2|@q> literal 0 HcmV?d00001 diff --git a/doc/images/image.png b/doc/images/image.png new file mode 100644 index 0000000000000000000000000000000000000000..7d4fbfd6c68975074fa592bf56d4325f8bfeafd5 GIT binary patch literal 68920 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

M+`j7Qi$t*KG`p3C}~p> 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≻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

!ni>ooFU7rY#a9VPhS4< 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 Qb$*AcN}7+#6rR2QANA8yI{*Lx literal 0 HcmV?d00001