Sythe.Org Forums     Register     FAQ     Members List     Calendar     Mark Forums Read    
 
Sythe.Org Forums  
   Runescape Gold

Sythe.org — A Virtual Goods Trading Hub

Make real cash! buying and selling in-game items.

We have a no-scam policy.

You can make thousands playing your favourite games here at Sythe.org.

Just sign up an account and follow the rules!


Take me to

Runescape Markets

Other Game Markets

Support Center

Register an Account

Close
2d simplistic space invaders game
Reply
 
LinkBack Thread Tools Display Modes
  #1  
Old 12-02-2010, 11:40 PM
Fate's Avatar
Apprentice
 
Join Date: Apr 2005
Posts: 774
Default 2d simplistic space invaders game

I've been thinking of leaning more towards being a game developer instead of a software developer as I intended. This was my first game that I tried to make. Nothing special, simple graphics. Took me a couple hours overall to make since it was my first. I am wanting to learn some more and hopefully can pursue this as my career but anywho here it is.

Feel free to use the source of this anyway you like.

Runs in an applet btw.

Code:
package shootergame;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Random;

/**
 * Space invaders like game.
 * @author Fate
 * @version Nov 30, 2010
 *
 */
public class ShooterGame extends Applet implements Runnable, KeyListener {

    private Graphics gfx;
    private boolean running = true;
    private boolean moveUp = false;
    private boolean moveDown = false;
    private boolean moveLeft = false;
    private boolean moveRight = false;
    private int fps = 50;
    private int bulletCounter;
    private int upgradesCounter;
    private int enemyCounter;
    private int weaponDamage = 1;
    private int weaponUpgradeNumber = 1;
    private int score = 0;
    private Image img;
    private Player p;
    private ArrayList<Bullets> bullets;
    private ArrayList<Upgrades> upgrades;
    private ArrayList<Enemy> enemies;

    @Override
    public void init() {
        setSize(300, 400);
        setBackground(Color.BLACK);
        addKeyListener(this);
        p = new Player(getWidth() / 2, getHeight() - 55, 30, 8, Color.RED);
        bullets = new ArrayList<Bullets>();
        upgrades = new ArrayList<Upgrades>();
        enemies = new ArrayList<Enemy>();
    }

    @Override
    public void start() {
        Thread th = new Thread(this);
        th.start();
    }

    public void run() {
        while (running) {
            repaint();
            try {
                Thread.sleep(1000 / fps);
            } catch (Exception e) {
            }
        }
    }

    @Override
    public void stop() {
        running = false;
    }

    @Override
    public void destroy() {
        running = false;
    }

    @Override
    public void paint(Graphics g) {
        if (p.health > 0) {
            /*Displays health bar, score, and weapon.*/
            g.setColor(Color.RED);
            g.fillRect(10, getHeight() - 20, p.health / 10, 12);
            g.setColor(Color.WHITE);
            g.drawString(("Health Bar"), 10, getHeight() - 25);
            g.drawString("" + p.health, 40, getHeight() - 10);
            g.drawString("Weapon Upgrade: " + weaponUpgradeNumber, getWidth() - 130, getHeight() - 25);
            g.drawString("Score: " + score, getWidth() - 130, getHeight() - 10);
            g.drawLine(0, getHeight() - 40, getWidth(), getHeight() - 40);
            //draws all bullets in the ArrayList
            for (Bullets b : bullets) {
                b.draw(g);
            }
            //draws all the upgrades in the ArrayList
            for (Upgrades u : upgrades) {
                u.draw(g);
            }
            //draws all the enemies in the ArrayList
            for (Enemy e : enemies) {
                e.drawImage(g);
            }
            update();
        } else if (p.health <= 0) { //if players health is 0 or less game ends.
            g.setColor(Color.WHITE);
            g.drawString("GAME OVER", getWidth() / 2, getHeight() / 2);
        }
        p.draw(g);

    }

    /*
     * Double buffer method
     */
    @Override
    public void update(Graphics g) {
        if (img == null) {
            img = createImage(this.getWidth(), this.getHeight());
            gfx = img.getGraphics();
        }
        gfx.setColor(getBackground());
        gfx.fillRect(0, 0, this.getWidth(), this.getHeight());
        gfx.setColor(getForeground());
        paint(gfx);
        g.drawImage(img, 0, 0, this);
    }

