lab 7
diff --git a/src/sample/Algorithm.scala b/src/sample/Algorithm.scala
index 5693993..a5dbb61 100644
--- a/src/sample/Algorithm.scala
+++ b/src/sample/Algorithm.scala
@@ -4,21 +4,62 @@
val MOVED_RIGHT: Char = 'r'
val MOVED_LEFT: Char = 'l'
- def sort(xs: Array[Int]): Array[Int] =
- if (xs.length <= 1) xs
- else {
- val pivot = xs(xs.length / 2)
- Array.concat(
- sort(xs filter (pivot >)),
- xs filter (pivot ==),
- sort(xs filter (pivot <)))
+ def testSort(xs: Array[Int]): Long = {
+ val start = System.nanoTime()
+ sort(xs.toList)
+ val end = System.nanoTime()
+ end - start
+ }
+
+ def sort(lst: List[Int]): List[Int] =
+ lst match {
+ case Nil => Nil
+ case pivot :: tail => sort(tail filter {
+ pivot >
+ }) :::
+ pivot :: sort(tail filter {
+ pivot <=
+ })
}
+ /**
+ * make from replay Array that contains only symbols toFind
+ *
+ * @param xs
+ * @param toFind
+ * @return
+ */
+ def getSeqOfOneChar(xs: Array[Char], toFind: Char): IndexedSeq[Char] =
+ for (i <- 0 until xs.length if xs(i) == toFind) yield xs(i)
+
def countLeftMove(xs: Array[Char]): Int = {
- xs.filter(_ == MOVED_LEFT).length
+ getSeqOfOneChar(xs, MOVED_LEFT).length
}
def countRightMove(xs: Array[Char]): Int = {
- xs.filter(_ == MOVED_RIGHT).length
+ getSeqOfOneChar(xs, MOVED_RIGHT).length
+ }
+
+ def checkIn(xs: String, ys: String): Boolean = {
+ xs.contains(ys)
+ }
+
+ def findMaxRepeatedSeq(xs: Array[String]): String = {
+ var min = 0
+ for (elem <- xs) {
+ if (elem.length < xs(min).length) min = xs.indexOf(elem)
+ }
+ var maxString = ""
+ for (i <- 0 until xs(min).length)
+ for (j <- i + 1 until xs(min).length) {
+ var fl = true
+ for (elem <- xs) {
+ if (!checkIn(elem, xs(min).substring(i, j)))
+ fl = false
+ }
+ if (fl && (maxString.length < xs(min).substring(i, j).length))
+ maxString = xs(min).substring(i, j)
+ }
+ maxString
}
}
diff --git a/src/sample/ArtRico.java b/src/sample/ArtRico.java
index 229bd7c..f23f888 100644
--- a/src/sample/ArtRico.java
+++ b/src/sample/ArtRico.java
@@ -126,7 +126,7 @@
menuRoot.setPrefSize(SCENE_WIDTH, SCENE_HEIGHT);
createMainMenuButtons();
scene = new Scene(menuRoot);
- scene.getStylesheets().add(ArtRico.class.getResource("style.css")
+ scene.getStylesheets().add(ArtRico.class.getResource(STYLE_FILE)
.toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
diff --git a/src/sample/Bot.java b/src/sample/Bot.java
index 8e9a11b..a29203b 100644
--- a/src/sample/Bot.java
+++ b/src/sample/Bot.java
@@ -5,7 +5,7 @@
/**
* program can play without player
*/
-public class Bot {
+public class Bot implements Constants {
final int timeOfMoving = 2000;
Player player;
Ball ball;
@@ -36,20 +36,20 @@
if (time < timeOfMoving) {
if (player.getTranslateX() + player.getWidth() / 2
< ball.getTranslateX() + ball.getWidth()) {
- return 'r';
+ return RIGHT_MOVE;
} else {
- return 'l';
+ return LEFT_MOVE;
}
} else {
if (player.getTranslateX() + player.getWidth() / 2
< ball.getTranslateX()) {
- return 'r';
+ return RIGHT_MOVE;
} else {
- return 'l';
+ return LEFT_MOVE;
}
}
} else {
- return 'n';
+ return NOT_MOVE;
}
}
diff --git a/src/sample/Client.java b/src/sample/Client.java
index 4efba36..84062b8 100644
--- a/src/sample/Client.java
+++ b/src/sample/Client.java
@@ -42,7 +42,7 @@
@Override
public void run() {
try {
- sleep(100000);
+ sleep(WAIT_TIME);
} catch (InterruptedException e) {
scene = new Scene(initGame());
prepareActionHandlers();
@@ -50,7 +50,7 @@
}
while (working) {
try {
- sleep(10000);
+ sleep(WAIT_TIME);
} catch (InterruptedException e) {
return;
}
@@ -89,10 +89,10 @@
scene.setOnKeyPressed(event -> {
switch (event.getCode().toString()) {
case "LEFT":
- direction = 'l';
+ direction = LEFT_MOVE;
break;
case "RIGHT":
- direction = 'r';
+ direction = RIGHT_MOVE;
break;
case "SPACE":
server.animationSwitch();
@@ -106,7 +106,7 @@
lastKey.add(event.getCode().toString());
});
scene.setOnKeyReleased(event -> {
- direction = 'n';
+ direction = NOT_MOVE;
});
}
diff --git a/src/sample/Constants.java b/src/sample/Constants.java
index f41fdee..96b0ecf 100644
--- a/src/sample/Constants.java
+++ b/src/sample/Constants.java
@@ -18,7 +18,9 @@
char MEDIUM_MODE = 'm';
char HARD_MODE = 'h';
char REPLAY_MODE = 'r';
- int ITER_COUNT = 10000;
+ char LEFT_MOVE = 'l';
+ char RIGHT_MOVE = 'r';
+ char NOT_MOVE = 'n';
int NOTES_ON_SCREEN = 19;
int PLAYER_WIDTH_EASY = 280;
int PLAYER_WIDTH_MEDIUM = 200;
@@ -42,7 +44,10 @@
int STATISTICS_LABEL_INDENTS = 20;
int STATISTICS_LABEL_HEIGHT = 130;
int STATISTICS_LABEL_WIDTH = 320;
+ int WAIT_TIME = 100000;
+ int START_DELAY = 500;
String[] TOP_LABEL_CONTENT = {"REPLAY", "MODE", "PLAYED", "MOVED LEFT"
, "MOVED RIGHT"};
String RESOURCE_FOLDER = "Resource\\";
+ String STYLE_FILE = "style.css";
}
diff --git a/src/sample/Game.java b/src/sample/Game.java
index 721a558..d46295c 100644
--- a/src/sample/Game.java
+++ b/src/sample/Game.java
@@ -42,11 +42,11 @@
public void startGame() {
client = new Client(gameMode, this);
try {
- Thread.sleep(500);
+ Thread.sleep(START_DELAY);
} catch (InterruptedException e) {
}
scene = client.scene;
- scene.getStylesheets().add(Game.class.getResource("style.css")
+ scene.getStylesheets().add(Game.class.getResource(STYLE_FILE)
.toExternalForm());
gameStage.setScene(scene);
gameStage.setOnCloseRequest(e -> {
@@ -92,7 +92,8 @@
int fileNumber = ((int) e.getY()) / GRID_LABEL_HEIGHT - 1;
if (fileNumber != -1 && fileNumber < NOTES_ON_SCREEN) {
menuRoot.getChildren().remove(gridPane);
- replayFile = RESOURCE_FOLDER + replays.get(fileNumber).getReplayName();
+ replayFile = RESOURCE_FOLDER
+ + replays.get(fileNumber + currentIter).getReplayName();
startGame();
} else if (fileNumber == -1) {
ReplayInfo.sortBy = (int) e.getX() * 5 / (SCENE_WIDTH -
@@ -201,27 +202,17 @@
}
void sortTest() {
- long start;
- long end;
long traceTime;
Algorithm algorithm = new Algorithm();
JavaSort javaSort = new JavaSort();
- int[] array = new int[replays.size()*100];
- for (int j = 0; j < 100; j++){
- for (int i = 0; i < replays.size(); i++) {
- array[j * replays.size() + i] = replays.get(i).getGameTime();
- }
+ int[] array = new int[fileNames.length];
+ for (int i = 0; i < fileNames.length; i++) {
+ array[i] = replays.get(i).getGameTime();
}
System.out.println("Time of sorting:");
- start = System.nanoTime();
- algorithm.sort(array);
- end = System.nanoTime();
- traceTime = end - start;
+ traceTime = algorithm.testSort(array);
System.out.println("Scala: " + traceTime);
- start = System.nanoTime();
- javaSort.sort(array);
- end = System.nanoTime();
- traceTime = end - start;
+ traceTime = javaSort.testSort(array);
System.out.println("Java: " + traceTime);
}
diff --git a/src/sample/JavaSort.java b/src/sample/JavaSort.java
index 8ddeac4..6154e9a 100644
--- a/src/sample/JavaSort.java
+++ b/src/sample/JavaSort.java
@@ -5,6 +5,13 @@
*/
public class JavaSort {
+ long testSort(int[] xs) {
+ long start = System.nanoTime();
+ sort(xs);
+ long end = System.nanoTime();
+ return end - start;
+ }
+
/**
* interface for quicksort
*
@@ -22,6 +29,7 @@
* @param r
*/
void sort(int[] xs, int l, int r) {
+
int pivot = xs[(l + r) / 2];
int a = l;
int b = r;
diff --git a/src/sample/MoveConstants.java b/src/sample/MoveConstants.java
deleted file mode 100644
index fa3d44e..0000000
--- a/src/sample/MoveConstants.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package sample;
-
-/**
- *
- */
-interface MoveConstants {
- final char MOVED_RIGHT = 'r';
- final char MOVED_LEFT = 'l';
- final char NOT_MOVED = 'n';
-}
diff --git a/src/sample/ReplayInfo.java b/src/sample/ReplayInfo.java
index c116fda..0bfc83a 100644
--- a/src/sample/ReplayInfo.java
+++ b/src/sample/ReplayInfo.java
@@ -21,13 +21,13 @@
this.replayName = replayName;
replay = Serializer.loadReplay(RESOURCE_FOLDER + replayName);
switch (replay.toCharArray()[0]) {
- case 'e':
+ case EASY_MODE:
replayMode = "EASY";
break;
- case 'm':
+ case MEDIUM_MODE:
replayMode = "MEDIUM";
break;
- case 'h':
+ case HARD_MODE:
replayMode = "HARD";
break;
}
diff --git a/src/sample/Server.java b/src/sample/Server.java
index e6c9b3e..c91bc3d 100644
--- a/src/sample/Server.java
+++ b/src/sample/Server.java
@@ -54,7 +54,7 @@
client.setContent(player, ball, bricks, leftWall, rightWall, top, bottom);
client.interrupt();
try {
- sleep(100000);
+ sleep(WAIT_TIME);
} catch (InterruptedException e) {
timer = new AnimationTimer() {
@Override
@@ -173,9 +173,7 @@
if (replayNow) {
replayIterator = 1;
} else {
- for(int i = 0; i < 1000; i++) {
- Serializer.saveReplay(replay);
- }
+ Serializer.saveReplay(replay);
replay = "" + gameMode;
}
client.resetBricks();
diff --git a/src/sample/SimpleObject.java b/src/sample/SimpleObject.java
index 44b9f88..5c9a7e7 100644
--- a/src/sample/SimpleObject.java
+++ b/src/sample/SimpleObject.java
@@ -1,5 +1,7 @@
package sample;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
diff --git a/src/sample/Sorting.scala b/src/sample/Sorting.scala
deleted file mode 100644
index 0168170..0000000
--- a/src/sample/Sorting.scala
+++ /dev/null
@@ -1,13 +0,0 @@
-package sample
-
-class Sorting {
- def sort(xs: Array[Int]): Array[Int] =
- if (xs.length <= 1) xs
- else {
- val pivot = xs(xs.length / 2)
- Array.concat(
- sort(xs filter (pivot >)),
- xs filter (pivot ==),
- sort(xs filter (pivot <)))
- }
-}
diff --git a/src/sample/Statistics.java b/src/sample/Statistics.java
index c311089..8f00408 100644
--- a/src/sample/Statistics.java
+++ b/src/sample/Statistics.java
@@ -23,6 +23,8 @@
int allTimeMovedRight;
int allTimeMovedLeft;
int allTimeNotMoved;
+ String theBiggestSeq;
+ String [] allReplays;
public Statistics() {
replays = new ArrayList<>();
@@ -30,6 +32,7 @@
allTimeMovedRight = 0;
allTimeMovedLeft = 0;
allTimeNotMoved = 0;
+ theBiggestSeq = "";
this.stage = new Stage();
start(stage);
}
@@ -47,13 +50,17 @@
replays.add(replayInfo);
}
+ allReplays = new String[fileNames.length];
+
for (int i = 0; i < replays.size(); i++) {
allTimePlayed += replays.get(i).getGameTime();
allTimeMovedRight += replays.get(i).getRightMovingTime();
allTimeMovedLeft += replays.get(i).getLeftMovingTime();
+ allReplays[i] = replays.get(i).replay;
}
allTimeNotMoved = allTimePlayed - allTimeMovedLeft - allTimeMovedRight;
+ theBiggestSeq = new Algorithm().findMaxRepeatedSeq(allReplays);
}
@Override
@@ -68,7 +75,7 @@
buttons[i].setPrefHeight(STATISTICS_LABEL_HEIGHT);
buttons[i].setTranslateX(SCENE_WIDTH / 2 - STATISTICS_LABEL_WIDTH / 2);
}
- buttons[0].setText("Time played: " + allTimePlayed);
+ buttons[0].setText("The biggest sequence: " + theBiggestSeq);
buttons[1].setText("Time moved right: " + allTimeMovedRight);
buttons[2].setText("Time moved left: " + allTimeMovedLeft);
buttons[3].setText("Time not moved: " + allTimeNotMoved);
diff --git a/src/sample/style.css b/src/sample/style.css
index 3811225..c848f70 100644
--- a/src/sample/style.css
+++ b/src/sample/style.css
@@ -1,21 +1,25 @@
.root {
- -fx-background-image: url("metal.jpg");
+ -fx-background-image: url("metal.jpg");
}
.label {
- -fx-text-fill: white;
- -fx-font-family: "Arial Narrow";
- -fx-font-size: 20;
- -fx-font-weight: bold;
- -fx-background-image: url("brick.jpg");
- -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );
+ -fx-text-fill: white;
+ -fx-font-family: "Arial Narrow";
+ -fx-font-size: 20;
+ -fx-font-weight: bold;
+ -fx-background-image: url("brick.jpg");
+ -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );
}
.button {
- -fx-text-fill: white;
- -fx-font-family: "Arial Narrow";
- -fx-font-size: 20;
- -fx-font-weight: bold;
- -fx-background-image: url("brick.jpg");
- -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );
+ -fx-text-fill: white;
+ -fx-font-family: "Arial Narrow";
+ -fx-font-size: 20;
+ -fx-font-weight: bold;
+ -fx-background-image: url("brick.jpg");
+ -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 );
+}
+
+#b {
+ -fx-background-image: url("brick.jpg");
}
\ No newline at end of file