dinsdag 29 oktober 2013

Space Invaders Example (moving wave/collision/shooting and moving player)

I made a new example in Jcreator. The example applet size should be 320*240.
I formatted the code with a site tool that I found. No applets anymore since they do not seem to work anymore with my google site.

There is not a lot of comment in the code. I want to keep it clean.


/**
 * @(#)SpaceInvadersExample003.java
 *
 * SpaceInvadersExample003 Applet application
 *
 * @author Rudy van Etten
 * @version 1.00 2013/10/28
 */

import java.awt.*;
import java.applet.*;

public class SpaceInvadersExample003 extends Applet  implements Runnable{
    Graphics bufferGraphics;
    Image offscreen;

    double px = 160-8;
    double py = 200;
    int pwidth = 16;
    int pheight = 16;
    boolean ismovingright = false;
    boolean ismovingleft = false;
    int wavedirection = 1; // 1 = right 0 = left
    long firedelay = 0;
    double bullet[][] = new double[ 32 ][ 5 ]; //active,x,y,my
    double alien[][] = new double[10*5][5];//active,x,y
    public void init() {
           setBackground(Color.black);
          offscreen = createImage(getSize().width,getSize().height);
           bufferGraphics = offscreen.getGraphics();
        int x=0;
        int y=0;
        for(int i=0;i<10*5;i++){
            alien[i][0]=1;
            alien[i][1]=x;
            alien[i][2]=y;
            x+=32;
            if(x>getSize().width-32){
                x=0;
                y+=32;
            }

           }
        new Thread(this).start();

    }
    public void run() {
        for(;;) { // animation loop never ends
            if (ismovingright==true){
                if (px<getSize().width-pwidth)
                    px+=1;
            }
            if (ismovingleft==true){
                if(px>0)
                    px-=1;
            }
            // move the bullets and remove them if they get above the screen
            for(int i=0 ;i<32;i++){
                if(bullet[i][0]==1){
                    bullet[i][2]+=bullet[i][3];
                    if(bullet[i][2]<0){
                        bullet[i][0]=0;
                    }
                }
            }
            // Collision with the bullets and the aliens.
            for(int i=0; i<32;i++){
                if(bullet[i][0]==1){
                for (int ii=0;ii<10*5;ii++){
                if (alien[ii][0]==1){
                    Rectangle rec1 = new Rectangle((int)bullet[i][1],(int)bullet[i][2],16,16);
                    Rectangle rec2 = new Rectangle((int)alien[ii][1],(int)alien[ii][2],16,16);
                    if(rec1.intersects(rec2)){
                        //g.drawString("Filled Rectangle Collision", 50, 60 );
                        bullet[i][0]=0;
                        alien[ii][0]=0;
                    }
                }
                }
                }
            }
            // Move the alien wave
            for(int i=0;i<10*5;i++){
                if(alien[i][0]==1){
                    if(wavedirection==0){
                        alien[i][1]-=0.1;
                    }else{
                        alien[i][1]+=0.1;
                    }
                    if(alien[i][1]>getSize().width-16){
                        wavedirection=0;
                    }
                    if(alien[i][1]<0){
                        wavedirection=1;
                    }
                }
            }
            repaint();
            try {
                Thread.sleep(16);
                }
                catch (InterruptedException e) {
                }
        }
    }

    public void update(Graphics g){
        bufferGraphics.clearRect(0,0,getSize().width,getSize().width);
        bufferGraphics.setColor(Color.red);
        bufferGraphics.drawString("Space Invaders Example.",20,30);
        // draw player ship
         bufferGraphics.setColor(Color.white);
        bufferGraphics.fillRect((int)px,(int)py,pwidth,pheight);
        //draw aliens
        for(int i=0;i<10*5;i++){
            if(alien[i][0]==1){
                bufferGraphics.fillRect((int)alien[i][1],(int)alien[i][2],16,16);
            }
        }
        // Draw bullets
        for(int i=0;i<32;i++){
            if(bullet[i][0]==1){
                bufferGraphics.fillRect((int)bullet[i][1],(int)bullet[i][2],3,3);
            }
        }
         g.drawImage(offscreen,0,0,this);
    }

        public void createBullet(){
            for(int i=0;i<32;i++){
                if(bullet[i][0]==0){
                    bullet[i][0]=1;
                    bullet[i][1]=px+8;
                    bullet[i][2]=py-16;
                    bullet[i][3]=-2;
                    return;
                }
            }
        }

         public boolean keyDown (Event e, int key){
          if( key == Event.LEFT )
        {
            ismovingleft = true;
        }
        if(key==Event.RIGHT)
        {
             ismovingright = true;
        }

         if( key == 32 ) // space bar for jump
         {
            if(firedelay<System.currentTimeMillis()){
                   firedelay = System.currentTimeMillis() + 200;
                   createBullet();
            }
         }

        System.out.println (" Integer Value: " + key);

         return true;
     }

    public boolean keyUp (Event e, int key){
          if( key == Event.LEFT )
        {
             ismovingleft = false;
        }
        if( key == Event.RIGHT )
        {
             ismovingright = false;
        }

        return true;
    }


}

Geen opmerkingen:

Een reactie posten