    //Allows the player to move around A LOT smoother
    public void update() {
        //moves the player up down left right
        if (moveUp && p.y > 0) {
            p.moveUp();
        }
        if (moveDown && p.y + p.height < getHeight() - 42) {
            p.moveDown();
        }
        if (moveLeft && p.x > 0) {
            p.moveLeft();
        }
        if (moveRight && p.x + p.width < getWidth()) {
            p.moveRight();
        }
        /*
         * has 10 / 500 chance to spawn an enemy. If it spawns one that chance
         * that another one will spawn is higher. So the more enemies that spawn
         * the faster they will respawn.
         */
        Random ra = new Random();
        int rand = ra.nextInt(500);
        int chance = 10;
        if (rand < chance) {
            enemyCounter = 1;
            chance++;
        } else {
            enemyCounter = 0;
        }
        //creates an enemy with a random health amount and random speed
        if (enemyCounter == 1) {
            Enemy e = null;
            Random r = new Random();
            int x = r.nextInt(getWidth());
            int randHealth = r.nextInt(500);
            int randVelocity = r.nextInt(5) + 1;
            e = new Enemy(x, 0, 32, 32, randHealth, randVelocity, "spaceMonster.png");
            enemies.add(e);
            repaint();
            enemyCounter++;
        }
        //checks to see if upgradeCounter is equal to 1
        //if it is it will create a random upgrade and add it to the ArrayList
        if (upgradesCounter == 1) {
            Random r = new Random();
            Upgrades u = null;
            int randomUpgrade = r.nextInt(30);
            int x = r.nextInt(getWidth());
            if (randomUpgrade <= 10) { //restores health
                u = new Upgrades(x, 0, 3, 3, Color.RED);
            }
            if (randomUpgrade > 10 && randomUpgrade <= 20) { //speed upgrade
                u = new Upgrades(x, 0, 3, 3, Color.GREEN);
            }
            if (randomUpgrade > 20 && randomUpgrade <= 30) { //weapon upgrade
                u = new Upgrades(x, 0, 3, 3, Color.ORANGE);
            }
            upgrades.add(u);
            repaint();
            upgradesCounter++;
        }
        //checks to see if bulletCounter is equal to 1
        //if it is it will create a bullet and add it to the ArrayList
        if (bulletCounter == 1) {
            Bullets b = null;
            if (weaponUpgradeNumber == 1) { //first gun you have
                b = new Bullets(p.x + 13, p.y - p.height + 2, 3, 3, Color.YELLOW);
                weaponDamage = 100;
            }
            if (weaponUpgradeNumber == 2) { //second gun with bigger bullets and higher damage
                b = new Bullets(p.x + 13, p.y - p.height + 2, 6, 6, Color.YELLOW);
                weaponDamage = 200;
            }
            if (weaponUpgradeNumber == 3) { //same bullet size as the second gun but shoots two at a time
                Bullets c;
                b = new Bullets(p.x + 8, p.y - p.height + 2, 6, 6, Color.YELLOW);
                c = new Bullets(p.x + 18, p.y - p.height + 2, 6, 6, Color.YELLOW);
                bullets.add(c);
                weaponDamage = 200;
            }
            if (weaponUpgradeNumber >= 4) { //single shot but higher damage
                b = new Bullets(p.x + 13, p.y - p.height + 2, 8, 8, Color.YELLOW);
                weaponDamage = 500;
            }

            bullets.add(b);
            repaint();
            bulletCounter++;
        }
        //Moves enemies toward the player. If the enemy passes they
        //interface line it will be deleted. If the enemy intersects with
        //the player, the player will be damaged and the enemy will be removed
        //if enemy intersects with bullet, the bullet will damage enemy
        //health depending on what gun they have.
        for (int j = 0; j < enemies.size(); j++) {
            enemies.get(j).move();
            if (enemies.get(j).y + enemies.get(j).height > getHeight() - 42) {
                enemies.remove(j);
                j--;
                continue;
            }
            if (enemies.get(j).r.intersects(p.r)) {
                enemies.remove(j);
                p.health -= weaponDamage;
                j--;
                continue;
            }
            for (int i = 0; i < bullets.size(); i++) {
                try {
                    if (enemies.get(j).r.intersects(bullets.get(i).r)) {
                        enemies.get(j).health -= 100;
                        bullets.remove(i);
                        if (enemies.get(j).health <= 0) {
                            enemies.remove(j);
                            score += 50;
                            continue;
                        }
                    }
                } catch (Exception e) {
                }
            }
        }
        //this loops fires all bullets that are created
        //if it moves off the screen or hits an enemy it will be
        //removed from the ArrayList thus remocing it from the applet.
        for (int i = 0; i < bullets.size(); i++) {
            bullets.get(i).move();
            if (bullets.get(i).y <= 0) {
                bullets.remove(i);
                i--;
                continue;
            }
        }


        /**
         * Loops the size of the ArrayList checking if the player has
         * collided with the upgrade. If so they player will receive
         * that upgrade and the upgrade will be removed from the
         * ArrayList thus removing it from the applet.
         */
        for (int i = 0; i < upgrades.size(); i++) {
            upgrades.get(i).move();
            if (upgrades.get(i).y >= getHeight()) {
                upgrades.remove(i);
                i--;
                continue;
            }
            if (upgrades.get(i).r.intersects(p.r)) {
                if (upgrades.get(i).col == Color.GREEN) {
                    p.velocity++;
                    upgrades.remove(i);
                    i--;
                    continue;
                }
                if (upgrades.get(i).col == Color.RED) {
                    if (p.health < 1500) {
                        p.health += 100;
                    }
                    upgrades.remove(i);
                    i--;
                    continue;
                }
                if (upgrades.get(i).col == Color.ORANGE) {
                    weaponUpgradeNumber++;
                    upgrades.remove(i);
                    i--;
                    continue;
                }
            }
        }
    }
    /**
     * Basic movement for the player. Develops a random chance for an upgrade
     * to be dropped when they player shoots.
     */
    public void keyTyped(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_W) {
            moveUp = true;
        }
        if (key == KeyEvent.VK_S) {
            moveDown = true;
        }
        if (key == KeyEvent.VK_A) {
            moveLeft = true;
        }
        if (key == KeyEvent.VK_D) {
            moveRight = true;
        }
        if (key == KeyEvent.VK_SPACE) {
            bulletCounter = 1;
            Random r = new Random();
            int rand = r.nextInt(1000);
            if (rand == 3 || rand == 489 || rand == 968 || rand == 302) {
                upgradesCounter = 1;
            }
        }
    }
    /**
     * Basic movement for the player. Develops a random chance for an upgrade
     * to be dropped when they player shoots.
     */
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_W) {
            moveUp = true;
        }
        if (key == KeyEvent.VK_S) {
            moveDown = true;
        }
        if (key == KeyEvent.VK_A) {
            moveLeft = true;
        }
        if (key == KeyEvent.VK_D) {
            moveRight = true;
        }
        if (key == KeyEvent.VK_SPACE) {
            bulletCounter = 1;
            Random r = new Random();
            int rand = r.nextInt(1000);
            if (rand == 3 || rand == 489 || rand == 968 || rand == 302) {
                upgradesCounter = 1;
            }
        }
    }

    public void keyReleased(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_W) {
            moveUp = false;
        }
        if (key == KeyEvent.VK_S) {
            moveDown = false;
        }
        if (key == KeyEvent.VK_A) {
            moveLeft = false;

        }
        if (key == KeyEvent.VK_D) {
            moveRight = false;
        }
        if (key == KeyEvent.VK_SPACE) {
            bulletCounter = 0;
        }
    }
}
Code:
package shootergame;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;

