initial commit

This commit is contained in:
2026-04-15 19:50:15 -05:00
commit b00f8d7d87
59 changed files with 1100 additions and 0 deletions

10
Amendment.java Normal file
View File

@@ -0,0 +1,10 @@
import javax.swing.ImageIcon;
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"));
}
}

8
Brick.java Normal file
View File

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

8
Collectable.java Normal file
View File

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

30
Collidable.java Normal file
View File

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

22
Display.java Normal file
View File

@@ -0,0 +1,22 @@
import javax.swing.*;
import java.awt.Color;
public class Display {
public static void main(String[] args) {
int boardWidth = 800;
int boardHeight = 800;
int tileSize = 20;
JFrame game = new JFrame();
game.setSize(boardWidth, boardHeight);
game.setVisible(true);
game.setLocationRelativeTo(null);
game.setResizable(false);
Platformer platformer = new Platformer(boardWidth, boardHeight, tileSize);
game.add(platformer);
game.pack();
platformer.requestFocus();
}
}

53
Enemy.java Normal file
View File

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

15
Flag.java Normal file
View File

@@ -0,0 +1,15 @@
import javax.swing.ImageIcon;
public class Flag extends Collidable {
public Flag(int x, int y, int w, int h) {
super(x, y, w, h, new ImageIcon("Sprites/Flag.png"));
}
public void setPosition(int x, int y, int w, int h) {
this.x = x;
this.y = y;
this.width = w;
this.height = h;
this.rect.setBounds(x, y, w, h);
}
}

42
LevelLoader.java Normal file
View File

