Basic android Game Design Space Ship Game - part 3 (Game View)
 

package com.chitraksh.chigamebasicbuilding;

import java.util.ArrayList;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;

public class GameView  extends SurfaceView implements Runnable{
    private volatile boolean playing;
    private Thread gameThread;
    private ArrayList<Bullet> bullets;
    Bullet bullet;
    private PlayerShip player;
    public EnemyShip enemy1;
    public EnemyShip enemy2;
    public EnemyShip enemy3;
    public ArrayList<SpaceDust> dustList = new ArrayList<SpaceDust>();
    // For drawing
    private Paint paint;
    private Canvas canvas;
    private SurfaceHolder ourHolder;
    private int screenWidth;
    private int screenHeight;
    private Context context;
    private MyAudioManager myAudioManager;
    private long lasttime;
    private int fps;
    private int score=0;
    long frameruntime;
    private boolean IsVolumeAllowed=false;
    int bulletsound=-1;
    int enemyblastsound=-1;
    public GameView(Context context,int sW,int sH) {
        super(context);
        this.context=context;
        screenWidth=sW;
        screenHeight=sH;
        ourHolder = getHolder();
        paint = new Paint();
        myAudioManager=new MyAudioManager(context, 10);
        startGame();
    }
    private void startGame(){
        
        bullets=new ArrayList<Bullet>();
        player = new PlayerShip(context,screenWidth,screenHeight);
        enemy1 = new EnemyShip(context, screenWidth,screenHeight);
        enemy2 = new EnemyShip(context, screenWidth,screenHeight);
        enemy3 = new EnemyShip(context, screenWidth,screenHeight);
        int numSpecs = 40;
        for (int i = 0; i < numSpecs; i++) {
            // Where will the dust spawn?
            SpaceDust spec = new SpaceDust(screenWidth,screenHeight);
            dustList.add(spec);
        }
        SharedPreferences gamepref=context.getSharedPreferences(MainActivity.GAMETAG, context.MODE_PRIVATE);
        if(gamepref.contains("VolumePref"))
        {
            IsVolumeAllowed=gamepref.getBoolean("VolumePref", false);
        }
        if(IsVolumeAllowed)
        {
            myAudioManager.LoadMusicfile("game.mp3",3);
            bulletsound=myAudioManager.LoadSoundfile("cointake.mp3");
            enemyblastsound=myAudioManager.LoadSoundfile("cointake.mp3");
        }
    }
    @Override
    public void run() {
        while(playing)
        {
            lasttime=System.currentTimeMillis();
            update();
            draw();
            control();
        }
    }
    
