Auf Thema antworten

Hier ist noch der Code aus der GameView. Ist sehr viel. die wichtigsten Methoden sind onDraw, onTouchEvent und zeit.

[code=Java]package ordicolor.ordicolor;


import android.annotation.SuppressLint;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.view.MotionEvent;

import android.view.SurfaceHolder;

import android.view.SurfaceView;


import java.util.Random;


import static java.lang.String.valueOf;


public class GameView extends SurfaceView {



    private SurfaceHolder surfaceHolder;

    MainActivity main = new MainActivity();

    private Bitmap bmp1, bmp2 ,bmp3 ,bmp4 ,bmp5 ,bmp6 ,bmp7 ,bmp8;

    private Bitmap licht;

    private int y;

    private int direction, fortschritt, tlinks, trechts, rZaehler, blinken, etagenHoehe, etage, gefahren, rndEtage, zeitzaehler, rectBreite, cdGeschwindigkeit, screenW ,screenH, sollFahren, score, restartZaehler, btnGroesse, highscore;

    private GameLoopThread theGameLoopThread;

    private Sprite theSprite, theSprite2, theSprite3, theSprite4;

    private boolean amfahren, schaden, hoch, runter, fuellen, gameOver, speichern;

    Random rnd = new Random();

    Paint paint = new Paint();


    @SuppressLint("WrongCall") public GameView(Context context) {

        super(context);

        surfaceHolder = getHolder();

        surfaceHolder.addCallback(new SurfaceHolder.Callback() {


            public void surfaceDestroyed(SurfaceHolder holder) {

                boolean retry = true;

                theGameLoopThread.setRunning(false);

                while(retry){

                    try {

                        theGameLoopThread.join();

                        retry=false;

                    }catch(InterruptedException e){


                    }

                }


            }


            public void surfaceCreated(SurfaceHolder holder) {

                theGameLoopThread.setRunning(true);

                theGameLoopThread.start();

            }


            public void surfaceChanged(SurfaceHolder holder, int format,int width, int height) {



            }


        });

        direction = 0;

        fortschritt = 0;

        tlinks = 0;

        trechts = 0;

        rZaehler = 0;

        blinken = 0;

        etagenHoehe = 0;

        etage = 0;

        gefahren = 0;

        rndEtage= 0;

        zeitzaehler = 0;

        rectBreite= 0;

        cdGeschwindigkeit = 0;

        screenW = 0;

        screenH = 0;

        sollFahren = 0;

        score = 0;

        amfahren = false;

        schaden = false;

        hoch = false;

        runter = false;

        fuellen = false;

        gameOver = false;

        speichern = false;

        screenW = main.getScreenWidth();

        screenH = main.getScreenHeight();

        btnGroesse = screenH / 6;


        bmp1 = BitmapFactory.decodeResource(getResources(),R.drawable.fahrstuhl,null);

        bmp1 = Bitmap.createScaledBitmap(bmp1,screenW, screenH * 8,true);

        etagenHoehe = bmp1.getHeight() / 8;

        gefahren = 0;

        bmp2 = BitmapFactory.decodeResource(getResources(),R.drawable.innen,null);

        bmp2 = Bitmap.createScaledBitmap(bmp2, screenW, screenH,true);

        bmp3 = BitmapFactory.decodeResource(getResources(),R.drawable.plus,null);

        bmp3 = Bitmap.createScaledBitmap(bmp3, btnGroesse, btnGroesse,true);

        bmp4 = BitmapFactory.decodeResource(getResources(),R.drawable.minus,null);

        bmp4 = Bitmap.createScaledBitmap(bmp4, btnGroesse, btnGroesse,true);

        bmp5 = BitmapFactory.decodeResource(getResources(),R.drawable.tuerlinks,null);

        bmp5 = Bitmap.createScaledBitmap(bmp5, screenW / 2, screenH,true);

        bmp6 = BitmapFactory.decodeResource(getResources(),R.drawable.tuerrechts,null);

        bmp6 = Bitmap.createScaledBitmap(bmp6, screenW / 2, screenH,true);

        bmp7 = BitmapFactory.decodeResource(getResources(),R.drawable.reparieren,null);

        bmp7 = Bitmap.createScaledBitmap(bmp7, btnGroesse, btnGroesse,true);

        bmp8 = BitmapFactory.decodeResource(getResources(),R.drawable.ordicolorgameover,null);

        bmp8 = Bitmap.createScaledBitmap(bmp8, screenW, screenH,true);

        licht = BitmapFactory.decodeResource(getResources(),R.drawable.lichtzwei,null);

        trechts = bmp2.getWidth();

        tlinks = -bmp2.getWidth() / 2;

        theSprite = new Sprite(this, bmp3, 0, screenH - btnGroesse);

        theSprite2 = new Sprite(this, bmp4, screenW - btnGroesse , screenH - btnGroesse);

        theSprite3 = new Sprite(this, bmp7, (screenW/2)-(btnGroesse/2) , screenH - btnGroesse);

        theSprite4 = new Sprite(this, bmp8, 0, 0);

        theGameLoopThread = new GameLoopThread(this);

        rndEtage();

        paint.setTextSize(50);

        y = -etagenHoehe *7;

    }



    @Override

