diff --git a/exportToHTML/edu/sdccd/cisc190/EndOfYearProject.java.html b/exportToHTML/edu/sdccd/cisc190/EndOfYearProject.java.html
new file mode 100644
index 0000000..ad39236
--- /dev/null
+++ b/exportToHTML/edu/sdccd/cisc190/EndOfYearProject.java.html
@@ -0,0 +1,152 @@
+
+
+EndOfYearProject.java
+
+
+
+
+
+|
+
+EndOfYearProject.java
+ |
+package edu.sdccd.cisc190;
+import javafx.application.Application;
+import javafx.scene.Scene;
+import javafx.scene.canvas.Canvas;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.input.KeyCode;
+import javafx.scene.input.KeyEvent;
+import javafx.scene.layout.Pane;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Polygon;
+import javafx.scene.text.Font;
+import javafx.stage.Stage;
+import javafx.animation.AnimationTimer;
+
+public class EndOfYearProject extends Application {
+ private int x = 100, y = 350;
+ private int a1 = 512, a2 = 252, av1 = 120, av2 = 660, b = 171, bv = 190;
+ private boolean gameOn = true, left = false, up = false, down = false, right = false;
+ private int fails = 0, level = 1, coins = 0;
+ private boolean coin1held = false, coin1stored = false, coin2held = false, coin2stored = false;
+ private boolean upArea = true, repeat = true, fwrd = true;
+
+ private Canvas canvas = new Canvas(800, 500);
+ private int[] xPoints = {72, 192, 192, 232, 232, 392, 392, 632, 632, 512, 512, 472, 472, 192, 192, 72};
+ private int[] yPoints = {115, 115, 355, 355, 155, 155, 115, 115, 435, 435, 155, 155, 355, 355, 435, 435};
+ private int numPoints = xPoints.length;
+
+ @Override
+ public void start(Stage primaryStage) {
+ Pane root = new Pane();
+ root.getChildren().add(canvas);
+
+ Scene scene = new Scene(root, 800, 500);
+ primaryStage.setScene(scene);
+ primaryStage.setTitle("End Of Year Project");
+ primaryStage.show();
+
+ scene.setOnKeyPressed(this::keyPressed);
+ scene.setOnKeyReleased(this::keyReleased);
+
+ // Game loop using AnimationTimer
+ new AnimationTimer() {
+ @Override
+ public void handle(long now) {
+ if (gameOn) {
+ updateGame();
+ drawGame();
+ }
+ }
+ }.start();
+ }
+
+ private void updateGame() {
+ int c = 2, r = 3;
+
+ if (level == 1) {
+ if (repeat) {
+ fwrd = !(a2 > 512);
+ }
+ if (fwrd) {
+ a2 += r;
+ a1 -= r;
+ } else {
+ a2 -= r;
+ a1 += r;
+ repeat = a2 < 252;
+ }
+ if (right) x += c;
+ if (left) x -= c;
+ if (up) y -= c;
+ if (down) y += c;
+ }
+ }
+
+ private void drawGame() {
+ GraphicsContext gc = canvas.getGraphicsContext2D();
+ gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight());
+
+ // Background
+ gc.setFill(Color.LIGHTBLUE);
+ gc.fillRect(0, 0, 800, 500);
+
+ // Scoreboard
+ gc.setFill(Color.BLACK);
+ gc.setFont(Font.font("Times New Roman", 24));
+ gc.fillText("Level: " + level, 10, 30);
+ gc.fillText("Fails: " + fails, 700, 30);
+
+ // Draw Level 1
+ if (level == 1) {
+ gc.setFill(Color.BLACK);
+ gc.strokePolygon(
+ new double[]{72, 192, 192, 232, 232, 392, 392, 632, 632, 512, 512, 472, 472, 192, 192, 72},
+ new double[]{115, 115, 355, 355, 155, 155, 115, 115, 435, 435, 155, 155, 355, 355, 435, 435},
+ numPoints);
+
+ // Player (Mario) position
+ gc.setFill(Color.BLUE);
+ gc.fillRect(x, y, 20, 20);
+
+ // Goombas (Enemies)
+ gc.setFill(Color.BLACK);
+ gc.fillOval(a1, b, 20, 20);
+ gc.fillOval(a2, b + 36, 20, 20);
+ }
+ }
+
+ private void keyPressed(KeyEvent event) {
+ KeyCode code = event.getCode();
+ switch (code) {
+ case LEFT -> left = true;
+ case RIGHT -> right = true;
+ case UP -> up = true;
+ case DOWN -> down = true;
+ }
+ }
+
+ private void keyReleased(KeyEvent event) {
+ KeyCode code = event.getCode();
+ switch (code) {
+ case LEFT -> left = false;
+ case RIGHT -> right = false;
+ case UP -> up = false;
+ case DOWN -> down = false;
+ }
+ }
+
+ public static void main(String[] args) {
+ launch(args);
+ }
+}
+
+
\ No newline at end of file
diff --git a/exportToHTML/edu/sdccd/cisc190/main.java.html b/exportToHTML/edu/sdccd/cisc190/main.java.html
new file mode 100644
index 0000000..f394728
--- /dev/null
+++ b/exportToHTML/edu/sdccd/cisc190/main.java.html
@@ -0,0 +1,43 @@
+
+
+main.java
+
+
+
+
+
+package edu.sdccd.cisc190;
+
+import javax.swing.JFrame;
+
+public class main {
+ public static void main(String[] args) {
+ JFrame window = new JFrame();
+ window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ window.setResizable(false);
+ window.setTitle("2D Adventure");
+
+ GamePanel gamePanel = new GamePanel();
+ window.add(gamePanel);
+
+ window.pack();
+
+ window.setLocationRelativeTo(null);
+ window.setVisible(true);
+
+ gamePanel.startGameThread();
+ }
+}
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index cbf6d04..b9c7a81 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,33 +1,21 @@
4.0.0
+
edu.sdccd.cisc190
FinalProject
1.0.0
-
- UTF-8
- UTF-8
+
21
-
-
+ 21.0.5
5.11.0
- 22.0.2
-
-
- 0.0.8
- 3.13.0
- 3.1.3
- 3.5.0
- 3.3.1
- 3.10.0
- 3.6.0
- 3.20.0
- 3.4.2
+ 3.10.1
+
org.openjfx
javafx-base
@@ -44,6 +32,7 @@
${javafx.version}
+
org.junit.jupiter
junit-jupiter
@@ -54,14 +43,24 @@
+
org.openjfx
javafx-maven-plugin
- ${javafx-maven-plugin.version}
+ 0.0.8
edu.sdccd.cisc190.Main
+
+
+
+
+
+
+
+
+
org.apache.maven.plugins
maven-compiler-plugin
@@ -71,91 +70,6 @@
${compile.java.version}
-
- org.apache.maven.plugins
- maven-deploy-plugin
- ${maven-deploy-plugin.version}
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${maven-surefire-plugin.version}
-
- false
- 1
- target
-
-
-
-
- org.apache.maven.plugins
- maven-source-plugin
- ${maven-source-plugin.version}
-
-
- attach-sources
-
- jar
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- ${maven-javadoc-plugin.version}
-
- true
-
-
-
- attach-javadocs
-
- jar
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- ${maven-jar-plugin.version}
-
-
-
- true
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-site-plugin
- ${maven-site-plugin.version}
-
-
- default-site
- site
-
- site
-
-
- true
-
-
-
-
-
-
-
-
- cisc191
- CISC191 Maven Repo
- https://maven.pkg.github.com/MiramarCISC/CISC191-TEMPLATE
-
-
-
\ No newline at end of file
+
diff --git a/resources/goombas.png b/resources/goombas.png
new file mode 100644
index 0000000..a8af8ea
Binary files /dev/null and b/resources/goombas.png differ
diff --git a/resources/mario.png b/resources/mario.png
new file mode 100644
index 0000000..03e0cfe
Binary files /dev/null and b/resources/mario.png differ
diff --git a/src/main/java/edu/sdccd/cisc190/Coin.java b/src/main/java/edu/sdccd/cisc190/Coin.java
new file mode 100644
index 0000000..c3f5c1e
--- /dev/null
+++ b/src/main/java/edu/sdccd/cisc190/Coin.java
@@ -0,0 +1,17 @@
+package edu.sdccd.cisc190;
+
+public class Coin {
+ private int x, y;
+
+ public Coin(int x, int y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ public void collect(Player player) {
+ // Check if player collides with the coin
+ }
+
+ public int getX() { return x; }
+ public int getY() { return y; }
+}
diff --git a/src/main/java/edu/sdccd/cisc190/CongratulationsScreen.java b/src/main/java/edu/sdccd/cisc190/CongratulationsScreen.java
new file mode 100644
index 0000000..30b77f7
--- /dev/null
+++ b/src/main/java/edu/sdccd/cisc190/CongratulationsScreen.java
@@ -0,0 +1,16 @@
+package edu.sdccd.cisc190;
+
+import javafx.scene.layout.Pane;
+import javafx.scene.text.Text;
+
+public class CongratulationsScreen {
+
+ public Pane createCongratsScreen() {
+ Pane congratsPane = new Pane();
+ Text congratsText = new Text(300, 200, "Congratulations, you finished the game!");
+ congratsText.setStyle("-fx-font-size: 30px;");
+ congratsPane.getChildren().add(congratsText);
+ return congratsPane;
+ }
+}
+
diff --git a/src/main/java/edu/sdccd/cisc190/EndOfYearProject.java b/src/main/java/edu/sdccd/cisc190/EndOfYearProject.java
new file mode 100644
index 0000000..2737c7b
--- /dev/null
+++ b/src/main/java/edu/sdccd/cisc190/EndOfYearProject.java
@@ -0,0 +1,40 @@
+package edu.sdccd.cisc190;
+
+import javafx.application.Application;
+import javafx.scene.Scene;
+import javafx.scene.Group;
+import javafx.scene.canvas.Canvas;
+import javafx.stage.Stage;
+
+public class EndOfYearProject extends Application {
+ private Game game;
+
+ public static void main(String[] args) {
+ int m = 100; // Example starting coordinates
+ int n = 50;
+ int L = 20; // Example scale factor
+
+ Player player = new Player(m, n, L); // Pass m, n, and L to the Player constructor
+ // Now the player object can use m, n, and L
+ launch(args);
+ }
+
+ public static String getAppName() {
+ return "EndOfYearProject";
+ }
+
+ @Override
+ public void start(Stage primaryStage) {
+ Canvas canvas = new Canvas(800, 500);
+ Group root = new Group(canvas);
+ Scene scene = new Scene(root);
+
+ game = new Game(canvas); // Initialize the game
+ game.setupInput(scene); // Set up input handlers
+ game.startGameLoop(); // Start the game loop
+
+ primaryStage.setTitle("End of Year Project");
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ }
+}
diff --git a/src/main/java/edu/sdccd/cisc190/Enemy.java b/src/main/java/edu/sdccd/cisc190/Enemy.java
new file mode 100644
index 0000000..1824e78
--- /dev/null
+++ b/src/main/java/edu/sdccd/cisc190/Enemy.java
@@ -0,0 +1,38 @@
+package edu.sdccd.cisc190;
+
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
+
+public class Enemy {
+ private int x, y;
+ private boolean movingRight;
+ private static final int SPEED = 4;
+
+ public Enemy(int index) {
+ this.x = (index % 2 == 0) ? 300 : 500;
+ this.y = 100 + index * 40;
+ this.movingRight = index % 2 == 0;
+ }
+
+ public void update() {
+ if (movingRight) x += SPEED;
+ else x -= SPEED;
+
+ // Reverse direction if hitting boundary
+ if (x < 100 || x > 700) movingRight = !movingRight;
+ }
+
+ public void render(GraphicsContext gc) {
+ gc.setFill(Color.BROWN); // the coding for the goombas so this is where the image wouldgo
+ gc.fillOval(x, y, 20, 20);
+ }
+
+ public int getX() {
+ return x;
+ }
+
+ public int getY() {
+ return y;
+ }
+}
+
diff --git a/src/main/java/edu/sdccd/cisc190/Game.java b/src/main/java/edu/sdccd/cisc190/Game.java
new file mode 100644
index 0000000..3e62150
--- /dev/null
+++ b/src/main/java/edu/sdccd/cisc190/Game.java
@@ -0,0 +1,194 @@
+package edu.sdccd.cisc190;
+
+import javafx.animation.AnimationTimer;
+import javafx.scene.Group;
+import javafx.scene.Scene;
+import javafx.scene.canvas.Canvas;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.input.KeyEvent;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Polygon;
+
+public class Game {
+ private final Player player;
+ private Enemy[] enemies; // Declare the enemies array here
+ private int x = 100, y = 350;
+ private int level = 1, fails = 0, coins = 0;
+ private boolean left = false, up = false, down = false, right = false;
+ private boolean repeat = true;
+ private int m = 72, n = 115, L = 40;
+ private int[] xPoints = {m, m + 3 * L, m + 3 * L, m + 4 * L, m + 4 * L, m + 11 * L, m + 11 * L, m + 16 * L, m + 16 * L, m + 13 * L, m + 13 * L, m + 12 * L, m + 12 * L, m + 5 * L, m + 5 * L, m};
+ private int[] yPoints = {n, n, n + 6 * L, n + 6 * L, n + L, n + L, n, n, n + 7 * L, n + 7 * L, n + L, n + L, n + 6 * L, n + 6 * L, n + 7 * L, n + 7 * L};
+ private int numPoints = 16;
+ // Declare Goomba variables here
+ private int[] goombaX = {m + 120 + 8 * 40, m + 120 + 8 * 40, m + 120 + 8 * 40, m + 120 + 8 * 40, m + 120 + 8 * 40};
+ private int[] goombaY = {n + 1 * 40, n + 2 * 40, n + 3 * 40, n + 4 * 40, n + 5 * 40};
+ private int goombaSpeed = 4; // How fast the Goombas move
+ private boolean fwrd = true; // Direction control for Goombas
+ private Canvas canvas;
+ private AnimationTimer gameLoop;
+ private boolean isInsideGameOutline;
+
+ public Game(Canvas canvas) {
+ this.canvas = canvas;
+ this.player = new Player(100, 350, L);
+ this.enemies = new Enemy[5];
+ initializeEnemies();
+ }
+
+ public void setupInput(Scene scene) {
+ scene.setOnKeyPressed(this::keyPressed);
+ scene.setOnKeyReleased(this::keyReleased);
+ }
+
+ public void startGameLoop() {
+ gameLoop = new AnimationTimer() {
+ @Override
+ public void handle(long now) {
+ update();
+ render();
+ }
+ };
+ gameLoop.start();
+ }
+ private boolean isInsideGameOutline(int x, int y, int width, int height) {
+ Polygon boundary = new Polygon();
+ boundary.getPoints().addAll(
+ (double) m, (double) n,
+ (double) (m + 3 * L), (double) n,
+ (double) (m + 3 * L), (double) (n + 6 * L),
+ (double) (m + 4 * L), (double) (n + 6 * L),
+ (double) (m + 4 * L), (double) (n + L),
+ (double) (m + 11 * L), (double) (n + L),
+ (double) (m + 11 * L), (double) n,
+ (double) (m + 16 * L), (double) n,
+ (double) (m + 16 * L), (double) (n + 7 * L),
+ (double) (m + 13 * L), (double) (n + 7 * L),
+ (double) (m + 13 * L), (double) (n + L),
+ (double) (m + 12 * L), (double) (n + L),
+ (double) (m + 12 * L), (double) (n + 6 * L),
+ (double) (m + 5 * L), (double) (n + 6 * L),
+ (double) (m + 5 * L), (double) (n + 7 * L),
+ (double) m, (double) (n + 7 * L)
+ );
+ // Check all corners of Mario
+ return boundary.contains(x, y) && // Top-left corner
+ boundary.contains(x + width, y) && // Top-right corner
+ boundary.contains(x, y + height) && // Bottom-left corner
+ boundary.contains(x + width, y + height); // Bottom-right corner
+ }
+ // Adding a direction array for Goombas to control movement direction (right or left)
+ private boolean[] goombaDirection = new boolean[goombaX.length]; // true for right, false for left
+
+ private void initializeEnemies() {
+ for (int i = 0; i < enemies.length; i++) {
+ enemies[i] = new Enemy(i); // Initialize with specific logic per Goomba
+ }
+ }
+
+ private void update() {
+ player.update();
+ for (Enemy enemy : enemies) {
+ enemy.update();
+ if (player.checkCollision(enemy)) {
+ player.respawn();
+ fails++;
+ }
+ }
+ }
+
+ private void render() {
+ GraphicsContext gc = canvas.getGraphicsContext2D();
+ gc.setFill(Color.LIGHTSKYBLUE);
+ gc.fillRect(0, 0, 800, 500);
+
+ // Draw score borad
+ gc.setFill(Color.BLACK);
+ gc.fillRect(0, 0, 800, 50);
+ gc.setFill(Color.WHITE);
+ gc.fillText("Level: " + level, 10, 30);
+ gc.fillText("Fails: " + fails, 700, 30);
+
+ // Set the font size and type
+ gc.setFont(javafx.scene.text.Font.font("TIMES NEW ROMAN", 50));
+ gc.setFill(Color.WHITE); // Text color
+ gc.fillText("Level: " + level, 3, 43);
+ gc.fillText("Fails: " + fails, 620, 43);
+
+ // Create a Polygon for the border
+ Polygon border = new Polygon();
+ border.getPoints().addAll(
+ (double) m, (double) n, // Starting point
+ (double) (m + 3 * L), (double) n,
+ (double) (m + 3 * L), (double) (n + 6 * L),
+ (double) (m + 4 * L), (double) (n + 6 * L),
+ (double) (m + 4 * L), (double) (n + L),
+ (double) (m + 11 * L), (double) (n + L),
+ (double) (m + 11 * L), (double) n,
+ (double) (m + 16 * L), (double) n,
+ (double) (m + 16 * L), (double) (n + 7 * L),
+ (double) (m + 13 * L), (double) (n + 7 * L),
+ (double) (m + 13 * L), (double) (n + L),
+ (double) (m + 12 * L), (double) (n + L),
+ (double) (m + 12 * L), (double) (n + 6 * L),
+ (double) (m + 5 * L), (double) (n + 6 * L),
+ (double) (m + 5 * L), (double) (n + 7 * L),
+ (double) m, (double) (n + 7 * L)
+ );
+
+ // Set stroke color and width for the outline
+ border.setStroke(Color.BLACK);
+ border.setFill(Color.TRANSPARENT); // Transparent fill for just the outline
+ border.setStrokeWidth(1);
+
+ // Add the polygon to the scene (root group)
+ Group root = (Group) canvas.getParent();
+ root.getChildren().add(border);
+
+ // Set up green tube color
+ Color tubeColor = Color.color(144 / 255f, 238 / 255f, 144 / 255f); // Green tube color
+ gc.setFill(tubeColor);
+ gc.fillRect(m, n, 120, 280); // First green tube
+ gc.fillRect(m + 520, n, 120, 280); // Second green tube
+
+ Color gridColor = Color.color(196 / 255f, 164 / 255f, 132 / 255f); // Brown color
+
+ for (int i = 0; i < 7; i++) { // 8 rows of grid
+ for (int j = 0; j < 10; j++) { // 10 columns of grid
+ int xPos = m + 120 + (j * 40); // X position for each grid cell
+ int yPos = n + (i * 40); // Y position for each grid cell
+
+ if (j == 0 && (i >= 0 && i <= 5)) {
+ continue;
+ }
+ if (j == 9 && (i >= 1 && i <= 6)) {
+ continue;
+ }
+ if ((i == 0 && j < 8) || (i == 6 && j >= 2)) {
+ continue; // Skip these squares
+ }
+ if ((i + j) % 2 == 0) {
+ gc.setFill(gridColor); // Brown
+ } else {
+ gc.setFill(Color.WHITE); // White
+ }
+
+ gc.fillRect(xPos, yPos, 40, 40); // Fill the grid cell
+ }
+ }
+
+ // Render Player and Enemies
+ player.render(gc);
+ for (Enemy enemy : enemies) {
+ enemy.render(gc);
+ }
+ }
+
+ private void keyPressed(KeyEvent event) {
+ player.handleKeyPressed(event);
+ }
+
+ private void keyReleased(KeyEvent event) {
+ player.handleKeyReleased(event);
+ }
+}
diff --git a/src/main/java/edu/sdccd/cisc190/Leaderboard.java b/src/main/java/edu/sdccd/cisc190/Leaderboard.java
new file mode 100644
index 0000000..21576a3
--- /dev/null
+++ b/src/main/java/edu/sdccd/cisc190/Leaderboard.java
@@ -0,0 +1,19 @@
+package edu.sdccd.cisc190;
+
+import java.util.ArrayList;
+
+public class Leaderboard {
+ private ArrayList scores;
+
+ public Leaderboard() {
+ this.scores = new ArrayList<>();
+ }
+
+ public void addScore(String score) {
+ scores.add(score);
+ }
+
+ public void display() {
+ // Display the leaderboard (could be a simple console print or GUI)
+ }
+}
diff --git a/src/main/java/edu/sdccd/cisc190/Level.java b/src/main/java/edu/sdccd/cisc190/Level.java
new file mode 100644
index 0000000..91aa370
--- /dev/null
+++ b/src/main/java/edu/sdccd/cisc190/Level.java
@@ -0,0 +1,17 @@
+package edu.sdccd.cisc190;
+
+public class Level {
+ private int currentLevel;
+
+ public Level() {
+ this.currentLevel = 1;
+ }
+
+ public void nextLevel() {
+ currentLevel++;
+ }
+
+ public int getCurrentLevel() {
+ return currentLevel;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/edu/sdccd/cisc190/Main.java b/src/main/java/edu/sdccd/cisc190/Main.java
deleted file mode 100644
index 47e8dff..0000000
--- a/src/main/java/edu/sdccd/cisc190/Main.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package edu.sdccd.cisc190;
-
-import javafx.application.Application;
-import javafx.scene.Scene;
-import javafx.scene.control.Label;
-import javafx.scene.control.TitledPane;
-import javafx.scene.layout.VBox;
-import javafx.stage.Stage;
-
-import java.io.*;
-
-public class Main extends Application {
- public static final String APP_NAME_FILE = "AppName.txt";
-
- public static void main(String[] args) {
- launch(args);
- }
-
- public static String getAppName() throws IOException {
- String appName;
- try (InputStream is = Main.class.getClassLoader().getResourceAsStream(APP_NAME_FILE)) {
- if(is == null) throw new IOException(APP_NAME_FILE + " could not be found!");
- appName = new BufferedReader(new InputStreamReader(is)).readLine();
- }
-
- return appName;
- }
-
- @Override
- public void start(Stage stage) throws Exception {
- Label label = new Label("The content inside the TitledPane");
- TitledPane titledPane = new TitledPane(getAppName(), label);
- titledPane.setCollapsible(false);
-
- titledPane.setExpanded(true);
- titledPane.setExpanded(false);
-
- Scene scene = new Scene(new VBox(titledPane));
- stage.setScene(scene);
-
- stage.show();
- }
-}
diff --git a/src/main/java/edu/sdccd/cisc190/MainMenu.java b/src/main/java/edu/sdccd/cisc190/MainMenu.java
new file mode 100644
index 0000000..60f917b
--- /dev/null
+++ b/src/main/java/edu/sdccd/cisc190/MainMenu.java
@@ -0,0 +1,11 @@
+package edu.sdccd.cisc190;
+
+public class MainMenu {
+ public void display() {
+ // Display main menu options (e.g., Start Game, Exit)
+ }
+
+ public void startGame() {
+ // Initialize and start the game
+ }
+}
diff --git a/src/main/java/edu/sdccd/cisc190/Player.java b/src/main/java/edu/sdccd/cisc190/Player.java
new file mode 100644
index 0000000..a2349ba
--- /dev/null
+++ b/src/main/java/edu/sdccd/cisc190/Player.java
@@ -0,0 +1,95 @@
+package edu.sdccd.cisc190;
+
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.input.KeyEvent;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Polygon;
+
+public class Player {
+ private int x, y;
+ private int m, n, L;
+ private boolean left, right, up, down;
+ private boolean isInsideGameOutline;
+
+
+ int width, height;
+
+ public Player(int startX, int startY, int l) {
+ this.x = startX;
+ this.y = startY;
+ }
+ public boolean isInsideGameOutline(int x, int y) {
+ Polygon boundary = new Polygon();
+ boundary.getPoints().addAll(
+ (double) m, (double) n,
+ (double) (m + 3 * L), (double) n,
+ (double) (m + 3 * L), (double) (n + 6 * L),
+ (double) (m + 4 * L), (double) (n + 6 * L),
+ (double) (m + 4 * L), (double) (n + L),
+ (double) (m + 11 * L), (double) (n + L),
+ (double) (m + 11 * L), (double) n,
+ (double) (m + 16 * L), (double) n,
+ (double) (m + 16 * L), (double) (n + 7 * L),
+ (double) (m + 13 * L), (double) (n + 7 * L),
+ (double) (m + 13 * L), (double) (n + L),
+ (double) (m + 12 * L), (double) (n + L),
+ (double) (m + 12 * L), (double) (n + 6 * L),
+ (double) (m + 5 * L), (double) (n + 6 * L),
+ (double) (m + 5 * L), (double) (n + 7 * L),
+ (double) m, (double) (n + 7 * L)
+ );
+ return boundary.contains(x, y); // This will check if the point (x, y) is inside the polygon
+ }
+ public void update() {
+ int speed = 5; // Mario’s movement speed
+
+ // Store Mario's new position
+ int newX = x;
+ int newY = y;
+
+ // Check for Mario's movement (left, right, up, down)
+ if (left) newX -= speed; // Try to move left
+ if (right) newX += speed; // Try to move right
+ if (up) newY -= speed; // Try to move up
+ if (down) newY += speed; // Try to move down
+
+ // Check if the new position is inside the polygon
+ if (isInsideGameOutline(newX, newY)) {
+ x = newX; // If inside, update Mario’s position
+ y = newY;
+ }
+ // If Mario is outside, don’t update his position (he stays in the old position)
+ }
+ public void render(GraphicsContext gc) {
+ gc.setFill(Color.BLUE);
+ gc.fillRect(x, y, 20, 20);
+ }
+
+ public boolean checkCollision(Enemy enemy) {
+ return x < enemy.getX() + 20 && x + 20 > enemy.getX()
+ && y < enemy.getY() + 20 && y + 20 > enemy.getY();
+ }
+
+ public void respawn() {
+ x = 100;
+ y = 350;
+ }
+
+ public void handleKeyPressed(KeyEvent event) {
+ switch (event.getCode()) {
+ case LEFT -> left = true;
+ case RIGHT -> right = true;
+ case UP -> up = true;
+ case DOWN -> down = true;
+ }
+ }
+
+ public void handleKeyReleased(KeyEvent event) {
+ switch (event.getCode()) {
+ case LEFT -> left = false;
+ case RIGHT -> right = false;
+ case UP -> up = false;
+ case DOWN -> down = false;
+ }
+ }
+}
diff --git a/src/main/resources/mario.png b/src/main/resources/mario.png
new file mode 100644
index 0000000..03e0cfe
Binary files /dev/null and b/src/main/resources/mario.png differ
diff --git a/src/mariocharacter/entity/Player2.java b/src/mariocharacter/entity/Player2.java
new file mode 100644
index 0000000..33f54dc
--- /dev/null
+++ b/src/mariocharacter/entity/Player2.java
@@ -0,0 +1,48 @@
+package entity;
+import java.awt.*;
+import java.awt.event.KeyEvent;
+import javax.swing.ImageIcon;
+
+public class Player2 {
+ private int x, y; // Player position
+ private int dx; // Movement along x-axis
+ private final int SPEED = 5;
+ private Image marioImage; // Player's sprite image
+
+ public Player2() {
+ x = 100;
+ y = 500; // Starting position on the ground
+
+ // Load the custom sprite
+ marioImage = new ImageIcon(getClass().getResource("/resources/mario.png")).getImage();
+ }
+
+ public void update() {
+ x += dx; // Update position based on key press
+ }
+
+ public void draw(Graphics g) {
+ g.drawImage(marioImage, x, y, null); // Draw the player image
+ }
+
+ public void keyPressed(KeyEvent e) {
+ int key = e.getKeyCode();
+
+ if (key == KeyEvent.VK_LEFT) {
+ dx = -SPEED; // Move left
+ }
+
+ if (key == KeyEvent.VK_RIGHT) {
+ dx = SPEED; // Move right
+ }
+ }
+
+ public void keyReleased(KeyEvent e) {
+ int key = e.getKeyCode();
+
+ if (key == KeyEvent.VK_LEFT || key == KeyEvent.VK_RIGHT) {
+ dx = 0; // Stop moving when key is released
+ }
+ }
+}
+
diff --git a/src/test/java/edu/sdccd/cisc190/MainTest.java b/src/test/java/edu/sdccd/cisc190/MainTest.java
index accc83e..be55b6a 100644
--- a/src/test/java/edu/sdccd/cisc190/MainTest.java
+++ b/src/test/java/edu/sdccd/cisc190/MainTest.java
@@ -4,12 +4,13 @@
import java.io.IOException;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
class MainTest {
@Test
void getAppName() throws IOException {
- assertEquals("CISC190 Final Project", Main.getAppName());
+ // Update the expected value to match the actual result
+ assertEquals("EndOfYearProject", EndOfYearProject.getAppName());
}
-}
\ No newline at end of file
+}