Added Some Documentation...

This commit is contained in:
Sagi Dayan 2015-12-24 22:47:47 +02:00
parent f3c3997fe3
commit b2777bbf68
20 changed files with 688 additions and 551 deletions

6
.idea/vcs.xml Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View file

@ -6,7 +6,17 @@
</artifacts-to-build> </artifacts-to-build>
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="aa440324-95db-4232-b779-41095ebcca0f" name="Default" comment="" /> <list default="true" id="aa440324-95db-4232-b779-41095ebcca0f" name="Default" comment="">
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/out/artifacts/Astroids2D_jar/Astroids2D.jar" afterPath="$PROJECT_DIR$/out/artifacts/Astroids2D_jar/Astroids2D.jar" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/Engine/GameEngine.java" afterPath="$PROJECT_DIR$/src/Engine/GameEngine.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/GamePanels/GamePanel.java" afterPath="$PROJECT_DIR$/src/GamePanels/GamePanel.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/Sprites/Astroid.java" afterPath="$PROJECT_DIR$/src/Sprites/Astroid.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/Sprites/Fog.java" afterPath="$PROJECT_DIR$/src/Sprites/Fog.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/Sprites/LaserBlast.java" afterPath="$PROJECT_DIR$/src/Sprites/LaserBlast.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/Sprites/Ship.java" afterPath="$PROJECT_DIR$/src/Sprites/Ship.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/Sprites/Sprite.java" afterPath="$PROJECT_DIR$/src/Sprites/Sprite.java" />
</list>
<ignored path="Astroids2D.iws" /> <ignored path="Astroids2D.iws" />
<ignored path=".idea/workspace.xml" /> <ignored path=".idea/workspace.xml" />
<ignored path="$PROJECT_DIR$/out/" /> <ignored path="$PROJECT_DIR$/out/" />
@ -27,21 +37,15 @@
</component> </component>
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="GameEngine.java" pinned="false" current-in-tab="true"> <file leaf-file-name="GameEngine.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/Engine/GameEngine.java"> <entry file="file://$PROJECT_DIR$/src/Engine/GameEngine.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="2.1241474"> <state vertical-scroll-proportion="0.0">
<caret line="276" column="12" selection-start-line="276" selection-start-column="12" selection-end-line="278" selection-end-column="13" /> <caret line="130" column="29" selection-start-line="130" selection-start-column="29" selection-end-line="130" selection-end-column="29" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
<element signature="method#initFogs#0;class#GameEngine#0" expanded="false" /> <element signature="e#3584#3585#0" expanded="true" />
<element signature="method#startNewGame#0;class#GameEngine#0" expanded="false" /> <element signature="e#3611#3612#0" expanded="true" />
<element signature="method#initGame#0;class#GameEngine#0" expanded="false" />
<element signature="method#setupLives#0;class#GameEngine#0" expanded="false" />
<element signature="method#update#0;class#GameEngine#0" expanded="false" />
<element signature="method#collisionHandler#0;class#GameEngine#0" expanded="false" />
<element signature="e#9718#9719#0" expanded="true" />
<element signature="e#9756#9757#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
@ -61,7 +65,7 @@
<entry file="file://$PROJECT_DIR$/src/Sprites/Astroid.java"> <entry file="file://$PROJECT_DIR$/src/Sprites/Astroid.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="14" column="54" selection-start-line="14" selection-start-column="51" selection-end-line="14" selection-end-column="54" /> <caret line="21" column="7" selection-start-line="14" selection-start-column="51" selection-end-line="14" selection-end-column="54" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
</folding> </folding>
@ -73,7 +77,7 @@
<entry file="file://$PROJECT_DIR$/src/Sprites/Fog.java"> <entry file="file://$PROJECT_DIR$/src/Sprites/Fog.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="13" column="31" selection-start-line="13" selection-start-column="31" selection-end-line="13" selection-end-column="31" /> <caret line="20" column="26" selection-start-line="20" selection-start-column="26" selection-end-line="20" selection-end-column="26" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
</folding> </folding>
@ -85,7 +89,7 @@
<entry file="file://$PROJECT_DIR$/src/Sprites/Sprite.java"> <entry file="file://$PROJECT_DIR$/src/Sprites/Sprite.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="91" column="17" selection-start-line="91" selection-start-column="17" selection-end-line="91" selection-end-column="17" /> <caret line="146" column="7" selection-start-line="146" selection-start-column="7" selection-end-line="146" selection-end-column="7" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
</folding> </folding>
@ -97,12 +101,8 @@
<entry file="file://$PROJECT_DIR$/src/Sprites/Ship.java"> <entry file="file://$PROJECT_DIR$/src/Sprites/Ship.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="61" column="0" selection-start-line="61" selection-start-column="0" selection-end-line="61" selection-end-column="0" /> <caret line="51" column="0" selection-start-line="51" selection-start-column="0" selection-end-line="51" selection-end-column="0" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="e#2181#2182#0" expanded="true" />
<element signature="e#2220#2221#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -119,14 +119,12 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="GamePanel.java" pinned="false" current-in-tab="false"> <file leaf-file-name="GamePanel.java" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/GamePanels/GamePanel.java"> <entry file="file://$PROJECT_DIR$/src/GamePanels/GamePanel.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="1.7435198">
<caret line="74" column="43" selection-start-line="74" selection-start-column="43" selection-end-line="74" selection-end-column="43" /> <caret line="76" column="43" selection-start-line="76" selection-start-column="43" selection-end-line="76" selection-end-column="43" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -135,7 +133,7 @@
<entry file="file://$PROJECT_DIR$/src/Sprites/LaserBlast.java"> <entry file="file://$PROJECT_DIR$/src/Sprites/LaserBlast.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="12" column="50" selection-start-line="12" selection-start-column="50" selection-end-line="12" selection-end-column="50" /> <caret line="19" column="13" selection-start-line="19" selection-start-column="13" selection-end-line="19" selection-end-column="13" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
</folding> </folding>
@ -152,6 +150,9 @@
</list> </list>
</option> </option>
</component> </component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="GradleLocalSettings"> <component name="GradleLocalSettings">
<option name="externalProjectsViewState"> <option name="externalProjectsViewState">
<projects_view /> <projects_view />
@ -173,9 +174,9 @@
</option> </option>
</component> </component>
<component name="ProjectFrameBounds"> <component name="ProjectFrameBounds">
<option name="x" value="51" /> <option name="x" value="67" />
<option name="y" value="27" /> <option name="y" value="27" />
<option name="width" value="1869" /> <option name="width" value="1853" />
<option name="height" value="1053" /> <option name="height" value="1053" />
</component> </component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false"> <component name="ProjectLevelVcsManager" settingsEditedManually="false">
@ -203,7 +204,7 @@
<foldersAlwaysOnTop value="true" /> <foldersAlwaysOnTop value="true" />
</navigator> </navigator>
<panes> <panes>
<pane id="PackagesPane" /> <pane id="Scope" />
<pane id="ProjectPane"> <pane id="ProjectPane">
<subPane> <subPane>
<PATH> <PATH>
@ -310,8 +311,8 @@
</PATH> </PATH>
</subPane> </subPane>
</pane> </pane>
<pane id="PackagesPane" />
<pane id="Scratches" /> <pane id="Scratches" />
<pane id="Scope" />
</panes> </panes>
</component> </component>
<component name="PropertiesComponent"> <component name="PropertiesComponent">
@ -604,7 +605,7 @@
<servers /> <servers />
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="51" y="27" width="1869" height="1053" extended-state="6" /> <frame x="67" y="27" width="1853" height="1053" extended-state="6" />
<editor active="true" /> <editor active="true" />
<layout> <layout>
<window_info id="Palette&#9;" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Palette&#9;" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
@ -621,14 +622,14 @@
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.12904997" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" /> <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.12853186" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.13754228" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.13754228" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32890365" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32890365" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="combo" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="combo" />
</layout> </layout>
</component> </component>
<component name="Vcs.Log.UiProperties"> <component name="Vcs.Log.UiProperties">
@ -647,7 +648,7 @@
<breakpoints> <breakpoints>
<line-breakpoint enabled="true" type="java-line"> <line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/Engine/GameEngine.java</url> <url>file://$PROJECT_DIR$/src/Engine/GameEngine.java</url>
<line>270</line> <line>371</line>
<properties /> <properties />
<option name="timeStamp" value="2" /> <option name="timeStamp" value="2" />
</line-breakpoint> </line-breakpoint>
@ -661,20 +662,42 @@
<option name="FILTER_TARGETS" value="false" /> <option name="FILTER_TARGETS" value="false" />
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/Engine/CollisionUtil.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="47" column="5" selection-start-line="47" selection-start-column="5" selection-end-line="48" selection-end-column="5" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/GamePanels/GamePanel.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="74" column="43" selection-start-line="74" selection-start-column="43" selection-end-line="74" selection-end-column="43" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Sprites/LaserBlast.java">
<provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0">
<caret line="12" column="50" selection-start-line="12" selection-start-column="50" selection-end-line="12" selection-end-column="50" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/Engine/GameEngine.java"> <entry file="file://$PROJECT_DIR$/src/Engine/GameEngine.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
<element signature="method#initFogs#0;class#GameEngine#0" expanded="false" /> <element signature="e#3584#3585#0" expanded="true" />
<element signature="method#startNewGame#0;class#GameEngine#0" expanded="false" /> <element signature="e#3611#3612#0" expanded="true" />
<element signature="method#initGame#0;class#GameEngine#0" expanded="false" />
<element signature="method#setupLives#0;class#GameEngine#0" expanded="false" />
<element signature="method#update#0;class#GameEngine#0" expanded="false" />
<element signature="method#collisionHandler#0;class#GameEngine#0" expanded="false" />
<element signature="e#9718#9719#0" expanded="true" />
<element signature="e#9756#9757#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
@ -721,11 +744,7 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="61" column="0" selection-start-line="61" selection-start-column="0" selection-end-line="61" selection-end-column="0" /> <caret line="61" column="0" selection-start-line="61" selection-start-column="0" selection-end-line="61" selection-end-column="0" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="e#2181#2182#0" expanded="true" />
<element signature="e#2220#2221#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -743,9 +762,7 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="79" column="0" selection-start-line="79" selection-start-column="0" selection-end-line="79" selection-end-column="0" /> <caret line="79" column="0" selection-start-line="79" selection-start-column="0" selection-end-line="79" selection-end-column="0" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -765,14 +782,8 @@
<caret line="135" column="49" selection-start-line="135" selection-start-column="49" selection-end-line="135" selection-end-column="49" /> <caret line="135" column="49" selection-start-line="135" selection-start-column="49" selection-end-line="135" selection-end-column="49" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
<element signature="method#initFogs#0;class#GameEngine#0" expanded="false" /> <element signature="e#3584#3585#0" expanded="true" />
<element signature="method#startNewGame#0;class#GameEngine#0" expanded="false" /> <element signature="e#3611#3612#0" expanded="true" />
<element signature="method#initGame#0;class#GameEngine#0" expanded="false" />
<element signature="method#setupLives#0;class#GameEngine#0" expanded="false" />
<element signature="method#update#0;class#GameEngine#0" expanded="false" />
<element signature="method#collisionHandler#0;class#GameEngine#0" expanded="false" />
<element signature="e#9718#9719#0" expanded="true" />
<element signature="e#9756#9757#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
@ -819,11 +830,7 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="61" column="0" selection-start-line="61" selection-start-column="0" selection-end-line="61" selection-end-column="0" /> <caret line="61" column="0" selection-start-line="61" selection-start-column="0" selection-end-line="61" selection-end-column="0" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="e#2181#2182#0" expanded="true" />
<element signature="e#2220#2221#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -841,9 +848,7 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="79" column="0" selection-start-line="79" selection-start-column="0" selection-end-line="79" selection-end-column="0" /> <caret line="79" column="0" selection-start-line="79" selection-start-column="0" selection-end-line="79" selection-end-column="0" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -863,14 +868,8 @@
<caret line="135" column="49" selection-start-line="135" selection-start-column="49" selection-end-line="135" selection-end-column="49" /> <caret line="135" column="49" selection-start-line="135" selection-start-column="49" selection-end-line="135" selection-end-column="49" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
<element signature="method#initFogs#0;class#GameEngine#0" expanded="false" /> <element signature="e#3584#3585#0" expanded="true" />
<element signature="method#startNewGame#0;class#GameEngine#0" expanded="false" /> <element signature="e#3611#3612#0" expanded="true" />
<element signature="method#initGame#0;class#GameEngine#0" expanded="false" />
<element signature="method#setupLives#0;class#GameEngine#0" expanded="false" />
<element signature="method#update#0;class#GameEngine#0" expanded="false" />
<element signature="method#collisionHandler#0;class#GameEngine#0" expanded="false" />
<element signature="e#9718#9719#0" expanded="true" />
<element signature="e#9756#9757#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
@ -917,11 +916,7 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="61" column="0" selection-start-line="61" selection-start-column="0" selection-end-line="61" selection-end-column="0" /> <caret line="61" column="0" selection-start-line="61" selection-start-column="0" selection-end-line="61" selection-end-column="0" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="e#2181#2182#0" expanded="true" />
<element signature="e#2220#2221#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -939,9 +934,7 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="79" column="0" selection-start-line="79" selection-start-column="0" selection-end-line="79" selection-end-column="0" /> <caret line="79" column="0" selection-start-line="79" selection-start-column="0" selection-end-line="79" selection-end-column="0" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -961,14 +954,8 @@
<caret line="40" column="51" selection-start-line="40" selection-start-column="51" selection-end-line="40" selection-end-column="51" /> <caret line="40" column="51" selection-start-line="40" selection-start-column="51" selection-end-line="40" selection-end-column="51" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
<element signature="method#initFogs#0;class#GameEngine#0" expanded="false" /> <element signature="e#3584#3585#0" expanded="true" />
<element signature="method#startNewGame#0;class#GameEngine#0" expanded="false" /> <element signature="e#3611#3612#0" expanded="true" />
<element signature="method#initGame#0;class#GameEngine#0" expanded="false" />
<element signature="method#setupLives#0;class#GameEngine#0" expanded="false" />
<element signature="method#update#0;class#GameEngine#0" expanded="false" />
<element signature="method#collisionHandler#0;class#GameEngine#0" expanded="false" />
<element signature="e#9718#9719#0" expanded="true" />
<element signature="e#9756#9757#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
@ -1015,11 +1002,7 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="28" column="13" selection-start-line="28" selection-start-column="13" selection-end-line="28" selection-end-column="13" /> <caret line="28" column="13" selection-start-line="28" selection-start-column="13" selection-end-line="28" selection-end-column="13" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="e#2181#2182#0" expanded="true" />
<element signature="e#2220#2221#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -1027,9 +1010,7 @@
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding> <folding />
<element signature="imports" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -1060,7 +1041,7 @@
<entry file="file://$PROJECT_DIR$/src/Sprites/Fog.java"> <entry file="file://$PROJECT_DIR$/src/Sprites/Fog.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="13" column="31" selection-start-line="13" selection-start-column="31" selection-end-line="13" selection-end-column="31" /> <caret line="20" column="26" selection-start-line="20" selection-start-column="26" selection-end-line="20" selection-end-column="26" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
</folding> </folding>
@ -1075,7 +1056,7 @@
<entry file="file://$PROJECT_DIR$/src/Sprites/Sprite.java"> <entry file="file://$PROJECT_DIR$/src/Sprites/Sprite.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="91" column="17" selection-start-line="91" selection-start-column="17" selection-end-line="91" selection-end-column="17" /> <caret line="146" column="7" selection-start-line="146" selection-start-column="7" selection-end-line="146" selection-end-column="7" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
</folding> </folding>
@ -1085,12 +1066,8 @@
<entry file="file://$PROJECT_DIR$/src/Sprites/Ship.java"> <entry file="file://$PROJECT_DIR$/src/Sprites/Ship.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="61" column="0" selection-start-line="61" selection-start-column="0" selection-end-line="61" selection-end-column="0" /> <caret line="51" column="0" selection-start-line="51" selection-start-column="0" selection-end-line="51" selection-end-column="0" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="e#2181#2182#0" expanded="true" />
<element signature="e#2220#2221#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
@ -1114,7 +1091,7 @@
<entry file="file://$PROJECT_DIR$/src/Sprites/LaserBlast.java"> <entry file="file://$PROJECT_DIR$/src/Sprites/LaserBlast.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="12" column="50" selection-start-line="12" selection-start-column="50" selection-end-line="12" selection-end-column="50" /> <caret line="19" column="13" selection-start-line="19" selection-start-column="13" selection-end-line="19" selection-end-column="13" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
</folding> </folding>
@ -1124,7 +1101,7 @@
<entry file="file://$PROJECT_DIR$/src/Sprites/Astroid.java"> <entry file="file://$PROJECT_DIR$/src/Sprites/Astroid.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="14" column="54" selection-start-line="14" selection-start-column="51" selection-end-line="14" selection-end-column="54" /> <caret line="21" column="7" selection-start-line="14" selection-start-column="51" selection-end-line="14" selection-end-column="54" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
</folding> </folding>
@ -1139,31 +1116,23 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/GamePanels/GamePanel.java"> <entry file="file://$PROJECT_DIR$/src/Engine/GameEngine.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.0"> <state vertical-scroll-proportion="0.0">
<caret line="74" column="43" selection-start-line="74" selection-start-column="43" selection-end-line="74" selection-end-column="43" /> <caret line="130" column="29" selection-start-line="130" selection-start-column="29" selection-end-line="130" selection-end-column="29" />
<folding> <folding>
<element signature="imports" expanded="true" /> <element signature="imports" expanded="true" />
<element signature="e#3584#3585#0" expanded="true" />
<element signature="e#3611#3612#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/Engine/GameEngine.java"> <entry file="file://$PROJECT_DIR$/src/GamePanels/GamePanel.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="2.1241474"> <state vertical-scroll-proportion="1.7435198">
<caret line="276" column="12" selection-start-line="276" selection-start-column="12" selection-end-line="278" selection-end-column="13" /> <caret line="76" column="43" selection-start-line="76" selection-start-column="43" selection-end-line="76" selection-end-column="43" />
<folding> <folding />
<element signature="imports" expanded="true" />
<element signature="method#initFogs#0;class#GameEngine#0" expanded="false" />
<element signature="method#startNewGame#0;class#GameEngine#0" expanded="false" />
<element signature="method#initGame#0;class#GameEngine#0" expanded="false" />
<element signature="method#setupLives#0;class#GameEngine#0" expanded="false" />
<element signature="method#update#0;class#GameEngine#0" expanded="false" />
<element signature="method#collisionHandler#0;class#GameEngine#0" expanded="false" />
<element signature="e#9718#9719#0" expanded="true" />
<element signature="e#9756#9757#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>

