From b2777bbf689ee93bc293f2aeddcc2b7bd5100148 Mon Sep 17 00:00:00 2001 From: Sagi Dayan Date: Thu, 24 Dec 2015 22:47:47 +0200 Subject: [PATCH] Added Some Documentation... --- .idea/vcs.xml | 6 + .idea/workspace.xml | 221 +++---- out/artifacts/Astroids2D_jar/Astroids2D.jar | Bin 6194307 -> 6194599 bytes .../GameEngine$astroidTimerListener.class | Bin 910 -> 910 bytes .../Engine/GameEngine$countDownListener.class | Bin 927 -> 927 bytes .../Engine/GameEngine$fireTimerListener.class | Bin 904 -> 904 bytes .../Astroids2D/Engine/GameEngine.class | Bin 8622 -> 8481 bytes .../Astroids2D/GamePanels/GamePanel.class | Bin 4409 -> 4356 bytes .../Astroids2D/Sprites/Astroid.class | Bin 1667 -> 1667 bytes out/production/Astroids2D/Sprites/Fog.class | Bin 1834 -> 1834 bytes .../Astroids2D/Sprites/LaserBlast.class | Bin 1413 -> 1413 bytes out/production/Astroids2D/Sprites/Ship.class | Bin 2330 -> 2330 bytes .../Astroids2D/Sprites/Sprite.class | Bin 3367 -> 3101 bytes src/Engine/GameEngine.java | 595 ++++++++++-------- src/GamePanels/GamePanel.java | 40 +- src/Sprites/Astroid.java | 8 +- src/Sprites/Fog.java | 8 +- src/Sprites/LaserBlast.java | 6 + src/Sprites/Ship.java | 134 ++-- src/Sprites/Sprite.java | 221 ++++--- 20 files changed, 688 insertions(+), 551 deletions(-) create mode 100644 .idea/vcs.xml diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 860ab71..e5acc5a 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -6,7 +6,17 @@ - + + + + + + + + + + + @@ -27,21 +37,15 @@ - + - - + + - - - - - - - - + + @@ -61,7 +65,7 @@ - + @@ -73,7 +77,7 @@ - + @@ -85,7 +89,7 @@ - + @@ -97,12 +101,8 @@ - - - - - - + + @@ -119,14 +119,12 @@ - + - - - - - + + + @@ -135,7 +133,7 @@ - + @@ -152,6 +150,9 @@ + + - @@ -203,7 +204,7 @@ - + @@ -310,8 +311,8 @@ + - @@ -604,7 +605,7 @@ - + @@ -621,14 +622,14 @@ - + - + @@ -647,7 +648,7 @@ file://$PROJECT_DIR$/src/Engine/GameEngine.java - 270 + 371 @@ -661,20 +662,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + @@ -721,11 +744,7 @@ - - - - - + @@ -743,9 +762,7 @@ - - - + @@ -765,14 +782,8 @@ - - - - - - - - + + @@ -819,11 +830,7 @@ - - - - - + @@ -841,9 +848,7 @@ - - - + @@ -863,14 +868,8 @@ - - - - - - - - + + @@ -917,11 +916,7 @@ - - - - - + @@ -939,9 +934,7 @@ - - - + @@ -961,14 +954,8 @@ - - - - - - - - + + @@ -1015,11 +1002,7 @@ - - - - - + @@ -1027,9 +1010,7 @@ - - - + @@ -1060,7 +1041,7 @@ - + @@ -1075,7 +1056,7 @@ - + @@ -1085,12 +1066,8 @@ - - - - - - + + @@ -1114,7 +1091,7 @@ - + @@ -1124,7 +1101,7 @@ - + @@ -1139,31 +1116,23 @@ - + - + + + - + - - - - - - - - - - - - - + + + diff --git a/out/artifacts/Astroids2D_jar/Astroids2D.jar b/out/artifacts/Astroids2D_jar/Astroids2D.jar index bdad286977f8abb19ca8feb2890405deae12aef8..bfa565ce261c4a1b291241962d6a9fada8cdd010 100644 GIT binary patch delta 9402 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 delta 9193 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 diff --git a/out/production/Astroids2D/Engine/GameEngine$astroidTimerListener.class b/out/production/Astroids2D/Engine/GameEngine$astroidTimerListener.class index 8e136a89a8756d0bf01bca5f17d56c134d7ad560..92eb2c2615d8772c2de8aa429338433cbfc39137 100644 GIT binary patch delta 29 jcmeBU?_=MvlZi2H@-8NO)=UO=#;nQznB0MUH)an2iuVZ6 delta 29 jcmeBU?_=MvlZjDv@-8NORt*MrM$O6pnB0MUH)an2eZvRL diff --git a/out/production/Astroids2D/Engine/GameEngine$countDownListener.class b/out/production/Astroids2D/Engine/GameEngine$countDownListener.class index ad92904dcc1b2b40faf0a9951c78a521e420c719..1620bec5cb98592fe0de918d93601b96812203be 100644 GIT binary patch delta 29 jcmbQwKA(NVNhZdc$)}hcSnC-$7#k<^GrI%%;mjTYjnoK` delta 29 jcmbQwKA(NVNhU_4$)}hcSWOu?7|kd1GrI%%;mjTYe#{4G diff --git a/out/production/Astroids2D/Engine/GameEngine$fireTimerListener.class b/out/production/Astroids2D/Engine/GameEngine$fireTimerListener.class index 08ae85f8abbd863c4afe792ceeb76534ebb32db7..c2fe2d0950e64f919bd87a3df3c5e0a0758fd15f 100644 GIT binary patch delta 29 jcmeBR?_l4siHWgr@@6In))EE|#?r|@nB0MU2WAfdii`-@ delta 29 jcmeBR?_l4siHT8r@@6InRy_s|M*Yb@nB0MU2WAfdd{hU( diff --git a/out/production/Astroids2D/Engine/GameEngine.class b/out/production/Astroids2D/Engine/GameEngine.class index e9a8b55aedae82c8911b70e4be92eb6eb9504967..5a3e6b6b3a079565a1cf7b99b831502c8fc1508d 100644 GIT binary patch literal 8481 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 Q%<%nsj#-XtIOgE_6|U0KzyJUM literal 8622 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 diff --git a/out/production/Astroids2D/GamePanels/GamePanel.class b/out/production/Astroids2D/GamePanels/GamePanel.class index 2ece5e0b81d7b8a537eb4539422a0fca7a53be08..966937d9c88d7a8e8b5688a294e2f8095c332122 100644 GIT binary patch delta 2075 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 At^fc4 diff --git a/out/production/Astroids2D/Sprites/Astroid.class b/out/production/Astroids2D/Sprites/Astroid.class index 7d4903d9375757f4309e912dcabf76811fa7a15b..ac1d59fb4de2c0eaad1174c0faed5d4bb6be6c90 100644 GIT binary patch delta 51 zcmZqXZRXw3z$z%sAju%ZV8$TJV8tNE;LadFc_Qm_K{WuHMy@wjh>a}0{R(3a&a8N%$?lH2@P$g;{|76<$y zp>|5Wb81~6qdRKT)h~Y?t@O%yH+LJjH*`}+kj&{?PK>YbvI9HTN2^++I OSVE?KVsqN3CHw0MI* delta 491 zcmaKoOG{f(6otRsm_&nuUW+!m(EXX)04k_PeIXmmE)AcD6p-q*!Z%qD& z;IkNNdemY<7?UiR7UpGmhMWZNGVj_-zli&1OEUEt1=nhYMV7?iqr?Z6@v6HbqmMGW Opl-n!4SaN8S^W!`AYA7F diff --git a/out/production/Astroids2D/Sprites/Sprite.class b/out/production/Astroids2D/Sprites/Sprite.class index 2f695d3ed13a3946cee24edd8d82c9fe83ddab90..0cb774f7fac631ddf4bce56e7c7a6db2bf850473 100644 GIT binary patch literal 3101 zcmah~>r)d~6#p#=Sy%#yh{{Wm`hZo8l|B^gL&OJ`hb4%j*1AcSuo{w>EQ0oBpZKU& z`<_mxU;WaV))@(%I@7P6=^xehcWyQTVmeJ`&%Jx@{hjwY``6#U{{f&E-x}z^g=%cY zTS6`hd0WUOA(oJckf_{?>97qLxKM>@S>r-x3^=%K;0h9QaaKptz-ED<(jJ|g zjo6t9DxRSWjN{tb zP=4i!w!r5)pLsrX*++LY=+10>)S6YwRKQl7r=d3NTG1;bR$3`nL4KcEqG?&%RgoNY zX6h-U3ZhF$x4fD{b_?kd z-Uqm;VN+>p2j-ka%+6@23aKDuLqU9qkAnCZpXm5Bh|jR7<5m#2aVLmv=+w}tWUMW? zAnuA8142H>Jyv=#>1CoWM&A$O3p~*AFo-YlRS;hb^f|G12ez}Uiuhtc1@(=Fy0rz( z0$cHEEOMFQU&G2b82w|yjwGxs^VL|$mnw0^l!~*`X*(|j)a(#O{cOlEYy7M zp7d|yC!vEMCj)*dTJHQ(Txw-~sg>=bR(6b9*)(cp->8+XqgM8oTG>Th>%dqeM7j^q zj#F+8xlwZ&n%PvngbK5DaS1-Njnr>8RW6~@Y+pjaZ1OKbH#h4`s4~qQs-MD`T1L(K zU=Fp-0g@c*a;X0e>z2^)2=#qNvynrisqvN4H$0}w9*kj}A4VUZr_xtZPuffqTIgsi z)}f7G$9B>!bb2ez?I2=1FXZ%CXfX`1hsqUwNR9#blU`3s&34Z~%@{!;KrS?~x(i<%if zPjltZC7LJ7g2!;G47lOf67c!5;5W-^ZY|XuDGMGi3vMd~J7vM)vH`0q4OqG?c%rQ4 zic-z=?%wJp(Zd5U%^L*IQ8zYtZS%h*yH#ha@nws^_+<4m#A|77Kf#H%9B zCxT*&-~WhuliPrdkw@r|BYBn6ON-zAggVo^DPx8Pl;Ct3Jb9d-$9g%OUm7GoM0T<{ zfm<9Uw>d)YaA4eJd)#BW-$$6AXd4fZ#=}*PT=g80mJYz*+Sby>wm8etB5iSwv;yb< E1;P$#u>b%7 literal 3367 zcma)9`*Rc575>(ez4m(jz#v{WFQ*WD0gDonwm40SZ30dNc9D6Qq`+EQ+e>6=*u?RW03jm1D$wY#|tw4Uc`$AUcwa-FUzj0B3{w)s)24? z)A5>)*EKXu4A0n8j)u*d^Y%qMZO?{jS2XE?^5mrBJ9)L#iil*ZlOgooz3XX4wZmCF5UTmv-Rhz)QOxN{xajL+vY2ZNi;Mvgw zV}~_#MBx;;l+K2}TbyDD4Uf7-H+)P(SI@9~?%y*s+r*tWP;1FUoB2Q060kXG+?* za$s3jxPz%|qP|iHTYGvJ-K!MeR|+lMt^$iQ+FE(9B(_ofL`iKamBW$AY|eL_CtM;X zt_DiwVxD(iyVTV&Cl{(h5NLf3YZjwex+Is$s9Zoq~T!?G2ROLf&Cejpe}c`|_@@;|&vk z#Gg$38E@)%%f#E*N5BI=XW||F#bg)QXX3}`HL(-BOzalXC$DJ{dqlj8>pU{8pbXMF z-ZSw&KG1Q)#E1CE#11^DVYLcod0m?L7{ey^%9)2{_6a^EE2>pfBW-fE&rE!dzv}p# ziNE8fi7&*oMs)(@5RhNR$nIYOt->6^m z96uy=cEnj*0(E~}eM?oWZQJvlB8z|b53-2!#Y!?O=taqH3LMX7M=D7!!%`*CHI+hK z?p4ZouwVx))z!;(C?!vCTZAFrC-*z%1ggF?bpP*Yi%yt6ek{X7QgX;#)O97z(tU?V z*m-=%=8gN}Gb#rEmz`~FRK-v=pE2LgvBXyiXW01I%!>g@Cc2cg&?RRnw~VGi=}D4S zQkLzcLMF1J0>OQqCo0k9YBF8;sgBj~P<#p56M3q1Z_&8w3rFckCP=W0j^E#VnvE;( z23{$UmZlnh?}_9#eu-`8cWg6~LJ!W8Qo(9u5v!4WQzI#-MzT(gB%T_{JvEY?Y9x&~ zb_ioRwnAgkKSKEvuo3b6W@@ilcc5AKP&a-DiH_u5)GwgnAJ8c~8mrRt!ZB{Bdk9Nyiz^ck=9kk!jKtb~btiFpi^GMx9+kRt%v4C}! z##d{-K9BXZ+Hi}J9fgO0U;hdGl(7w|OXdHenE(*&(*jVjFF? z)2bU~Jb=sclYt0cA$qS8hoA9;Nf=x+upj-DyfYr<8S=S?$GAsRv&T8BQ?p-imQb?; zoF&z4fU|lv8zh7)`(eF0 zdB1g=AlxRbe2DtS%sq6DR}}Sk&~;?j0yZ7py)%)}7O?r`?gebIb`iN-^j4>E+N`4J z!z#AmZld%c8|WUD^?khm!wLf{@)qBG72|ypPcfEmtVf0xb$nLi2=PoLHHbgNGA6G8SXhZBm!?BviEh~)&YZ_-UR`pE$V$ZE#ukd`Rrtxu{ zs9~J?c7<`Krt!&|p0}>_JX+KER88Y;D~*rWG#;-B*!q=#jn^@YiU>77+ z2`Q!g)$2FNP)^%~yEm~_mgH4d&s}}@Ba%4YDcrt|mKApG!uH6nh0E==>{_HEBj)ZP z8-QP-4QI&Nv;2{8j+HurL&zbEJRJUc|D&R{1XDWWaD||V{K#``yfXd+Zmp$F}7ND*1R%d#U-KE SN5_yR=U~%~#)}CRbN>aa3%Do% diff --git a/src/Engine/GameEngine.java b/src/Engine/GameEngine.java index 6d2e378..a3a343d 100644 --- a/src/Engine/GameEngine.java +++ b/src/Engine/GameEngine.java @@ -22,298 +22,377 @@ import java.util.Vector; public class GameEngine implements KeyListener { - private final int LARGE=100, MEDIUM=50, SMALL=25, NUM_OF_LIVES = 3, LASER_SPEED = 10, ASTROID_SPEED = 3; - private final int STOP=0, UP=1, DOWN=-1; - public boolean gameOn,fireLock, gameOver, isFirstGame; - private Ship player; - private Vector astroidsSprites,laserSprites; - private int pWidth, pHeight; - private Timer astroidTimer, fireTimer, startTime; - private Random r; - private int score, countDown; - private Vector lives, fogs; - private AudioClip laserAudioClip; - private BufferedImage sceneImage; + private final int LARGE=100, MEDIUM=50, SMALL=25, NUM_OF_LIVES = 3, LASER_SPEED = 10, ASTROID_SPEED = 3, FOG_COUNT = 4, MINI_SHIP_SIZE = 30; + private final int STOP=0, UP=1, DOWN=-1; //Movement directions + public boolean gameOn,fireLock, gameOver, isFirstGame; + private Ship player; + private Vector astroidsSprites,laserSprites; //will save all laser shots and asteroids which are currently on the screen. + private int pWidth, pHeight; //panel dimensions + private Timer astroidTimer, fireTimer, startTime; + private Random r; + private int score, countDown; + private Vector lives, fogs; + private AudioClip laserAudioClip; + private BufferedImage sceneImage; - private AudioClip themeAudioClip; - private final URL laserURL= getClass().getResource("/Sounds/laser.wav"); - private final URL themeURL= getClass().getResource("/Sounds/theme.wav"); + private AudioClip themeAudioClip; + private final URL laserURL= getClass().getResource("/Sounds/laser.wav"); + private final URL themeURL= getClass().getResource("/Sounds/theme.wav"); - public GameEngine(int width, int height){ - this.isFirstGame = true; - this.gameOver = true; - this.pWidth = width; - this.pHeight = height; - try { - laserAudioClip = Applet.newAudioClip(laserURL); - themeAudioClip = Applet.newAudioClip(themeURL); - }catch (Exception e){ - laserAudioClip = null; - themeAudioClip = null; - } - if(themeAudioClip != null) - themeAudioClip.loop(); - fogs = new Vector<>(); - r = new Random(); - sceneImage = new BufferedImage(width, height, Image.SCALE_SMOOTH); - initFogs(); - startNewGame(); - } + public GameEngine(int width, int height){ - private void initFogs(){ - for(int i = 0 ; i < 4 ; i++){ - fogs.add(new Fog((-1)*r.nextInt(),(-1)*r.nextInt(),pWidth,pHeight,1,"Fog.png",r.nextInt(360),pWidth)); - } - } + //initialize variables and load audio\image files. + this.isFirstGame = true; + this.gameOver = true; + this.pWidth = width; + this.pHeight = height; + try { + laserAudioClip = Applet.newAudioClip(laserURL); + themeAudioClip = Applet.newAudioClip(themeURL); + }catch (Exception e){ + laserAudioClip = null; + themeAudioClip = null; + } + if(themeAudioClip != null) + themeAudioClip.loop(); + fogs = new Vector<>(); + r = new Random(); + sceneImage = new BufferedImage(width, height, Image.SCALE_SMOOTH); - private void startNewGame(){ - score = 0; - lives = new Vector<>(); - setupLives(NUM_OF_LIVES); - astroidTimer = new Timer(5000, new astroidTimerListener()) ; - fireTimer = new Timer(500, new fireTimerListener()) ; - startTime = new Timer(1000, new countDownListener()); - fogs.remove(fogs.size()-1); - initGame(); - } + initFogs(); //create fog sprites moving on screen. + startNewGame(); + } - private void initGame(){ - this.countDown = 3; - astroidsSprites = new Vector<>(); - laserSprites = new Vector<>(); - this.player = new Ship(pWidth/2, pHeight/2,pWidth,pHeight, MEDIUM); - gameOn = true; - fireTimer.start(); - astroidTimer.start(); + /** + * creates FOG_COUNT amount of fog sprites to roam the screen. (currently set to 4) + */ + private void initFogs(){ + for(int i = 0 ; i < FOG_COUNT ; i++){ + fogs.add(new Fog((-1)*r.nextInt(),(-1)*r.nextInt(),pWidth,pHeight,1,"Fog.png",r.nextInt(360),pWidth)); + } + } - for (int i =0 ; i<4 ; i++) - createAstroid(); - } + /** + * initialize and reset vars and timers to "new game" configuration. + */ + private void startNewGame(){ + score = 0; + lives = new Vector<>(); + setupLives(NUM_OF_LIVES); + astroidTimer = new Timer(5000, new astroidTimerListener()) ; + fireTimer = new Timer(500, new fireTimerListener()) ; + startTime = new Timer(1000, new countDownListener()); + fogs.remove(fogs.size()-1); + initGame(); + } - private void setupLives(int num){ - int size = 30; - for(int i = 0 ; i < num ; i++){ - lives.add(new Ship(pWidth - ((i+1)*size), 15, pWidth, pHeight, size)); - } - } + /** + * clears asteroid and laser arrays, creates new asteroids, starts timers and repositions ship in center of screen. + */ + private void initGame(){ + this.countDown = 3; + astroidsSprites = new Vector<>(); + laserSprites = new Vector<>(); + this.player = new Ship(pWidth/2, pHeight/2,pWidth,pHeight, MEDIUM); + gameOn = true; + fireTimer.start(); + astroidTimer.start(); - public int getScore(){ - return score; - } + for (int i =0 ; i<4 ; i++) + createAstroid(); + } - public boolean isGameOver(){ - return this.gameOver; - } + /** + * Creates requested amount of ships to "Lives" array (Mini ships to be presented at corner of the screen). + * @param num + * number of wanted "Lives". + */ + private void setupLives(int num){ + for(int i = 0 ; i < num ; i++){ + lives.add(new Ship(pWidth - ((i+1)*MINI_SHIP_SIZE), 15, pWidth, pHeight, MINI_SHIP_SIZE)); + } + } - public int getCountDown(){ - return countDown; - } + /** + * returns score + * @return + * int + */ + public int getScore(){ + return score; + } - private void createAstroid(){ - astroidsSprites.add(new Astroid((-1)*r.nextInt(),(-1)*r.nextInt(),pWidth,pHeight,ASTROID_SPEED,"astroid.png",r.nextInt(360),LARGE)); - } + /** + * returns gameOver flag + * @return + * boolean + */ + public boolean isGameOver(){ + return this.gameOver; + } - @Override - public void keyTyped(KeyEvent keyEvent) { - } + /** + * returns countDown + * @return + * int + */ + public int getCountDown(){ + return countDown; + } - @Override - public void keyPressed(KeyEvent keyEvent) { - if(gameOn) { - switch (keyEvent.getKeyCode()) { - case KeyEvent.VK_UP: - player.setDirection(UP); - break; - case KeyEvent.VK_DOWN: - player.setDirection(DOWN); - break; - case KeyEvent.VK_LEFT: - player.turnShip(DOWN); - break; - case KeyEvent.VK_RIGHT: - player.turnShip(UP); - break; - case KeyEvent.VK_SPACE: - if (!fireLock && countDown <= 0) { - if(laserAudioClip != null) - laserAudioClip.loop(); - laserSprites.add(new LaserBlast((int) player.getLocX() + (player.getImageWidth() / 2), - (int) player.getLocY() + (player.getImageHeight() / 2), - pWidth, - pHeight, - LASER_SPEED, - "laser2.gif", - player.getAngle(), - SMALL)); - fireLock = true; - } + /** + * Create a new asteroid on a random position. + */ + private void createAstroid(){ + astroidsSprites.add(new Astroid((-1)*r.nextInt(),(-1)*r.nextInt(),pWidth,pHeight,ASTROID_SPEED,"astroid.png",r.nextInt(360),LARGE)); + } - break; - case KeyEvent.VK_F2: - this.isFirstGame = false; - gameOver = false; - startNewGame(); - startTime.start(); - break; + @Override + public void keyTyped(KeyEvent keyEvent) {} - default: - break; - } - } - } + @Override + public void keyPressed(KeyEvent keyEvent) { + if(gameOn) { + switch (keyEvent.getKeyCode()) { + case KeyEvent.VK_UP: + player.setDirection(UP); + break; + case KeyEvent.VK_DOWN: + player.setDirection(DOWN); + break; + case KeyEvent.VK_LEFT: + player.turnShip(DOWN); //Left + break; + case KeyEvent.VK_RIGHT: + player.turnShip(UP); //Right + break; + case KeyEvent.VK_SPACE: //Fire + if (!fireLock && countDown <= 0) { + if(laserAudioClip != null) + laserAudioClip.play(); //Play audio file + //create a new laser from ship towards ship direction. + laserSprites.add(new LaserBlast((int) player.getLocX() + (player.getImageWidth() / 2), + (int) player.getLocY() + (player.getImageHeight() / 2), + pWidth, + pHeight, + LASER_SPEED, + "laser2.gif", + player.getAngle(), + SMALL)); + fireLock = true; //lock for delay in fire speed + } - @Override - public void keyReleased(KeyEvent keyEvent) { - if(gameOn){ - switch (keyEvent.getKeyCode()){ - case KeyEvent.VK_UP: - case KeyEvent.VK_DOWN: - player.setDirection(STOP); - break; - case KeyEvent.VK_RIGHT: - case KeyEvent.VK_LEFT: - player.turnShip(STOP); - break; - case KeyEvent.VK_SPACE: - laserAudioClip.stop(); - break; - default: - break; + break; + case KeyEvent.VK_F2: //new game + this.isFirstGame = false; + gameOver = false; + startNewGame(); + startTime.start(); + break; - } - } + default: + break; + } + } + } + + @Override + public void keyReleased(KeyEvent keyEvent) { + if(gameOn){ + //stop all movement activity + switch (keyEvent.getKeyCode()){ + case KeyEvent.VK_UP: + case KeyEvent.VK_DOWN: + player.setDirection(STOP); + break; + case KeyEvent.VK_RIGHT: + case KeyEvent.VK_LEFT: + player.turnShip(STOP); + break; +// case KeyEvent.VK_SPACE: +// laserAudioClip.stop(); +// break; + default: + break; + + } + } - } + } + /** + * Update all sprites, including collision handling. + */ + public void update(){ + for (Sprite sprite : fogs) { + sprite.update(); + } + if(!gameOver) { + if (countDown > 0) + return; + } + else + return; - public void update(){ - for (Sprite sprite : fogs) { - sprite.update(); - } - if(!gameOver) { - if (countDown > 0) - return; - } - else - return; + player.update(); + for (Sprite sprite : astroidsSprites) { + sprite.update(); + } + for (Sprite sprite : laserSprites) { + sprite.update(); + } - player.update(); - for (Sprite sprite : astroidsSprites) { - sprite.update(); - } - for (Sprite sprite : laserSprites) { - sprite.update(); - } + // check for collisions + collisionHandler(); - collisionHandler(); + } + /** + * Checks if a collision has occurred. + * in case of missile hitting an asteroid - they are both removed. + * in case of asteroid hitting the ship - round over. + */ + private void collisionHandler(){ - } + Vector newAstroids = new Vector<>(); + Vector removeLasers = new Vector<>(); + Vector removeAstroids = new Vector<>(); + + + /* + * check for "Laser vs Asteroid" collisions + * in case of collision both missile and asteroid are removed, + * and 2 smaller asteroids are created (if needed). + */ + for (int i = 0; i newAstroids = new Vector<>(); - Vector removeLasers = new Vector<>(); - Vector removeAstroids = new Vector<>(); + removeLasers.add(laserSprites.get(i)); + removeAstroids.add(astroidsSprites.get(j)); + } + } + } + /* + * check for "Asteroid vs Ship" collisions. + * if last live - game over + * else - 1 less life and reset vars for next round + */ + + for(int i = 0 ; i < astroidsSprites.size() ; i++){ + if(CollisionUtil.collidesWith(astroidsSprites.get(i), player)){ + if(lives.size() == 1){ + gameOver = true; + fogs.add(new Fog(pWidth,0,pWidth,pHeight,1,"Fog.png",180,pWidth)); + } + if(lives.size() > 0) + lives.remove(lives.size()-1); + initGame(); + } + } - for (int i = 0; i 0) - lives.remove(lives.size()-1); - initGame(); - System.out.println("==============GAME OVER=============="); - } - } + /** + * creates an new asteroid each 5 seconds * + */ + private class astroidTimerListener implements ActionListener{ + @Override + public void actionPerformed(ActionEvent actionEvent) { + createAstroid(); + } + } + + /** + * Limits fire speed to 1 second. + * + */ + private class fireTimerListener implements ActionListener{ + @Override + public void actionPerformed(ActionEvent actionEvent) { + fireLock = false; + } + } + /** + * Pre game countdown. + * + */ + private class countDownListener implements ActionListener{ + @Override + public void actionPerformed(ActionEvent actionEvent) { + countDown--; + } + } - astroidsSprites.addAll(newAstroids); - - laserSprites.removeAll(removeLasers); - astroidsSprites.removeAll(removeAstroids); - } - - public void render(JPanel panel){ - sceneImage = new BufferedImage(this.pWidth, this.pHeight, Image.SCALE_FAST); - renderScene(sceneImage.getGraphics(), panel); - } - - public void renderScene(Graphics g, JPanel panel){ - if(!gameOver) - player.drawSprite(g, panel); - try { - for (Sprite sprite : astroidsSprites) { - sprite.drawSprite(g, panel); - } - for (Sprite sprite : lives) { - sprite.drawSprite(g, panel); - } - for (Sprite sprite : laserSprites) { - sprite.drawSprite(g, panel); - } - for (Sprite sprite : fogs) { - sprite.drawSprite(g, panel); - } - }catch (Exception e) - { - - } - } - - -private class astroidTimerListener implements ActionListener{ - @Override - public void actionPerformed(ActionEvent actionEvent) { - createAstroid(); - } -} -private class fireTimerListener implements ActionListener{ - @Override - public void actionPerformed(ActionEvent actionEvent) { - fireLock = false; - } -} - - private class countDownListener implements ActionListener{ - @Override - public void actionPerformed(ActionEvent actionEvent) { - countDown--; - - } - } - - public BufferedImage getScene(){ - return this.sceneImage; - } + /** + * returns sceneImage + * @return + * BufferedImage + */ + public BufferedImage getScene(){ + return this.sceneImage; + } } diff --git a/src/GamePanels/GamePanel.java b/src/GamePanels/GamePanel.java index 98fcd25..4ea761d 100644 --- a/src/GamePanels/GamePanel.java +++ b/src/GamePanels/GamePanel.java @@ -3,25 +3,20 @@ import Engine.*; import javax.swing.*; import java.awt.*; -import java.awt.image.BufferedImage; +//import java.awt.image.BufferedImage; import java.net.URL; /** * Created by sagi on 12/18/15. */ public class GamePanel extends JPanel implements Runnable{ -// private final String BASE_PATH = System.getProperty("user.dir") + File.separator +"src"+ File.separator; - -// private final String bgPath = BASE_PATH + "Images" + File.separator + "bg.gif"; -// private final String gameOverPath = BASE_PATH + "Images" + File.separator + "gameOver.png"; -// private final String startPath = BASE_PATH + "Images" + File.separator + "start.png"; private final URL bgURL= getClass().getResource("/Images/bg2.gif"); private final URL gameOverURL= getClass().getResource("/Images/gameOver.png"); private final URL startURL= getClass().getResource("/Images/start.png"); - private int width, height; +// private int width, height; private GameEngine engine; private JLabel lbl_score, lbl_countDown, lbl_gameOver, lbl_bg, lbl_start; @@ -30,23 +25,30 @@ public class GamePanel extends JPanel implements Runnable{ - + /** + * + * Constructor. + * initializes all objects on panel and creates gameEngine + */ public GamePanel(int width, int height){ this.setLayout(null); - this.width = width; - this.height = height; +// this.width = width; +// this.height = height; this.engine = new GameEngine(width, height); this.addKeyListener(engine); this.setFocusable(true); this.requestFocus(); + //set score label at top left corner this.lbl_score = new JLabel(""); lbl_score.setBounds(15,15,width,30); - + + //set countDown label at center this.lbl_countDown = new JLabel(""); lbl_countDown.setBounds(width/2,0,width,height); System.out.println("URL = " +bgURL); + //set background img_bg = new ImageIcon(bgURL); Image tmp_BG = img_bg.getImage(); bg_image = tmp_BG.getScaledInstance(width, height, java.awt.Image.SCALE_SMOOTH); @@ -82,7 +84,8 @@ public class GamePanel extends JPanel implements Runnable{ public void run() { while(engine.gameOn){ engine.update(); - + + //check if game is over and draw labels accordingly if(engine.isGameOver()){ this.lbl_countDown.setVisible(false); if(!engine.isFirstGame) @@ -94,17 +97,21 @@ public class GamePanel extends JPanel implements Runnable{ lbl_start.setVisible(false); } - + + //render graphics engine.render(this); - repaint(); + + //sleep to slow down game try { - Thread.sleep(10); + Thread.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } repaint(); + + //sleep for other processes to take control try { - Thread.sleep(10); + Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); } @@ -124,6 +131,7 @@ public class GamePanel extends JPanel implements Runnable{ g.drawImage(bg_image, 0, 0, this); //draw the background g2d.drawImage(engine.getScene(),0,0,this); //Draw the scene + //Some labels - Score & countDown lbl_score.setText("SCORE : " + engine.getScore()); if(engine.getCountDown() > 0){ diff --git a/src/Sprites/Astroid.java b/src/Sprites/Astroid.java index 823deb2..cb2ffd4 100644 --- a/src/Sprites/Astroid.java +++ b/src/Sprites/Astroid.java @@ -19,6 +19,9 @@ public class Astroid extends Sprite { rotationSpeed = ((r.nextDouble()*10) % 3) + 0.01; } + /** + * updates sprite location according to movement speed and angle. + */ @Override public void update() { locX += acceleration * Math.cos(Math.toRadians(angle)); @@ -26,7 +29,10 @@ public class Astroid extends Sprite { outOfScreeFix(); selfAngle+=rotationSpeed; } - + + /** + * draw sprite with rotation according to sprite angle + */ @Override public void drawSprite(Graphics g, JPanel p) { Graphics2D g2d = (Graphics2D)g; diff --git a/src/Sprites/Fog.java b/src/Sprites/Fog.java index 4849962..8eff4b2 100644 --- a/src/Sprites/Fog.java +++ b/src/Sprites/Fog.java @@ -21,7 +21,10 @@ public class Fog extends Sprite { rotationSpeed = 0; alphaChannel = r.nextFloat()-0.04f; } - + + /** + * updates sprite location according to movement speed and angle. + */ @Override public void update() { locX += acceleration * Math.cos(Math.toRadians(angle)); @@ -30,6 +33,9 @@ public class Fog extends Sprite { selfAngle+=rotationSpeed; } + /** + * draw sprite with rotation according to sprite angle + */ @Override public void drawSprite(Graphics g, JPanel p) { Graphics2D g2d = (Graphics2D)g; diff --git a/src/Sprites/LaserBlast.java b/src/Sprites/LaserBlast.java index 84854fb..c9b2fab 100644 --- a/src/Sprites/LaserBlast.java +++ b/src/Sprites/LaserBlast.java @@ -14,6 +14,9 @@ public class LaserBlast extends Sprite { } + /** + * updates sprite location according to movement speed and angle. + */ @Override public void update() { locX += acceleration * Math.cos(Math.toRadians(angle)); @@ -21,6 +24,9 @@ public class LaserBlast extends Sprite { outOfScreeFix(); } + /** + * draw sprite with rotation according to sprite angle + */ @Override public void drawSprite(Graphics g, JPanel p) { Graphics2D g2d = (Graphics2D)g; diff --git a/src/Sprites/Ship.java b/src/Sprites/Ship.java index 677b56f..9c57408 100644 --- a/src/Sprites/Ship.java +++ b/src/Sprites/Ship.java @@ -1,80 +1,100 @@ package Sprites; -import javax.imageio.ImageIO; +//import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; -import java.awt.geom.AffineTransform; -import java.awt.image.AffineTransformOp; +//import java.awt.geom.AffineTransform; +//import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; -import java.io.IOException; +//import java.io.IOException; /** * Created by sagi on 12/18/15. */ public class Ship extends Sprite { - private final int STOP=0, UP=1, DOWN=-1, TURN_SPEED=10; - private final double MAX_SPEED = 6, SLOWING_FACTOR = 0.1; - private int direction, turnDirection; - private BufferedImage bi; - private double selfAccel; + private final int STOP=0, UP=1, DOWN=-1, TURN_SPEED=10; + private final double MAX_SPEED = 6, SLOWING_FACTOR = 0.1; + private int direction, turnDirection; + private BufferedImage bi; + private double selfAccel; - public Ship(int x, int y, int w, int h, int size) { - super(x, y, w, h, 0, "ship2.png", 0, size); - direction = STOP; - turnDirection = STOP; - selfAccel = acceleration; + public Ship(int x, int y, int w, int h, int size) { + super(x, y, w, h, 0, "ship2.png", 0, size); + direction = STOP; + turnDirection = STOP; + selfAccel = acceleration; - } + } - @Override - public void update() { - setSpeed(); - this.angle+=TURN_SPEED*turnDirection; - locX += selfAccel * Math.cos(Math.toRadians(angle)); - locY -= selfAccel * (-1 * Math.sin(Math.toRadians(angle))); - outOfScreeFix(); + /** + * updates sprite location according to movement speed and angle. + */ + @Override + public void update() { + setSpeed(); + this.angle+=TURN_SPEED*turnDirection; + locX += selfAccel * Math.cos(Math.toRadians(angle)); + locY -= selfAccel * (-1 * Math.sin(Math.toRadians(angle))); + outOfScreeFix(); + } - } + /** + * draw sprite with rotation according to sprite angle + */ + public void drawSprite(Graphics g, JPanel panel) { + Graphics2D g2d = (Graphics2D)g; + g2d.rotate(Math.toRadians(angle), locX + (bImage.getWidth()/2), locY + (bImage.getHeight()/2)); + g2d.drawImage(bImage, (int)locX, (int)locY, panel); + g2d.rotate(-1*Math.toRadians(angle), locX + (bImage.getWidth()/2), locY + (bImage.getHeight()/2)); - private void setSpeed(){ - if (direction == UP && !(selfAccel > MAX_SPEED)){ - selfAccel+=SLOWING_FACTOR*2; - } - else if (direction == DOWN && (selfAccel > MAX_SPEED*(-1))){ - selfAccel-=SLOWING_FACTOR*2; - } - else { //slowing down - if (selfAccel > 0) { - selfAccel -= SLOWING_FACTOR; - if (selfAccel < 0) { - selfAccel = 0; - } - } - if (selfAccel < 0) { - selfAccel += SLOWING_FACTOR; - if (selfAccel > 0) { - selfAccel = 0; - } - } - } - } + } - public void setDirection(int direction){ - this.direction = direction; - } + /** + * sets movement speed according to movement direction. + * if ship is not "moved" - it will slow down by slowing factor. + */ + private void setSpeed(){ + if (direction == UP && !(selfAccel > MAX_SPEED)){ + selfAccel+=SLOWING_FACTOR*2; + } + else if (direction == DOWN && (selfAccel > MAX_SPEED*(-1))){ + selfAccel-=SLOWING_FACTOR*2; + } + else { //slowing down + if (selfAccel > 0) { + selfAccel -= SLOWING_FACTOR; + if (selfAccel < 0) { + selfAccel = 0; + } + } + if (selfAccel < 0) { + selfAccel += SLOWING_FACTOR; + if (selfAccel > 0) { + selfAccel = 0; + } + } + } + } - public void drawSprite(Graphics g, JPanel panel) { - Graphics2D g2d = (Graphics2D)g; - g2d.rotate(Math.toRadians(angle), locX + (bImage.getWidth()/2), locY + (bImage.getHeight()/2)); - g2d.drawImage(bImage, (int)locX, (int)locY, panel); - g2d.rotate(-1*Math.toRadians(angle), locX + (bImage.getWidth()/2), locY + (bImage.getHeight()/2)); + /** + * set movement direction + * @param direction + * int + */ + public void setDirection(int direction){ + this.direction = direction; + } - } - public void turnShip(int direction){ - turnDirection=direction; - } + /** + * set turning direction + * @param direction + * int + */ + public void turnShip(int direction){ + turnDirection=direction; + } } diff --git a/src/Sprites/Sprite.java b/src/Sprites/Sprite.java index 833c53a..4455532 100644 --- a/src/Sprites/Sprite.java +++ b/src/Sprites/Sprite.java @@ -4,114 +4,151 @@ import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; -import java.io.File; +//import java.io.File; import java.io.IOException; -import java.net.URL; +//import java.net.URL; public abstract class Sprite { - protected BufferedImage bImage; - protected int imageWidth, imageHeight; // image dimensions + protected BufferedImage bImage; + protected int imageWidth, imageHeight; // image dimensions - protected double locX, locY; - protected int acceleration; - protected int pWidth, pHeight, size; // panel's dimensions + protected double locX, locY; + protected int acceleration; + protected int pWidth, pHeight, size; // panel's dimensions - protected double angle; - private final String BASE_PATH = System.getProperty("user.dir") + File.separator +"src"+ File.separator; + protected double angle; +// private final String BASE_PATH = System.getProperty("user.dir") + File.separator +"src"+ File.separator; - public Sprite(int x, int y, int w, int h, int acc, String imgName, double angle, int size) - { - this.size = size; - locX = x; - locY = y; - acceleration = acc; - pWidth = w; - pHeight = h; - try {///home/sagi/Development/JCE/Astroids2D/src/Images/ship.gif - bImage = ImageIO.read(getClass().getResource("/Images/"+imgName)); - }catch (IOException pin){ - pin.printStackTrace(); - bImage = null; - } - this.angle = angle; + public Sprite(int x, int y, int w, int h, int acc, String imgName, double angle, int size) + { + this.size = size; + locX = x; + locY = y; + acceleration = acc; + pWidth = w; + pHeight = h; + this.angle = angle; - setImageDimensions(); - } + //load image from source files + try { + bImage = ImageIO.read(getClass().getResource("/Images/"+imgName)); + }catch (IOException pin){ + pin.printStackTrace(); + bImage = null; + } + + setImageDimensions(); + } - public void setImageDimensions() - { - Image tmp = bImage.getScaledInstance(size,size, Image.SCALE_SMOOTH); - BufferedImage bi = new BufferedImage(size,size, BufferedImage.TYPE_INT_ARGB); + /* + * resizes image to a set size + */ + private void setImageDimensions() + { + Image tmp = bImage.getScaledInstance(size,size, Image.SCALE_SMOOTH); + BufferedImage bi = new BufferedImage(size,size, BufferedImage.TYPE_INT_ARGB); - Graphics2D g2d = bi.createGraphics(); - g2d.drawImage(tmp,0,0,null); - g2d.dispose(); - bImage = bi; - } + Graphics2D g2d = bi.createGraphics(); + g2d.drawImage(tmp,0,0,null); + g2d.dispose(); + bImage = bi; + } + + /** + * Abstract method to update sprite. + */ + public abstract void update(); - public abstract void update(); + /** + * returns sprite x position + * @return + * double + */ + public double getLocX() {return locX;} + + /** + * returns sprite y position + * @return + * double + */ + public double getLocY() {return locY;} + + /** + * returns sprite acceleration + * @return + * int + */ + public int getAcceleration() {return acceleration;} + + /** + * returns sprite size + * @return + * int + */ + public BufferedImage getbImage() {return bImage;} + + /** + * returns image width + * @return + * int + */ + public int getImageWidth() {return imageWidth;} + + /** + * returns image height + * @return + * int + */ + public int getImageHeight() {return imageHeight;} + + /** + * returns sprite angle + * @return + * double + */ + public double getAngle() {return angle;} + + /** + * returns sprite size + * @return + * int + */ + public int getSize() {return size;} -// public Rectangle getBoundingBox() -// { -// return new Rectangle(getLocX(), getLocY(), imageWidth, imageHeight); -// } + + /** + * returns shape location and dimensions as a Rectangle. + * @return + * Rectangle + */ + public Rectangle getBounds() { + return new Rectangle((int)locX, (int)locY, size, size); + } - public double getLocX() { - return locX; - } + + /** + * its not a bug it's a feature. actually it just moves a shape that goes beyond the screen to the other side. + */ + protected void outOfScreeFix(){ + if(locX < 0 - size) + locX = pWidth; + else if (locX > pWidth+size) + locX = 0-size; - public double getLocY() { - return locY; - } - - public int getAcceleration(){ - return acceleration; - } - - public BufferedImage getbImage() - { - return bImage; - } - - public int getImageWidth() { - return imageWidth; - } - - public int getImageHeight() - { - return imageHeight; - } - - public double getAngle(){ - return angle; - } - - protected void outOfScreeFix(){ //its not a bug it's a feature - if(locX < 0 - size) - locX = pWidth; - else if (locX > pWidth+size) - locX = 0-size; - - if(locY < 0 - size) - locY = pHeight; - else if(locY > pHeight+size) - locY = 0-size ; - } - - public Rectangle getBounds() { - Rectangle r = new Rectangle((int)locX, (int)locY, size, size); - return r; - } - - public int getSize(){ - return size; - } - - - public abstract void drawSprite(Graphics g, JPanel p); + if(locY < 0 - size) + locY = pHeight; + else if(locY > pHeight+size) + locY = 0-size ; + } + /** + * abstract method for drawing sprite. + * @param g + * @param p + */ + public abstract void drawSprite(Graphics g, JPanel p); }