@@ -0,0 +1,42 @@
import javax.swing.ImageIcon;
import java.util.*;
import java.io.*;
public class LevelLoader {
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};
public static void load(int tileSize,
ArrayList<Collidable> collidables,
ArrayList<Collectable> collectables,
ArrayList<Enemy> enemies,
Flag flag,
Player player, int level) throws IOException {
collidables.clear();
collectables.clear();
enemies.clear();
/*left wall*/ collidables.add(new Brick(-20,0,20,2000));
BufferedReader br = new BufferedReader(new FileReader("Levels/level" + level + ".txt"));
String line;
int row = 0;
while ((line = br.readLine()) != null) {
for (int col = 0; col < line.length(); col++) {
char c = line.charAt(col);
int x = col * tileSize;
int y = row * tileSize;
switch(c) {
case 'B': collidables.add(new Brick(x, y, tileSize, tileSize)); break;
case 'Q': collidables.add(new PowerBrick(x, y, tileSize, tileSize, 1)); 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++;
}
br.close();
}
}

20
Levels/level1.txt Normal file
View File

@@ -0,0 +1,20 @@
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
....................................................................................................
................................................................................
.
.
.
..................................................
..............................BBBBB....BBBBB..................................A..........................
............A.......BBBBB........................BBBBB.......BBBBB.........BBQBB...................................
..........BBBBB.......................................................................BBBBB..............
....................................................................................................
.P........................A........E...................E...A...............E.....................F..
BBBBBBBBBBBBBBBBBBBB..BBBBBBBBBBBBBBBBBBBBBBB..BBBBBBBBBBBBBBBBBBBBBBB..BBBBBBBBBBBBBBBBBBBBBBBBBBBB

20
Levels/level10.txt Normal file
View File

@@ -0,0 +1,20 @@
.................................
.................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...P
...............E
BBBBBBBB..BBBBBBBBBB

39
Levels/level2.txt Normal file
View File

@@ -0,0 +1,39 @@
....................................................................................................
......................................................
.
.
.
.
.
.
.
.
.
.
...............................................................................................A...........................
............................................................................................BBBBBB...........
..........................................................................BBBBBB
........................................................................
............................................................A............
..........................................................BBBBB
.......................................................
..................................................................................................................A
............................................BBBBB.......................................................
.................................BBBBB..............................................................
...........................A.........................................................................
.........................BBBBB........................................................................
....................................................................................................
.................BBBBB...................................................................................
....................................................................................................
.............................................................................................
.............................................................................................
.................................................................
.
.
.................................................
........BBBBB.............A....................................................................
.........................QBQQQQQBBBB
....................................................................................................
.P.............E..............E...................E............................................................F..
BBBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBBBB...BBBBBBB......................................BBBBBBBBBBBBBBBBBBBB

20
Levels/level3.txt Normal file
View File

@@ -0,0 +1,20 @@
.................................
.................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...P
...............E
BBBBBBBB..BBBBBBBBBB

20
Levels/level4.txt Normal file
View File

@@ -0,0 +1,20 @@
.................................
.................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...P
...............E
BBBBBBBB..BBBBBBBBBB

20
Levels/level5.txt Normal file
View File

@@ -0,0 +1,20 @@
.................................
.................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...P
...............E
BBBBBBBB..BBBBBBBBBB

20
Levels/level6.txt Normal file
View File

@@ -0,0 +1,20 @@
.................................
.................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...P
...............E
BBBBBBBB..BBBBBBBBBB

20
Levels/level7.txt Normal file
View File

@@ -0,0 +1,20 @@
.................................
.................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...P
...............E
BBBBBBBB..BBBBBBBBBB

20
Levels/level8.txt Normal file
View File

@@ -0,0 +1,20 @@
.................................
.................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...P
...............E
BBBBBBBB..BBBBBBBBBB

20
Levels/level9.txt Normal file
View File

@@ -0,0 +1,20 @@
.................................
.................................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...P
...............E
BBBBBBBB..BBBBBBBBBB

474
Platformer.java Normal file
View File

@@ -0,0 +1,474 @@
import java.util.Random;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import javax.swing.*;
import java.time.LocalTime;
public class Platformer extends JPanel implements KeyListener, ActionListener{
//constants
static final int GRAVITY = 1;
static final Color playerColor = Color.RED;
static final Color tileColor = Color.BLUE;
static final Color SKY = new Color(135, 206, 235);
static final int FRICTION = 1;
static final int MAXYVELO = 15;
static final int MAXXVELO = 5;
static final int totalLevels = 10;
static int[] numAm = {4,5,0,0,0,0,0,0,0,0};
//game objects
Player player;
ArrayList<Collidable> collidables;
ArrayList<Collectable> collectables;
Flag flag;
ArrayList<Enemy> enemies;
ArrayList<Projectile> projectiles;
//game vars
int boardWidth;
int boardHeight;
int tileSize;
Timer gameTimer;
HashMap<Integer,Boolean> pressedKeys;
boolean jumpPressed;
int cameraX, cameraY;
int currentLevel;
boolean allCollected;
boolean gameOver;
boolean gameStarted;
Image heart,emptyHeart,slash,amendmentImg,powerImg,startImg;
ArrayList<Image> numbers;
public Platformer(int boardWidth, int boardHeight, int tileSize){
//setup game
this.boardWidth = boardWidth;
this.boardHeight = boardHeight;
this.tileSize = tileSize;
setPreferredSize(new Dimension(this.boardWidth, this.boardHeight));
addKeyListener(this);
this.setFocusable(true);
this.setLayout(null);
pressedKeys = new HashMap<>();
jumpPressed = false;
gameOver = false;
gameStarted = false;
setBackground(SKY);
//setup objects
heart = new ImageIcon("Sprites/Hearts/heart.png").getImage();
emptyHeart = new ImageIcon("Sprites/Hearts/emptyHeart.png").getImage();
startImg = new ImageIcon("Sprites/start.png").getImage();
gameTimer = new Timer(15,this);
player = new Player(-20,0,tileSize,tileSize);
collidables = new ArrayList<>();
collectables = new ArrayList<>();
enemies = new ArrayList<>();
projectiles = new ArrayList<>();
flag = new Flag(-20,0,tileSize,tileSize);
cameraX = 0;
cameraY = 0;
currentLevel = 0;
numbers = new ArrayList<>();
for (int i =0; i < 10; i++) numbers.add((new ImageIcon("Sprites/Numbers/" + i + ".png")).getImage());
slash = new ImageIcon("Sprites/Numbers/Slash.png").getImage();
amendmentImg = new ImageIcon("Sprites/Amendment.png").getImage();
powerImg = new ImageIcon("Sprites/Powerup1.png").getImage();
gameTimer.start();
//if i wanna add a button
/*JButton gameStart = new JButton("Start Game");
gameStart.addActionListener(e -> {
loadLevel(currentLevel);
gameTimer.start();
this.remove(gameStart);
this.revalidate();
this.repaint();
});
gameStart.setBorderPainted(false);
gameStart.setFocusPainted(false);
gameStart.setBounds(193,200,114,15);
gameStart.setForeground(new Color(52, 152, 219));
this.add(gameStart);*/
}
//gameloop
public void gameLoop(){
//camera
cameraX = player.x - boardWidth / 2;
cameraX = Math.max(0, cameraX);
cameraY = player.y - boardHeight / 2;
//cameraY = Math.max(0, cameraY);
//win
allCollected = player.numAmendments >= numAm[currentLevel-1];
if (player.collidesWith(flag) && allCollected) {
currentLevel++;
player.health = 3;
if (currentLevel > totalLevels) {
gameTimer.stop();
System.out.println("You win!");
} else {
loadLevel(currentLevel);
}
return;
}
//keys
if (Math.abs(player.xVelo) < MAXXVELO){
if(isKeyPressed(KeyEvent.VK_D) || isKeyPressed(KeyEvent.VK_RIGHT)){
player.xVelo += 1;
}
else if(isKeyPressed(KeyEvent.VK_A) || isKeyPressed(KeyEvent.VK_LEFT)){
player.xVelo -= 1;
}
}
if (!isKeyPressed(KeyEvent.VK_D) && !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);
}
else if (player.xVelo < 0){
player.xVelo = Math.min(0, player.xVelo + FRICTION);
}
}
//jump
boolean jumpKeyDown = (isKeyPressed(KeyEvent.VK_W) || isKeyPressed(KeyEvent.VK_UP));
if(jumpKeyDown && !jumpPressed){
if(player.onGround){
player.yVelo = -15;
player.onGround = false;
jumpPressed = true;
player.airJumps = 0;
}
else if (player.curPower == 1 && player.airJumps < 1){
player.yVelo = -15;
player.airJumps++;
jumpPressed = true;
}
}
if (!jumpKeyDown){
jumpPressed = false;
}
//gravity
if (player.yVelo < MAXYVELO){
player.yVelo += GRAVITY;
}
//fall out of world
if (player.y > boardHeight){
loadLevel(currentLevel);
player.health--;
}
for (Collectable c : collectables){
if (c instanceof Powerup){
Powerup pu = (Powerup) c;
if (pu.yVelo < MAXYVELO && !pu.onGround){
pu.yVelo += GRAVITY;
}
pu.moveY(pu.yVelo);
for (Collidable col : collidables) {
if (pu.collidesWith(col)) {
pu.yVelo = 0;
pu.onGround = true;
pu.y = ((Tile)col).y - pu.height;
pu.rect.y = pu.y;
}
}
if (player.collidesWith(pu)) {
player.curPower = pu.id;
player.powerTimer = Player.POWER_DURATION;
}
}
else if (c instanceof Amendment){
Amendment am = (Amendment) c;
if (player.collidesWith(am)){
player.numAmendments++;
}
}
}
collectables.removeIf(c -> player.collidesWith(c));
//update x
player.moveX(player.xVelo);
//collision with all tiles x
for (Collidable c : collidables) {
if (player.collidesWith(c)) {
player.onCollideX(c);
}
}
//update y
player.moveY(player.yVelo);
//assume not on ground
player.onGround = false;
//collision with all tiles y
for (Collidable c : collidables) {
if (player.collidesWith(c)) {
player.onCollideY(c,collectables);
}
}
//Powerup timer
if (player.curPower > 0) {
player.powerTimer--;
if (player.powerTimer <= 0) {
player.curPower = 0;
}
}
//update facing
if (player.xVelo > 0) player.facing = 1;
else if (player.xVelo < 0) player.facing = -1;
// shoot cooldown
if (player.shootCooldown > 0) player.shootCooldown--;
// invincibility timer
if (player.invincibleTimer > 0) player.invincibleTimer--;
//shoot
//projectiles
if (isKeyPressed(KeyEvent.VK_SPACE) && player.shootCooldown == 0){
int projX = player.facing == 1 ? player.x + player.width : player.x - 10;
projectiles.add(new Projectile(projX,player.y,tileSize,10,currentLevel,player.facing));
player.shootCooldown = Player.SHOOT_COOLDOWN;
}
projectiles.removeIf(p -> p.x < -50 + cameraX || p.x > boardWidth + cameraX + 200);
for (Projectile p : new ArrayList<>(projectiles)) {
p.move();
// projectile hits tile
for (Collidable c : collidables) {
if (p.collidesWith(c)) {
projectiles.remove(p);
break;
}
}
}
// update enemies
for (Enemy e : enemies) {
e.patrol(collidables);
// enemy hits player
if (player.collidesWith(e)) {
player.takeDamage();
}
}
//die
if (player.health <= 0) {
System.out.print("Game Over - You Died!");
gameOver = true;
gameTimer.stop();
}
//projectile hits enemy
for (Projectile p : new ArrayList<>(projectiles)){
for (Enemy e : new ArrayList<>(enemies)){
if (p.collidesWith(e)) {
enemies.remove(e);
projectiles.remove(p);
break;
}
}
}
enemies.removeIf(e -> !e.alive);
}
public void loadLevel(int level) {
projectiles.clear();
try {
LevelLoader.load(tileSize, collidables, collectables, enemies, flag, player, level);
player.reset();
player.setLevel(level);
cameraX = 0;
cameraY = 0;
} catch (IOException e) {
System.out.println("Could not load level " + level);
}
}
//paintComponent
public void paintComponent(Graphics g){
super.paintComponent(g);
draw(g);
}
//draw function
public void draw(Graphics g){
g.translate(-cameraX, -cameraY);
player.draw(g);
for (Collidable c : collidables) c.draw(g);
for (Collectable c : collectables) c.draw(g);
for (Enemy e : enemies) e.draw(g);
for (Projectile p : projectiles) p.draw(g);
flag.draw(g);
//flag counter
int amOnes = player.numAmendments % 10;
int amTens = player.numAmendments / 10;
if (currentLevel > 0 && !gameOver && player.numAmendments < numAm[currentLevel-1]){
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(slash,flag.x+28,flag.y-32,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.translate(cameraX, cameraY);
int modAmt = 2000;
int curTime = (int) System.currentTimeMillis() % modAmt;
curTime = Math.abs(curTime);
//start screen
int 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/2 && curTime <= modAmt*3/4-1) startTime = 2;
else if (curTime >= modAmt*3/4 && curTime <= modAmt-1) startTime = 3;
if (currentLevel == 0 && !gameOver){
g.drawImage(startImg,340,300,null);
String text = "Press P to Start!";
int xBase = 340;
int yBase = 400;
int spacing = 8;
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
// x moves linearly
int x = xBase + (i * spacing);
// y uses a sine wave
// Math.sin takes radians. We use (startTime + i) to give each letter a different phase.
double waveOffset = Math.sin(startTime + i * 0.5) * 10;
int y = yBase + (int)waveOffset;
g.drawString(String.valueOf(c), x, y);
}
}
if (currentLevel > 0 && !gameOver){
//draw hearts:
int heartTime = 0;
if (curTime >= 0 && curTime <= modAmt/2-1) heartTime = 1;
else if (curTime >= modAmt/2 && curTime <= modAmt-1) heartTime = 0;
for (int i = 0; i < player.health; i++){
g.drawImage(heart,(((i+1) * 20)-10)+heartTime,10+heartTime * 2,null);
}
for (int i =0; i < 3 - player.health; i++){
g.drawImage(emptyHeart,(50 - (i * 20)) + heartTime,10+heartTime * 2,null);
}
//draw amendments counter in top right
if (amTens > 0) g.drawImage(numbers.get(amTens),315,10,null);
g.drawImage(numbers.get(amOnes),340,10,null);
g.drawImage(slash,363,12,null);
g.drawImage(numbers.get(numAm[currentLevel-1]),390,10,null);
g.drawImage(amendmentImg,420,10,null);
//draw powerup timer
if (player.curPower == 1){
int secs = player.powerTimer/66;
int tens = secs/10;
int ones = secs%10;
if (tens > 0){
g.drawImage(numbers.get(tens),184,10,null);
}
g.drawImage(numbers.get(ones),205,10,null);
g.drawImage(powerImg,220,10,null);
}
}
//gameover screen
if (gameOver){
}
}
//is key pressed
public boolean isKeyPressed(int key){
return pressedKeys.getOrDefault(key,false);
}
//every tick
@Override
public void actionPerformed(ActionEvent e){
if (gameStarted) {
gameLoop();
}
repaint();
}
//check for key presses
@Override
public void keyPressed(KeyEvent e){
if (e.getKeyCode() == KeyEvent.VK_P){
if(currentLevel == 0) {
currentLevel = 1;
loadLevel(currentLevel);
gameStarted = true;
}
gameTimer.start();
return;
}
if (e.getKeyCode() == KeyEvent.VK_R){
gameTimer.stop();
loadLevel(currentLevel);
jumpPressed = false;
player.health=3;
gameOver = false;
repaint();
return;
}
if (e.getKeyCode() == KeyEvent.VK_O){
currentLevel++;
loadLevel(currentLevel);
}
pressedKeys.put(e.getKeyCode(),true);
}
@Override
public void keyReleased(KeyEvent e){
pressedKeys.put(e.getKeyCode(),false);
}
//dont need
@Override
public void keyTyped(KeyEvent e){
}
}

