diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/org/neocities/autoart/ballbounce/CanvasView.java | 73 | ||||
-rw-r--r-- | java/org/neocities/autoart/ballbounce/Game.java | 2 | ||||
-rw-r--r-- | java/org/neocities/autoart/ballbounce/Highscores.java | 53 | ||||
-rw-r--r-- | java/org/neocities/autoart/ballbounce/Menu.java | 11 | ||||
-rw-r--r-- | java/org/neocities/autoart/ballbounce/MoveBall.java | 20 |
5 files changed, 124 insertions, 35 deletions
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; } |