/**
 * Enemy Class
 * @author Fate
 * @version Nov 30, 2010
 */
public class Enemy {

    int x, y, height, width, velocity,health;
    Image img;
    Color col;
    Rectangle r;
    /**
     * Constructor for creating an enemy as a rectangle
     * @param x the x coord
     * @param y the y coord
     * @param height the height of the enemy
     * @param width the width of the enemy
     * @param health the total health the enemy has
     * @param velocity the speed of the enemy
     * @param col the color
     */
    public Enemy(int x, int y, int height, int width,int health, int velocity, Color col) {
        this.x = x;
        this.y = y;
        this.height = height;
        this.width = width;
        this.velocity = velocity;
        this.col = col;
        this.health = health;
        img = null;
        r = new Rectangle(x,y,height,width);
    }
    /**
     *
     * @param x the x coord
     * @param y the y coord
     * @param height the height of the enemy
     * @param width the width of the enemy
     * @param health the total health the enemy has
     * @param velocity the speed of the enemy
     * @param s the location of the image for the enemy
     */
    public Enemy(int x, int y, int height, int width, int health, int velocity, String s) {
        this.x = x;
        this.y = y;
        this.height = height;
        this.width = width;
        this.velocity = velocity;
        img = Toolkit.getDefaultToolkit().getImage(s);
        this.health = health;
        col = null;
        r = new Rectangle(x,y,height,width);
    }
    /**
     * Draws the enemy as an image.
     * @param s
     */
    public void setImage(String s) {
        img = Toolkit.getDefaultToolkit().getImage(s);
    }
    /**
     * Moves the enemy downwards, as well as the rectangle for collision
     */
    public void move() {
        y += velocity;
        r.setLocation(x,y); //moves the rectangle - for testing collision
    }
    public void draw(Graphics g) {
        g.setColor(col);
        g.fillRect(x, y, width, height);
    }
    public void drawImage(Graphics g) {
        g.drawImage(img, x, y, null);
    }
}
Code:
package shootergame;


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;

