Android Open Source - balance-it Ball






From Project

Back to project page balance-it.

License

The source code is released under:

Apache License

If you think the Android project balance-it listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.example.balanceit;
/*from  ww w. java  2 s.co  m*/
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;

/**
 * Die Ball-Klasse reprsentiert die Spielkugel.
 * Sie speichert die aktuelle  und die letzte Position, die Geschwindigkeit, die Startposition, den Kugelradius
 * und die Bitmap zur Darstellung.
 * Es existieren Methoden zur Kugelbewegung, zur Kollisionserkennung mit dem Spielfeldrand und zum Bestimmen,
 * ob sich die Kugel innerhalb einer bestimmten Spielfeldkachel befindet.
 * Auerdem wird eine Methode zum Zeichnen der Kugel bereitgestellt.
 */
class Ball {

    //Membervariablen mit unvernderlichen Kugeldaten (Startposition, Kachelgre, Kugelradius, Bitmap)
    private int mTileSize;
    private int mRadius;
    private int mDifficulty;
    private Bitmap mBitmap;
    private Paint mPaint; 
    private int mStartPosX;
    private int mStartPosY;
    private int mSpeed;
    //Membervariablen mit bewegten Kugeldaten (aktuelle Position)
    public float mPosX;
    public float mPosY;
    public float mStepX;
    public float mStepY;

    /** Konstruktor 
     * @param x Startposition X der Kugel
     * @param y Startposition Y der Kugel
     * @param radius Kugelradius
     * @param tileSize Kachelgre
     * @param difficulty Schwierigkeitsgrad/Geschwindigkeit der Kugelbewegung
     * @param bitmap Bitmap der Kugel
     */
    Ball(int x, int y, int radius,  int tileSize, int difficulty, Bitmap bitmap) {
    //TODO AP2: bergabeparameter in Membervariablen speichern, mPaint initialisieren
      mPosX=x;
      mPosY=y;
      mTileSize=tileSize;
      mRadius=radius;
      mDifficulty=difficulty;
      mPaint=new Paint();
      mPaint.setColor(Color.RED);
    mStartPosX=x;
    mStartPosY=y; 
    mBitmap=bitmap;
    
    if (mDifficulty ==0){
      mSpeed = 4;
    
    }
    if (mDifficulty == 1){
      mSpeed = 8;
    }
    if  (mDifficulty ==2){
      mSpeed =12;
    }
    //TODO AP Kugel: restliche Membervariablen initialisieren, Startposition merken
    }

    /** setze Kugel auf Startposition zurck */
    public void reset(){
      mPosY=mStartPosY;
       mPosX=mStartPosX;
      
      //TODO AP Kugel: Position zurcksetzen
     }

    /** berechne neue Kugelposition aus Accelerometerwerten 
     * @param sensorX X-Wert des Neigungssensors
     * @param sensorY Y-Wert des Neigungssensors
     */
    public void updatePosition(float sensorX, float sensorY) {
        //TODO AP2: als Testimplementierung die Sensorwerte auf die Kugelposition aufaddieren
      mStepX=mSpeed*sensorX;
      if (mStepX>mTileSize){
        mStepX=mTileSize;
      }
      mStepY=mSpeed*sensorY;
      if (mStepY>mTileSize){
        mStepY=mTileSize;
      }
      mPosX=mPosX+mStepX;
      mPosY=mPosY+mStepY;
      
      //TODO AP Kugel: Kugelposition mit Sensordaten aktualisieren 
    }

    /** korrigiere die Position, wenn die Kugel das Spielfeld verlsst
     *  @param width Spielfeldbreite
     * @param height Spielfeldhhe
     * @return true, wenn eine Kollision mit den Wnden erfolgt ist
     */
    public boolean resolveCollisionWithBounds(int width, int height) {
    if ( mPosX<0){
      mPosX=0;
    }
    if (mPosX>width-(2*mRadius)){
      mPosX=width-(2*mRadius);
    }
      
    if(mPosY<0){
      mPosY=0;
    }
    if(mPosY>height-(2*mRadius)){
      mPosY=height-(2*mRadius);
    }
    
      //TODO AP Kugel: Kugelposition innerhalb des Spielfelds halten
      //TODO AP Kugel: true zurckliefern bei Kollision mit den Wnden 

    if (mPosX==0 || mPosX==width-(2*mRadius) || mPosY==0 || mPosY==height-(2*mRadius) ){
      return true;
    }
    else return false;
  
    }

    /** teste ob Kugelzentrum innerhalb des Kachelobjekts ist,
     * bei quadratischen Objekten betrachte Abstand entlang X/Y-Achse,
     * bei kreisfrmigen Objekten berechne Abstand zum Kreisrand
     * @param tile Kachel
     * @return true, wenn Kugelzentrum ber aktivem (Rechteck,Kreis)-Bereich der Kachel ist
     */
    public boolean centerIsOnTile(Tile tile) {
      //Log.v(World.LOGTAG,"Pos:"+mPosX+","+mPosY);
      //Log.v(World.LOGTAG,"Posk:"+tile.mPosX+","+tile.mPosY);
      //Log.v(World.LOGTAG,"kt:"+tile.mType);
      //TODO AP Kugel: Kugelposition testen
      if(tile.mType == Tile.Type.SQUARE){
      
        if ((mPosX+ mRadius)>tile.mPosX && (mPosX+ mRadius)<tile.mPosX+mTileSize
          &&( mPosY+ mRadius)>tile.mPosY && (mPosY +mRadius)<tile.mPosY+mTileSize){
        
          return true; 
        }
      }
//      Log.v(World.LOGTAG,"Pos:"+mPosX+","+mPosY);
      if(tile.mType == Tile.Type.CIRCLE){
      if (Math.sqrt((mPosX-tile.mPosX) * (mPosX-tile.mPosX)+ (mPosY-tile.mPosY)*(mPosY-tile.mPosY)) <= 0.5* mTileSize){
        return true;
      }
    }
    return false ;
    }

    /** berechne X-Abstand von Kugelzentrum zu Kachelzentrum
     * @param tile Kachel
     * @return Abstand in X-Koordinatenrichtung
     */
    private float calcDistanceX(Tile tile){
//      Math.abs(x);
      //TODO AP Kugel: Abstand X berechnen
      return 0.0f;
    }

    /** berechne Y-Abstand von Kugelzentrum zu Kachelzentrum
     * @param tile Kachel
     * @return Abstand in Y-Koordinatenrichtung
     */
    private float calcDistanceY(Tile tile){
      //TODO AP Kugel: Abstand Y berechnen
      return 0.0f;
    }

    /** zeichne die Kugelbitmap an der aktuellen (gerundeten) Position
     * @param canvas Leinwand
     */
    public void draw(Canvas canvas) {
      //solange keine Bitmap vorhanden ist, einen Kreis zeichen
      if (mBitmap==null){
            //TODO AP2: einen Kreis mit Kugelradius an der Kugelposition zeichnen
        canvas.drawCircle(mPosX+mRadius,mPosY+mRadius,mRadius,mPaint);
      } else {
        canvas.drawBitmap(mBitmap, (int) (mPosX+0.5), (int) (mPosY+0.5), null);
      }
        
    }
}




Java Source Code List

com.example.balanceit.Ball.java
com.example.balanceit.FXHelper.java
com.example.balanceit.GameActivity.java
com.example.balanceit.GravitySensorListener.java
com.example.balanceit.InfoActivity.java
com.example.balanceit.StartActivity.java
com.example.balanceit.Tile.java
com.example.balanceit.World.java