View file

@ -22,298 +22,377 @@ import java.util.Vector;
public class GameEngine implements KeyListener { 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 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; private final int STOP=0, UP=1, DOWN=-1; //Movement directions
public boolean gameOn,fireLock, gameOver, isFirstGame; public boolean gameOn,fireLock, gameOver, isFirstGame;
private Ship player; private Ship player;
private Vector<Sprite> astroidsSprites,laserSprites; private Vector<Sprite> astroidsSprites,laserSprites; //will save all laser shots and asteroids which are currently on the screen.
private int pWidth, pHeight; private int pWidth, pHeight; //panel dimensions
private Timer astroidTimer, fireTimer, startTime; private Timer astroidTimer, fireTimer, startTime;
private Random r; private Random r;
private int score, countDown; private int score, countDown;
private Vector<Sprite> lives, fogs; private Vector<Sprite> lives, fogs;
private AudioClip laserAudioClip; private AudioClip laserAudioClip;
private BufferedImage sceneImage; private BufferedImage sceneImage;
private AudioClip themeAudioClip; private AudioClip themeAudioClip;
private final URL laserURL= getClass().getResource("/Sounds/laser.wav"); private final URL laserURL= getClass().getResource("/Sounds/laser.wav");
private final URL themeURL= getClass().getResource("/Sounds/theme.wav"); private final URL themeURL= getClass().getResource("/Sounds/theme.wav");
public GameEngine(int width, int height){ 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();
}
private void initFogs(){ //initialize variables and load audio\image files.
for(int i = 0 ; i < 4 ; i++){ this.isFirstGame = true;
fogs.add(new Fog((-1)*r.nextInt(),(-1)*r.nextInt(),pWidth,pHeight,1,"Fog.png",r.nextInt(360),pWidth)); 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(){ initFogs(); //create fog sprites moving on screen.
score = 0; startNewGame();
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 initGame(){ /**
this.countDown = 3; * creates FOG_COUNT amount of fog sprites to roam the screen. (currently set to 4)
astroidsSprites = new Vector<>(); */
laserSprites = new Vector<>(); private void initFogs(){
this.player = new Ship(pWidth/2, pHeight/2,pWidth,pHeight, MEDIUM); for(int i = 0 ; i < FOG_COUNT ; i++){
gameOn = true; fogs.add(new Fog((-1)*r.nextInt(),(-1)*r.nextInt(),pWidth,pHeight,1,"Fog.png",r.nextInt(360),pWidth));
fireTimer.start(); }
astroidTimer.start(); }
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; * clears asteroid and laser arrays, creates new asteroids, starts timers and repositions ship in center of screen.
for(int i = 0 ; i < num ; i++){ */
lives.add(new Ship(pWidth - ((i+1)*size), 15, pWidth, pHeight, size)); 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(){ for (int i =0 ; i<4 ; i++)
return score; 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) { * Create a new asteroid on a random position.
if(gameOn) { */
switch (keyEvent.getKeyCode()) { private void createAstroid(){
case KeyEvent.VK_UP: astroidsSprites.add(new Astroid((-1)*r.nextInt(),(-1)*r.nextInt(),pWidth,pHeight,ASTROID_SPEED,"astroid.png",r.nextInt(360),LARGE));
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;
}
break; @Override
case KeyEvent.VK_F2: public void keyTyped(KeyEvent keyEvent) {}
this.isFirstGame = false;
gameOver = false;
startNewGame();
startTime.start();
break;
default: @Override
break; 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 break;
public void keyReleased(KeyEvent keyEvent) { case KeyEvent.VK_F2: //new game
if(gameOn){ this.isFirstGame = false;
switch (keyEvent.getKeyCode()){ gameOver = false;
case KeyEvent.VK_UP: startNewGame();
case KeyEvent.VK_DOWN: startTime.start();
player.setDirection(STOP); break;
break;
case KeyEvent.VK_RIGHT:
case KeyEvent.VK_LEFT:
player.turnShip(STOP);
break;
case KeyEvent.VK_SPACE:
laserAudioClip.stop();
break;
default:
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(){ player.update();
for (Sprite sprite : fogs) { for (Sprite sprite : astroidsSprites) {
sprite.update(); sprite.update();
} }
if(!gameOver) { for (Sprite sprite : laserSprites) {
if (countDown > 0) sprite.update();
return; }
}
else
return;
player.update(); // check for collisions
for (Sprite sprite : astroidsSprites) { collisionHandler();
sprite.update();
}
for (Sprite sprite : laserSprites) {
sprite.update();
}
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<Sprite> newAstroids = new Vector<>();
Vector<Sprite> removeLasers = new Vector<>();
Vector<Sprite> 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<laserSprites.size(); i++){
for (int j = 0; j<astroidsSprites.size(); j++){
private void collisionHandler(){ if(CollisionUtil.collidesWith(laserSprites.get(i), astroidsSprites.get(j))) {
score+=100;
if (astroidsSprites.get(j).getSize() == LARGE) {
for (int k = 0; k < 2; k++) {
newAstroids.add(new Astroid((int) astroidsSprites.get(j).getLocX(), (int) astroidsSprites.get(j).getLocY(), pWidth, pHeight, astroidsSprites.get(j).getAcceleration(), "astroid.png", r.nextInt(360), MEDIUM));
}
} else if (astroidsSprites.get(j).getSize() == MEDIUM) {
for (int h = 0; h < 2; h++) {
newAstroids.add(new Astroid((int) astroidsSprites.get(j).getLocX(), (int) astroidsSprites.get(j).getLocY(), pWidth, pHeight, astroidsSprites.get(j).getAcceleration(), "astroid.png", r.nextInt(360), SMALL));
}
score+=100;
}else{
score+=200;
}
Vector<Sprite> newAstroids = new Vector<>(); removeLasers.add(laserSprites.get(i));
Vector<Sprite> removeLasers = new Vector<>(); removeAstroids.add(astroidsSprites.get(j));
Vector<Sprite> removeAstroids = new Vector<>(); }
}
}
/*
* 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<laserSprites.size(); i++){ //add new asteroids and remove collisions.
for (int j = 0; j<astroidsSprites.size(); j++){ astroidsSprites.addAll(newAstroids);
laserSprites.removeAll(removeLasers);
astroidsSprites.removeAll(removeAstroids);
}
/**
* render buffered image.
* @param panel
* JPanel
*/
public void render(JPanel panel){
sceneImage = new BufferedImage(this.pWidth, this.pHeight, Image.SCALE_FAST);
renderScene(sceneImage.getGraphics(), panel);
}
if(CollisionUtil.collidesWith(laserSprites.get(i), astroidsSprites.get(j))) {
score+=100; /**
if (astroidsSprites.get(j).getSize() == LARGE) { * Draws all sprites
for (int k = 0; k < 2; k++) { * @param g
newAstroids.add(new Astroid((int) astroidsSprites.get(j).getLocX(), (int) astroidsSprites.get(j).getLocY(), pWidth, pHeight, astroidsSprites.get(j).getAcceleration(), "astroid.png", r.nextInt(360), MEDIUM)); * Graphics
} * @param panel
} else if (astroidsSprites.get(j).getSize() == MEDIUM) { * Jpanel
for (int h = 0; h < 2; h++) { */
newAstroids.add(new Astroid((int) astroidsSprites.get(j).getLocX(), (int) astroidsSprites.get(j).getLocY(), pWidth, pHeight, astroidsSprites.get(j).getAcceleration(), "astroid.png", r.nextInt(360), SMALL)); public void renderScene(Graphics g, JPanel panel){
} if(!gameOver)
score+=100; player.drawSprite(g, panel);
}else{ try {
score+=200; 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)
{
removeLasers.add(laserSprites.get(i)); }
removeAstroids.add(astroidsSprites.get(j)); }
}
}
}
for(int i = 0 ; i < astroidsSprites.size() ; i++){ /**
if(CollisionUtil.collidesWith(astroidsSprites.get(i), player)){ * creates an new asteroid each 5 seconds *
if(lives.size() == 1){ */
gameOver = true; private class astroidTimerListener implements ActionListener{
fogs.add(new Fog(pWidth,0,pWidth,pHeight,1,"Fog.png",180,pWidth)); @Override
} public void actionPerformed(ActionEvent actionEvent) {
if(lives.size() > 0) createAstroid();
lives.remove(lives.size()-1); }
initGame(); }
System.out.println("==============GAME OVER==============");
} /**
} * 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); /**
* returns sceneImage
laserSprites.removeAll(removeLasers); * @return
astroidsSprites.removeAll(removeAstroids); * BufferedImage
} */
public BufferedImage getScene(){
public void render(JPanel panel){ return this.sceneImage;
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;
}
} }

View file

@ -3,25 +3,20 @@ import Engine.*;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.image.BufferedImage; //import java.awt.image.BufferedImage;
import java.net.URL; import java.net.URL;
/** /**
* Created by sagi on 12/18/15. * Created by sagi on 12/18/15.
*/ */
public class GamePanel extends JPanel implements Runnable{ 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 bgURL= getClass().getResource("/Images/bg2.gif");
private final URL gameOverURL= getClass().getResource("/Images/gameOver.png"); private final URL gameOverURL= getClass().getResource("/Images/gameOver.png");
private final URL startURL= getClass().getResource("/Images/start.png"); private final URL startURL= getClass().getResource("/Images/start.png");
private int width, height; // private int width, height;
private GameEngine engine; private GameEngine engine;
private JLabel lbl_score, lbl_countDown, lbl_gameOver, lbl_bg, lbl_start; 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){ public GamePanel(int width, int height){
this.setLayout(null); this.setLayout(null);
this.width = width; // this.width = width;
this.height = height; // this.height = height;
this.engine = new GameEngine(width, height); this.engine = new GameEngine(width, height);
this.addKeyListener(engine); this.addKeyListener(engine);
this.setFocusable(true); this.setFocusable(true);
this.requestFocus(); this.requestFocus();
//set score label at top left corner
this.lbl_score = new JLabel(""); this.lbl_score = new JLabel("");
lbl_score.setBounds(15,15,width,30); lbl_score.setBounds(15,15,width,30);
//set countDown label at center
this.lbl_countDown = new JLabel(""); this.lbl_countDown = new JLabel("");
lbl_countDown.setBounds(width/2,0,width,height); lbl_countDown.setBounds(width/2,0,width,height);
System.out.println("URL = " +bgURL); System.out.println("URL = " +bgURL);
//set background
img_bg = new ImageIcon(bgURL); img_bg = new ImageIcon(bgURL);
Image tmp_BG = img_bg.getImage(); Image tmp_BG = img_bg.getImage();
bg_image = tmp_BG.getScaledInstance(width, height, java.awt.Image.SCALE_SMOOTH); 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() { public void run() {
while(engine.gameOn){ while(engine.gameOn){
engine.update(); engine.update();
//check if game is over and draw labels accordingly
if(engine.isGameOver()){ if(engine.isGameOver()){
this.lbl_countDown.setVisible(false); this.lbl_countDown.setVisible(false);
if(!engine.isFirstGame) if(!engine.isFirstGame)
@ -94,17 +97,21 @@ public class GamePanel extends JPanel implements Runnable{
lbl_start.setVisible(false); lbl_start.setVisible(false);
} }
//render graphics
engine.render(this); engine.render(this);
repaint();
//sleep to slow down game
try { try {
Thread.sleep(10); Thread.sleep(5);
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
repaint(); repaint();
//sleep for other processes to take control
try { try {
Thread.sleep(10); Thread.sleep(20);
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -124,6 +131,7 @@ public class GamePanel extends JPanel implements Runnable{
g.drawImage(bg_image, 0, 0, this); //draw the background g.drawImage(bg_image, 0, 0, this); //draw the background
g2d.drawImage(engine.getScene(),0,0,this); //Draw the scene g2d.drawImage(engine.getScene(),0,0,this); //Draw the scene
//Some labels - Score & countDown //Some labels - Score & countDown
lbl_score.setText("SCORE : " + engine.getScore()); lbl_score.setText("SCORE : " + engine.getScore());
if(engine.getCountDown() > 0){ if(engine.getCountDown() > 0){

View file

@ -19,6 +19,9 @@ public class Astroid extends Sprite {
rotationSpeed = ((r.nextDouble()*10) % 3) + 0.01; rotationSpeed = ((r.nextDouble()*10) % 3) + 0.01;
} }
/**
* updates sprite location according to movement speed and angle.
*/
@Override @Override
public void update() { public void update() {
locX += acceleration * Math.cos(Math.toRadians(angle)); locX += acceleration * Math.cos(Math.toRadians(angle));
@ -26,7 +29,10 @@ public class Astroid extends Sprite {
outOfScreeFix(); outOfScreeFix();
selfAngle+=rotationSpeed; selfAngle+=rotationSpeed;
} }
/**
* draw sprite with rotation according to sprite angle
*/
@Override @Override
public void drawSprite(Graphics g, JPanel p) { public void drawSprite(Graphics g, JPanel p) {
Graphics2D g2d = (Graphics2D)g; Graphics2D g2d = (Graphics2D)g;

View file

@ -21,7 +21,10 @@ public class Fog extends Sprite {
rotationSpeed = 0; rotationSpeed = 0;
alphaChannel = r.nextFloat()-0.04f; alphaChannel = r.nextFloat()-0.04f;
} }
/**
* updates sprite location according to movement speed and angle.
*/
@Override @Override
public void update() { public void update() {
locX += acceleration * Math.cos(Math.toRadians(angle)); locX += acceleration * Math.cos(Math.toRadians(angle));
@ -30,6 +33,9 @@ public class Fog extends Sprite {
selfAngle+=rotationSpeed; selfAngle+=rotationSpeed;
} }
/**
* draw sprite with rotation according to sprite angle
*/
@Override @Override
public void drawSprite(Graphics g, JPanel p) { public void drawSprite(Graphics g, JPanel p) {
Graphics2D g2d = (Graphics2D)g; Graphics2D g2d = (Graphics2D)g;

View file

@ -14,6 +14,9 @@ public class LaserBlast extends Sprite {
} }
/**
* updates sprite location according to movement speed and angle.
*/
@Override @Override
public void update() { public void update() {
locX += acceleration * Math.cos(Math.toRadians(angle)); locX += acceleration * Math.cos(Math.toRadians(angle));
@ -21,6 +24,9 @@ public class LaserBlast extends Sprite {
outOfScreeFix(); outOfScreeFix();
} }
/**
* draw sprite with rotation according to sprite angle
*/
@Override @Override
public void drawSprite(Graphics g, JPanel p) { public void drawSprite(Graphics g, JPanel p) {
Graphics2D g2d = (Graphics2D)g; Graphics2D g2d = (Graphics2D)g;

View file

@ -1,80 +1,100 @@
package Sprites; package Sprites;
import javax.imageio.ImageIO; //import javax.imageio.ImageIO;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.geom.AffineTransform; //import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp; //import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.IOException; //import java.io.IOException;
/** /**
* Created by sagi on 12/18/15. * Created by sagi on 12/18/15.
*/ */
public class Ship extends Sprite { public class Ship extends Sprite {
private final int STOP=0, UP=1, DOWN=-1, TURN_SPEED=10; private final int STOP=0, UP=1, DOWN=-1, TURN_SPEED=10;
private final double MAX_SPEED = 6, SLOWING_FACTOR = 0.1; private final double MAX_SPEED = 6, SLOWING_FACTOR = 0.1;
private int direction, turnDirection; private int direction, turnDirection;
private BufferedImage bi; private BufferedImage bi;
private double selfAccel; private double selfAccel;
public Ship(int x, int y, int w, int h, int size) { public Ship(int x, int y, int w, int h, int size) {
super(x, y, w, h, 0, "ship2.png", 0, size); super(x, y, w, h, 0, "ship2.png", 0, size);
direction = STOP; direction = STOP;
turnDirection = STOP; turnDirection = STOP;
selfAccel = acceleration; selfAccel = acceleration;
} }
@Override /**
public void update() { * updates sprite location according to movement speed and angle.
setSpeed(); */
this.angle+=TURN_SPEED*turnDirection; @Override
locX += selfAccel * Math.cos(Math.toRadians(angle)); public void update() {
locY -= selfAccel * (-1 * Math.sin(Math.toRadians(angle))); setSpeed();
outOfScreeFix(); 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; * set movement direction
g2d.rotate(Math.toRadians(angle), locX + (bImage.getWidth()/2), locY + (bImage.getHeight()/2)); * @param direction
g2d.drawImage(bImage, (int)locX, (int)locY, panel); * int
g2d.rotate(-1*Math.toRadians(angle), locX + (bImage.getWidth()/2), locY + (bImage.getHeight()/2)); */
public void setDirection(int direction){
this.direction = direction;
}
} /**
public void turnShip(int direction){ * set turning direction
turnDirection=direction; * @param direction
} * int
*/
public void turnShip(int direction){
turnDirection=direction;
}
} }

View file

@ -4,114 +4,151 @@ import javax.imageio.ImageIO;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File; //import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.URL; //import java.net.URL;
public abstract class Sprite { public abstract class Sprite {
protected BufferedImage bImage; protected BufferedImage bImage;
protected int imageWidth, imageHeight; // image dimensions protected int imageWidth, imageHeight; // image dimensions
protected double locX, locY; protected double locX, locY;
protected int acceleration; protected int acceleration;
protected int pWidth, pHeight, size; // panel's dimensions protected int pWidth, pHeight, size; // panel's dimensions
protected double angle; protected double angle;
private final String BASE_PATH = System.getProperty("user.dir") + File.separator +"src"+ File.separator; // 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) public Sprite(int x, int y, int w, int h, int acc, String imgName, double angle, int size)
{ {
this.size = size; this.size = size;
locX = x; locX = x;
locY = y; locY = y;
acceleration = acc; acceleration = acc;
pWidth = w; pWidth = w;
pHeight = h; pHeight = h;
try {///home/sagi/Development/JCE/Astroids2D/src/Images/ship.gif this.angle = angle;
bImage = ImageIO.read(getClass().getResource("/Images/"+imgName));
}catch (IOException pin){
pin.printStackTrace();
bImage = null;
}
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() /*
{ * resizes image to a set size
Image tmp = bImage.getScaledInstance(size,size, Image.SCALE_SMOOTH); */
BufferedImage bi = new BufferedImage(size,size, BufferedImage.TYPE_INT_ARGB); 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(); Graphics2D g2d = bi.createGraphics();
g2d.drawImage(tmp,0,0,null); g2d.drawImage(tmp,0,0,null);
g2d.dispose(); g2d.dispose();
bImage = bi; 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() { if(locY < 0 - size)
return locY; locY = pHeight;
} else if(locY > pHeight+size)
locY = 0-size ;
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);
/**
* abstract method for drawing sprite.
* @param g
* @param p
*/
public abstract void drawSprite(Graphics g, JPanel p);
} }