/**
 * Player class
 * @author Fate
 * @version Nov 29, 2010
 */
public class Player {
    int velocity;
    int x, y;
    int width, height;
    int health = 1000;
    Color col;
    Rectangle r;
    Image img;
    /**
     * Constructor for display a rectangle
     * @param x the x coord
     * @param y the y coord
     * @param width the width
     * @param height the height
     * @param col the color of the player
     */
    public Player(int x, int y, int width, int height, Color col) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
        this.col = col;
        health = 1000;
        velocity = 3;
        r = new Rectangle(x, y, width, height);
    }
    /**
     * Constructor for displaying an image for player
     * @param x the x coord
     * @param y the y coord
     * @param width the width
     * @param height the height
     * @param s the location of the image
     */
    public Player(int x, int y, int width, int height, String s) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
        col = Color.RED;
        health = 1000;
        velocity = 3;
        r = new Rectangle(x, y, width, height);
        img = Toolkit.getDefaultToolkit().getImage(s);
    }

    public void draw(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(col);
        g2.fillRect(x, y, width, height);
    }
    public void drawImage(Graphics g) {
        g.drawImage(img, x, y, null);
    }
    public void setImage(String s) {
        img = Toolkit.getDefaultToolkit().getImage(s);
    }

    public void moveLeft() {
        x -= velocity;
        r.setLocation(x,y);
    }

    public void moveRight() {
        x += velocity;
        r.setLocation(x,y);
    }

    public void moveUp() {
        y -= velocity;
        r.setLocation(x, y);
    }

    public void moveDown() {
        y += velocity;
        r.setLocation(x, y);
    }

  
}
Code:
package shootergame;


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;

/**
 * Upgrade class
 * @author Fate
 * @version Nov 30, 2010
 */
public class Upgrades {

    Rectangle r;
    int x, y, width, height;
    Color col;
    /**
     * Constructor for creating an upgrade as a rectangle
     * @param x the x coord
     * @param y the y coord
     * @param width the width
     * @param height the height
     * @param col the color
     */
    public Upgrades(int x, int y, int width, int height, Color col) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
        this.col = col;
        r = new Rectangle(x, y, width, height);
    }

    public void move() {
        y += 2;
        r.setLocation(x, y);
    }

    public void draw(Graphics g) {
        g.setColor(col);
        g.fillRect(x, y, width, height);
    }
}
Code:
package shootergame;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;

/**
 * Bullets class
 * @author Fate
 * @version Nov 29, 2010
 */
public class Bullets {

    int x, y, width, height;
    Color col;
    int velocity;
    Rectangle r;

    public Bullets(int x, int y, int width, int height, Color col) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
        this.col = col;
        velocity = 10;
        r = new Rectangle(x, y, width, height);
    }

    public void draw(Graphics g) {
        g.setColor(col);
        g.fillRect(x, y, width, height);
    }

    public void move() {
        y -= velocity;
        r.setLocation(x, y);
    }
}
Any constructive criticism would be nice

