From a803f5e759d8173c1d75e2e41b2c4e14ba626052 Mon Sep 17 00:00:00 2001 From: Cody T Date: Sun, 19 Apr 2026 14:41:10 -0500 Subject: [PATCH] formatting --- Amendment.class | Bin 0 -> 330 bytes Amendment.java | 12 +- Brick.class | Bin 0 -> 318 bytes Brick.java | 10 +- Collectable.class | Bin 0 -> 228 bytes Collectable.java | 10 +- Collidable.class | Bin 0 -> 1064 bytes Collidable.java | 54 +-- Display.class | Bin 0 -> 692 bytes Display.java | 35 +- Enemy.class | Bin 0 -> 1844 bytes Enemy.java | 96 ++--- Flag.class | Bin 0 -> 575 bytes Flag.java | 24 +- LevelLoader.class | Bin 0 -> 2358 bytes LevelLoader.java | 90 +++-- Levels/level2.txt | 6 +- Platformer.class | Bin 0 -> 12008 bytes Platformer.java | 905 +++++++++++++++++++++++----------------------- Player.class | Bin 0 -> 2720 bytes Player.java | 203 ++++++----- PowerBrick.class | Bin 0 -> 923 bytes PowerBrick.java | 44 +-- Powerup.class | Bin 0 -> 1165 bytes Powerup.java | 43 +-- Projectile.class | Bin 0 -> 975 bytes Projectile.java | 24 +- Sprite.class | Bin 0 -> 406 bytes Sprite.java | 20 +- Tile.class | Bin 0 -> 214 bytes Tile.java | 12 +- 31 files changed, 793 insertions(+), 795 deletions(-) create mode 100644 Amendment.class create mode 100644 Brick.class create mode 100644 Collectable.class create mode 100644 Collidable.class create mode 100644 Display.class create mode 100644 Enemy.class create mode 100644 Flag.class create mode 100644 LevelLoader.class create mode 100644 Platformer.class create mode 100644 Player.class create mode 100644 PowerBrick.class create mode 100644 Powerup.class create mode 100644 Projectile.class create mode 100644 Sprite.class create mode 100644 Tile.class diff --git a/Amendment.class b/Amendment.class new file mode 100644 index 0000000000000000000000000000000000000000..b23978cb54b01ed44466b7b7a699c4be9d479e47 GIT binary patch literal 330 zcmZXO&q~8U5XQfaX*b>0R#S8G4|r=mbRR$wNl69GNSkB(5UZ?RX&|(BSKoPtju$rI^VHzqqRrpy%C3$1w6`agk)qG(%Zw?FO=L!ZU6uP literal 0 HcmV?d00001 diff --git a/Amendment.java b/Amendment.java index 5908b66..4a2e56a 100644 --- a/Amendment.java +++ b/Amendment.java @@ -1,10 +1,8 @@ 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")); - } - -} \ No newline at end of file + public Amendment(int x, int y, int w, int h) { + super(x, y, w, h, new ImageIcon("Sprites/Amendment.png")); + } +} diff --git a/Brick.class b/Brick.class new file mode 100644 index 0000000000000000000000000000000000000000..75209c46b94ee822dd8314dc9e2b3a2fcaebb46b GIT binary patch literal 318 zcmZXO-%7(U7{yO&yVN+{>?{cW0q-_1mIqJXgCi!r)f|6etQ zI64fGZ)M=#JD5`Vu709$XRM8SSTAPEPKuesiM(FhQr&yD@VTM;3odX#{cac?jxOy( pdP&5HNPCwjr)O#S3HF%mY!Pj-`|iyNZGnJx3kd}odUOwP^b2JtLm2=7 literal 0 HcmV?d00001 diff --git a/Brick.java b/Brick.java index f4c12c1..6ff79ad 100644 --- a/Brick.java +++ b/Brick.java @@ -1,8 +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")); - } -} \ No newline at end of file + + public Brick(int x, int y, int w, int h) { + super(x, y, w, h, new ImageIcon("Sprites/Bricks/Brick.png")); + } +} diff --git a/Collectable.class b/Collectable.class new file mode 100644 index 0000000000000000000000000000000000000000..c3a9449cf99fc7bb8b98f67154998f6275dbf134 GIT binary patch literal 228 zcmX^0Z`VEs1_nn4UM>bE24;2!79Ivx1~x_pF6aE5oXnKOq?}Yn1~!|_yv!0iMg}3j zNHp;W_@j(xW-A3Fo7}lOckVs+b$fdM2e*b;+~0`^9;(NI-)ufce6Oet%RVTq)E z7N7NPL}FCm`rE1+*0p6^BCRd)x~FRO(88p^s7_gQ+hOsoR|#Fe*6?ghU|Lr>BVgsq z{GtM~60?{Shz0Z%7&p~k3@zz2*Cejv2K^L^7nr=HD;x7zu&^j`3ps)Ge|r}gsCl6o z1#8XadpV8G3a!dK%>%;v$FL)O%J*LYQm^cUhw-?eyKvoPxywjcPc^(bRfCz^g_ z(eM{v8E$Vk4}*%gsWicoz0hSnIc|4=Tm~5e%}1Wl#50vm_QypZ!(qG^S&pAc|HW3C* z_7sLl>tSSALjfszJw>UTX_LOX(nZJlhN~yI*+IU*-#o>l3{g^)F>!+1yS*I4=ws9v z@yD@1bb(bo>tfCmQDaKRWeSuN-2cLRR9&1JnBuvH=iP{DT6BcyC5YUzba-JN*Z%;d CXV{hi literal 0 HcmV?d00001 diff --git a/Collidable.java b/Collidable.java index 1e92fae..e5211ee 100644 --- a/Collidable.java +++ b/Collidable.java @@ -1,30 +1,30 @@ +import java.awt.Graphics; 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; - } -} \ No newline at end of file +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; + } +} diff --git a/Display.class b/Display.class new file mode 100644 index 0000000000000000000000000000000000000000..231dd336773e1110fe5b0da6f4ca2f5b1276b2de GIT binary patch literal 692 zcmZuv+iuf95Iq~O9G8oA4bMU5n zqIxMqc1MRg-DR-+ddI;6L(v3%3z9QUVK1Ap94Z$MEMu+-2rMx;iAvl0Trt@G!9l%a zu$(|11qPR}j!txUKrr_|%+Y0m5>^;i2yI0@nd&G!R0BFs)ltN-=C@|e$+I-rkA|Zt zRAKsTp1US+!&DZOd#Dn9E~&PIo5b~&DtwCKp^9C2s2H795=Bj2c6D1|9W|0C`+bJS z)ht(08%cKs?wPsqk?egj1P=r@%nuQ(uVa;@&8Rm{9MowdFLW{*$nO-qAN5IjuBAiu zdOYl^_{j82z)Kh3WxXvk71ZF_8jQ?Q@pFgzq{V8Fs69$}Mw6Z&J82DA#+`c5J9{&~K%djaQoip6d2@p5GX z*W-MG>mFwl6g_TDuzCUSxLm1DQQo#a?%5OEdgoEl9pm2r&-esO#9@OI_kvjz;x55O fnYmrrx$FFN5G8sO5zI literal 0 HcmV?d00001 diff --git a/Display.java b/Display.java index ad7e1b5..f44c3ba 100644 --- a/Display.java +++ b/Display.java @@ -1,21 +1,20 @@ import javax.swing.*; 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(); - } -} \ No newline at end of file + public static void main(String[] args) { + int boardWidth = 800; + int boardHeight = 600; + 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(); + } +} diff --git a/Enemy.class b/Enemy.class new file mode 100644 index 0000000000000000000000000000000000000000..1c23417bcac5581d97b7e50a3a1f728f7ee2318e GIT binary patch literal 1844 zcmaJ?Yf~Fl7=8{U*(5CG4o$h(DupCa($Y6zU~QvL;)W-MG8l{)v2Z z9LILX8E13|9b3n#U;X0$QK$NxO)4Oanb~uB&+|U#y`KE`{K+o>W>HblB+&Cf+tzkd z?v7!VQ`t?etY?e1)k#D^MGzr@zD;dI&)8N`^HvP6!jf5V~nthBqUjr-6y(C{(m6I499<0?~|Znnp=mH+6xbc$Pn3>y&xv#Bu~3 z=v2_9q8mK|!P}O;xyN~TSvPF~k(Gcx73claJt>uv3o80CK%8b8+q^}rN$HS^mn2T? z%H1UuFXI(~fTI^Zf$qBH+K!jHO94GK^>hT6F{EHbpwkb)iBm}uSCQ~3_arnPrD$Bm z6-@B%O?z9vM}CHnA-IZb3a+bo6*mOBe6}smFjKRRqwVDkmnMV_Pj@uWb_9Ckjgb48 zY(t)I!6aT+@P>*vG4;Zz6A%HVqPYwDF8P|{i8ZNlQ^hoxoq*+wyI*ko>0DfYKzEtW z4!o_hUTz7fML$8hD+@uOEuK5dSURz$;2m-;8Ky2HFsI^OKlnRF$*V+=!H^v0b=_I2mxUj^RVr0A&#_H`^Nq?n88cRh zKx^L9iW~D;`GMkV|5@^3=+n(z= zT6JFcDt5^Y<31}rUv-!+HzlD4XE9N=%55Qh62+(ZOhG~R71f82I>)fK?G3%rK=oFe z(~8VDEBedhozno;@4KT}B~y2YbGE&)RZX96uw#-Fic5P{{S5g1WB5k$kGFS&BBPmR zo(`s24q406os6luuI?%*30ywq(^;k}_?-Ry|4?SQ?iVhxR8+o4&HUKw93i{fpV`Zt z1AK8JSm3zG-6FyWaUM<2;xKH%8P zynsY~h?2I27poXSD^JoPR0vk6@(`hifBznsmc~nAVMdZn1!92)&5~Tzd8UG~;IGK+ zV>%XmhRjq*YTPcwLI=3>4dR3TLJrx&*NDl*djv?o-Y z;yRw<2A0Uy59KfU=Q4Tq4>UbThY(! collidables) { + moveX(xVelo); + + for (Collidable c : collidables) { + if (this.collidesWith(c)) { + xVelo = -xVelo; + moveX(xVelo * 2); + break; + } } - public void moveY(int moveY){ - this.y += moveY; - this.rect.y = this.y; + // 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; + } + } } - - public void patrol(ArrayList 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; - } + if (edgeAhead) { + xVelo = -xVelo; } -} \ No newline at end of file + } +} diff --git a/Flag.class b/Flag.class new file mode 100644 index 0000000000000000000000000000000000000000..d7cc9e1841f294602e5b85f63ba08ae1af7b153b GIT binary patch literal 575 zcmZWm+e*Vg5ItMlritsV8gFgAU)m_<0~A38p&%kw1Rv9ONmtUOBwMSWC0GRoKfsR? zXCo+LAiK<&IcLtyetf>Z131F2feeFv>)mAIMOuLlUT-X$d#*NT8u&(%G+FTd*){fa~fp2J0jW0@?POfnZpw z*6B-G{~8n3!~`Y{OmP%3&5+gI8Q4Ajb)B<0W_5x+=xCl}K}WfPY^#n&N*ra4c=f{D)kP`bf>xpR>`16F9Kv} zzXrDG+@{Dy0Xe#-ol?1CXWzhXiX$(`y}*1Vn4wCiMI=yJ5qUytKjd@5GyC}9E1&45$p?g_d;#tcqYtFpx z)M!_CG}EaId%6BLi$%xQ&1yzQH;xEjkG|khi!VG^aa>58paishCf7XE8IRwm;3QsW z2;1anUN<>IBDJTr6#6BcRxp6UUFrACQTh#TR-Kxg{+x^yh83jo1~JMt%^s(82PlrL zgf|)F8S4(WTPZ(-bHd5D$O$*)lyeE^86xA$+^i5dGDgrLV-y()V+!683+Nyc}zH z97<7{a$hxgCW5@sIlWW9U0lJOlrTf>GimZ=QaX#GggFHt;Trjt=d0YvTcQIfW-dhL z^@_-mZ-M-o#m5RtuB6Mm%=K!Gf-T^jDBULtJ{7%7U24^-E`h97p`}Aq=}KdHk=t|H zq9GUtnP8Yr<-7=Xw|VA&5JgTic`t7nsslr;=xF7oX>FxtOP*XS^A(Zpx&*TA4Hk7( zuJDXQr7P-HQ*#uAk8HQdFA!IJ@>7*wjO7SWgH}gWn%g%?#%0}x>kc(Es zE^{$@)V*zm85UDXqzTJ%>W;0gOmnAZRqA0ZGjzIw^|T=h$%dUZry~SQ#tJ@{V2i<} z@$7qk8R+J!wZzljNO-e6rIj7aUT65W{nls+dbTcWX2sz3zPx2EHC9@waId!3D7Ov& zt`FzdSNI;{3vKe=<(O%o=$4ACW*9}?;TZ-cXPVs38d|;1sjRCECtr$bFIOedWF2|6 zD9xc47micI`{=^+(bY`zLA$W%ep>yYE=P#)4LbGG%4iLqZi4+l8-|;N1sez;g3qAQ zCnV|{A{F~c;O4+4q(Ooqf`Kh4rTCxzc%oDKt%-e`=$zkzTG~Q)New+j5@@2giDRRZ zeN^%lhE;hJLnBdD?x~F^YJ_l1jebu)08a?U39b@+ zK~N+RGy#tZzG*w}(Dz#JkzCF7S5?$lPfyF+4SY$&GbN80XyUAhVFUW$7DigsCf@dl zbIE`ww}}fIm`Vm!`|K)ld`H zh0d>Jwz2*6s|evIB0USD2tKz6cX5RFom7S{O8tI%E>#?(hv+-4#VJuJ; zHIl93C>~Mef5i#>jy_7zN&JCR_>10$e{h;f7+^AnSSN z;)qL^3IB+zZ5l}Wl^TRLPiMP^`R9Ev{_&w collidables, - ArrayList collectables, - ArrayList 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++; + 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 collidables, + ArrayList collectables, + ArrayList 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; } - br.close(); + } + row++; } -} \ No newline at end of file + br.close(); + } +} diff --git a/Levels/level2.txt b/Levels/level2.txt index ea68da3..df06d20 100644 --- a/Levels/level2.txt +++ b/Levels/level2.txt @@ -31,9 +31,9 @@ ................................................................. . . -................................................. +............E..................................... ........BBBBB.............A.................................................................... .........................QBQQQQQBBBB .................................................................................................... -.P.............E..............E...................E............................................................F.. -BBBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBBBB...BBBBBBB......................................BBBBBBBBBBBBBBBBBBBB \ No newline at end of file +.P............................E...................E............................................................F.. +BBBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBB...BBBBBBBBBBBBBBBBBBB...BBBBBBB......................................BBBBBBBBBBBBBBBBBBBB diff --git a/Platformer.class b/Platformer.class new file mode 100644 index 0000000000000000000000000000000000000000..14cd6566093ea4d11cd9b312ee4fe05b397a4d40 GIT binary patch literal 12008 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
    SbBDw2+%xHrU-qJ!K3stZE~_ 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 collidables; - ArrayList collectables; - Flag flag; - ArrayList enemies; - ArrayList projectiles; + // game objects + Player player; + ArrayList collidables; + ArrayList collectables; + Flag flag; + ArrayList enemies; + ArrayList projectiles; - //game vars - int boardWidth; - int boardHeight; - int tileSize; - Timer gameTimer; - HashMap pressedKeys; - boolean jumpPressed; - int cameraX, cameraY; - int currentLevel; - boolean allCollected; - boolean gameOver; - boolean gameStarted; - Image heart,emptyHeart,slash,amendmentImg,powerImg,pressRImg,endImg,winImg,titleImg; - ArrayList numbers; - + // game vars + int boardWidth; + int boardHeight; + int tileSize; + Timer gameTimer; + HashMap pressedKeys; + boolean jumpPressed; + int cameraX, cameraY; + int currentLevel; + boolean allCollected; + boolean gameOver; + boolean gameStarted; + Image heart, emptyHeart, slash, amendmentImg, powerImg, pressRImg, endImg, winImg, titleImg; + ArrayList 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); + 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); - //setup objects - heart = new ImageIcon("Sprites/Hearts/heart.png").getImage(); - titleImg = new ImageIcon("Sprites/Title.png").getImage(); - emptyHeart = new ImageIcon("Sprites/Hearts/emptyHeart.png").getImage(); - endImg = new ImageIcon("Sprites/end.png").getImage(); - pressRImg = new ImageIcon("Sprites/PressR.png").getImage(); - winImg = new ImageIcon("Sprites/win.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(); - + pressedKeys = new HashMap<>(); + jumpPressed = false; + gameOver = false; + gameStarted = false; + setBackground(SKY); + + // setup objects + heart = new ImageIcon("Sprites/Hearts/heart.png").getImage(); + titleImg = new ImageIcon("Sprites/Title.png").getImage(); + emptyHeart = new ImageIcon("Sprites/Hearts/emptyHeart.png").getImage(); + endImg = new ImageIcon("Sprites/end.png").getImage(); + pressRImg = new ImageIcon("Sprites/PressR.png").getImage(); + winImg = new ImageIcon("Sprites/win.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(); - - - //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);*/ + 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() { + if (currentLevel > totalLevels) return; + // 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!"); + return; + } else { + loadLevel(currentLevel); + } + return; } - //gameloop - public void gameLoop(){ - if (currentLevel > totalLevels) return; - //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!"); - return; - } 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); + } + } - //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 + // jump + boolean jumpKeyDown = (isKeyPressed(KeyEvent.VK_W) || isKeyPressed(KeyEvent.VK_UP)); + if (jumpKeyDown && !jumpPressed) { + if (player.onGround) { + player.yVelo = -15; 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); + jumpPressed = true; + player.airJumps = 0; + } else if (player.curPower == 1 && player.airJumps < 1) { + player.yVelo = -15; + player.airJumps++; + jumpPressed = true; + } } - - 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); - } + if (!jumpKeyDown) { + jumpPressed = false; } - //paintComponent - public void paintComponent(Graphics g){ - super.paintComponent(g); - draw(g); - } - - //draw function - public void draw(Graphics g){ - //gameover screen - if (gameOver){ - g.drawImage(endImg, boardWidth/2 - 100, boardHeight/2 - 150, null); - g.drawImage(pressRImg, boardWidth/2 - 80, boardHeight/2, null); - return; - } - - 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); - 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 && 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){ - g.drawImage(titleImg, boardWidth/2 - 150, boardHeight/2 - 200, null); - - g.drawString("An American Identity Project", boardWidth/2 - 75, boardHeight/2-40); - 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){ - - //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); - } - } + // gravity + if (player.yVelo < MAXYVELO) { + player.yVelo += GRAVITY; } - //is key pressed - public boolean isKeyPressed(int key){ - return pressedKeys.getOrDefault(key,false); + // fall out of world + if (player.y > 2000) { + loadLevel(currentLevel); + player.health--; } - //every tick - @Override - public void actionPerformed(ActionEvent e){ - if (gameStarted) { - gameLoop(); + 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) { + // gameover screen + if (gameOver) { + g.drawImage(endImg, boardWidth / 2 - 100, boardHeight / 2 - 150, 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; + } + + 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 && 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) { + g.drawImage(titleImg, boardWidth / 2 - 150, boardHeight / 2 - 200, null); + + g.drawString("An American Identity Project", boardWidth / 2 - 75, boardHeight / 2 - 40); + 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) { + + // 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); + } + } + } + + // 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) { + if (gameOver) { + gameTimer.stop(); + loadLevel(1); + currentLevel = 1; + jumpPressed = false; + player.health = 3; + gameOver = false; repaint(); + gameTimer.start(); + gameStarted = true; + } } - //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){ - if (gameOver) { - gameTimer.stop(); - loadLevel(1); - currentLevel = 1; - jumpPressed = false; - player.health=3; - gameOver = false; - repaint(); - return; - } - return; - } - - if (e.getKeyCode() == KeyEvent.VK_O){ - currentLevel++; - loadLevel(currentLevel); - } - - pressedKeys.put(e.getKeyCode(),true); + if (e.getKeyCode() == KeyEvent.VK_O) { + currentLevel++; + loadLevel(currentLevel); } - @Override - public void keyReleased(KeyEvent e){ - pressedKeys.put(e.getKeyCode(),false); - } + pressedKeys.put(e.getKeyCode(), true); + } - //dont need - @Override - public void keyTyped(KeyEvent e){ + @Override + public void keyReleased(KeyEvent e) { + pressedKeys.put(e.getKeyCode(), false); + } - } -} \ No newline at end of file + // dont need + @Override + public void keyTyped(KeyEvent e) {} +} diff --git a/Player.class b/Player.class new file mode 100644 index 0000000000000000000000000000000000000000..711a69b7da6773026107e214650a1e3ff1092dae GIT binary patch literal 2720 zcmai0TT>KA6#hmQ7S=%&FGvt?!H9#fUJ#X=!3AV>VF|mSU&k7QxQb4Jq%s6Yc)h-p5xeAbI!3e9BhsApE|YWavrTg z9d?GXOGiC+^P-Xm8Y=HjS&pYci;Koy9s6Xva#f@v*{`D!FKDRt+$+9UbhA{Qk&Od7 znnkrbQ}oBZ70ValAsvTB7|DwyZRbkjqdHzxx~A=4E#~qC(LJW)B@x!y?y~J>Y@&E_ zpjF2S*{dxqdR`FoJSXd|xN@pZ$4S|#TC_|jSQJr*j;IpNn;G&XqSHFgsPk?yH;}X3 zEWbeA+NtB5>}YpI@4Su+xTqoITbY3IDUoij1kni!$h~9r)Sw5QVf1RKS0Q<7SB&)Q zxTH+3ifVs7bK$a%7zQ;o9ZL=+bc~7*l`D2uSc#)khJ+0LqA;N&B?{!tURVr7J`u(gL#2Xu*|#%G zHJHQ=9n%u;ibXq!aD7w9tGGqALf%|)m9B>UO7(v06@#8akIv?|CnzvSru95ev72#(^j$TxJ*$~rSIum)YGz+mGaIRz+49uP9;#;cOEt6aajvFM zVJvW5+{^nhrGY4gCady1wE8Dj%T6s947i8TQD~AVZT32W2=SLyHW@jjDAR zMra-FvOM(zt!c11cA=Kzem*OWXrRvr&_sR?u(vm(4F_=whuCosqnpx8IEq0&1#z_S z^c^gf{p&&n*&_$W^cv1K-CoC8V+~#W&aR_-mEyZ_`G#`q=qyDP*fe23k}W0@enkDY2Q`dMLsJntw&cud1K zMY*Ap?;Hc%1s&%}{skPvMbh2P2dEb#=;v#22{-6}o-UELN9YM7u4($8Oj-@E!zT<$ zjo->{&zIab#qBZPy5}1-8|`Zt=kHhOPM^eHrN@!`Xj41fO$*IDIe8BaJUQ7NY7DL6 z`q!vw44wQDGlF4H8N=f+lrVJDD=-ajgOQiDI zGCD&Rzy`9N4P+nY$VG-+WML3-6!Yk0F<)fF`k4VSmd*&1wgPt*hE=@5SxWwGesAJK OuH>)EkMIdTL*qYpNI@L{ literal 0 HcmV?d00001 diff --git a/Player.java b/Player.java index 5b22986..c74d14c 100644 --- a/Player.java +++ b/Player.java @@ -1,109 +1,108 @@ -import javax.swing.ImageIcon; import java.util.*; +import javax.swing.ImageIcon; + 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; + + 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 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; - 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; + } 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 onCollideY(Collidable other, ArrayList 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 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; - } -} \ No newline at end of file + } + + 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; + } +} diff --git a/PowerBrick.class b/PowerBrick.class new file mode 100644 index 0000000000000000000000000000000000000000..b5510f5195fb93285b2c3f0e33edfe0a327a4077 GIT binary patch literal 923 zcmZ`%e^1j;6g_Y2=vE4Y;RJm4r% zO(0k8`Z9C_d(W5kkAeNJ(|7&oeXZ*?4G2t_(2?Z6B|RB#6Rl8Dcy`+%S~c_uS}MLb zU|>>*sj{a8v;*081@eV5pD6zlKZ{aGV@AiUi45ihj4``FOg02WS*2u6T*bUVyd^{4 z9VKz?vhr6a-EiS`R-7#@DIt|om z#Y91!CR(m+wnBAfnOIdxU?NrC44tu@c z2s~lTKx0gCH?V+7P+!aF3M;@q?%s0Bg|aoy4gvU-O6q4fnfxo&gaYcLem zi#EdjudqM-O_RnHW=J)Q4aVn$jo}69O4vG=zfL)V_j8fV-<(Q5Imckr>>0=+K?gGQ KK;UHrwfzevin{&) literal 0 HcmV?d00001 diff --git a/PowerBrick.java b/PowerBrick.java index 7fa6d74..6536d1a 100644 --- a/PowerBrick.java +++ b/PowerBrick.java @@ -1,24 +1,24 @@ -import javax.swing.ImageIcon; import java.util.*; +import javax.swing.ImageIcon; -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 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"); - } -} \ No newline at end of file +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 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"); + } +} diff --git a/Powerup.class b/Powerup.class new file mode 100644 index 0000000000000000000000000000000000000000..ef472f36cfcc7349f1f78cc43997e21a00f98764 GIT binary patch literal 1165 zcmaJ>>rN9v6#k~rZd(>8l~TD13PKlYz2aq2getlTUSdfV{NvJ2%EET1+1&zt6JNuG zh6EEIz&G-b@yxb{Vu_o~oH;Y!`R3eafBruE0bmU;6@(a4`{to}ob!$>r;;^6%0u9AVXhX*fuZu=B~{drWOqP0<$jv^h_~^AtV)CQ8A1ZgYsS+ zakpM$2p<=@Ef|;~A!!v?<$1UvcjeBQig8SkkHUH7in>!K=#D&?QgKZ}LsnU;Gb*l2 zl^siMR>d4{GW5FSAj5Dg9P`M}eUKhI6`SiZEMP`Kh9Mbb<-(~XSyXW=plnF!BKZ)+ zXk>~+oEK$^dT`Tn_}hAQm%Cf7JcO&_kbfcoWt(t;y3G(Th`L+i8*m+{^t5Y?e0^)_0GO) zQ{+wCE>L_rrNeL>?&fXN^SGyAjbW}UrpsJakf*-;Ka`rf6&GfxqN;o-G^odDhU~>a zQX>VDI*nuxJ&72yH0Ma$K@<^^S#5k`GS&MXY&#V`BM?rZoT5+bX(FK|el;;7m!n!L z+{ENJvS7GP^H^XVMVdG#5T`Ef!#sJignmNY!QJ*f%S0I>{D`)Fg6Z)uO-ySixItsO ziTQKB0eLkN#56=+C&~KWuwT36#k~AEUarmET!0st+ooNUGIs(m{gL+P4E(FFpYm4U;^7NJ7jlC>6`c( zCM8X3;sf|l#xn~^sWk3p&Rov-eREFEncsiTe*xIRO9L|u*#q9^13Nr+{kH9Nd0RM5 z>1PNLvoMD^L$1pYMMe5euD-acL#t46UxmaiIK`^w+a4!&O$8)UHo=gvkc7z)f9?9N zdZVG!z+&Bmh3f|9H9Ey$R;1^-E#B}1!&9%MUR;4^V>XoOfHF0u@xOdVMSHQnc;6FBWY08tmGM1=t z&#O_AWd_UfeGybV9)=<`@RVU|DyOSLHSnC8<^ND>#8F<@pcb&Gxfu;=9I`XCPGX(x z2JLo`fI;&{X?bNe8~X{ipPf6$EN}+n4A)9&GaK&=k^Vs-hC5{EwUiku literal 0 HcmV?d00001 diff --git a/Projectile.java b/Projectile.java index aeb70e3..5035612 100644 --- a/Projectile.java +++ b/Projectile.java @@ -1,15 +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; - } -} \ No newline at end of file + 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; + } +} diff --git a/Sprite.class b/Sprite.class new file mode 100644 index 0000000000000000000000000000000000000000..a18ac5a6e669e9f284ac4e707b43068700eeffbf GIT binary patch literal 406 zcmZ`#O-sW-5Ph4b&8Id-YqfgumZV^AUMhkJLZRrP()%VZVN07xnzsHe4^{Bs5Aa8c zv#BRhhJ7$IZ|1$(&#(6n0M|IRp`l?wchN+P!JG0Gk7qp3;`?MO(u$#VDRWs}F*Jg3 zV!?!Ez;@xlrQZ0dl$Bu6Wm@D6-I1Dqju&f58-{b9i6J!xHg?fA;JMg?&(Qgk#b9Ql zs)rc-Agp)Ad|ho94V3nQiw+J+c=03b{bn)rf`43u6Eb>JJd)q`Nao^hIZs6Sz>^tO z>~XOyQ*kR*;%x6aS3Yq@x*GkKdUQ1*lnFvc(L|TK_@f`Eee~y!=dRO)ij)Z1Lw+9qW}N^ literal 0 HcmV?d00001 diff --git a/Sprite.java b/Sprite.java index d4887e7..53d96f4 100644 --- a/Sprite.java +++ b/Sprite.java @@ -1,12 +1,12 @@ -import javax.swing.ImageIcon; import java.awt.Image; +import javax.swing.ImageIcon; -public class Sprite{ - ImageIcon icon; - Image sprite; - - public Sprite(ImageIcon i){ - icon = i; - sprite = i.getImage(); - } -} \ No newline at end of file +public class Sprite { + ImageIcon icon; + Image sprite; + + public Sprite(ImageIcon i) { + icon = i; + sprite = i.getImage(); + } +} diff --git a/Tile.class b/Tile.class new file mode 100644 index 0000000000000000000000000000000000000000..b360d7cc6c874997356ea31b25e970d03d5096d4 GIT binary patch literal 214 zcmX^0Z`VEs1_nn4UM>bE24;2!79Ivx1~x_pF6aE5oXnKOq?}Yn1~!|_yv!0iMg}0xosPXSW=KACx`exBUlv|kOVoK0VvN6)XfMa8Gw8q0HO3JzW@LL literal 0 HcmV?d00001 diff --git a/Tile.java b/Tile.java index 2bacdf0..1d197cc 100644 --- a/Tile.java +++ b/Tile.java @@ -1,10 +1,8 @@ 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); - - - } -} \ No newline at end of file + + public Tile(int x, int y, int w, int h, ImageIcon i) { + super(x, y, w, h, i); + } +}