109
Player.java Normal file
View File

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

26
PowerBrick.java Normal file
View File

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

25
Powerup.java Normal file
View File

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

15
Projectile.java Normal file
View File

@@ -0,0 +1,15 @@
import javax.swing.ImageIcon;
public class Projectile extends Collidable {
int xVelo;
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"));
xVelo = 10 * direction;
}
public void move(){
this.x += xVelo;
this.rect.x = this.x;
}
}

13
Sprite.java Normal file
View File

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

1
Sprites/Amendment.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/ae6cafb9fe209cffdb709e04ae3f920c

1
Sprites/Bricks/Brick.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/cf4f4ed9f8f3528c4c63f0f1a6295ac4

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

View File

@@ -0,0 +1 @@
https://codehs.com/uploads/cbad697ce83a7d4a42bbc964204dc705

1
Sprites/Enemies/1.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/305ac06e82fd35bd134f7fa0c931601b

BIN
Sprites/Enemies/10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

BIN
Sprites/Enemies/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 B

BIN
Sprites/Enemies/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

BIN
Sprites/Enemies/4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

BIN
Sprites/Enemies/5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 B

BIN
Sprites/Enemies/6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 B

BIN
Sprites/Enemies/7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 B

BIN
Sprites/Enemies/8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 B

BIN
Sprites/Enemies/9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 B