Last edited by Fate : 12-03-2010 at 12:33 AM.
Reply With Quote
  #2  
Old 12-05-2010, 07:44 PM
Xeox's Avatar
Forum Addict
$25 USD Donor
 
Join Date: Jun 2010
Location: Watertown, CT
Posts: 346
Send a message via MSN to Xeox
Default Re: 2d simplistic space invaders game

Quote:
Runs in an applet btw.
Is that why I can't run this because of the unavailable package?
__________________
Reply With Quote
  #3  
Old 12-05-2010, 09:47 PM
Fate's Avatar
Apprentice
 
Join Date: Apr 2005
Posts: 774
Default Re: 2d simplistic space invaders game

Quote:
Originally Posted by Xeox View Post
Is that why I can't run this because of the unavailable package?
you can actually just delete the package name. If you have an IDE like netbeans just copy the code into a project in netbeans with the appropriate file names.
Reply With Quote
  #4  
Old 12-06-2010, 12:34 AM
Xeox's Avatar
Forum Addict
$25 USD Donor
 
Join Date: Jun 2010
Location: Watertown, CT
Posts: 346
Send a message via MSN to Xeox
Default Re: 2d simplistic space invaders game

ok thanks for making this open 2 the community =D and thanks for the help on my post.
__________________
Reply With Quote
  #5  
Old 12-06-2010, 10:01 AM
Fate's Avatar
Apprentice
 
Join Date: Apr 2005
Posts: 774
Default Re: 2d simplistic space invaders game

Quote:
Originally Posted by Xeox View Post
ok thanks for making this open 2 the community =D and thanks for the help on my post.
Anytime (; if you ever need help just throw me a pm
Reply With Quote
  #6  
Old 03-01-2011, 08:43 PM
Newcomer
 
Join Date: Mar 2011
Posts: 3
Default Re: 2d simplistic space invaders game

Where is the main method? Can you provide an example of one?
Reply With Quote
  #7  
Old 03-01-2011, 08:52 PM
Newcomer
 
Join Date: Mar 2011
Posts: 3
Default Re: 2d simplistic space invaders game

Yeah... i'm trying to build this in netbeans and it doesn't have a main class.

I'm new to java applets. Any help would be appreciated.
Reply With Quote
  #8  
Old 03-01-2011, 09:19 PM
Newcomer
 
Join Date: Mar 2011
Posts: 3
Default Re: 2d simplistic space invaders game

Or... I guess a better question, now that I did some more research, is how do i change this to .class files so i can get it to work in an applet?
Reply With Quote
  #9  
Old 03-02-2011, 02:08 PM
Fate's Avatar
Apprentice
 
Join Date: Apr 2005
Posts: 774
Default Re: 2d simplistic space invaders game

Go to Netbeans website and download Netbeans. Copy the files and save them in the appropriate file names under the same project. Remove the package names. And run the project and it should work. If not I can just upload the netbeans project file.

EDIT: Actually when I get off work I'll do that.

Last edited by Fate : 03-02-2011 at 02:08 PM.
Reply With Quote
  #10  
Old 03-03-2011, 09:40 PM
Apprentice
 
Join Date: Feb 2011
Posts: 866
Default Re: 2d simplistic space invaders game

Were is your main method, and for the keyListener you should use cases not if statements
Reply With Quote
  #11  
Old 03-04-2011, 01:44 PM
Fate's Avatar
Apprentice
 
Join Date: Apr 2005
Posts: 774
Default Re: 2d simplistic space invaders game

Quote:
Originally Posted by Quadro View Post
Were is your main method, and for the keyListener you should use cases not if statements
You don't need the main method for an applet.
Reply With Quote
  #12  
Old 03-05-2011, 02:44 AM
Apprentice
 
Join Date: Feb 2011
Posts: 866
Default Re: 2d simplistic space invaders game

Quote:
Originally Posted by Fate View Post
You don't need the main method for an applet.
oh, oops didn't notice it was an applet
Reply With Quote
Reply



Cheap RS Gold Store  Runescape Gold

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off

All times are GMT +1. The time now is 10:08 AM.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.6.1