<commit_before>package com.example.balanceit;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;

/**
 * Die Ball-Klasse repräsentiert 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.
 * Außerdem wird eine Methode zum Zeichnen der Kugel bereitgestellt.
 */
class Ball {

    //Membervariablen mit unveränderlichen Kugeldaten (Startposition, Kachelgröße, Kugelradius, Bitmap)
    private int mTileSize;
    private int mRadius;
    private int mDifficulty;
    private Bitmap mBitmap;
    private Paint mPaint; 

    //Membervariablen mit bewegten Kugeldaten (aktuelle Position)
    public float mPosX;
    public float mPosY;

    /** Konstruktor 
     * @param x Startposition X der Kugel
     * @param y Startposition Y der Kugel
     * @param radius Kugelradius
     * @param tileSize Kachelgröße
     * @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);
    //TODO AP Kugel: restliche Membervariablen initialisieren, Startposition merken
    }

    /** setze Kugel auf Startposition zurück */
    public void reset(){
    	//TODO AP Kugel: Position zurücksetzen
     }

    /** 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
    	mPosX=mPosX+8*sensorX;
    	mPosY=mPosY+8*sensorY;
    	
    	//TODO AP Kugel: Kugelposition mit Sensordaten aktualisieren 
    }

    /** korrigiere die Position, wenn die Kugel das Spielfeld verlässt
     * @param width Spielfeldbreite
     * @param height Spielfeldhöhe
     * @return true, wenn eine Kollision mit den Wänden erfolgt ist
     */
    public boolean resolveCollisionWithBounds(int width, int height) {
    	//TODO AP Kugel: Kugelposition innerhalb des Spielfelds halten
    	//TODO AP Kugel: true zurückliefern bei Kollision mit den Wänden 
    	return false;
    }

    /** teste ob Kugelzentrum innerhalb des Kachelobjekts ist,
     * bei quadratischen Objekten betrachte Abstand entlang X/Y-Achse,
     * bei kreisförmigen 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) {
    	//TODO AP Kugel: Kugelposition testen
    	return false;
    }

    /** berechne X-Abstand von Kugelzentrum zu Kachelzentrum
     * @param tile Kachel
     * @return Abstand in X-Koordinatenrichtung
     */
    private float calcDistanceX(Tile tile){
    	//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) {
        //TODO AP2: einen Kreis mit Kugelradius an der Kugelposition zeichnen
    	canvas.drawCircle(mPosX,mPosY,mRadius,mPaint);
    	//TODO AP Kugel: die Kugelbitmap an der Kugelposition darstellen 
    }
}<commit_msg>use bitmap to draw the ball, if no bitmap is given draw plain red circle<commit_after>package com.example.balanceit;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;

/**
 * Die Ball-Klasse repräsentiert 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.
 * Außerdem wird eine Methode zum Zeichnen der Kugel bereitgestellt.
 */
class Ball {

    //Membervariablen mit unveränderlichen Kugeldaten (Startposition, Kachelgröße, Kugelradius, Bitmap)
    private int mTileSize;
    private int mRadius;
    private int mDifficulty;
    private Bitmap mBitmap;
    private Paint mPaint; 

    //Membervariablen mit bewegten Kugeldaten (aktuelle Position)
    public float mPosX;
    public float mPosY;

    /** Konstruktor 
     * @param x Startposition X der Kugel
     * @param y Startposition Y der Kugel
     * @param radius Kugelradius
     * @param tileSize Kachelgröße
     * @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);
    //TODO AP Kugel: restliche Membervariablen initialisieren, Startposition merken
    }

    /** setze Kugel auf Startposition zurück */
    public void reset(){
    	//TODO AP Kugel: Position zurücksetzen
     }

    /** 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
    	mPosX=mPosX+8*sensorX;
    	mPosY=mPosY+8*sensorY;
    	
    	//TODO AP Kugel: Kugelposition mit Sensordaten aktualisieren 
    }

    /** korrigiere die Position, wenn die Kugel das Spielfeld verlässt
     * @param width Spielfeldbreite
     * @param height Spielfeldhöhe
     * @return true, wenn eine Kollision mit den Wänden erfolgt ist
     */
    public boolean resolveCollisionWithBounds(int width, int height) {
    	//TODO AP Kugel: Kugelposition innerhalb des Spielfelds halten
    	//TODO AP Kugel: true zurückliefern bei Kollision mit den Wänden 
    	return false;
    }

    /** teste ob Kugelzentrum innerhalb des Kachelobjekts ist,
     * bei quadratischen Objekten betrachte Abstand entlang X/Y-Achse,
     * bei kreisförmigen 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) {
    	//TODO AP Kugel: Kugelposition testen
    	return false;
    }

    /** berechne X-Abstand von Kugelzentrum zu Kachelzentrum
     * @param tile Kachel
     * @return Abstand in X-Koordinatenrichtung
     */
    private float calcDistanceX(Tile tile){
    	//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);
    	}
    		
    }
}
{'fraction_non_alphanumeric': 0.06921326787211113, 'fraction_numerical': 0.0026344150401149563, 'mean_word_length': 3.1739130434782608, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2959306', 'n_tokens_mistral': 2810, 'n_tokens_neox': 2790, 'n_words': 824}