1
Sprites/Flag.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/0a1df70bf07192d8e22a035e94c505ee

View File

@@ -0,0 +1 @@
https://codehs.com/uploads/d274234279511b1e39ecf21bb57c4089

1
Sprites/Hearts/heart.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/e4a51b0d328d57cc754bd30e4e9e63fb

1
Sprites/Numbers/0.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/54fc080d15544d73da00a23a88dc1830

1
Sprites/Numbers/1.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/cdbc9f83021c1a7220a87f6c62a23449

1
Sprites/Numbers/2.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/193ebd763d317d719e7c2b165a139de4

1
Sprites/Numbers/3.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/c83beb8faa706bb5e8e25136bc8324a6

1
Sprites/Numbers/4.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/6106b192d84b13427fb16465c38db555

1
Sprites/Numbers/5.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/4dad5bd246e0edd132d42cfa38a9644f

1
Sprites/Numbers/6.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/c9e3a54e480756140af1609a340bcc53

1
Sprites/Numbers/7.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/17e754acd63cc6126805c5729b716a16

1
Sprites/Numbers/8.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/2e95c52737d738addc8cbaa0767c3ae6

1
Sprites/Numbers/9.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/35562131a9fb377b61420c7fbae7e6c8

View File

@@ -0,0 +1 @@
https://codehs.com/uploads/22ca4a93f7ca7453cfa84e5bf1da2689

1
Sprites/Player/1.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/2aa3cacee002d33ea96fa5cb529e912a

BIN
Sprites/Player/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

BIN
Sprites/Player/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

1
Sprites/Powerup1.png Normal file
View File

@@ -0,0 +1 @@
https://codehs.com/uploads/36eb80fcc278bf95db23bf9637b59cf0

BIN
Sprites/Projectiles/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 B

BIN
Sprites/Projectiles/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

11
Tile.java Normal file
View File

@@ -0,0 +1,11 @@
import java.awt.Graphics;
import javax.swing.ImageIcon;
public class Tile extends Collidable {
public Tile(int x, int y, int w, int h,ImageIcon i){
super(x,y,w,h,i);
}
}