summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AndroidManifest.xml8
-rw-r--r--BallBounce.apkbin1216968 -> 1219500 bytes
-rw-r--r--java/org/neocities/autoart/ballbounce/CanvasView.java73
-rw-r--r--java/org/neocities/autoart/ballbounce/Game.java2
-rw-r--r--java/org/neocities/autoart/ballbounce/Highscores.java53
-rw-r--r--java/org/neocities/autoart/ballbounce/Menu.java11
-rw-r--r--java/org/neocities/autoart/ballbounce/MoveBall.java20
-rw-r--r--res/layout/activity_highscores.xml23
-rw-r--r--res/layout/activity_menu.xml19
-rw-r--r--res/values/strings.xml1
10 files changed, 172 insertions, 38 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 315434e..f4e05f9 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -8,7 +8,9 @@
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
- <activity android:name=".Menu">
+ <activity
+ android:name=".Menu"
+ android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -17,8 +19,8 @@
</activity>
<activity
android:name=".Game"
- android:screenOrientation="portrait"
- />
+ android:screenOrientation="portrait" />
+ <activity android:name=".Highscores"></activity>
</application>
</manifest>
diff --git a/BallBounce.apk b/BallBounce.apk
index 5dfc5b3..af66667 100644
--- a/BallBounce.apk
+++ b/BallBounce.apk
Binary files differ
diff --git a/java/org/neocities/autoart/ballbounce/CanvasView.java b/java/org/neocities/autoart/ballbounce/CanvasView.java
index bd76f30..7747e80 100644
--- a/java/org/neocities/autoart/ballbounce/CanvasView.java
+++ b/java/org/neocities/autoart/ballbounce/CanvasView.java
@@ -1,6 +1,7 @@
package org.neocities.autoart.ballbounce;
import android.content.Context;
+import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Handler;
@@ -35,6 +36,9 @@ public class CanvasView extends View
MoveBall moveBall = new MoveBall();
+ public Bitmap bmp;
+ public Canvas bmpCanvas;
+
public CanvasView(Context context)
{
@@ -65,6 +69,8 @@ public class CanvasView extends View
moveBall.a = Math.random()*0.00001;
moveBall.b = Math.random()*0.002;
+
+
colours = new ArrayList<>();
score = 0;
@@ -135,6 +141,9 @@ public class CanvasView extends View
ballSize = w*0.05;
paddleSize = w*0.2;
+ bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
+ bmpCanvas = new Canvas(bmp);
+
}
@@ -147,46 +156,46 @@ public class CanvasView extends View
Paint paint = new Paint();
- for (int i = 0; i < ballPositions.size(); i+=3)
- {
- double[] ballPosition = ballPositions.get(i);
- if (colours.size() <= Math.ceil((double)i/100))
- {
- int[] c = new int[3];
- c[0] = (int)(Math.random()*255);
- c[1] = (int)(Math.random()*255);
- c[2] = (int)(Math.random()*255);
+ int i = moveBall.t;
- colours.add(c);
- }
+ if (colours.size() <= Math.ceil((double)i/100))
+ {
+ int[] c = new int[3];
+ c[0] = (int)(Math.random()*255);
+ c[1] = (int)(Math.random()*255);
+ c[2] = (int)(Math.random()*255);
- paint.setStyle(Paint.Style.FILL);
- if (Game.MODE == Game.NORMAL_MODE || Game.MODE == Game.CRAZY_GRAVITY_MODE || Game.MODE == Game.FLIP_MODE)
- {
- paint.setARGB(255, 0, 0, 0);
- }
- else if (Game.MODE == Game.COLOUR_CHANGING_MODE)
- {
- paint.setARGB(255, colours.get(i / 100)[0], colours.get(i / 100)[1], colours.get(i / 100)[2]);
- }
- else if (Game.MODE == Game.OSCILLATION_MODE)
- {
- int val = (int)(255*Math.sin(0.001*i));
- paint.setARGB(255, val, val, val);
- }
- else if (Game.MODE == Game.BW_MODE)
- {
- int val = 255*((i/500)%2);
- paint.setARGB(255, val, val, val);
- }
- canvas.drawCircle((float) ballPosition[0], (float) ballPosition[1], (float) ballSize, paint);
+ colours.add(c);
}
+ paint.setStyle(Paint.Style.FILL);
+ if (Game.MODE == Game.NORMAL_MODE || Game.MODE == Game.CRAZY_GRAVITY_MODE || Game.MODE == Game.FLIP_MODE)
+ {
+ paint.setARGB(255, 0, 0, 0);
+ }
+ else if (Game.MODE == Game.COLOUR_CHANGING_MODE)
+ {
+ paint.setARGB(255, colours.get(i / 100)[0], colours.get(i / 100)[1], colours.get(i / 100)[2]);
+ }
+ else if (Game.MODE == Game.OSCILLATION_MODE)
+ {
+ int val = (int)(255*Math.sin(0.001*i));
+ paint.setARGB(255, val, val, val);
+ }
+ else if (Game.MODE == Game.BW_MODE)
+ {
+ int val = 255*((i/500)%2);
+ paint.setARGB(255, val, val, val);
+ }
+ bmpCanvas.drawCircle((float) currentBallPosition[0], (float) currentBallPosition[1], (float) ballSize, paint);
paint.setStyle(Paint.Style.STROKE);
paint.setARGB(255, 0, 0, 255);
paint.setStrokeWidth(10);
- canvas.drawLine((float)(paddlePosition[0]-paddleSize/2), (float)(paddlePosition[1]), (float)(paddlePosition[0]+paddleSize/2), (float)(paddlePosition[1]), paint);
+
+ canvas.drawBitmap(bmp, 0, 0, null);
+ canvas.drawLine((float) (paddlePosition[0] - paddleSize / 2), (float) (paddlePosition[1]), (float) (paddlePosition[0] + paddleSize / 2), (float) (paddlePosition[1]), paint);
+
}
}
diff --git a/java/org/neocities/autoart/ballbounce/Game.java b/java/org/neocities/autoart/ballbounce/Game.java
index 42f20b6..f2e0d7d 100644
--- a/java/org/neocities/autoart/ballbounce/Game.java
+++ b/java/org/neocities/autoart/ballbounce/Game.java
@@ -13,6 +13,8 @@ public class Game extends AppCompatActivity
public static final int BW_MODE = 4;
public static final int FLIP_MODE = 5;
public static final int NUM_MODES = 6;
+ public static final String[] MODE_NAMES = {"Normal mode", "Crazy gravity mode", "Colour changing mode", "Oscillation mode",
+ "Black & white mode", "Flip mode"};
@Override
protected void onCreate(Bundle savedInstanceState) {
diff --git a/java/org/neocities/autoart/ballbounce/Highscores.java b/java/org/neocities/autoart/ballbounce/Highscores.java
new file mode 100644
index 0000000..092992e
--- /dev/null
+++ b/java/org/neocities/autoart/ballbounce/Highscores.java
@@ -0,0 +1,53 @@
+package org.neocities.autoart.ballbounce;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.graphics.Color;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.util.TypedValue;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+public class Highscores extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_highscores);
+
+ SharedPreferences prefs = getSharedPreferences("ballBounceHighscores", Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = prefs.edit();
+
+
+ RelativeLayout rl = (RelativeLayout) findViewById(R.id.highscores_layout);
+
+ int n = 0;
+
+ for (int i = 0; i < Game.NUM_MODES; i++)
+ {
+ if (!prefs.contains("mode"+i))
+ continue;
+ TextView tv = new TextView(this);
+ tv.setText(Game.MODE_NAMES[i] + ": " + (prefs.getInt("mode" + i, -1)));
+ tv.setId(n + 100);
+
+ tv.setTextColor(Color.rgb(0, 0, 0));
+ tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
+ RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
+ RelativeLayout.LayoutParams.WRAP_CONTENT,
+ RelativeLayout.LayoutParams.WRAP_CONTENT);
+ if (n > 0)
+ params.addRule(RelativeLayout.BELOW, n+99);
+ else
+ params.addRule(RelativeLayout.BELOW, R.id.highscores_title);
+
+ tv.setLayoutParams(params);
+ rl.addView(tv);
+ n++;
+
+
+ }
+
+ }
+}
diff --git a/java/org/neocities/autoart/ballbounce/Menu.java b/java/org/neocities/autoart/ballbounce/Menu.java
index 3eca4a9..8c5b774 100644
--- a/java/org/neocities/autoart/ballbounce/Menu.java
+++ b/java/org/neocities/autoart/ballbounce/Menu.java
@@ -97,6 +97,17 @@ public class Menu extends AppCompatActivity
}
});
+ Button highscores = (Button) findViewById(R.id.highscores);
+ highscores.setOnClickListener(new View.OnClickListener()
+ {
+ @Override
+ public void onClick(View v)
+ {
+ Intent intent = new Intent(getApplicationContext(), Highscores.class);
+ startActivity(intent);
+ }
+ });
+
}
}
diff --git a/java/org/neocities/autoart/ballbounce/MoveBall.java b/java/org/neocities/autoart/ballbounce/MoveBall.java
index cc44fc4..fc8af99 100644
--- a/java/org/neocities/autoart/ballbounce/MoveBall.java
+++ b/java/org/neocities/autoart/ballbounce/MoveBall.java
@@ -1,8 +1,10 @@
package org.neocities.autoart.ballbounce;
import android.app.AlertDialog;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.graphics.Canvas;
import java.util.Date;
@@ -32,13 +34,13 @@ public class MoveBall implements Runnable
}
if (Game.MODE != Game.CRAZY_GRAVITY_MODE && Game.MODE != Game.FLIP_MODE)
- gravity = 1;
+ gravity = 0.0007*cv.w;
else if (Game.MODE == Game.CRAZY_GRAVITY_MODE)
gravity = Math.abs(cv.w*(t*a*Math.sin(b*t)));
else if (Game.MODE == Game.FLIP_MODE && (t/500) % 2 == 0)
- gravity = 1;
+ gravity = 0.0007*cv.w;
else if (Game.MODE == Game.FLIP_MODE)
- gravity = -1;
+ gravity = -0.0007*cv.w;
cv.currentBallPosition[0] += ballVel[0];
cv.currentBallPosition[1] += ballVel[1];
@@ -47,6 +49,16 @@ public class MoveBall implements Runnable
if (cv.currentBallPosition[1] > cv.h || cv.currentBallPosition[1] < 0 || cv.currentBallPosition[0] > cv.w || cv.currentBallPosition[0] < 0)
{
running = false;
+ SharedPreferences prefs = CanvasView.activity.getSharedPreferences("ballBounceHighscores", Context.MODE_PRIVATE);
+ SharedPreferences.Editor editor = prefs.edit();
+
+
+ int record = prefs.getInt("mode" + Game.MODE, -1);
+ if (CanvasView.score > record)
+ editor.putInt("mode" + Game.MODE, CanvasView.score);
+
+ editor.apply();
+
new AlertDialog.Builder(CanvasView.activity)
.setTitle("You lost!")
.setMessage("Score: " + CanvasView.score)
@@ -71,8 +83,10 @@ public class MoveBall implements Runnable
{
ballVel[1] += gravity;
cv.ballPositions.add(cv.currentBallPosition.clone());
+ t++;
cv.invalidate();
cv.handler.postDelayed(this, 10);
+
return;
}
diff --git a/res/layout/activity_highscores.xml b/res/layout/activity_highscores.xml
new file mode 100644
index 0000000..c626d11
--- /dev/null
+++ b/res/layout/activity_highscores.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingBottom="@dimen/activity_vertical_margin"
+ android:paddingLeft="@dimen/activity_horizontal_margin"
+ android:paddingRight="@dimen/activity_horizontal_margin"
+ android:paddingTop="@dimen/activity_vertical_margin"
+ tools:context="org.neocities.autoart.ballbounce.Highscores"
+ android:id="@+id/highscores_layout">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/highscores_title"
+ android:textColor="#000000"
+ android:text="Highscores"
+ android:layout_centerHorizontal="true"
+ android:textSize="20sp"
+ />
+
+</RelativeLayout>
diff --git a/res/layout/activity_menu.xml b/res/layout/activity_menu.xml
index 381b6d7..93cd2bc 100644
--- a/res/layout/activity_menu.xml
+++ b/res/layout/activity_menu.xml
@@ -9,6 +9,13 @@
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="org.neocities.autoart.ballbounce.Menu">
+ <ScrollView
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
+ <RelativeLayout
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
+
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -90,6 +97,18 @@
android:background="#faf7a0"
android:id="@+id/random_mode"
/>
+ <Button
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/random_mode"
+ android:layout_marginTop="20sp"
+ android:text="@string/highscores"
+ android:background="#ffd7f0"
+ android:id="@+id/highscores"
+ />
+
+ </RelativeLayout>
+ </ScrollView>
</RelativeLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2c97fc5..567b379 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -8,4 +8,5 @@
<string name="bw_mode">Play black &amp; white mode</string>
<string name="flip_mode">Play flip mode</string>
<string name="random_mode">Play a random mode!</string>
+ <string name="highscores">View High scores!</string>
</resources>