formatting

This commit is contained in:
2026-04-19 14:41:10 -05:00
parent 9f790813bb
commit a803f5e759
31 changed files with 793 additions and 795 deletions

BIN
Amendment.class Normal file

Binary file not shown.

View File

@@ -1,10 +1,8 @@
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
public class Amendment extends Collectable {
public class Amendment extends Collectable{ public Amendment(int x, int y, int w, int h) {
super(x, y, w, h, new ImageIcon("Sprites/Amendment.png"));
public Amendment(int x, int y, int w, int h){
super(x,y,w,h,new ImageIcon("Sprites/Amendment.png"));
} }
} }

BIN
Brick.class Normal file

Binary file not shown.

View File

@@ -2,7 +2,7 @@ import javax.swing.ImageIcon;
public class Brick extends Tile { public class Brick extends Tile {
public Brick(int x, int y, int w, int h){ public Brick(int x, int y, int w, int h) {
super(x,y,w,h,new ImageIcon("Sprites/Bricks/Brick.png")); super(x, y, w, h, new ImageIcon("Sprites/Bricks/Brick.png"));
} }
} }

BIN
Collectable.class Normal file

Binary file not shown.

View File

@@ -1,7 +1,7 @@
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
public class Collectable extends Collidable{ public class Collectable extends Collidable {
public Collectable(int x, int y, int w, int h,ImageIcon i){ public Collectable(int x, int y, int w, int h, ImageIcon i) {
super(x,y,w,h,i); super(x, y, w, h, i);
} }
} }

BIN
Collidable.class Normal file

Binary file not shown.

View File

@@ -1,21 +1,21 @@
import java.awt.Graphics;
import java.awt.Rectangle; import java.awt.Rectangle;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import java.awt.Graphics;
public class Collidable extends Sprite{ public class Collidable extends Sprite {
int x,y,width,height; int x, y, width, height;
Rectangle rect; Rectangle rect;
public Collidable(int x1, int y1, int w, int h, ImageIcon icon){ public Collidable(int x1, int y1, int w, int h, ImageIcon icon) {
super(icon); super(icon);
x = x1; x = x1;
y = y1; y = y1;
width = w; width = w;
height = h; height = h;
rect = new Rectangle(x1,y1,w,h); rect = new Rectangle(x1, y1, w, h);
} }
public void draw(Graphics g){ public void draw(Graphics g) {
sprite = icon.getImage(); sprite = icon.getImage();
g.drawImage(sprite, x, y, width, height, null); g.drawImage(sprite, x, y, width, height, null);
} }
@@ -24,7 +24,7 @@ public class Collidable extends Sprite{
return this.rect.intersects(other.rect); return this.rect.intersects(other.rect);
} }
public void onCollide(Collidable other){ public void onCollide(Collidable other) {
return; return;
} }
} }

BIN
Display.class Normal file

Binary file not shown.

View File

