aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAidan Ross <aross02@fairport.org>2023-05-28 21:05:30 -0400
committerAidan Ross <aross02@fairport.org>2023-05-28 21:05:30 -0400
commit92f0e69cc938a058805e41780cb8a1bc7e6abda1 (patch)
tree1efe8b46e4db7d4bc9a4d112f310ffe3f0d79768 /src
parent9d07f0eb68e7779e8868b18a51bee5f8eb23b31e (diff)
downloadNPEhero-92f0e69cc938a058805e41780cb8a1bc7e6abda1.tar.gz
NPEhero-92f0e69cc938a058805e41780cb8a1bc7e6abda1.tar.bz2
NPEhero-92f0e69cc938a058805e41780cb8a1bc7e6abda1.zip
Removed unnecesary files in the gameplay class, as well as merged gameplay.score with main.scoreController such that score and combo are now displayed properly on the screen
Diffstat (limited to 'src')
-rw-r--r--src/gameplay/Driver.java54
-rw-r--r--src/gameplay/Level.java106
-rw-r--r--src/gameplay/NoteField.java25
-rw-r--r--src/gameplay/Score.java52
-rw-r--r--src/gameplay/SongPlayer.java8
-rw-r--r--src/gameplay/newSongPlayer.java289
-rw-r--r--src/main/ScoreController.java61
7 files changed, 60 insertions, 535 deletions
diff --git a/src/gameplay/Driver.java b/src/gameplay/Driver.java
deleted file mode 100644
index df11c31..0000000
--- a/src/gameplay/Driver.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*Name:
- *Date:
- *Period:
- *Teacher:
- *Description:
- */
-package gameplay;
-
-import javafx.application.*;
-import javafx.geometry.Side;
-import javafx.scene.Scene;
-import javafx.scene.image.Image;
-import javafx.scene.layout.Background;
-import javafx.scene.layout.BackgroundImage;
-import javafx.scene.layout.BackgroundPosition;
-import javafx.scene.layout.BackgroundRepeat;
-import javafx.scene.layout.BackgroundSize;
-import javafx.scene.layout.Pane;
-import javafx.stage.Stage;
-
-public class Driver extends Application
-{
-
- static Pane primaryPane = new Pane();
-
- public static void main(String[] args)
- {
- launch(args);
-
- }
- @Override
- public void start(Stage primaryStage) throws Exception {
- Scene primaryScene = new Scene(primaryPane, 800, 600);
- primaryScene.getStylesheets().add("gui/style.css");
- primaryStage.setScene(primaryScene);
- newSongPlayer player = new newSongPlayer();
- primaryStage.setTitle("TEST");
- primaryPane.getChildren().add(player);
- setBackground("assets/water.png");
- primaryStage.show();
- player.init();
- }
-
- public static void setBackground(String url)
- {
- primaryPane.setBackground(new Background(
- new BackgroundImage(
- new Image(url),
- BackgroundRepeat.REPEAT, BackgroundRepeat.NO_REPEAT,
- new BackgroundPosition(Side.LEFT, 0, true, Side.BOTTOM, 0, true),
- new BackgroundSize(BackgroundSize.AUTO, BackgroundSize.AUTO, true, true, false, true)
- )));
- }
-}
diff --git a/src/gameplay/Level.java b/src/gameplay/Level.java
deleted file mode 100644
index 1d5ff1b..0000000
--- a/src/gameplay/Level.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package gameplay;
-
-import javafx.application.Application;
-import javafx.event.ActionEvent;
-import javafx.event.EventHandler;
-import javafx.geometry.Insets;
-import javafx.scene.Scene;
-import javafx.scene.control.Button;
-import javafx.scene.effect.BlurType;
-import javafx.scene.effect.DropShadow;
-import javafx.scene.layout.AnchorPane;
-import javafx.scene.layout.Background;
-import javafx.scene.layout.BackgroundFill;
-import javafx.scene.layout.BorderPane;
-import javafx.scene.layout.CornerRadii;
-import javafx.scene.layout.GridPane;
-import javafx.scene.layout.Pane;
-import javafx.scene.layout.StackPane;
-import javafx.scene.paint.Color;
-import javafx.scene.shape.Rectangle;
-import javafx.scene.text.Font;
-import javafx.scene.text.FontWeight;
-import javafx.scene.text.Text;
-import javafx.stage.Stage;
-
-// will eventually extend pane
-public class Level extends Pane {
-
-
- public Level() {
-
- BorderPane background = new BorderPane();
- Scene game = new Scene(background, 800, 600);
- GridPane blockGrid = new GridPane();
- blockGrid.setBackground(new Background(new BackgroundFill(Color.BLACK, CornerRadii.EMPTY, Insets.EMPTY)));
- background.setCenter(blockGrid);
-
- blockGrid.maxWidthProperty().bind(game.heightProperty().multiply(0.53));
- blockGrid.maxHeightProperty().bind(game.heightProperty());
- System.out.println(game.heightProperty());
-
- //blockGrid.setMaxHeight(700);
- //blockGrid.setMaxWidth(500);
- //blockGrid.setScaleX(1);
- //blockGrid.setScaleY(1);
- //blockGrid.scaleXProperty().bind(game.heightProperty().divide(1000));
- //blockGrid.scaleYProperty().bind(game.heightProperty().divide(1000));
- //blockGrid.hgapProperty().bind(blockGrid.heightProperty().divide(11));
- //blockGrid.vgapProperty().bind(blockGrid.widthProperty().divide(21));
- blockGrid.setVgap(10);
- blockGrid.setHgap(25);
-
- int blocksize = 50;
- //AnchorPane b11 = new AnchorPane();
- //b11.getChildren().add(new Block(Color.ORANGE, b11, 10));
- Block b1 = new Block(Color.RED, blocksize, blocksize, 10);
- //b1.heightProperty().bind(blockGrid.heightProperty().divide((blockGrid.getColumnCount()*2)+1));
- //b1.widthProperty().bind(blockGrid.widthProperty().divide((blockGrid.getRowCount()*2)+1));
-
- Block b2 = new Block(Color.BLUE, blocksize, blocksize, 10);
- //b2.heightProperty().bind(blockGrid.heightProperty().divide(21));
- //b2.widthProperty().bind(blockGrid.widthProperty().divide(11));
-
- Block b3 = new Block(Color.GREEN, blocksize, blocksize, 10);
- //b3.heightProperty().bind(blockGrid.heightProperty().divide(21));
- //b3.widthProperty().bind(blockGrid.widthProperty().divide(11));
-
- Block b4 = new Block(Color.YELLOW, blocksize, blocksize, 10);
- //b4.heightProperty().bind(blockGrid.heightProperty().divide(21));
- //b4.widthProperty().bind(blockGrid.widthProperty().divide(11));
-
- Pane test = new Pane();
-
- Block b5 = new Block(Color.ORANGE, blocksize, blocksize, 10);
- DropShadow dropShadow = new DropShadow();
- dropShadow.setRadius(200.0);
- dropShadow.setColor(Color.ORANGE);
- dropShadow.setBlurType(BlurType.GAUSSIAN);
- test.getChildren().add(b5);
- test.setEffect(dropShadow);
-
-
-
- blockGrid.add(b1, 0, 0);
- blockGrid.add(b2, 1, 0);
- blockGrid.add(b3, 0, 1);
- blockGrid.add(b4, 1, 1);
- blockGrid.add(test, 1, 2);
-
- Button btn = new Button();
- btn.setText("Test");
- btn.setOnAction(new EventHandler<ActionEvent>()
- {
- @Override
- public void handle(ActionEvent event)
- {
- System.out.println("test");
- }
- });
-
- background.setLeft(btn);
-
-
-
- }
-} \ No newline at end of file
diff --git a/src/gameplay/NoteField.java b/src/gameplay/NoteField.java
deleted file mode 100644
index a954a2c..0000000
--- a/src/gameplay/NoteField.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*Name: Guitar Hero Project
- *Description: Contains the information for a single note on the field
- */
-package gameplay;
-
-import javafx.animation.TranslateTransition;
-
-public class NoteField
-{
- private Block note;
- private TranslateTransition anim;
-
- public NoteField(Block newNote, TranslateTransition newAnim) {
- note = newNote;
- anim = newAnim;
- }
-
- public Block getNote() {
- return note;
- }
-
- public TranslateTransition getAnim() {
- return anim;
- }
-}
diff --git a/src/gameplay/Score.java b/src/gameplay/Score.java
deleted file mode 100644
index fa8ddfe..0000000
--- a/src/gameplay/Score.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*Name: Guitar Hero Project
- *Description: Handles all the scoring for playing songs
- */
-package gameplay;
-
-import javafx.beans.property.IntegerProperty;
-
-public class Score
-{
- private int combo=0;
- private int comboMultiplier=1;
- private int score=0;
-
- public void perfect() {
- score += 300*comboMultiplier;
- System.out.println("Perfect!");
- }
-
- public void good() {
- score += 100*comboMultiplier;
- System.out.println("Good");
- }
-
- public void miss() {
- combo = 0;
- comboMultiplier = 1;
- System.out.println("Miss");
- }
- public void combo() {
- combo++;
-
- if (combo == 2) {
- comboMultiplier = 2;
- }
-
- if (combo == 4) {
- comboMultiplier = 4;
- }
-
- if (combo == 8) {
- comboMultiplier = 8;
- }
- }
-
- public int getScore() {
- return score;
- }
-
- public int getCombo() {
- return combo;
- }
-}
diff --git a/src/gameplay/SongPlayer.java b/src/gameplay/SongPlayer.java
index 10caf46..91221de 100644
--- a/src/gameplay/SongPlayer.java
+++ b/src/gameplay/SongPlayer.java
@@ -41,8 +41,7 @@ public class SongPlayer extends Pane {
Timer timer;
final int TIME = 1500; // delay for notes falling down the screen
- Score scoreCounter = new Score();
- StringProperty scoreString = new SimpleStringProperty();
+ main.ScoreController scoreCounter = new ScoreController();
Rectangle goalPerfect = new Rectangle();
HBox buttonBox = new HBox();
@@ -103,7 +102,7 @@ public class SongPlayer extends Pane {
public SongPlayer(main.Level lvl, Difficulty d, Pane p, ScoreController cntrl) {
bpm = d.bpm;
timer = new Timer(60);
-
+ scoreCounter = cntrl;
try {
loadSong(d.notes);
@@ -283,14 +282,12 @@ public class SongPlayer extends Pane {
if (distance < super.getHeight() / 16) {
ft.setFromValue(Color.WHITE);
ft.play();
- scoreCounter.combo();
scoreCounter.perfect();
return 2;
}
if (distance < super.getHeight() / 5) {
ft.setFromValue(Color.CYAN);
ft.play();
- scoreCounter.combo();
scoreCounter.good();
return 1;
}
@@ -301,4 +298,5 @@ public class SongPlayer extends Pane {
}
return -1;
}
+
} \ No newline at end of file
diff --git a/src/gameplay/newSongPlayer.java b/src/gameplay/newSongPlayer.java
deleted file mode 100644
index 5bb4e9f..0000000
--- a/src/gameplay/newSongPlayer.java
+++ /dev/null
@@ -1,289 +0,0 @@
-package gameplay;
-
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.Queue;
-
-import javafx.geometry.Pos;
-import javafx.scene.input.KeyCode;
-import javafx.scene.layout.HBox;
-import javafx.scene.layout.Pane;
-import javafx.scene.layout.StackPane;
-import javafx.scene.layout.VBox;
-import javafx.scene.paint.Color;
-import javafx.scene.shape.Rectangle;
-import javafx.animation.*;
-import javafx.util.*;
-import main.Difficulty;
-import main.ScoreController;
-
-public class newSongPlayer extends Pane {
- final int BPM = 80; //TEMPORARY BPM, this will be eventually read in from the metadata of the song
-
- Timer timer = new Timer(BPM);
- final int TIME = 1500; // delay for notes falling down the screen
-
- Score scoreCounter = new Score();
-
- Rectangle goalPerfect = new Rectangle();
- HBox buttonBox = new HBox();
- VBox polish = new VBox();
- VBox place = new VBox();
-
- TButton dButton = new TButton(Color.RED, 50, 50, 5);
- Queue<NoteInfo> dSends = new LinkedList<NoteInfo>(); // Queue that dictates when to send the notes
- ArrayList<Block> dLane = new ArrayList<Block>(); // Array list containing all the notes currently on the field
-
- TButton fButton = new TButton(Color.BLUE, 50, 50, 5);
- Queue<NoteInfo> fSends = new LinkedList<NoteInfo>();
- ArrayList<Block> fLane = new ArrayList<Block>();
-
- TButton sButton = new TButton(Color.GREEN, 50, 50, 5);
- Queue<NoteInfo> spaceSends = new LinkedList<NoteInfo>();
- ArrayList<Block> spaceLane = new ArrayList<Block>();
-
- TButton jButton = new TButton(Color.PURPLE, 50, 50, 5);
- Queue<NoteInfo> jSends = new LinkedList<NoteInfo>();
- ArrayList<Block> jLane = new ArrayList<Block>();
-
- TButton kButton = new TButton(Color.YELLOW, 50, 50, 5);
- Queue<NoteInfo> kSends = new LinkedList<NoteInfo>();
- ArrayList<Block> kLane = new ArrayList<Block>();
-
- /**
- * Establishes what the chart for the song is going to look like
- */
- public void loadSong() {
- dSends.add(new NoteInfo(4.000));
- dSends.add(new NoteInfo(4.333));
- dSends.add(new NoteInfo(4.666));
- fSends.add(new NoteInfo(5.000));
- kSends.add(new NoteInfo(5.500));
- spaceSends.add(new NoteInfo(6.000));
- jSends.add(new NoteInfo(6.000));
- jSends.add(new NoteInfo(6.250));
- dSends.add(new NoteInfo(6.500));
- jSends.add(new NoteInfo(6.750));
- spaceSends.add(new NoteInfo(7.000));
- fSends.add(new NoteInfo(7.500));
- jSends.add(new NoteInfo(7.750));
- spaceSends.add(new NoteInfo(8.000));
- fSends.add(new NoteInfo(8.500));
- jSends.add(new NoteInfo(8.500));
- dSends.add(new NoteInfo(9.000));
- spaceSends.add(new NoteInfo(9.000));
- kSends.add(new NoteInfo(9.000));
- spaceSends.add(new NoteInfo(9.500));
-
- kSends.add(new NoteInfo(10.000));
- dSends.add(new NoteInfo(10.000));
- kSends.add(new NoteInfo(10.333));
- fSends.add(new NoteInfo(10.333));
- kSends.add(new NoteInfo(10.666));
- spaceSends.add(new NoteInfo(10.666));
- dSends.add(new NoteInfo(11.000));
- spaceSends.add(new NoteInfo(11.000));
- dSends.add(new NoteInfo(11.333));
-
- jSends.add(new NoteInfo(11.333));
- dSends.add(new NoteInfo(11.666));
- kSends.add(new NoteInfo(11.666));
- spaceSends.add(new NoteInfo(12.000));
- }
-
- public newSongPlayer(main.Level lvl, Difficulty d, Pane p, ScoreController cntrl) {
- }
-
- public newSongPlayer() {
- }
-
- public void init() {
- loadSong();
-
- Rectangle field = new Rectangle(50, 50, new Color(0, 0, 0, 0.7));
- field.heightProperty().bind(this.getScene().getWindow().heightProperty());
- field.widthProperty().bind(this.getScene().getWindow().widthProperty().divide(2.7).add(50));
-
- goalPerfect.heightProperty().bind(this.getScene().getWindow().heightProperty().divide(32));
- goalPerfect.heightProperty().bind(this.getScene().getWindow().widthProperty());
-
- genButton(dButton);
- genButton(fButton);
- genButton(sButton);
- genButton(jButton);
- genButton(kButton);
-
- this.getScene().setOnKeyPressed(e -> {
- if (e.getCode() == KeyCode.D) {
- checkNote(dLane, dButton);
- }
- if (e.getCode() == KeyCode.F) {
- checkNote(fLane, fButton);
- }
- if (e.getCode() == KeyCode.SPACE) {
- checkNote(spaceLane, sButton);
- }
- if (e.getCode() == KeyCode.J) {
- checkNote(jLane, jButton);
- }
- if (e.getCode() == KeyCode.K) {
- checkNote(kLane, kButton);
- }
- System.out.println("Score: " + scoreCounter.getScore() + "\nCombo: " + scoreCounter.getCombo() + "\n");
- });
-
- buttonBox.setStyle("-fx-padding: 0;" + "-fx-border-style: solid inside;"
- + "-fx-border-width: 0;" + "-fx-border-insets: 20;"
- + "-fx-background-color: black;" + "-fx-opacity: 0.67;");
- buttonBox.setAlignment(Pos.CENTER);
- buttonBox.getChildren().addAll(dButton, fButton, sButton, jButton, kButton);
- buttonBox.setSpacing(10);
-
- polish.getChildren().addAll(field);
- polish.setAlignment(Pos.BASELINE_CENTER);
-
- place.prefWidthProperty().bind(this.getScene().widthProperty());
- place.prefHeightProperty().bind(this.getScene().heightProperty());
- place.getChildren().addAll(buttonBox);
- place.setAlignment(Pos.BOTTOM_CENTER);
- place.setSpacing(10);
-
- StackPane root = new StackPane();
- root.getChildren().addAll(polish, place);
-
- goalPerfect.setY(dButton.getY());
- super.getChildren().addAll(root, goalPerfect);
-
- gameLoop.start();
- }
-
- /**
- * Checks if a note should be sent at the current time, and sends the note if it
- * needs to be
- *
- * @param sends the queue to check
- * @param lane the lane to send the note to
- * @param pos the x pos of the note to be sent
- * @param c the color of the sent note
- */
- public void sendNote(Queue<NoteInfo> sends, ArrayList<Block> lane, double pos, Color c) {
- if (sends.peek() != null && timer.time() > sends.peek().getTime()) {
- TranslateTransition anim = new TranslateTransition(Duration.millis(TIME));
-
- lane.add(new Block(c, 50, 50, 5));
- int index = lane.size() - 1;
- sends.remove();
- lane.get(lane.size() - 1).heightProperty().bind(this.getScene().getWindow().widthProperty().divide(16));
- lane.get(lane.size() - 1).widthProperty().bind(this.getScene().getWindow().widthProperty().divide(16));
- lane.get(lane.size() - 1).arcHeightProperty().bind(this.getScene().getWindow().widthProperty().divide(50));
- lane.get(lane.size() - 1).arcWidthProperty().bind(this.getScene().getWindow().widthProperty().divide(50));
- lane.get(lane.size() - 1).setX(pos);
- lane.get(index).setY(-lane.get(index).getHeight());
- anim.setByY(this.getScene().getHeight() + lane.get(index).getHeight());
- anim.setCycleCount(1);
- anim.setAutoReverse(false);
- anim.setNode(lane.get(lane.size() - 1));
- anim.play();
-
- anim.setOnFinished(e -> {
- if (super.getChildren().removeAll(anim.getNode())){
- scoreCounter.miss();
- System.out.println();
- }
- });
- super.getChildren().add(lane.get(lane.size() - 1));
- }
- }
-
- /**
- * Sets up the given button
- *
- * @param button
- */
- public void genButton(TButton button) {
- button.heightProperty().bind(this.getScene().getWindow().widthProperty().divide(16));
- button.widthProperty().bind(this.getScene().getWindow().widthProperty().divide(16));
- button.arcHeightProperty().bind(this.getScene().getWindow().widthProperty().divide(50));
- button.arcWidthProperty().bind(this.getScene().getWindow().widthProperty().divide(50));
- button.strokeWidthProperty().bind(this.getScene().getWindow().widthProperty().divide(210));
- }
-
- /**
- * The background test that is run on every frame of the game
- */
- AnimationTimer gameLoop = new AnimationTimer() {
-
- @Override
- public void handle(long arg0) {
- sendNote(dSends, dLane, dButton.getLayoutX(), Color.RED);
- sendNote(fSends, fLane, fButton.getLayoutX(), Color.BLUE);
- sendNote(spaceSends, spaceLane, sButton.getLayoutX(), Color.GREEN);
- sendNote(jSends, jLane, jButton.getLayoutX(), Color.PURPLE);
- sendNote(kSends, kLane, kButton.getLayoutX(), Color.YELLOW);
- }
- };
-
- /**
- * returns the pos in the lane array of the closest note to the goal
- *
- * @param searchLane
- * @return the position of the note
- */
- private int getClosestNote(ArrayList<Block> searchLane) {
- int pos = 0;
-
- for (int i = 0; i < searchLane.size(); i++) {
- if (distanceToGoal(searchLane.get(i)) < distanceToGoal(searchLane.get(pos))) {
- pos = i;
- }
- }
- return pos;
- }
-
- /**
- * Returns the distance to the goal of the given note
- *
- * @param note
- * @return
- */
- private double distanceToGoal(Block note) {
- return Math.abs((this.getScene().getHeight() - note.getTranslateY()) - dButton.getY());
- }
-
- /**
- * When the player hits the key, checks the quality of the hit
- * @param lane the lane checking for a hit
- * @param button the button checking for a hit
- * @return 2 for a perfect hit, 1 for a good hit, 0 for a miss, and -1 if there are no notes to hit
- */
- private int checkNote(ArrayList<Block> lane, TButton button) {
- double distance = distanceToGoal(lane.get(getClosestNote(lane)));
- if (lane.size() > 0 && distance < this.getScene().getHeight() / 3) {
-
- FillTransition ft = new FillTransition(Duration.millis(500), button);
- ft.setToValue(button.getColor());
-
- super.getChildren().removeAll(lane.get(getClosestNote(lane)));
- lane.remove(lane.get(getClosestNote(lane)));
- if (distance < this.getScene().getHeight() / 18) {
- ft.setFromValue(Color.WHITE);
- ft.play();
- scoreCounter.combo();
- scoreCounter.perfect();
- return 2;
- }
- if (distance < this.getScene().getHeight() / 6) {
- ft.setFromValue(Color.CYAN);
- ft.play();
- scoreCounter.combo();
- scoreCounter.good();
- return 1;
- }
- ft.setFromValue(Color.RED);
- ft.play();
- scoreCounter.miss();
- return 0;
- }
- return -1;
- }
-} \ No newline at end of file
diff --git a/src/main/ScoreController.java b/src/main/ScoreController.java
index a33c873..52907ad 100644
--- a/src/main/ScoreController.java
+++ b/src/main/ScoreController.java
@@ -5,12 +5,65 @@ import javafx.beans.property.StringProperty;
public class ScoreController{
- int score = 0;
- int combo = 0;
+ private int score = 0;
+ private int combo = 0;
+ private int comboMultiplier=1;
public StringProperty scoreProperty = new SimpleStringProperty("0");
public StringProperty comboProperty = new SimpleStringProperty("0");
/**
+ * Called when the user performs a perfect hit
+ */
+ public void perfect() {
+ combo();
+ score += 300*comboMultiplier;
+ scoreProperty.setValue(score+"");
+ comboProperty.setValue(combo +"");
+ System.out.println("Perfect!");
+ }
+
+ /**
+ * called when the user performs an okay hit
+ */
+ public void good() {
+ combo();
+ score += 100*comboMultiplier;
+ scoreProperty.setValue(score+"");
+ comboProperty.setValue(combo+"");
+ System.out.println("Good");
+ }
+
+ /**
+ * Called when the user misses a note
+ */
+ public void miss() {
+ combo = 0;
+ comboMultiplier = 1;
+ scoreProperty.setValue(score+"");
+ comboProperty.setValue(combo+"");
+ System.out.println("Miss");
+ }
+
+ /*
+ * Increments the combo by one
+ */
+ private void combo() {
+ combo++;
+
+ if (combo == 2) {
+ comboMultiplier = 2;
+ }
+
+ if (combo == 4) {
+ comboMultiplier = 4;
+ }
+
+ if (combo == 8) {
+ comboMultiplier = 8;
+ }
+ }
+
+ /**
* @return current score
*/
public int getScore()
@@ -27,7 +80,7 @@ public class ScoreController{
}
/**
- * @param newScore: the score to be set
+ * @param newScore: the score to be set, only used in debug
*/
public void setScore(int newScore)
{
@@ -36,7 +89,7 @@ public class ScoreController{
}
/**
- * @param newCombo: the combo to be set
+ * @param newCombo: the combo to be set, only used in debug
*/
public void setCombo(int newCombo)
{