    private void update(){
        player.update();
        if(bullet!=null)
            bullet.update();
        enemy1.update(player.getSpeed());
        enemy2.update(player.getSpeed());
        enemy3.update(player.getSpeed());
        for (SpaceDust sd : dustList) {
            sd.update(player.getSpeed());
        }
        for (int i = 0; i < bullets.size(); i++) {
            Bullet b=bullets.get(i);
            b.update();
        }
        //detect collision of player with enemy
        if(player.getRectangle().intersect(enemy1.getRectangle()))
        {
            //Toast.makeText(getContext(), "Game Over",Toast.LENGTH_SHORT).show();
            
            synchronized(this){
            GameActivity f=(GameActivity)context;
            f.onPause();
            f.finish();
            Intent i=new Intent(f,MainActivity.class);
            f.startActivity(i);}
        }
        if(player.getRectangle().intersect(enemy2.getRectangle()))
        {
            //Toast.makeText(getContext(), "Game Over",Toast.LENGTH_SHORT).show();
            synchronized(this){
            GameActivity f=(GameActivity)context;
            f.onPause();
            f.finish();
            Intent i=new Intent(f,MainActivity.class);
            f.startActivity(i);}
        }
        if(player.getRectangle().intersect(enemy3.getRectangle()))
        {
            //Toast.makeText(getContext(), "Game Over",Toast.LENGTH_SHORT).show();
            synchronized(this){
            GameActivity f=(GameActivity)context;
            f.onPause();
            f.finish();
            Intent i=new Intent(f,MainActivity.class);
            f.startActivity(i);}
        }
        //detecting collisions with bullets
        for (int i = 0; i < bullets.size(); i++) {
            Bullet b=bullets.get(i);
            if(b.getRectangle().intersect(enemy1.getRectangle()))
            {
                synchronized(this)
                {
                enemy1=new EnemyShip(context, screenWidth,screenHeight);
                bullets.remove(i);
                score++;
                if(enemyblastsound>-1 && IsVolumeAllowed)
                    myAudioManager.play(enemyblastsound);
                continue;
                }
                
                
            }
            if(b.getRectangle().intersect(enemy2.getRectangle()))
            {
                synchronized(this)
                {
                enemy2=new EnemyShip(context, screenWidth,screenHeight);
                bullets.remove(i);
                score++;
                if(enemyblastsound>-1 && IsVolumeAllowed)
                    myAudioManager.play(enemyblastsound);
                continue;
                }
            }
            if(b.getRectangle().intersect(enemy3.getRectangle()))
            {
                synchronized(this)
                {
                enemy3=new EnemyShip(context, screenWidth,screenHeight);
                bullets.remove(i);
                score++;
                if(enemyblastsound>-1 && IsVolumeAllowed)
                    myAudioManager.play(enemyblastsound);
                continue;
                }
            }
        }
    }
    private void draw(){
        if (ourHolder.getSurface().isValid()) {
            canvas = ourHolder.lockCanvas();
            canvas.drawColor(Color.argb(255, 0, 0, 0));
            if(bullet!=null)
                {
                canvas.drawBitmap(
                    bullet.getBitmap(),
                    bullet.getX(),
                    bullet.getY(),
                    paint);
                }
            canvas.drawBitmap(
                    player.getBitmap(),
                    player.getX(),
                    player.getY(),
                    paint);
            canvas.drawBitmap
                (enemy1.getBitmap(),
                enemy1.getX(),
                enemy1.getY(), paint);
            canvas.drawBitmap
                (enemy2.getBitmap(),
                enemy2.getX(),
                enemy2.getY(), paint);
            canvas.drawBitmap
                (enemy3.getBitmap(),
                enemy3.getX(),
                enemy3.getY(), paint);
            paint.setColor(Color.argb(255, 255, 255, 255));
            //Draw the dust from our arrayList
            for (SpaceDust sd : dustList) {
                canvas.drawPoint(sd.getX(), sd.getY(), paint);
                // Draw the player
                // ...
            }
            for (int i = 0; i < bullets.size(); i++) {
                Bullet b=bullets.get(i);
                canvas.drawBitmap(
                        b.getBitmap(),
                        b.getX(),
                        b.getY(),
                        paint);
            }
            paint.setTextAlign(Paint.Align.LEFT);
            paint.setColor(Color.argb(255, 255, 255, 255));
            paint.setTextSize(25);
            canvas.drawText("Fastest:" + "s"+
            ", Frame time :"  +frameruntime+ "ms"+", Speed:" +player.getSpeed()+" FPS:" +fps
            +" Score:"+score,10, 20, paint);
            ourHolder.unlockCanvasAndPost(canvas);
        }
    }
    public void fireBullet()
    {
        bullet = new Bullet(context,screenWidth,screenHeight,player.getY()+(player.getBitmap().getHeight())/2,
                player.getX()+player.getBitmap().getWidth());
        bullets.add(bullet);
        if(bulletsound>-1 && IsVolumeAllowed)
            myAudioManager.play(bulletsound);
    }
    private void control(){
        long thistime=System.currentTimeMillis();
        frameruntime=thistime-lasttime;
        if(frameruntime>0)
            fps = (int) (1000/frameruntime);
        else
            fps = 1000;
        try {
            gameThread.sleep(100);//fps=60*14 = 1000ms
            } 
        catch (InterruptedException e) {
            }
    }
    public void pause() {
        if(IsVolumeAllowed && myAudioManager!=null)
        {
            myAudioManager.pauseBgMusic();
        }
        playing = false;
        boolean waitforclose=true;
        
            try {
            gameThread.join();
            //waitforclose=false;
            }
            catch (InterruptedException e) {
            }
        
    }
    public void resume() {
        playing = true;
        gameThread = new Thread(this);
        gameThread.start();
        if(IsVolumeAllowed && myAudioManager!=null)
        {
            myAudioManager.resumeBgMusic();
        }
    }
    @Override
    public boolean onTouchEvent(MotionEvent motionEvent) {
        switch (motionEvent.getAction() ) {
        case MotionEvent.ACTION_UP:
            break;
        case MotionEvent.ACTION_DOWN:
            
            break;
        case MotionEvent.ACTION_MOVE:
            player.move((int)(motionEvent.getY()));
            break;
        }
        return true;
    }

}

share on whatapp
214 Views

Comments

 
 
Private Policy   Terms of Service   4922