@@ -3,7 +3,7 @@ import javax.swing.*;
public class Display { public class Display {
public static void main(String[] args) { public static void main(String[] args) {
int boardWidth = 800; int boardWidth = 800;
int boardHeight = 800; int boardHeight = 600;
int tileSize = 20; int tileSize = 20;
JFrame game = new JFrame(); JFrame game = new JFrame();
@@ -12,7 +12,6 @@ public class Display {
game.setLocationRelativeTo(null); game.setLocationRelativeTo(null);
game.setResizable(false); game.setResizable(false);
Platformer platformer = new Platformer(boardWidth, boardHeight, tileSize); Platformer platformer = new Platformer(boardWidth, boardHeight, tileSize);
game.add(platformer); game.add(platformer);
game.pack(); game.pack();

BIN
Enemy.class Normal file

Binary file not shown.

View File

@@ -1,31 +1,32 @@
import javax.swing.ImageIcon;
import java.util.*; import java.util.*;
public class Enemy extends Collidable{ import javax.swing.ImageIcon;
public class Enemy extends Collidable {
int xVelo, yVelo; int xVelo, yVelo;
boolean alive; boolean alive;
public Enemy(int x, int y, int w, int h, int level){ public Enemy(int x, int y, int w, int h, int level) {
super(x,y,w,h,new ImageIcon("Sprites/Enemies/" + level + ".png")); super(x, y, w, h, new ImageIcon("Sprites/Enemies/" + level + ".png"));
xVelo = 2; xVelo = 2;
yVelo = 0; yVelo = 0;
alive = true; alive = true;
} }
public void moveX(int moveX){ public void moveX(int moveX) {
this.x += moveX; this.x += moveX;
this.rect.x = this.x; this.rect.x = this.x;
} }
public void moveY(int moveY){ public void moveY(int moveY) {
this.y += moveY; this.y += moveY;
this.rect.y = this.y; this.rect.y = this.y;
} }
public void patrol(ArrayList<Collidable> collidables){ public void patrol(ArrayList<Collidable> collidables) {
moveX(xVelo); moveX(xVelo);
for (Collidable c : collidables){ for (Collidable c : collidables) {
if (this.collidesWith(c)){ if (this.collidesWith(c)) {
xVelo = -xVelo; xVelo = -xVelo;
moveX(xVelo * 2); moveX(xVelo * 2);
break; break;
@@ -39,8 +40,7 @@ public class Enemy extends Collidable{
if (c instanceof Tile) { if (c instanceof Tile) {
Tile t = (Tile) c; Tile t = (Tile) c;
// check if tile is below enemy's next position // check if tile is below enemy's next position
if (nextX + this.width > t.x && nextX < t.x + t.width && if (nextX + this.width > t.x && nextX < t.x + t.width && t.y == this.y + this.height) {
t.y == this.y + this.height) {
edgeAhead = false; edgeAhead = false;
break; break;
} }

BIN
Flag.class Normal file

Binary file not shown.

BIN
LevelLoader.class Normal file

Binary file not shown.

View File

@@ -1,21 +1,24 @@
import java.util.*;
import java.io.*; import java.io.*;
import java.util.*;
public class LevelLoader { public class LevelLoader {
static int enemyWidth[] = {0,31,20,20,20,20,20,29,29,20,20}; static int enemyWidth[] = {0, 31, 20, 20, 20, 20, 20, 29, 29, 20, 20};
static int enemyHeight[] = {0,20,20,20,20,20,20,20,20,20,20}; static int enemyHeight[] = {0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20};
public static void load(int tileSize, public static void load(
int tileSize,
ArrayList<Collidable> collidables, ArrayList<Collidable> collidables,
ArrayList<Collectable> collectables, ArrayList<Collectable> collectables,
ArrayList<Enemy> enemies, ArrayList<Enemy> enemies,
Flag flag, Flag flag,
Player player, int level) throws IOException { Player player,
int level)
throws IOException {
collidables.clear(); collidables.clear();
collectables.clear(); collectables.clear();
enemies.clear(); enemies.clear();
/*left wall*/ collidables.add(new Brick(-20,0,20,2000)); /*left wall*/ collidables.add(new Brick(-20, 0, 20, 2000));
BufferedReader br = new BufferedReader(new FileReader("Levels/level" + level + ".txt")); BufferedReader br = new BufferedReader(new FileReader("Levels/level" + level + ".txt"));
String line; String line;
@@ -25,13 +28,28 @@ public class LevelLoader {
char c = line.charAt(col); char c = line.charAt(col);
int x = col * tileSize; int x = col * tileSize;
int y = row * tileSize; int y = row * tileSize;
switch(c) { switch (c) {
case 'B': collidables.add(new Brick(x, y, tileSize, tileSize)); break; case 'B':
case 'Q': collidables.add(new PowerBrick(x, y, tileSize, tileSize, 1)); break; collidables.add(new Brick(x, y, tileSize, tileSize));
case 'A': collectables.add(new Amendment(x, y, tileSize, tileSize)); break; break;
case 'F': flag.setPosition(x, y, tileSize, tileSize); break; case 'Q':
case 'P': player.x = x; player.y = y; player.rect.x = x; player.rect.y = y; break; collidables.add(new PowerBrick(x, y, tileSize, tileSize, 1));
case 'E': enemies.add(new Enemy(x,y,enemyWidth[level],enemyHeight[level],level)); break; break;
case 'A':
collectables.add(new Amendment(x, y, tileSize, tileSize));
break;
case 'F':
flag.setPosition(x, y, tileSize, tileSize);
break;
case 'P':
player.x = x;
player.y = y;
player.rect.x = x;
player.rect.y = y;
break;
case 'E':
enemies.add(new Enemy(x, y, enemyWidth[level], enemyHeight[level], level));
break;
} }
} }
row++; row++;

View File

@@ -31,9 +31,9 @@
................................................................. .................................................................
. .
. .
................................................. ............E.....................................
........BBBBB.............A.................................................................... ........BBBBB.............A....................................................................
.........................QBQQQQQBBBB .........................QBQQQQQBBBB
.................................................................................................... ....................................................................................................
.P.............E..............E...................E............................................................F.. .P............................E...................E............................................................F..
BBBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBBBB...BBBBBBB......................................BBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBBBB...BBBBBBB......................................BBBBBBBBBBBBBBBBBBBB

BIN
Platformer.class Normal file

Binary file not shown.

View File

@@ -1,15 +1,13 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.io.*;
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.*; import javax.swing.*;
public class Platformer extends JPanel implements KeyListener, ActionListener {
public class Platformer extends JPanel implements KeyListener, ActionListener{ // constants
//constants
static final int GRAVITY = 1; static final int GRAVITY = 1;
static final Color playerColor = Color.RED; static final Color playerColor = Color.RED;
static final Color tileColor = Color.BLUE; static final Color tileColor = Color.BLUE;
@@ -18,9 +16,9 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
static final int MAXYVELO = 15; static final int MAXYVELO = 15;
static final int MAXXVELO = 5; static final int MAXXVELO = 5;
static final int totalLevels = 10; static final int totalLevels = 10;
static int[] numAm = {4,5,0,0,0,0,0,0,0,0}; static int[] numAm = {4, 5, 0, 0, 0, 0, 0, 0, 0, 0};
//game objects // game objects
Player player; Player player;
ArrayList<Collidable> collidables; ArrayList<Collidable> collidables;
ArrayList<Collectable> collectables; ArrayList<Collectable> collectables;
@@ -28,24 +26,23 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
ArrayList<Enemy> enemies; ArrayList<Enemy> enemies;
ArrayList<Projectile> projectiles; ArrayList<Projectile> projectiles;
//game vars // game vars
int boardWidth; int boardWidth;
int boardHeight; int boardHeight;
int tileSize; int tileSize;
Timer gameTimer; Timer gameTimer;
HashMap<Integer,Boolean> pressedKeys; HashMap<Integer, Boolean> pressedKeys;
boolean jumpPressed; boolean jumpPressed;
int cameraX, cameraY; int cameraX, cameraY;
int currentLevel; int currentLevel;
boolean allCollected; boolean allCollected;
boolean gameOver; boolean gameOver;
boolean gameStarted; boolean gameStarted;
Image heart,emptyHeart,slash,amendmentImg,powerImg,pressRImg,endImg,winImg,titleImg; Image heart, emptyHeart, slash, amendmentImg, powerImg, pressRImg, endImg, winImg, titleImg;
ArrayList<Image> numbers; ArrayList<Image> numbers;
public Platformer(int boardWidth, int boardHeight, int tileSize) {
public Platformer(int boardWidth, int boardHeight, int tileSize){ // setup game
//setup game
this.boardWidth = boardWidth; this.boardWidth = boardWidth;
this.boardHeight = boardHeight; this.boardHeight = boardHeight;
this.tileSize = tileSize; this.tileSize = tileSize;
@@ -54,40 +51,39 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
this.setFocusable(true); this.setFocusable(true);
this.setLayout(null); this.setLayout(null);
pressedKeys = new HashMap<>(); pressedKeys = new HashMap<>();
jumpPressed = false; jumpPressed = false;
gameOver = false; gameOver = false;
gameStarted = false; gameStarted = false;
setBackground(SKY); setBackground(SKY);
//setup objects // setup objects
heart = new ImageIcon("Sprites/Hearts/heart.png").getImage(); heart = new ImageIcon("Sprites/Hearts/heart.png").getImage();
titleImg = new ImageIcon("Sprites/Title.png").getImage(); titleImg = new ImageIcon("Sprites/Title.png").getImage();
emptyHeart = new ImageIcon("Sprites/Hearts/emptyHeart.png").getImage(); emptyHeart = new ImageIcon("Sprites/Hearts/emptyHeart.png").getImage();
endImg = new ImageIcon("Sprites/end.png").getImage(); endImg = new ImageIcon("Sprites/end.png").getImage();
pressRImg = new ImageIcon("Sprites/PressR.png").getImage(); pressRImg = new ImageIcon("Sprites/PressR.png").getImage();
winImg = new ImageIcon("Sprites/win.png").getImage(); winImg = new ImageIcon("Sprites/win.png").getImage();
gameTimer = new Timer(15,this); gameTimer = new Timer(15, this);
player = new Player(-20,0,tileSize,tileSize); player = new Player(-20, 0, tileSize, tileSize);
collidables = new ArrayList<>(); collidables = new ArrayList<>();
collectables = new ArrayList<>(); collectables = new ArrayList<>();
enemies = new ArrayList<>(); enemies = new ArrayList<>();
projectiles = new ArrayList<>(); projectiles = new ArrayList<>();
flag = new Flag(-20,0,tileSize,tileSize); flag = new Flag(-20, 0, tileSize, tileSize);
cameraX = 0; cameraX = 0;
cameraY = 0; cameraY = 0;
currentLevel = 0; currentLevel = 0;
numbers = new ArrayList<>(); numbers = new ArrayList<>();
for (int i =0; i < 10; i++) numbers.add((new ImageIcon("Sprites/Numbers/" + i + ".png")).getImage()); for (int i = 0; i < 10; i++)
numbers.add((new ImageIcon("Sprites/Numbers/" + i + ".png")).getImage());
slash = new ImageIcon("Sprites/Numbers/Slash.png").getImage(); slash = new ImageIcon("Sprites/Numbers/Slash.png").getImage();
amendmentImg = new ImageIcon("Sprites/Amendment.png").getImage(); amendmentImg = new ImageIcon("Sprites/Amendment.png").getImage();
powerImg = new ImageIcon("Sprites/Powerup1.png").getImage(); powerImg = new ImageIcon("Sprites/Powerup1.png").getImage();
gameTimer.start(); gameTimer.start();
// if i wanna add a button
//if i wanna add a button
/*JButton gameStart = new JButton("Start Game"); /*JButton gameStart = new JButton("Start Game");
gameStart.addActionListener(e -> { gameStart.addActionListener(e -> {
loadLevel(currentLevel); loadLevel(currentLevel);
@@ -103,19 +99,17 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
this.add(gameStart);*/ this.add(gameStart);*/
} }
//gameloop // gameloop
public void gameLoop(){ public void gameLoop() {
if (currentLevel > totalLevels) return; if (currentLevel > totalLevels) return;
//camera // camera
cameraX = player.x - boardWidth / 2; cameraX = player.x - boardWidth / 2;
cameraX = Math.max(0, cameraX); cameraX = Math.max(0, cameraX);
cameraY = player.y - boardHeight / 2; cameraY = player.y - boardHeight / 2;
//cameraY = Math.max(0, cameraY); // cameraY = Math.max(0, cameraY);
// win
allCollected = player.numAmendments >= numAm[currentLevel - 1];
//win
allCollected = player.numAmendments >= numAm[currentLevel-1];
if (player.collidesWith(flag) && allCollected) { if (player.collidesWith(flag) && allCollected) {
currentLevel++; currentLevel++;
player.health = 3; player.health = 3;
@@ -129,59 +123,58 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
return; return;
} }
//keys // keys
if (Math.abs(player.xVelo) < MAXXVELO){ if (Math.abs(player.xVelo) < MAXXVELO) {
if(isKeyPressed(KeyEvent.VK_D) || isKeyPressed(KeyEvent.VK_RIGHT)){ if (isKeyPressed(KeyEvent.VK_D) || isKeyPressed(KeyEvent.VK_RIGHT)) {
player.xVelo += 1; player.xVelo += 1;
} } else if (isKeyPressed(KeyEvent.VK_A) || isKeyPressed(KeyEvent.VK_LEFT)) {
else if(isKeyPressed(KeyEvent.VK_A) || isKeyPressed(KeyEvent.VK_LEFT)){
player.xVelo -= 1; player.xVelo -= 1;
} }
} }
if (!isKeyPressed(KeyEvent.VK_D) && !isKeyPressed(KeyEvent.VK_RIGHT) && !isKeyPressed(KeyEvent.VK_A) && !isKeyPressed(KeyEvent.VK_LEFT)){ //friction if (!isKeyPressed(KeyEvent.VK_D)
if (player.xVelo > 0){ && !isKeyPressed(KeyEvent.VK_RIGHT)
&& !isKeyPressed(KeyEvent.VK_A)
&& !isKeyPressed(KeyEvent.VK_LEFT)) { // friction
if (player.xVelo > 0) {
player.xVelo = Math.max(0, player.xVelo - FRICTION); player.xVelo = Math.max(0, player.xVelo - FRICTION);
} } else if (player.xVelo < 0) {
else if (player.xVelo < 0){
player.xVelo = Math.min(0, player.xVelo + FRICTION); player.xVelo = Math.min(0, player.xVelo + FRICTION);
} }
} }
//jump // jump
boolean jumpKeyDown = (isKeyPressed(KeyEvent.VK_W) || isKeyPressed(KeyEvent.VK_UP)); boolean jumpKeyDown = (isKeyPressed(KeyEvent.VK_W) || isKeyPressed(KeyEvent.VK_UP));
if(jumpKeyDown && !jumpPressed){ if (jumpKeyDown && !jumpPressed) {
if(player.onGround){ if (player.onGround) {
player.yVelo = -15; player.yVelo = -15;
player.onGround = false; player.onGround = false;
jumpPressed = true; jumpPressed = true;
player.airJumps = 0; player.airJumps = 0;
} } else if (player.curPower == 1 && player.airJumps < 1) {
else if (player.curPower == 1 && player.airJumps < 1){
player.yVelo = -15; player.yVelo = -15;
player.airJumps++; player.airJumps++;
jumpPressed = true; jumpPressed = true;
} }
} }
if (!jumpKeyDown){ if (!jumpKeyDown) {
jumpPressed = false; jumpPressed = false;
} }
//gravity // gravity
if (player.yVelo < MAXYVELO){ if (player.yVelo < MAXYVELO) {
player.yVelo += GRAVITY; player.yVelo += GRAVITY;
} }
//fall out of world // fall out of world
if (player.y > boardHeight){ if (player.y > 2000) {
loadLevel(currentLevel); loadLevel(currentLevel);
player.health--; player.health--;
} }
for (Collectable c : collectables){ for (Collectable c : collectables) {
if (c instanceof Powerup){ if (c instanceof Powerup) {
Powerup pu = (Powerup) c; Powerup pu = (Powerup) c;
if (pu.yVelo < MAXYVELO && !pu.onGround){ if (pu.yVelo < MAXYVELO && !pu.onGround) {
pu.yVelo += GRAVITY; pu.yVelo += GRAVITY;
} }
pu.moveY(pu.yVelo); pu.moveY(pu.yVelo);
@@ -189,7 +182,7 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
if (pu.collidesWith(col)) { if (pu.collidesWith(col)) {
pu.yVelo = 0; pu.yVelo = 0;
pu.onGround = true; pu.onGround = true;
pu.y = ((Tile)col).y - pu.height; pu.y = ((Tile) col).y - pu.height;
pu.rect.y = pu.y; pu.rect.y = pu.y;
} }
} }
@@ -197,41 +190,38 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
player.curPower = pu.id; player.curPower = pu.id;
player.powerTimer = Player.POWER_DURATION; player.powerTimer = Player.POWER_DURATION;
} }
} } else if (c instanceof Amendment) {
else if (c instanceof Amendment){
Amendment am = (Amendment) c; Amendment am = (Amendment) c;
if (player.collidesWith(am)){ if (player.collidesWith(am)) {
player.numAmendments++; player.numAmendments++;
} }
} }
} }
collectables.removeIf(c -> player.collidesWith(c)); collectables.removeIf(c -> player.collidesWith(c));
//update x // update x
player.moveX(player.xVelo); player.moveX(player.xVelo);
//collision with all tiles x // collision with all tiles x
for (Collidable c : collidables) { for (Collidable c : collidables) {
if (player.collidesWith(c)) { if (player.collidesWith(c)) {
player.onCollideX(c); player.onCollideX(c);
} }
} }
//update y // update y
player.moveY(player.yVelo); player.moveY(player.yVelo);
//assume not on ground // assume not on ground
player.onGround = false; player.onGround = false;
//collision with all tiles y // collision with all tiles y
for (Collidable c : collidables) { for (Collidable c : collidables) {
if (player.collidesWith(c)) { if (player.collidesWith(c)) {
player.onCollideY(c,collectables); player.onCollideY(c, collectables);
} }
} }
// Powerup timer
//Powerup timer
if (player.curPower > 0) { if (player.curPower > 0) {
player.powerTimer--; player.powerTimer--;
if (player.powerTimer <= 0) { if (player.powerTimer <= 0) {
@@ -239,7 +229,7 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
} }
} }
//update facing // update facing
if (player.xVelo > 0) player.facing = 1; if (player.xVelo > 0) player.facing = 1;
else if (player.xVelo < 0) player.facing = -1; else if (player.xVelo < 0) player.facing = -1;
@@ -249,11 +239,11 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
// invincibility timer // invincibility timer
if (player.invincibleTimer > 0) player.invincibleTimer--; if (player.invincibleTimer > 0) player.invincibleTimer--;
//shoot // shoot
//projectiles // projectiles
if (isKeyPressed(KeyEvent.VK_SPACE) && player.shootCooldown == 0){ if (isKeyPressed(KeyEvent.VK_SPACE) && player.shootCooldown == 0) {
int projX = player.facing == 1 ? player.x + player.width : player.x - 10; int projX = player.facing == 1 ? player.x + player.width : player.x - 10;
projectiles.add(new Projectile(projX,player.y,tileSize,10,currentLevel,player.facing)); projectiles.add(new Projectile(projX, player.y, tileSize, 10, currentLevel, player.facing));
player.shootCooldown = Player.SHOOT_COOLDOWN; player.shootCooldown = Player.SHOOT_COOLDOWN;
} }
@@ -269,7 +259,6 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
} }
} }
// update enemies // update enemies
for (Enemy e : enemies) { for (Enemy e : enemies) {
e.patrol(collidables); e.patrol(collidables);
@@ -279,16 +268,16 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
} }
} }
//die // die
if (player.health <= 0) { if (player.health <= 0) {
System.out.print("Game Over - You Died!"); System.out.print("Game Over - You Died!");
gameOver = true; gameOver = true;
gameTimer.stop(); gameTimer.stop();
} }
//projectile hits enemy // projectile hits enemy
for (Projectile p : new ArrayList<>(projectiles)){ for (Projectile p : new ArrayList<>(projectiles)) {
for (Enemy e : new ArrayList<>(enemies)){ for (Enemy e : new ArrayList<>(enemies)) {
if (p.collidesWith(e)) { if (p.collidesWith(e)) {
enemies.remove(e); enemies.remove(e);
projectiles.remove(p); projectiles.remove(p);
@@ -312,29 +301,29 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
} }
} }
//paintComponent // paintComponent
public void paintComponent(Graphics g){ public void paintComponent(Graphics g) {
super.paintComponent(g); super.paintComponent(g);
draw(g); draw(g);
} }
//draw function // draw function
public void draw(Graphics g){ public void draw(Graphics g) {
//gameover screen // gameover screen
if (gameOver){ if (gameOver) {
g.drawImage(endImg, boardWidth/2 - 100, boardHeight/2 - 150, null); g.drawImage(endImg, boardWidth / 2 - 100, boardHeight / 2 - 150, null);
g.drawImage(pressRImg, boardWidth/2 - 80, boardHeight/2, null); g.drawImage(pressRImg, boardWidth / 2 - 80, boardHeight / 2, null);
return;
}
if (currentLevel > totalLevels) {
g.drawImage(winImg, boardWidth / 2 - 100, boardHeight / 2 - 50, null);
g.drawImage(pressRImg, boardWidth / 2 - 80, boardHeight / 2 + 60, null);
return; return;
} }
g.translate(-cameraX, -cameraY); g.translate(-cameraX, -cameraY);
if (currentLevel > totalLevels) {
g.drawImage(winImg, boardWidth/2 - 100, boardHeight/2 - 50, null);
g.drawImage(pressRImg, boardWidth/2 - 80, boardHeight/2 + 60, null);
return;
}
player.draw(g); player.draw(g);
for (Collidable c : collidables) c.draw(g); for (Collidable c : collidables) c.draw(g);
for (Collectable c : collectables) c.draw(g); for (Collectable c : collectables) c.draw(g);
@@ -342,36 +331,35 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
for (Projectile p : projectiles) p.draw(g); for (Projectile p : projectiles) p.draw(g);
flag.draw(g); flag.draw(g);
//flag counter // flag counter
int amOnes = player.numAmendments % 10; int amOnes = player.numAmendments % 10;
int amTens = player.numAmendments / 10; int amTens = player.numAmendments / 10;
if (currentLevel > 0 && player.numAmendments < numAm[currentLevel-1]){ if (currentLevel > 0 && player.numAmendments < numAm[currentLevel - 1]) {
if (amTens > 0) g.drawImage(numbers.get(amTens),flag.x-20,flag.y-30,null); if (amTens > 0) g.drawImage(numbers.get(amTens), flag.x - 20, flag.y - 30, null);
g.drawImage(numbers.get(amOnes),flag.x+5,flag.y-30,null); g.drawImage(numbers.get(amOnes), flag.x + 5, flag.y - 30, null);
g.drawImage(slash,flag.x+28,flag.y-32,null); g.drawImage(slash, flag.x + 28, flag.y - 32, null);
g.drawImage(numbers.get(numAm[currentLevel-1]),flag.x+55,flag.y-30,null); g.drawImage(numbers.get(numAm[currentLevel - 1]), flag.x + 55, flag.y - 30, null);
g.drawImage(amendmentImg,flag.x+85,flag.y-30,null); g.drawImage(amendmentImg, flag.x + 85, flag.y - 30, null);
} }
g.translate(cameraX, cameraY); g.translate(cameraX, cameraY);
int modAmt = 2000; int modAmt = 2000;
int curTime = (int) System.currentTimeMillis() % modAmt; int curTime = (int) System.currentTimeMillis() % modAmt;
curTime = Math.abs(curTime); curTime = Math.abs(curTime);
//start screen // start screen
int startTime = 0; int startTime = 0;
if (curTime >= 0 && curTime <= modAmt/4-1) startTime = 0; if (curTime >= 0 && curTime <= modAmt / 4 - 1) startTime = 0;
else if (curTime >= modAmt/4 && curTime <= modAmt/2-1) startTime = 1; else if (curTime >= modAmt / 4 && curTime <= modAmt / 2 - 1) startTime = 1;
else if (curTime >= modAmt/2 && curTime <= modAmt*3/4-1) startTime = 2; else if (curTime >= modAmt / 2 && curTime <= modAmt * 3 / 4 - 1) startTime = 2;
else if (curTime >= modAmt*3/4 && curTime <= modAmt-1) startTime = 3; else if (curTime >= modAmt * 3 / 4 && curTime <= modAmt - 1) startTime = 3;
if (currentLevel == 0){ if (currentLevel == 0) {
g.drawImage(titleImg, boardWidth/2 - 150, boardHeight/2 - 200, null); g.drawImage(titleImg, boardWidth / 2 - 150, boardHeight / 2 - 200, null);
g.drawString("An American Identity Project", boardWidth/2 - 75, boardHeight/2-40); g.drawString("An American Identity Project", boardWidth / 2 - 75, boardHeight / 2 - 40);
String text = "Press P to Start!"; String text = "Press P to Start!";
int xBase = 340; int xBase = 340;
int yBase = 400; int yBase = 400;
@@ -385,67 +373,66 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
// y uses a sine wave // y uses a sine wave
// Math.sin takes radians. We use (startTime + i) to give each letter a different phase. // Math.sin takes radians. We use (startTime + i) to give each letter a different phase.
double waveOffset = Math.sin(startTime + i * 0.5) * 10; double waveOffset = Math.sin(startTime + i * 0.5) * 10;
int y = yBase + (int)waveOffset; int y = yBase + (int) waveOffset;
g.drawString(String.valueOf(c), x, y); g.drawString(String.valueOf(c), x, y);
} }
} }
if (currentLevel > 0){ if (currentLevel > 0) {
//draw hearts: // draw hearts:
int heartTime = 0; int heartTime = 0;
if (curTime >= 0 && curTime <= modAmt/2-1) heartTime = 1; if (curTime >= 0 && curTime <= modAmt / 2 - 1) heartTime = 1;
else if (curTime >= modAmt/2 && curTime <= modAmt-1) heartTime = 0; else if (curTime >= modAmt / 2 && curTime <= modAmt - 1) heartTime = 0;
for (int i = 0; i < player.health; i++){ for (int i = 0; i < player.health; i++) {
g.drawImage(heart,(((i+1) * 20)-10)+heartTime,10+heartTime * 2,null); g.drawImage(heart, (((i + 1) * 20) - 10) + heartTime, 10 + heartTime * 2, null);
} }
for (int i =0; i < 3 - player.health; i++){ for (int i = 0; i < 3 - player.health; i++) {
g.drawImage(emptyHeart,(50 - (i * 20)) + heartTime,10+heartTime * 2,null); g.drawImage(emptyHeart, (50 - (i * 20)) + heartTime, 10 + heartTime * 2, null);
} }
//draw amendments counter in top right // draw amendments counter in top right
if (amTens > 0) g.drawImage(numbers.get(amTens),315,10,null); if (amTens > 0) g.drawImage(numbers.get(amTens), 315, 10, null);
g.drawImage(numbers.get(amOnes),340,10,null); g.drawImage(numbers.get(amOnes), 340, 10, null);
g.drawImage(slash,363,12,null); g.drawImage(slash, 363, 12, null);
g.drawImage(numbers.get(numAm[currentLevel-1]),390,10,null); g.drawImage(numbers.get(numAm[currentLevel - 1]), 390, 10, null);
g.drawImage(amendmentImg,420,10,null); g.drawImage(amendmentImg, 420, 10, null);
// draw powerup timer
//draw powerup timer if (player.curPower == 1) {
if (player.curPower == 1){ int secs = player.powerTimer / 66;
int secs = player.powerTimer/66; int tens = secs / 10;
int tens = secs/10; int ones = secs % 10;
int ones = secs%10; if (tens > 0) {
if (tens > 0){ g.drawImage(numbers.get(tens), 184, 10, null);
g.drawImage(numbers.get(tens),184,10,null);
} }
g.drawImage(numbers.get(ones),205,10,null); g.drawImage(numbers.get(ones), 205, 10, null);
g.drawImage(powerImg,220,10,null); g.drawImage(powerImg, 220, 10, null);
} }
} }
} }
//is key pressed // is key pressed
public boolean isKeyPressed(int key){ public boolean isKeyPressed(int key) {
return pressedKeys.getOrDefault(key,false); return pressedKeys.getOrDefault(key, false);
} }
//every tick // every tick
@Override @Override
public void actionPerformed(ActionEvent e){ public void actionPerformed(ActionEvent e) {
if (gameStarted) { if (gameStarted) {
gameLoop(); gameLoop();
} }
repaint(); repaint();
} }
//check for key presses // check for key presses
@Override @Override
public void keyPressed(KeyEvent e){ public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_P){ if (e.getKeyCode() == KeyEvent.VK_P) {
if(currentLevel == 0) { if (currentLevel == 0) {
currentLevel = 1; currentLevel = 1;
loadLevel(currentLevel); loadLevel(currentLevel);
gameStarted = true; gameStarted = true;
@@ -454,36 +441,34 @@ public class Platformer extends JPanel implements KeyListener, ActionListener{
return; return;
} }
if (e.getKeyCode() == KeyEvent.VK_R){ if (e.getKeyCode() == KeyEvent.VK_R) {
if (gameOver) { if (gameOver) {
gameTimer.stop(); gameTimer.stop();
loadLevel(1); loadLevel(1);
currentLevel = 1; currentLevel = 1;
jumpPressed = false; jumpPressed = false;
player.health=3; player.health = 3;
gameOver = false; gameOver = false;
repaint(); repaint();
return; gameTimer.start();
gameStarted = true;
} }
return;
} }
if (e.getKeyCode() == KeyEvent.VK_O){ if (e.getKeyCode() == KeyEvent.VK_O) {
currentLevel++; currentLevel++;
loadLevel(currentLevel); loadLevel(currentLevel);
} }
pressedKeys.put(e.getKeyCode(),true); pressedKeys.put(e.getKeyCode(), true);
} }
@Override @Override
public void keyReleased(KeyEvent e){ public void keyReleased(KeyEvent e) {
pressedKeys.put(e.getKeyCode(),false); pressedKeys.put(e.getKeyCode(), false);
} }
//dont need // dont need
@Override @Override
public void keyTyped(KeyEvent e){ public void keyTyped(KeyEvent e) {}
}
} }

BIN
Player.class Normal file

Binary file not shown.

View File

@@ -1,11 +1,12 @@
import javax.swing.ImageIcon;
import java.util.*; import java.util.*;
import javax.swing.ImageIcon;
public class Player extends Collidable { public class Player extends Collidable {
static final int JUMP_HEIGHT = 10; static final int JUMP_HEIGHT = 10;
static final int POWER_DURATION = 2000; // 2000 ticks ≈ 30 seconds static final int POWER_DURATION = 2000; // 2000 ticks ≈ 30 seconds
static final int I_FRAMES = 67; // ~1 second static final int I_FRAMES = 67; // ~1 second
static final int SHOOT_COOLDOWN = 33; //~0.5 second static final int SHOOT_COOLDOWN = 33; // ~0.5 second
int health; int health;
int yVelo; int yVelo;
@@ -19,8 +20,8 @@ public class Player extends Collidable {
int shootCooldown; int shootCooldown;
int numAmendments; int numAmendments;
public Player(int x, int y, int w, int h){ public Player(int x, int y, int w, int h) {
super(x,y,w,h,new ImageIcon("Sprites/Player/1.png")); super(x, y, w, h, new ImageIcon("Sprites/Player/1.png"));
xVelo = 0; xVelo = 0;
yVelo = 0; yVelo = 0;
onGround = false; onGround = false;
@@ -34,29 +35,28 @@ public class Player extends Collidable {
numAmendments = 0; numAmendments = 0;
} }
public void moveX(int moveX){ public void moveX(int moveX) {
this.x += moveX; this.x += moveX;
this.rect.x = this.x; this.rect.x = this.x;
} }
public void moveY(int moveY){ public void moveY(int moveY) {
this.y += moveY; this.y += moveY;
this.rect.y = this.y; this.rect.y = this.y;
} }
public void setLevel(int level){ public void setLevel(int level) {
this.icon = new ImageIcon("Sprites/Player/" + level + ".png"); this.icon = new ImageIcon("Sprites/Player/" + level + ".png");
} }
public void onCollideX(Collidable other){ public void onCollideX(Collidable other) {
if (other instanceof Tile){ if (other instanceof Tile) {
Tile t = (Tile) other; Tile t = (Tile) other;
int playerCenterX = this.x + this.width / 2; int playerCenterX = this.x + this.width / 2;
int tileCenterX = t.x + t.width / 2; int tileCenterX = t.x + t.width / 2;
if (playerCenterX > tileCenterX) { //player on right side of tiile if (playerCenterX > tileCenterX) { // player on right side of tiile
this.x = t.x + t.width; this.x = t.x + t.width;
} } else { // player on left side of tile
else { //player on left side of tile
this.x = t.x - this.width; this.x = t.x - this.width;
} }
this.xVelo = 0; this.xVelo = 0;
@@ -64,19 +64,18 @@ public class Player extends Collidable {
} }
} }
public void onCollideY(Collidable other, ArrayList<Collectable> collectables){ public void onCollideY(Collidable other, ArrayList<Collectable> collectables) {
if (other instanceof Tile){ if (other instanceof Tile) {
Tile t = (Tile) other; Tile t = (Tile) other;
if (this.yVelo >= 0) { // falling down, land on top of tile if (this.yVelo >= 0) { // falling down, land on top of tile
this.y = t.y - this.height; this.y = t.y - this.height;
onGround = true; onGround = true;
airJumps = 0; airJumps = 0;
} } else { // moving up, hit underside of tile
else { // moving up, hit underside of tile
this.y = t.y + t.height; this.y = t.y + t.height;
if (other instanceof PowerBrick){ if (other instanceof PowerBrick) {
PowerBrick pb = (PowerBrick) other; PowerBrick pb = (PowerBrick) other;
if(!pb.hit){ if (!pb.hit) {
pb.spawnPower(collectables); pb.spawnPower(collectables);
} }
} }
@@ -93,7 +92,7 @@ public class Player extends Collidable {
} }
} }
public void reset(){ public void reset() {
this.rect.x = this.x; this.rect.x = this.x;
this.rect.y = this.y; this.rect.y = this.y;
this.xVelo = this.yVelo = 0; this.xVelo = this.yVelo = 0;

BIN
PowerBrick.class Normal file

Binary file not shown.

View File

@@ -1,7 +1,7 @@
import javax.swing.ImageIcon;
import java.util.*; import java.util.*;
import javax.swing.ImageIcon;
public class PowerBrick extends Tile{ public class PowerBrick extends Tile {
int id; int id;
boolean hit; boolean hit;
@@ -11,13 +11,13 @@ public class PowerBrick extends Tile{
hit = false; hit = false;
} }
public void spawnPower(ArrayList<Collectable> powerups){ public void spawnPower(ArrayList<Collectable> powerups) {
this.icon = new ImageIcon("Sprites/Bricks/EmptyBrick.png"); this.icon = new ImageIcon("Sprites/Bricks/EmptyBrick.png");
hit = true; hit = true;
powerups.add(new Powerup(this.x, this.y - this.height, this.width, this.height, 1)); powerups.add(new Powerup(this.x, this.y - this.height, this.width, this.height, 1));
} }
public void reset(){ public void reset() {
hit = false; hit = false;
this.icon = new ImageIcon("Sprites/Bricks/PowerBrick.png"); this.icon = new ImageIcon("Sprites/Bricks/PowerBrick.png");
} }

BIN
Powerup.class Normal file

Binary file not shown.

View File

@@ -1,22 +1,23 @@
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
public class Powerup extends Collectable{ public class Powerup extends Collectable {
int yVelo, xVelo, id; int yVelo, xVelo, id;
boolean onGround; boolean onGround;
public Powerup(int x, int y, int w, int h, int id){ public Powerup(int x, int y, int w, int h, int id) {
super(x,y,w,h,new ImageIcon("Sprites/Powerup" + id + ".png")); super(x, y, w, h, new ImageIcon("Sprites/Powerup" + id + ".png"));
xVelo = 0; yVelo = -7; xVelo = 0;
yVelo = -7;
onGround = false; onGround = false;
this.id = id; this.id = id;
} }
public void moveX(int moveX){ public void moveX(int moveX) {
this.x += moveX; this.x += moveX;
this.rect.x = this.x; this.rect.x = this.x;
} }
public void moveY(int moveY){ public void moveY(int moveY) {
this.y += moveY; this.y += moveY;
this.rect.y = this.y; this.rect.y = this.y;
} }

BIN
Projectile.class Normal file

Binary file not shown.

View File

@@ -3,12 +3,12 @@ import javax.swing.ImageIcon;
public class Projectile extends Collidable { public class Projectile extends Collidable {
int xVelo; int xVelo;
public Projectile(int x, int y, int w, int h, int curLevel, int direction){ public Projectile(int x, int y, int w, int h, int curLevel, int direction) {
super(x,y,w,h,new ImageIcon("Sprites/Projectiles/" + curLevel + ".png")); super(x, y, w, h, new ImageIcon("Sprites/Projectiles/" + curLevel + ".png"));
xVelo = 10 * direction; xVelo = 10 * direction;
} }
public void move(){ public void move() {
this.x += xVelo; this.x += xVelo;
this.rect.x = this.x; this.rect.x = this.x;
} }

BIN
Sprite.class Normal file

Binary file not shown.

View File

@@ -1,11 +1,11 @@
import javax.swing.ImageIcon;
import java.awt.Image; import java.awt.Image;
import javax.swing.ImageIcon;
public class Sprite{ public class Sprite {
ImageIcon icon; ImageIcon icon;
Image sprite; Image sprite;
public Sprite(ImageIcon i){ public Sprite(ImageIcon i) {
icon = i; icon = i;
sprite = i.getImage(); sprite = i.getImage();
} }

BIN
Tile.class Normal file

Binary file not shown.

View File

@@ -2,9 +2,7 @@ import javax.swing.ImageIcon;
public class Tile extends Collidable { public class Tile extends Collidable {
public Tile(int x, int y, int w, int h,ImageIcon i){ public Tile(int x, int y, int w, int h, ImageIcon i) {
super(x,y,w,h,i); super(x, y, w, h, i);
} }
} }