Skip to main content
Code Review

Return to Question

added 102 characters in body; edited tags
Source Link

This is improved code from my previous question. This mini game which we call "Moon Buggy" is available in beta"Moon Buggy" is available in beta from the google playstore.

The action is that you control a vechicle on the moon and you defend yourself against evil UFO:s.

This is improved code from my previous question. This mini game which we call "Moon Buggy" is available in beta from the google playstore.

This is improved code from my previous question. This mini game which we call "Moon Buggy" is available in beta from the google playstore.

The action is that you control a vechicle on the moon and you defend yourself against evil UFO:s.

added 145 characters in body
Source Link

This is improved code from my previous question. This mini game which we call "Moon Buggy" is available in beta from the google playstore.

The remainder of the code is available on request.

This is improved code from my previous question.

This is improved code from my previous question. This mini game which we call "Moon Buggy" is available in beta from the google playstore.

The remainder of the code is available on request.

Source Link

Improved Android mini game

This is improved code from my previous question.

enter image description here

I have written a separate class for the UFO which is instanciated once for every UFO:

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Looper;
import java.util.Random;
public class AttackingAlien extends Alien {
 private Bitmap alien;
 static boolean recent = true; // switch this in beginning
 private long changeDirections = System.currentTimeMillis();
 private long fireTimeout = System.currentTimeMillis();
 private int screenWidth;
 private int screenHeight;
 private int ufoY = 0;
 private int ufoX = 0;
 private int missileX = 25;
 private int deltaUfoY = 7;
 private int deltaUfoX = 7;
 private int missileOffSetY = 0;
 private int missileYstart = 0;
 private boolean wasHit = false;
 private boolean alienexplode;
 private boolean waitForTimer, waitForUfoTimer;
 private boolean toggleDeltaY = true;
 private boolean runOnce = true;
 private boolean startMissile = true;
 public AttackingAlien(ParallaxView view, Context context, String name, final int screenWidth, int screenHeight, int p) {
 super(context, name);
 this.deltaUfoY = p;
 int alienResID = context.getResources().getIdentifier(name,
 "drawable", context.getPackageName());
 alien = BitmapFactory.decodeResource(context.getResources(), alienResID);
 int max = (int) (0.75 * screenWidth);
 int min = 20;
 int diff = max - min;
 Random rn = new Random();
 int i5 = rn.nextInt(diff + 1);
 i5 += min;
 missileX = i5;
 ufoX = missileX;
 max = 200;
 diff = max - min;
 this.screenHeight = screenHeight;
 this.screenWidth = screenWidth;
 ufoY = 0;
 waitForUfoTimer = true;
 int max2 = 20000;
 int min2 = 18000;
 int diff2 = max2 - min2;
 Random rn2 = new Random();
 int result = rn2.nextInt(diff2 + 1);
 result += min2;
 Handler handler = new Handler(Looper.getMainLooper());
 handler.postDelayed(new Runnable() {
 @Override
 public void run() {
 missileX = ufoX;
 setRecent();
 waitForUfoTimer = false;
 }
 }, result);
 }
 private void changeDirections() {
 int max2 = 500;
 int min2 = 100;
 int diff2 = max2 - min2;
 Random rn2 = new Random();
 int result = rn2.nextInt(diff2 + 1);
 result += min2;
 if (System.currentTimeMillis() - changeDirections >= result) {
 // Change direction here
 toggleDeltaY = !toggleDeltaY;
 changeDirections = System.currentTimeMillis();
 }
 }
 public void update(Canvas canvas, Paint paint, boolean toggleDeltaY, int screenWidth, int screenHeight) {
 if (ufoX > screenWidth - 250 || ufoX < 10) { // UFO change horizontal direction
 deltaUfoX = -deltaUfoX;
 }
 //make sure UFO does not move too low
 if (ufoY >= 20) {
 deltaUfoY = -deltaUfoY;
 }
 if ((ufoY + screenHeight / 100 * 25) <= 0) // don't move outside the top
 deltaUfoY = -deltaUfoY;
 if (!waitForUfoTimer && Background.checkpoint >= 'A') { // && sectionComplete > 0) {
 runOnce = true;
 //alienY++;
 canvas.drawBitmap(alien, ufoX + 10, ufoY + screenHeight / 100 * 25, paint);
 }
 //missileX = missileX + speedAlienX;
 ufoX = ufoX + deltaUfoX;
 if (waitForTimer) missileX = ufoX;
 if (toggleDeltaY) {
 deltaUfoY = -deltaUfoY;
 }
 ufoY = ufoY + deltaUfoY;
 changeDirections();
 }
 public void checkBeingHit(int[] missiles, int buggyXDisplacement, double buggyXDistance, Canvas canvas, Bitmap explode2, Paint paint, int score, ParallaxView pview, int i1, int xbuggy2) {
 // if UFO is being hit by buggy
 if (!waitForTimer && java.lang.Math.abs(ufoX + 10 - 400 - buggyXDistance) * 2 < (alien.getWidth()) && java.lang.Math.abs(ufoY + screenHeight / 100 * 25 - (screenHeight / 100 * 95 - missiles[i1] - xbuggy2)) * 2 < (alien.getHeight())) {
 missileOffSetY = -9999;
 canvas.drawBitmap(explode2, ufoX + 10, ufoY + screenHeight / 100 * 25, paint);
 if (runOnce) {
 ParallaxView.score = ParallaxView.score + 100;
 Handler handler = new Handler(Looper.getMainLooper());
 handler.postDelayed(new Runnable() {
 @Override
 public void run() {
 int max = (int) (0.75 * screenWidth);
 int min = 20;
 int diff = max - min;
 Random rn = new Random();
 int i5 = rn.nextInt(diff + 1);
 i5 += min;
 missileX = i5;//25;
 ufoX = missileX;
 ufoY = 0;
 alienexplode = false;
 waitForTimer = false;
 waitForUfoTimer = false;
 startMissile = true;
 }
 }, 3000);
 }
 runOnce = false;
 waitForUfoTimer = true;
 startMissile = false;
 waitForTimer = true;
 if (!alienexplode) {
 pview.changeText();
 }
 alienexplode = true;
 }
 }
 private void checkFire() {
 int max = 15000;
 int min = 12000;
 int diff = max - min;
 Random rn = new Random();
 int i5 = rn.nextInt(diff + 1);
 i5 += min;
 if (System.currentTimeMillis() - fireTimeout >= i5) { // means how often the alien fires
 fireTimeout = System.currentTimeMillis();
 missileOffSetY = 0;
 missileX = ufoX;
 }
 }
 private void setRecent() {
 AttackingAlien.recent = false;
 }
 public boolean drawMissile(ParallaxView view, Canvas canvas, Paint paint, int buggyXDisplacement, double buggyXDistance, Bitmap buggy, int jumpHeight, int screenHeight) {
 wasHit = false;
 checkFire();
 // if buggy was hit by a missile
 if (!AttackingAlien.recent && !view.waitForTimer && java.lang.Math.abs(((buggyXDisplacement + buggyXDistance) + buggy.getWidth() / 2) - (missileX + 10 + alien.getWidth() / 2)) < buggy.getWidth() / 2 && java.lang.Math.abs((ufoY + screenHeight / 100 * 25 + 75 + missileOffSetY) - ((screenHeight * 0.3) - jumpHeight + buggy.getHeight())) < 65) {
 AttackingAlien.recent = true;
 canvas.drawBitmap(view.explode, (float) (buggyXDisplacement + buggyXDistance), (float) (screenHeight * 0.5) - jumpHeight, paint);
 ParallaxView.bombed--;
 missileOffSetY = 0;
 wasHit = true;
 view.recent = true;
 Handler handler = new Handler(Looper.getMainLooper());
 handler.postDelayed(new Runnable() {
 @Override
 public void run() {
 setRecent();
 waitForTimer = false;
 wasHit = false;
 }
 }, 7000);
 waitForTimer = true;
 } else {
 // buggy was not hit so UFO fires more missiles
 //TODO: check if the movements are realistic
 if (!waitForTimer && !waitForUfoTimer && Background.checkpoint >= 'A') {
 if (startMissile) {
 startMissile = false;
 missileYstart = ufoY;
 }
 canvas.drawText("くろまる", missileX + alien.getWidth() / 2, missileYstart + screenHeight / 100 * 25 + alien.getHeight() + missileOffSetY, paint);
 missileOffSetY = missileOffSetY + 4;
 }
 wasHit = false;
 }
 return wasHit;
 }
}
lang-java

AltStyle によって変換されたページ (->オリジナル) /