Initial Commit of my Asteroids game clone.
I have started this project, to betterunderstand basic game development. This commit contains Most of the frame work for the game. Currently the ship can be flown around the screen. Signed-off-by: Ricky Barrette <rickbarrette@gmail.com>
This commit is contained in:
6
Asteroids/.classpath
Normal file
6
Asteroids/.classpath
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
17
Asteroids/.project
Normal file
17
Asteroids/.project
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>Asteroids</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
2
Asteroids/.settings/org.eclipse.core.resources.prefs
Normal file
2
Asteroids/.settings/org.eclipse.core.resources.prefs
Normal file
@@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding//src/com/RickBarrette/asteroids/Ship.java=UTF-8
|
||||
11
Asteroids/.settings/org.eclipse.jdt.core.prefs
Normal file
11
Asteroids/.settings/org.eclipse.jdt.core.prefs
Normal file
@@ -0,0 +1,11 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.7
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.source=1.7
|
||||
38
Asteroids/src/com/RickBarrette/asteroids/Asteroid.java
Normal file
38
Asteroids/src/com/RickBarrette/asteroids/Asteroid.java
Normal file
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
* Asteroid.java
|
||||
* @date Apr 1, 2012
|
||||
* @author ricky barrette
|
||||
* @author Twenty Codes, LLC
|
||||
*
|
||||
* Copyright 2012 Richard Barrette
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
*/
|
||||
package com.RickBarrette.asteroids;
|
||||
|
||||
|
||||
/**
|
||||
* This class will be used to make astroids, to destroy the ship!
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public class Asteroid extends MovingSpaceObject {
|
||||
|
||||
/**
|
||||
* Creates a new Asteroid
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public Asteroid() {
|
||||
// TODO Asteroid stuff
|
||||
}
|
||||
|
||||
}
|
||||
155
Asteroids/src/com/RickBarrette/asteroids/AsteroidGame.java
Normal file
155
Asteroids/src/com/RickBarrette/asteroids/AsteroidGame.java
Normal file
@@ -0,0 +1,155 @@
|
||||
/**
|
||||
* AsteroidGame.java
|
||||
* @date Mar 31, 2012
|
||||
* @author ricky barrette
|
||||
* @author Twenty Codes, LLC
|
||||
*
|
||||
* Copyright 2012 Richard Barrette
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
*/
|
||||
package com.RickBarrette.asteroids;
|
||||
|
||||
import java.util.Vector;
|
||||
|
||||
|
||||
/**
|
||||
* This class maintain's the game logic. It is the main driver
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public class AsteroidGame extends Thread {
|
||||
|
||||
private static final int DELAY_IN_MSEC = 50;
|
||||
private Vector<Object> mWorld;
|
||||
private GameFrame mGameFrame;
|
||||
public static boolean isStarted = false;
|
||||
|
||||
/**
|
||||
* Creates an new Asteroids game
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public AsteroidGame() {
|
||||
mGameFrame = new GameFrame(this);
|
||||
//TODO simulate game play unitll game ist started
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an object to the world
|
||||
* @param add
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public void addElement(Object add) {
|
||||
mWorld.addElement(add);
|
||||
}
|
||||
|
||||
/**
|
||||
* popoluates the world for a new game
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public void createGame() {
|
||||
mWorld = new Vector<Object>();
|
||||
mWorld.add(new Ship(500,500,0,.35,.98,.4,1));
|
||||
}
|
||||
|
||||
public Vector<Object> getWorld() {
|
||||
return mWorld;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if the world is empty
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public boolean isEmpty() {
|
||||
return mWorld.isEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the world, and Creates a new game
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public void newGame() {
|
||||
mWorld.clear();
|
||||
createGame();
|
||||
}
|
||||
|
||||
/**
|
||||
* Pauses the game
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public synchronized void pause(){
|
||||
isStarted = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes an object from this world.
|
||||
* @param o object to be removed
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public void removeElement(Object o) {
|
||||
mWorld.removeElement(o);
|
||||
}
|
||||
|
||||
/**
|
||||
* Main game driver method.
|
||||
*
|
||||
* @author ricky barrette
|
||||
*/
|
||||
@Override
|
||||
public void run() {
|
||||
while(isStarted) {
|
||||
// if (!(mWorld.isEmpty())) {
|
||||
//
|
||||
// /*
|
||||
// * handle the ship
|
||||
// */
|
||||
// for (Object item : mWorld) {
|
||||
// if(item instanceof Ship){
|
||||
// Ship ship = (Ship) item;
|
||||
//
|
||||
//
|
||||
// }
|
||||
//
|
||||
//
|
||||
// }
|
||||
// }
|
||||
mGameFrame.repaintDisplay();
|
||||
|
||||
/*
|
||||
* sleep till next time
|
||||
*/
|
||||
try {
|
||||
sleep(DELAY_IN_MSEC);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the number of objects in the world
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public int size() {
|
||||
return mWorld.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the game
|
||||
* @author ricky barrette
|
||||
*/
|
||||
@Override
|
||||
public synchronized void start(){
|
||||
isStarted = true;
|
||||
super.start();
|
||||
}
|
||||
}
|
||||
30
Asteroids/src/com/RickBarrette/asteroids/Collider.java
Normal file
30
Asteroids/src/com/RickBarrette/asteroids/Collider.java
Normal file
@@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Collider.java
|
||||
* @date Mar 31, 2012
|
||||
* @author ricky barrette
|
||||
* @author Twenty Codes, LLC
|
||||
*
|
||||
* Copyright 2012 Richard Barrette
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
*/
|
||||
package com.RickBarrette.asteroids;
|
||||
|
||||
|
||||
/**
|
||||
* This interface will be used for an object that should detect collisions
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public interface Collider {
|
||||
|
||||
}
|
||||
72
Asteroids/src/com/RickBarrette/asteroids/Display.java
Normal file
72
Asteroids/src/com/RickBarrette/asteroids/Display.java
Normal file
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* Display.java
|
||||
* @date Mar 31, 2012
|
||||
* @author ricky barrette
|
||||
* @author Twenty Codes, LLC
|
||||
*
|
||||
* Copyright 2012 Richard Barrette
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
*/
|
||||
package com.RickBarrette.asteroids;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Container;
|
||||
import java.awt.Graphics;
|
||||
|
||||
import javax.swing.JPanel;
|
||||
|
||||
/**
|
||||
* This display panel will be used to display the game's object's and their world
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public class Display extends JPanel {
|
||||
|
||||
private static final long serialVersionUID = -9105117186423881937L;
|
||||
private AsteroidGame mGame;
|
||||
private Container mContainer;
|
||||
|
||||
/**
|
||||
* Creates a new Dispay
|
||||
* @param c
|
||||
* @param g
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public Display(Container c, AsteroidGame g) {
|
||||
mGame = g;
|
||||
mContainer = c;
|
||||
this.setBackground(new Color(0, 0, 0));
|
||||
mContainer.add(this, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
/**
|
||||
* (non-Javadoc)
|
||||
* @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
|
||||
*/
|
||||
@Override
|
||||
public void paintComponent(Graphics g) {
|
||||
super.paintComponent(g);
|
||||
|
||||
/*
|
||||
* Draw the world's objects
|
||||
*/
|
||||
for (Object item : mGame.getWorld()) {
|
||||
if (item instanceof Ship) {
|
||||
Ship s = (Ship) (item);
|
||||
s.move(getHeight(), getWidth());
|
||||
s.draw(g);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
33
Asteroids/src/com/RickBarrette/asteroids/Drawable.java
Normal file
33
Asteroids/src/com/RickBarrette/asteroids/Drawable.java
Normal file
@@ -0,0 +1,33 @@
|
||||
/**
|
||||
* Drawable.java
|
||||
* @date Mar 31, 2012
|
||||
* @author ricky barrette
|
||||
* @author Twenty Codes, LLC
|
||||
*
|
||||
* Copyright 2012 Richard Barrette
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
*/
|
||||
package com.RickBarrette.asteroids;
|
||||
|
||||
import java.awt.Graphics;
|
||||
|
||||
/**
|
||||
* This interface will be used for objects that need to be drawn on the screen
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public interface Drawable {
|
||||
|
||||
public void draw(Graphics g);
|
||||
|
||||
}
|
||||
269
Asteroids/src/com/RickBarrette/asteroids/GameFrame.java
Normal file
269
Asteroids/src/com/RickBarrette/asteroids/GameFrame.java
Normal file
@@ -0,0 +1,269 @@
|
||||
/**
|
||||
* GameFrame.java
|
||||
* @date Mar 31, 2012
|
||||
* @author ricky barrette
|
||||
* @author Twenty Codes, LLC
|
||||
* Copyright 2012 Richard Barrette
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
*/
|
||||
package com.RickBarrette.asteroids;
|
||||
|
||||
import java.awt.Container;
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.KeyListener;
|
||||
import java.util.Random;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuBar;
|
||||
import javax.swing.JMenuItem;
|
||||
|
||||
/**
|
||||
* This class will maintian the game's frame, and handle key events from the user
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public class GameFrame extends JFrame implements KeyListener{
|
||||
|
||||
private static final long serialVersionUID = -2051298505681885632L;
|
||||
|
||||
private JMenuBar bar;
|
||||
private JMenu menu;
|
||||
private JMenuItem newGame;
|
||||
private JMenuItem quit;
|
||||
private Status statusBar;
|
||||
private Display mDisplay;
|
||||
private Container container;
|
||||
private FlowLayout layout;
|
||||
private menuListener xlistener;
|
||||
private AsteroidGame game;
|
||||
|
||||
/**
|
||||
* Creates a new GameFrame
|
||||
*
|
||||
* @param g
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public GameFrame(AsteroidGame g) {
|
||||
super("ASTEROIDS");
|
||||
game = g;
|
||||
|
||||
bar = new JMenuBar();
|
||||
setJMenuBar(bar);
|
||||
|
||||
menu = new JMenu("File");
|
||||
|
||||
newGame = new JMenuItem("New Game");
|
||||
quit = new JMenuItem("Quit");
|
||||
|
||||
menu.add(newGame);
|
||||
menu.addSeparator();
|
||||
menu.add(quit);
|
||||
|
||||
bar.add(menu);
|
||||
|
||||
layout = new FlowLayout();
|
||||
layout.setAlignment(FlowLayout.LEFT);
|
||||
|
||||
|
||||
container = getContentPane();
|
||||
statusBar = new Status(container, game);
|
||||
mDisplay = new Display(container, game);
|
||||
|
||||
|
||||
xlistener = new menuListener();
|
||||
newGame.addActionListener(xlistener);
|
||||
quit.addActionListener(xlistener);
|
||||
|
||||
addKeyListener(this);
|
||||
|
||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||
|
||||
// sets up window's location and sets size****
|
||||
// setLocation(0, 0); // the default location
|
||||
setSize(1000, 800);
|
||||
setVisible(true);
|
||||
|
||||
}
|
||||
|
||||
public void setStatus(String temp) {
|
||||
statusBar.setStatus(temp);
|
||||
}
|
||||
|
||||
public void repaintDisplay() {
|
||||
mDisplay.repaint();
|
||||
}
|
||||
|
||||
private class menuListener implements ActionListener {
|
||||
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (e.getActionCommand().equals("New Game")) {
|
||||
game.newGame();
|
||||
mDisplay.repaint();
|
||||
|
||||
}
|
||||
if (e.getActionCommand().equals("Quit"))
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a key is pressed
|
||||
* (non-Javadoc)
|
||||
* @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
|
||||
*/
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
for (Object item : game.getWorld()) {
|
||||
|
||||
if (item instanceof Ship) {
|
||||
Ship ship = (Ship) item;
|
||||
switch (e.getKeyCode()) {
|
||||
|
||||
/*
|
||||
* [Left arrow] or [A]
|
||||
* Rotate the ship left
|
||||
*/
|
||||
case KeyEvent.VK_A:
|
||||
case KeyEvent.VK_LEFT:
|
||||
ship.setTurningLeft(true);
|
||||
break;
|
||||
|
||||
/*
|
||||
* [Space] Pew Pew Pew!!!
|
||||
*/
|
||||
case KeyEvent.VK_SPACE:
|
||||
break;
|
||||
|
||||
/*
|
||||
* [Right arrow] or [D]
|
||||
* Rotate the ship right
|
||||
*/
|
||||
case KeyEvent.VK_D:
|
||||
case KeyEvent.VK_RIGHT:
|
||||
ship.setTurningRight(true);
|
||||
break;
|
||||
|
||||
/*
|
||||
* [Up arrow] or [W]
|
||||
* Increase the ship's speed
|
||||
*/
|
||||
case KeyEvent.VK_W:
|
||||
case KeyEvent.VK_UP:
|
||||
ship.setAccelerating(true);
|
||||
break;
|
||||
|
||||
/*
|
||||
* [Down arrow] or [S]
|
||||
* Slow the ship
|
||||
*/
|
||||
case KeyEvent.VK_S:
|
||||
case KeyEvent.VK_DOWN:
|
||||
ship.setAccelerating(false);
|
||||
break;
|
||||
|
||||
/*
|
||||
* [H] Hyoer jump
|
||||
*/
|
||||
case KeyEvent.VK_H:
|
||||
Random myRNG = new Random();
|
||||
ship.setLocation(myRNG.nextInt(mDisplay.getHeight()), myRNG.nextInt(mDisplay.getWidth()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
mDisplay.repaint();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a key is released
|
||||
* (non-Javadoc)
|
||||
* @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
|
||||
*/
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e) {
|
||||
for (Object item : game.getWorld()) {
|
||||
if (item instanceof Ship) {
|
||||
Ship ship = (Ship) item;
|
||||
|
||||
switch (e.getKeyCode()) {
|
||||
|
||||
/*
|
||||
* [Left arrow] or [A]
|
||||
* Rotate the ship left
|
||||
*/
|
||||
case KeyEvent.VK_A:
|
||||
case KeyEvent.VK_LEFT:
|
||||
ship.setTurningLeft(false);
|
||||
break;
|
||||
|
||||
/*
|
||||
* [Right arrow] or [d] Rotate the ship right
|
||||
*/
|
||||
case KeyEvent.VK_D:
|
||||
case KeyEvent.VK_RIGHT:
|
||||
ship.setTurningRight(false);
|
||||
break;
|
||||
|
||||
/*
|
||||
* [Up arrow] or [W]
|
||||
* Increase the ship's speed
|
||||
*/
|
||||
case KeyEvent.VK_W:
|
||||
case KeyEvent.VK_UP:
|
||||
ship.setAccelerating(false);
|
||||
break;
|
||||
|
||||
/*
|
||||
* [Down arrow] or [S]
|
||||
* Slow the ship
|
||||
*/
|
||||
case KeyEvent.VK_S:
|
||||
case KeyEvent.VK_DOWN:
|
||||
ship.setAccelerating(false);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyTyped(KeyEvent e) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the height of the game display panel
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public int getDispalyHeight() {
|
||||
return mDisplay.getHeight();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the width of the game dispaly panel
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public int getDisplayWidth() {
|
||||
return mDisplay.getWidth();
|
||||
}
|
||||
}
|
||||
49
Asteroids/src/com/RickBarrette/asteroids/Main.java
Normal file
49
Asteroids/src/com/RickBarrette/asteroids/Main.java
Normal file
@@ -0,0 +1,49 @@
|
||||
/**
|
||||
* Main.java
|
||||
* @date Mar 31, 2012
|
||||
* @author ricky barrette
|
||||
* @author Twenty Codes, LLC
|
||||
*
|
||||
* Copyright 2012 Richard Barrette
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
*/
|
||||
package com.RickBarrette.asteroids;
|
||||
|
||||
/**
|
||||
* This is the main class of my asteroids game.
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public class Main {
|
||||
|
||||
public static final boolean DEBUG = true;
|
||||
|
||||
/**
|
||||
* Creates a new Main
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public Main() {
|
||||
AsteroidGame game = new AsteroidGame();
|
||||
game.createGame();
|
||||
game.start();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param args
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
new Main();
|
||||
}
|
||||
|
||||
}
|
||||
36
Asteroids/src/com/RickBarrette/asteroids/Moveable.java
Normal file
36
Asteroids/src/com/RickBarrette/asteroids/Moveable.java
Normal file
@@ -0,0 +1,36 @@
|
||||
/**
|
||||
* Moveable.java
|
||||
* @date Mar 31, 2012
|
||||
* @author ricky barrette
|
||||
* @author Twenty Codes, LLC
|
||||
*
|
||||
* Copyright 2012 Richard Barrette
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
*/
|
||||
package com.RickBarrette.asteroids;
|
||||
|
||||
/**
|
||||
* This interface will be used to move objects with in the game
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public interface Moveable {
|
||||
|
||||
public void move(int scrnWidth, int scrnHeight);
|
||||
|
||||
public void setAccelerating(boolean accelerating);
|
||||
|
||||
public void setTurningLeft(boolean turningLeft);
|
||||
|
||||
public void setTurningRight(boolean turningRight);
|
||||
}
|
||||
179
Asteroids/src/com/RickBarrette/asteroids/MovingSpaceObject.java
Normal file
179
Asteroids/src/com/RickBarrette/asteroids/MovingSpaceObject.java
Normal file
@@ -0,0 +1,179 @@
|
||||
/**
|
||||
* MovingSpaceObject.java
|
||||
* @date Mar 31, 2012
|
||||
* @author ricky barrette
|
||||
* @author Twenty Codes, LLC
|
||||
*
|
||||
* Copyright 2012 Richard Barrette
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
*/
|
||||
package com.RickBarrette.asteroids;
|
||||
|
||||
/**
|
||||
* This class will track the information required for moving objects.
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public class MovingSpaceObject extends SpaceObject implements Moveable{
|
||||
|
||||
protected double mAngle;
|
||||
protected double mVelocityDecay;
|
||||
protected double mRotationalSpeed;
|
||||
protected double xVelocity = 0;
|
||||
protected double yVelocity = 0;
|
||||
protected double mAcceleration;
|
||||
protected boolean isTurningLeft = false, isTurningRight = false, isAccelerating = false, isActive;
|
||||
|
||||
/**
|
||||
* @return true if the space object is accelerating
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public boolean isAccelerating(){
|
||||
return isAccelerating;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if the space object is active
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public boolean isActive() {
|
||||
return isActive;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if the space object is turning left
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public boolean isTurningLeft(){
|
||||
return isTurningLeft;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if the space object is turning right
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public boolean isTurningRight(){
|
||||
return isTurningRight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the object's location is to be updated
|
||||
* (non-Javadoc)
|
||||
* @see com.RickBarrette.asteroids.Moveable#move(int, int)
|
||||
*/
|
||||
@Override
|
||||
public void move(int scrnWidth, int scrnHeight) {
|
||||
|
||||
if(Main.DEBUG){
|
||||
System.out.println("Move "+ scrnWidth +" x "+ scrnHeight);
|
||||
System.out.println("angle "+mAngle);
|
||||
System.out.println("xVelocity = "+xVelocity);
|
||||
System.out.println("yVelocity = "+yVelocity);
|
||||
System.out.println("yX = "+mX);
|
||||
System.out.println("yY = "+mY);
|
||||
}
|
||||
|
||||
/*
|
||||
* this is backwards from typical polar coordinates
|
||||
* because positive y is downward.
|
||||
*/
|
||||
if (isTurningLeft)
|
||||
mAngle -= mRotationalSpeed;
|
||||
/*
|
||||
* Because of that, adding to the angle is
|
||||
* rotating clockwise (to the right)
|
||||
*/
|
||||
if (isTurningRight)
|
||||
mAngle += mRotationalSpeed;
|
||||
|
||||
// Keep angle within bounds of 0 to 2*PI
|
||||
if (mAngle > (2 * Math.PI))
|
||||
mAngle -= (2 * Math.PI);
|
||||
else if (mAngle < 0)
|
||||
mAngle += (2 * Math.PI);
|
||||
|
||||
// adds accel to velocity in direction pointed
|
||||
if (isAccelerating) {
|
||||
if(Main.DEBUG)
|
||||
System.out.println("accelerating by "+mAcceleration);
|
||||
|
||||
// calculates components of accel and adds them to velocity
|
||||
xVelocity += mAcceleration * Math.cos(mAngle);
|
||||
yVelocity += mAcceleration * Math.sin(mAngle);
|
||||
}
|
||||
|
||||
// move the space object by adding velocity to position
|
||||
mX += xVelocity;
|
||||
mY += yVelocity;
|
||||
|
||||
/*
|
||||
* slows ship down by percentages (velDecay
|
||||
* should be a decimal between 0 and 1
|
||||
*/
|
||||
xVelocity *= mVelocityDecay;
|
||||
yVelocity *= mVelocityDecay;
|
||||
|
||||
/*
|
||||
* wrap the ship around to the opposite side of the screen
|
||||
* when it goes out of the screen's bounds
|
||||
*/
|
||||
if (mX < 0)
|
||||
mX += scrnHeight;
|
||||
else if (mX > scrnHeight)
|
||||
mX -= scrnHeight;
|
||||
if (mY < 0)
|
||||
mY += scrnWidth;
|
||||
else if (mY > scrnWidth)
|
||||
mY -= scrnWidth;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets wether or not this space object is accelerating
|
||||
* (non-Javadoc)
|
||||
* @see com.RickBarrette.asteroids.Moveable#setAccelerating(boolean)
|
||||
*/
|
||||
@Override
|
||||
public void setAccelerating(boolean accelerating) {
|
||||
this.isAccelerating = accelerating; // start or stop accelerating the ship
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets wether or not this space object is active
|
||||
* @param active
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public void setActive(boolean active) {
|
||||
this.isActive = active; // used when the game is paused or unpaused
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets wether or not this space object is turning left
|
||||
* (non-Javadoc)
|
||||
* @see com.RickBarrette.asteroids.Moveable#setTurningLeft(boolean)
|
||||
*/
|
||||
@Override
|
||||
public void setTurningLeft(boolean turningLeft) {
|
||||
this.isTurningLeft = turningLeft; // start or stop turning the ship
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets wether or not this space object is turning right
|
||||
* (non-Javadoc)
|
||||
* @see com.RickBarrette.asteroids.Moveable#setTurningRight(boolean)
|
||||
*/
|
||||
@Override
|
||||
public void setTurningRight(boolean turningRight) {
|
||||
this.isTurningRight = turningRight;
|
||||
}
|
||||
|
||||
}
|
||||
153
Asteroids/src/com/RickBarrette/asteroids/Ship.java
Normal file
153
Asteroids/src/com/RickBarrette/asteroids/Ship.java
Normal file
@@ -0,0 +1,153 @@
|
||||
/**
|
||||
* Ship.java
|
||||
* @date Mar 31, 2012
|
||||
* @author ricky barrette
|
||||
* @author Twenty Codes, LLC
|
||||
*
|
||||
* Copyright 2012 Richard Barrette
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
*/
|
||||
package com.RickBarrette.asteroids;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
|
||||
/**
|
||||
* This class will be the user's ship. I will be used to destroy the asteroids, with it's laser! Pew Pew Pew!!!
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public class Ship extends MovingSpaceObject implements Drawable {
|
||||
|
||||
private final int[] mOrigXpoints = { 14, -10, -6, -10 };
|
||||
private final int[] mOrigYpoints = { 0, -8, 0, 8 };
|
||||
private final int[] mOrigFlameXpoints = { -6, -23, -6 };
|
||||
private final int[] mOrigFlameYpoints = { -3, 0, 3 };
|
||||
|
||||
/*
|
||||
* store the current locations of the points used to draw the ship and its
|
||||
* flame
|
||||
*/
|
||||
int[] mXpoints = new int[4], mYpoints = new int[4], mFlameXpoints = new int[3], mFlameYpoints = new int[3];
|
||||
int shotDelay, shotDelayLeft; // used to determine the rate of firing
|
||||
|
||||
/*
|
||||
* radius of circle used to approximate the ship
|
||||
*/
|
||||
private final int radius = 6;
|
||||
|
||||
/**
|
||||
* Creates a new ship
|
||||
* @param x location of the ship
|
||||
* @param y location of the ship
|
||||
* @param angle of the ship
|
||||
* @param acceleration of the ship
|
||||
* @param velocityDecay of the ship
|
||||
* @param rotationalSpeed of the ship
|
||||
* @param shotDelay of the ship
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public Ship(double x, double y, double angle, double acceleration, double velocityDecay, double rotationalSpeed, int shotDelay) {
|
||||
// this.x refers to the Ship's x, x refers to the x parameter
|
||||
this.mX = x;
|
||||
this.mY = y;
|
||||
this.mAngle = angle;
|
||||
this.mAcceleration = acceleration;
|
||||
this.mVelocityDecay = velocityDecay;
|
||||
this.mRotationalSpeed = rotationalSpeed;
|
||||
|
||||
// start off paused
|
||||
this.isActive = true;
|
||||
|
||||
// # of frames between shots
|
||||
this.shotDelay = shotDelay;
|
||||
|
||||
// ready to shoot
|
||||
this.shotDelayLeft = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the Display panel when it needs to draw the ship
|
||||
* (non-Javadoc)
|
||||
* @see com.RickBarrette.asteroids.Drawable#draw(java.awt.Graphics)
|
||||
*/
|
||||
@Override
|
||||
public void draw(Graphics g) {
|
||||
|
||||
if(Main.DEBUG)
|
||||
System.out.println("draw()"+ mX + ", "+ mY);
|
||||
|
||||
// rotate the points, translate them to the ship's location (by
|
||||
// adding x and y), then round them by adding .5 and casting them
|
||||
// as integers (which truncates any decimal place)
|
||||
if (isAccelerating && isActive) { // draw flame if accelerating
|
||||
for (int i = 0; i < 3; i++) {
|
||||
mFlameXpoints[i] = (int) (mOrigFlameXpoints[i] * Math.cos(mAngle) - mOrigFlameYpoints[i] * Math.sin(mAngle) + mX + .5);
|
||||
mFlameYpoints[i] = (int) (mOrigFlameXpoints[i] * Math.sin(mAngle) + mOrigFlameYpoints[i] * Math.cos(mAngle) + mY + .5);
|
||||
}
|
||||
|
||||
g.setColor(Color.red); // set color of flame
|
||||
g.fillPolygon(mFlameXpoints, mFlameYpoints, 3);
|
||||
}
|
||||
// calculate the polygon for the ship, then draw it
|
||||
for (int i = 0; i < 4; i++) {
|
||||
this.mXpoints[i] = (int) (this.mOrigXpoints[i] * Math.cos(mAngle) - this.mOrigYpoints[i] * Math.sin(mAngle) + mX + .5);
|
||||
this.mYpoints[i] = (int) (this.mOrigXpoints[i] * Math.sin(mAngle) + this.mOrigYpoints[i] * Math.cos(mAngle) + mY + .5);
|
||||
}
|
||||
|
||||
if (isActive)
|
||||
g.setColor(Color.CYAN);
|
||||
else
|
||||
// draw the ship dark gray if the game is paused
|
||||
g.setColor(Color.darkGray);
|
||||
|
||||
g.fillPolygon(mXpoints, mYpoints, 4); // 4 is the number of points
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when ...
|
||||
* (non-Javadoc)
|
||||
* @see com.RickBarrette.asteroids.MovingSpaceObject#move(int, int)
|
||||
*/
|
||||
@Override
|
||||
public void move(int scrnWidth, int scrnHeight) {
|
||||
/*
|
||||
* move() is called every frame that the game
|
||||
* is run, so this ticks down the shot delay
|
||||
*/
|
||||
if (shotDelayLeft > 0)
|
||||
shotDelayLeft--;
|
||||
|
||||
super.move(scrnWidth, scrnHeight);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return radius of circle that approximates the ship
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public double getRadius() {
|
||||
return radius;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if the ship can shoot
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public boolean canShoot() {
|
||||
if (shotDelayLeft > 0) // checks to see if the ship is ready to
|
||||
return false;
|
||||
// shoot again yet or if it needs to wait longer
|
||||
else
|
||||
return true;
|
||||
}
|
||||
}
|
||||
79
Asteroids/src/com/RickBarrette/asteroids/SpaceObject.java
Normal file
79
Asteroids/src/com/RickBarrette/asteroids/SpaceObject.java
Normal file
@@ -0,0 +1,79 @@
|
||||
/**
|
||||
* SpaceObject.java
|
||||
* @date Mar 31, 2012
|
||||
* @author ricky barrette
|
||||
* @author Twenty Codes, LLC
|
||||
*
|
||||
* Copyright 2012 Richard Barrette
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
*/
|
||||
package com.RickBarrette.asteroids;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
/**
|
||||
* This class will be used for keeping tack of the space objects within the game.
|
||||
* More accuractly the object's location and color.
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public class SpaceObject {
|
||||
|
||||
protected Color color;
|
||||
protected double mX;
|
||||
protected double mY;
|
||||
|
||||
/**
|
||||
* @return the color of this space object
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public Color getColor() {
|
||||
return this.color;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the space object's x location
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public double getX(){
|
||||
return mX;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the space object's y location
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public double getY(){
|
||||
return mY;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the color of this space object
|
||||
* @param c
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public void setColor(Color c) {
|
||||
this.color = c;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the location of this space object
|
||||
* @param x1
|
||||
* @param y1
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public void setLocation(int x, int y) {
|
||||
mX = x;
|
||||
mY = y;
|
||||
}
|
||||
}
|
||||
60
Asteroids/src/com/RickBarrette/asteroids/Status.java
Normal file
60
Asteroids/src/com/RickBarrette/asteroids/Status.java
Normal file
@@ -0,0 +1,60 @@
|
||||
/**
|
||||
* Status.java
|
||||
* @date Mar 31, 2012
|
||||
* @author ricky barrette
|
||||
* @author Twenty Codes, LLC
|
||||
*
|
||||
* Copyright 2012 Richard Barrette
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License
|
||||
*/
|
||||
package com.RickBarrette.asteroids;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Container;
|
||||
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
/**
|
||||
* This class will be used for keeping track of and displaying the game status
|
||||
* information.
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public class Status extends JPanel {
|
||||
|
||||
private static final long serialVersionUID = -169321993637429941L;
|
||||
private JLabel status;
|
||||
|
||||
/**
|
||||
* Creates a new Status
|
||||
* @param container
|
||||
* @param g
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public Status(Container container, AsteroidGame g) {
|
||||
JPanel northSubPanel = new JPanel();
|
||||
status = new JLabel("Missiles 0 Asteroids 0 Ships 0 Score 0 Time: 0");
|
||||
northSubPanel.add(status);
|
||||
container.add(northSubPanel, BorderLayout.NORTH);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the status
|
||||
* @param temp
|
||||
* @author ricky barrette
|
||||
*/
|
||||
public void setStatus(String temp) {
|
||||
status.setText(temp);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user