Hello again, got another Java question.
I am trying to draw an oval from the Alien class to the Canvas in the Game class.
Here is the code
import javax.swing.*;
import java.awt.*;
/**
* The Evil Ovals!
*
* @author Eric Foertsch
* @version Nov 2009(1.0.0a)
*/
public class Alien extends Canvas{
// X pos
private int x;
// Y pos
private int y;
// Width
private int w;
// Height
private int h;
// Ship Color
private Color color;
// Missle Color
private Color missleColor;
// Background Color
private Color background;
// Probability of missle firing
private double missleLaunchProb;
// Wall location
private int wall;
// Missle
private Missle pewPew;
// Velocity
private int velocity;
/**
* Constructor for objects of class Alien
*/
public Alien(int pX, int pY, int pW, int pH, Color pColor, Color pMissleColor, Color pBackGround,
double pMissleLaunchProb, int pWall){
x = pX;
y = pY;
w = pW;
h = pH;
color = pColor;
missleColor = pMissleColor;
background = pBackGround;
missleLaunchProb = pMissleLaunchProb;
wall = pWall;
pewPew = new Missle(x, y, w, h, 10, Color.red, 500);
velocity = 10;
}
/**
* Returns a Missle
*/
public Missle getMissle(){
return pewPew;
}
/**
* Draws a Alien
*/
public void draw(Graphics g, Color pColor){
// Draws an Alien
g.setColor(pColor);
g.drawOval(x, y, w, h);
}
/**
* Moves the alien and missle
*/
public void move(Graphics g){
// Moves the Alien Ship
draw(g, background);
if(x > 600){
velocity = -10;
}
if(x < 0){
velocity = 10;
}
x = x + velocity;
draw(g, color);
// Missle
if(pewPew == null){
if(Math.random() >= missleLaunchProb){
pewPew.move(g, background);
}
}
}
/**
* Returns if the missle has hit
*/
public boolean isHit(Graphics g, Missle enemyMissle){
if(enemyMissle.getNose() == new Point(x + w, y + h)){
return true;
}
return false;
}
/**
* Erases the ship if destroyed.
*/
public void remove(Graphics g){
pewPew.draw(g, background);
draw(g, background);
pewPew = null;
}
}
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
/**
* Holds the rules for the game.
*
* @author Eric Foertsch
* @version Nov 2009(1.0.0a)
*/
public class Game implements ActionListener, Runnable, MouseMotionListener, MouseListener
{
// Frame of the Board
private JFrame f;
// Sets a Quit item
private JMenuItem Quit;
// Start Button
private JButton start;
// Canvas
private Canvas c;
// Graphics
private Graphics2D graphic;
// Alien Array
private Alien[] a;
// Ship X
private int x;
// Ship Y
private int y;
// Ship H
private int h;
// Ship W
private int w;
// Missle
private Missle moarPewPew;
// Text Field
private JTextField txt;
// Graphics
private Graphics g;
/**
* Constructor for objects of class GUI
*/
public Game(){
// Start Button
start = new JButton("Start");
start.addActionListener(this);
// Canvas
c = new Canvas();
c.setSize(500, 400);
c.setBackground(Color.black);
c.setVisible(true);
//Text Box
txt = new JTextField();
// Frame
f = new JFrame("Attack of the Ovals!");
f.setSize(600, 500);
f.setVisible(true);
f.setLayout(new BorderLayout());
f.add(txt, BorderLayout.NORTH);
f.add(c, BorderLayout.CENTER);
f.add(start, BorderLayout.SOUTH);
setupMenus(f);
f.validate();
x = 500;
y = 400;
w = 20;
h = 20;
}
/**
* This is a method that sets up the menus for the game.
*/
public void setupMenus(JFrame frame){
// Sets up the Menu Bar
JMenuBar menubar = new JMenuBar();
frame.setJMenuBar(menubar);
//Sets up the Game Menu
JMenu gamemenu = new JMenu("Game");
menubar.add(gamemenu);
//Adds the Quit option to the Game Menu
JMenuItem quitItem = new JMenuItem("Quit");
quitItem.addActionListener(this);
gamemenu.add(quitItem);
}
/**
* This is a method for actions.
*/
public void actionPerformed(ActionEvent e){
// Quit Action
if(e.getActionCommand() == "Quit"){
int n = JOptionPane.showConfirmDialog(null,
"Are you sure you want to quit?", "The Ovals will kill us all!!",
JOptionPane.YES_NO_OPTION);
if(n == JOptionPane.YES_OPTION){
System.exit(1);
}
if(n == JOptionPane.NO_OPTION){
JOptionPane.showMessageDialog(null,
"We still have a chance", "Fight on!",
JOptionPane.INFORMATION_MESSAGE);
}
}
if(e.getActionCommand() == "Start"){
playRound(g);
}
}
/**
* This method will play a round of the Game.
*/
public void playRound(Graphics g){
c.getGraphics();
c.setVisible(true);
boolean gameOver = false;
// Sets up the Array of Aliens
a = new Alien[3];
Alien Bob = new Alien(40, 40, 10, 10, Color.yellow, Color.red, Color.black, .3, 500);
Alien Betty = new Alien(100, 100, 10, 10, Color.yellow, Color.red, Color.black, .5, 500);
Alien Daisuke = new Alien(150, 150, 10, 20, Color.yellow, Color.red, Color.black, .8, 500);
a[0] = Bob;
a[1] = Betty;
a[2] = Daisuke;
// Starts up the game
if(gameOver == false){
// Draws the Aliens
Bob.draw(g, Color.yellow);
Betty.draw(g, Color.yellow);
Daisuke.draw(g, Color.yellow);
// Moves the Aliens
Bob.move(g);
Betty.move(g);
Daisuke.move(g);
}
// Removes an alien if destroyed
for(int i = 0; i < a.length; i++){
if(a[i].isHit(g, moarPewPew) == true){
a[i].remove(g);
}
}
}
/**
* Checks to see if my ship is hit.
*/
private boolean isHit(Missle enemyMissle){
if(enemyMissle.getNose() == new Point(x + w, y + h)){
return true;
}
return false;
}
/**
* Draws my ship
*/
private void draw(Color pColor){
c.getGraphics();
g.setColor(pColor);
g.fillRect(x, y, w, h);
}
/**
* Mouse Movement Methods
*/
public void mouseMoved(MouseEvent e){
if((x > 500 || x < 0) && (y > 400 || y < 0)){
draw(Color.black);
x = e.getX();
y = e.getY();
draw(Color.blue);
}
}
public void mouseClicked(MouseEvent e){
if(moarPewPew == null){
moarPewPew = new Missle(x, y, 10, 20, 10, Color.green, 0);
moarPewPew.move(g, Color.black);
}
}
public void run(){
playRound(g);
}
/**
* Slows down the game so it is playable.
*/
private void pause(int msecs){
try{
Thread.sleep(msecs);
}
catch(InterruptedException e){}
}
/**
* Resets the game
*/
private void reset(){
moarPewPew.draw(g, Color.black);
moarPewPew = null;
a[0].draw(g, Color.black);
a[1].draw(g, Color.black);
a[2].draw(g, Color.black);
a[0].remove(g);
a[1].remove(g);
a[2].remove(g);
}
/**
* Methods to make program run.
*/
public void mouseDragged(MouseEvent e){
}
public void mousePressed(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
}
When I hit the start button, it throws this error at me
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Alien.draw(Alien.java:64)
at Game.playRound(Game.java:154)
at Game.actionPerformed(Game.java:128)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Via this error, I know its something wrong with the draw() method in the alien class, but I am at a loss as to what is wrong.
Any help appreciated.
Rolfninja