    protected void onDraw(Canvas canvas) {

        if(!gameOver){

            paint.setColor(Color.BLACK);

            canvas.drawBitmap(bmp1, 0, y, null);

            canvas.drawBitmap(bmp5,tlinks ,0, null);

            canvas.drawBitmap(bmp6,trechts ,0, null);

            canvas.drawBitmap(bmp2, 0, 0, null);

            canvas.drawBitmap(licht, 0, 0,null);

            theSprite.onDraw(canvas);

            theSprite2.onDraw(canvas);

            if(schaden){theSprite3.onDraw(canvas);}

            canvas.drawText(valueOf(etage),bmp2.getWidth() / 2 - 12, 68, paint);

            canvas.drawText(valueOf(rndEtage),bmp2.getWidth()- 80, bmp2.getHeight() / 2 + 19, paint);

            paint.setColor(Color.GREEN);

            canvas.drawRect(0 ,0 ,rectBreite,10,paint);

        }

        else{

            paint.setColor(Color.WHITE);

            canvas.drawRect(0 ,0 ,screenW,screenH,paint);

            paint.setColor(Color.RED);

            paint.setTextSize(100);

            canvas.drawText("Game Over",100, screenH/4, paint);

            paint.setColor(Color.BLACK);

            canvas.drawText("Score: " + valueOf(score), 100, screenH/4*2, paint);

            canvas.drawText("Highscore: " + valueOf(main.getHighscore()), 100, screenH/8*7, paint);

            theSprite4.onDraw(canvas);

        }




    }


    @Override

    public boolean onTouchEvent(MotionEvent event) {

        synchronized (getHolder()) {



                if (theSprite.isTouched(event.getX(), event.getY()) && etage < 7 && !runter) {

                    direction = 30;

                    gefahren = 0;

                    etage++;

                    fortschritt = 0;

                    amfahren = true;

                    hoch = true;

                    fuellen = true;

                    sollFahren += 1;

                }


                if (theSprite2.isTouched(event.getX(), event.getY()) && etage > 0 && !hoch) {

                    direction = -30;

                    gefahren = 0;

                    etage--;

                    fortschritt = 0;

                    amfahren = true;

                    runter = true;

                    fuellen = true;

                    sollFahren += 1;

                }



            if (theSprite3.isTouched(event.getX(), event.getY())) {

                rZaehler++;

            }


            if (theSprite4.isTouched(event.getX(), event.getY()) && gameOver && restartZaehler >= 150) {

                gameOver = false;

                rectBreite = 0;

                paint.setTextSize(50);

                y = -etagenHoehe * 7;

                etage = 0;

                score = 1;

                schaden = false;

                cdGeschwindigkeit = 0;

                restartZaehler = 0;

                sollFahren = 0;

                licht = BitmapFactory.decodeResource(getResources(),R.drawable.lichtzwei,null);

                main.safe();

            }


        }

        return false;

    }



    //Testet, ob der Fahrstuhl die gewünschte Etage errreicht hat und hält ihn an.

    public void fahren(){


        if(amfahren){

            if(fortschritt == 0){

                schliessen();

            }

            if(fortschritt == 1){

                schaden();

            }

            if(fortschritt == 2){

                bewegen();

            }

            if(fortschritt == 3){

                oeffnen();

            }

        }

        else{

            rndEtage();

        }


        if(gameOver){

            restartZaehler++;

        }


    }


    //schließt die Tür

    public void schliessen(){


            if(tlinks < 0){

                tlinks += 20;

                trechts -= 20;

            }

            else{

                tlinks += 4;

                trechts -= 4;

                fortschritt = 1;

                runter = true;

                hoch = true;

            }

    }



    //Steuert den Schaden des Aufzugs.

    public void schaden(){


            if(!schaden){

                if(rnd.nextInt(4 - -1) == 1){

                    schaden = true;

                    rZaehler = 0;

                }

                else{


                    fortschritt = 2;

                }

            }

            else{

                blinken++;

                fuellen = false;

                if(10 <= rZaehler){

                    schaden = false;

                    fortschritt = 2;

                    licht = BitmapFactory.decodeResource(getResources(),R.drawable.lichtzwei,null);

                }

                if(blinken ==10){

                    licht = BitmapFactory.decodeResource(getResources(),R.drawable.lichtzwei,null);

                }

                if(blinken ==20){

                    licht = BitmapFactory.decodeResource(getResources(),R.drawable.licht,null);

                    licht = Bitmap.createScaledBitmap(licht, screenW, screenH,true);

                    blinken = 0;

                }

            }


    }



    //Bewegt den Aufzug.

    public void bewegen(){



        fuellen = true;

        if(direction != 0){

            y += direction;

            gefahren += 30;

        }

        if(gefahren >= etagenHoehe * sollFahren) {

            direction = 0;

            fortschritt = 3;

            tlinks -= 4;

            trechts += 4;

            sollFahren = 0;

        }


    }



    //Öffnet die Tür.

    public void oeffnen(){


            if(tlinks > -600){

                tlinks -= 20;

                trechts += 20;

            }

            else{

                amfahren = false;

                fortschritt = 0;

                runter = false;

                hoch = false;

                fuellen = false;

            }


    }


    public void rndEtage(){

        if(etage == rndEtage && !gameOver) {

            rndEtage = rnd.nextInt(7 - -1);

            rectBreite = 0;

            cdGeschwindigkeit++;

            score++;

        }

    }



    //Hier wird die Zeit, die der Spieler zum drücken hat verwaltet.

    public void zeit(){

        if(!fuellen){

            if(zeitzaehler >= 10){

                rectBreite +=30;

                zeitzaehler = cdGeschwindigkeit;

            }

            else{

                zeitzaehler++;

            }

            if(rectBreite >= screenW){

                fortschritt = 3;

                gameOver = true;

                if(main.getHighscore() < score){

                    main.setHighscore(highscore);

                }

            }

        }

    }


}

[/code]



Oben