diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2e42849..a2844e0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,26 +1,30 @@ + - + - + - - + + - - + + - - + + - - + + - + android:theme="@style/Theme.MyApplication.NoActionBar"> - + android:theme="@style/Theme.MyApplication.NoActionBar"> > + android:theme="@style/Theme.MyApplication.NoActionBar">> + + + + + + diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Bird.java b/app/src/main/java/com/echo/colorizeit/myganme/Bird.java index ee839de..1b6aab5 100644 --- a/app/src/main/java/com/echo/colorizeit/myganme/Bird.java +++ b/app/src/main/java/com/echo/colorizeit/myganme/Bird.java @@ -8,15 +8,19 @@ import android.graphics.Rect; import com.example.myapplication.R; -public class Bird extends RectHittableObject{ +public class Bird extends RectHittableObject { private Bitmap bird; + private int speed = Scene.speed; + public Bird(int x, int y, int width, int height, Context context) { super(x, y, width, height, context); } @Override public void draw(Canvas canvas) { - if(bird== null) + if (GameView.DEBUG) + canvas.drawRect(getBorderRect(), getDefault_paint()); + if (bird == null) bird = BitmapFactory.decodeResource(getContext().getResources(), R.mipmap.bird2); canvas.drawBitmap(bird, null, getBorder_rect(), null); @@ -26,4 +30,14 @@ public class Bird extends RectHittableObject{ public Boolean checkHit(Rect rect) { return false; } + + @Override + public void moveSingle() { + int x = getX() - speed / GameView.FPS; + if ((x > 0 - getWidth() - 100 && x <= Scene.screenWidth && getMoveStarted())) { + setLocation(x, getY()); + } else { + setMoveStarted(false); + } + } } diff --git a/app/src/main/java/com/echo/colorizeit/myganme/BirdMoving.java b/app/src/main/java/com/echo/colorizeit/myganme/BirdMoving.java new file mode 100644 index 0000000..a0aab0d --- /dev/null +++ b/app/src/main/java/com/echo/colorizeit/myganme/BirdMoving.java @@ -0,0 +1,26 @@ +package com.echo.colorizeit.myganme; + +import android.content.Context; + +import java.util.Random; + +public class BirdMoving extends Bird{ + private int randomNum = 0; + public BirdMoving(int x, int y, int width, int height, Context context) { + super(x, y, width, height, context); + Random random = new Random(); + randomNum = random.nextInt(2); + } + + @Override + public void moveSingle() { + + int x = getX() - (Scene.speed + 300*randomNum)/GameView.FPS; +// int y = getY() - (300*randomNum)/GameView.FPS; + if ((x > 0 - getWidth() - 100 && x <= Scene.screenWidth && getMoveStarted())) { + setLocation(x, getY()); + } else { + setMoveStarted(false); + } + } +} diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Box.java b/app/src/main/java/com/echo/colorizeit/myganme/Box.java index 6d85694..db86d70 100644 --- a/app/src/main/java/com/echo/colorizeit/myganme/Box.java +++ b/app/src/main/java/com/echo/colorizeit/myganme/Box.java @@ -9,6 +9,7 @@ import com.example.myapplication.R; public class Box extends RectHittableObject { private Bitmap obstacle; + private int speed = Scene.speed; public Box(int x, int y, int width, int height, Context context) { super(x, y, width, height, context); @@ -19,12 +20,23 @@ public class Box extends RectHittableObject { @Override public void draw(Canvas canvas) { -// canvas.drawRect(getBorderRect(), getDefault_paint()); + if (GameView.DEBUG) + canvas.drawRect(getBorderRect(), getDefault_paint()); - if(obstacle== null) + if (obstacle == null) obstacle = BitmapFactory.decodeResource(getContext().getResources(), R.mipmap.obstacle); canvas.drawBitmap(obstacle, null, getBorder_rect(), null); } + @Override + public void moveSingle() { + int x = getX() - speed / GameView.FPS; + if ((x > 0 - getWidth() - 100 && x <= Scene.screenWidth && getMoveStarted())) { + setLocation(x, getY()); + } else { + setMoveStarted(false); + + } + } } diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Cloud.java b/app/src/main/java/com/echo/colorizeit/myganme/Cloud.java index 016ae09..6db0e18 100644 --- a/app/src/main/java/com/echo/colorizeit/myganme/Cloud.java +++ b/app/src/main/java/com/echo/colorizeit/myganme/Cloud.java @@ -10,13 +10,15 @@ import com.example.myapplication.R; public class Cloud extends RectHittableObject{ private Bitmap cloud; + private int speed = Scene.speed; public Cloud(int x, int y, int width, int height, Context context) { super(x, y, width, height, context); } @Override public void draw(Canvas canvas) { - + if (GameView.DEBUG) + canvas.drawRect(getBorderRect(), getDefault_paint()); if(cloud== null) cloud = BitmapFactory.decodeResource(getContext().getResources(), R.mipmap.cloud); canvas.drawBitmap(cloud, null, getBorder_rect(), null); @@ -26,4 +28,15 @@ public class Cloud extends RectHittableObject{ public Boolean checkHit(Rect rect) { return false; } + + @Override + public void moveSingle() { + int x = getX() - speed / GameView.FPS; + if((x > 0 - getWidth() - 100 && x <= Scene.screenWidth && getMoveStarted())){ + setLocation(x, getY()); + } + else{setMoveStarted(false); + + } + } } diff --git a/app/src/main/java/com/echo/colorizeit/myganme/GameActivity.java b/app/src/main/java/com/echo/colorizeit/myganme/GameActivity.java index af57f15..8b9d183 100644 --- a/app/src/main/java/com/echo/colorizeit/myganme/GameActivity.java +++ b/app/src/main/java/com/echo/colorizeit/myganme/GameActivity.java @@ -16,6 +16,7 @@ public class GameActivity extends AppCompatActivity { super.onCreate(savedInstanceState); GameView gameView = new GameView(this); // getSupportActionBar().hide(); + setContentView(gameView); // gameView.setOnClickListener(new View.OnClickListener() { // @Override @@ -30,16 +31,11 @@ public class GameActivity extends AppCompatActivity { return false; } }); + } public void makeFullScreen() { requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } - @Override - protected void onStop() { - super.onStop(); - finish(); - - } } \ No newline at end of file diff --git a/app/src/main/java/com/echo/colorizeit/myganme/GameView.java b/app/src/main/java/com/echo/colorizeit/myganme/GameView.java index 21347e7..6edb8d3 100644 --- a/app/src/main/java/com/echo/colorizeit/myganme/GameView.java +++ b/app/src/main/java/com/echo/colorizeit/myganme/GameView.java @@ -7,6 +7,7 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff; +import android.os.Build; import android.os.Vibrator; import android.util.Log; import android.view.SurfaceHolder; @@ -15,20 +16,23 @@ import android.view.SurfaceView; import androidx.annotation.NonNull; import java.util.ArrayList; +import java.util.ConcurrentModificationException; public class GameView extends SurfaceView implements SurfaceHolder.Callback, Runnable { + public static final Boolean DEBUG = true; private SurfaceHolder holder; private Boolean isDrawing; private Canvas canvas; private Paint string_paint; private Paint string_paint1; - public static final int FPS = 100; - public static final int minDrawTime = 1000 / FPS; + public static int FPS = 60; + public static int minDrawTime = 1000 / FPS; private Scene scene; public static Context context; private ArrayList FPS_data = new ArrayList<>(); private float mean_fps = 0; private Boolean isHit = false; + private Boolean isGameOver = false; public GameView(Context context) { @@ -63,7 +67,10 @@ public class GameView extends SurfaceView implements SurfaceHolder.Callback, Run int ScreenHeight = Math.abs(holder.getSurfaceFrame().top - holder.getSurfaceFrame().bottom); scene = new Scene(ScreenWidth, ScreenHeight); Scene.init_game_object(context); - Scene.startMove(); +// Scene.startMove(); +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { +// holder.getSurface().setFrameRate(120, Surface.FRAME_RATE_COMPATIBILITY_DEFAULT); +// } } @@ -74,7 +81,7 @@ public class GameView extends SurfaceView implements SurfaceHolder.Callback, Run @Override public void surfaceDestroyed(@NonNull SurfaceHolder holder) { isDrawing = false; - canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); + //canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); Scene.end(); } @@ -85,6 +92,7 @@ public class GameView extends SurfaceView implements SurfaceHolder.Callback, Run long last_start = System.currentTimeMillis(); while (isDrawing) { long start = System.currentTimeMillis(); + Scene.startMove(); drawing(last_start, last_end); long end = System.currentTimeMillis(); while (end - start < minDrawTime) { @@ -102,7 +110,11 @@ public class GameView extends SurfaceView implements SurfaceHolder.Callback, Run private void drawing(long start, long end) { try { - canvas = holder.lockCanvas(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + canvas = holder.lockHardwareCanvas(); + } else { + canvas = holder.lockCanvas(); + } if (canvas != null) { canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); canvas.drawColor(Color.WHITE, PorterDuff.Mode.ADD); @@ -118,33 +130,102 @@ public class GameView extends SurfaceView implements SurfaceHolder.Callback, Run } canvas.drawText("FPS: " + String.valueOf(mean_fps), 50, 50, string_paint); canvas.drawText("Distance: " + String.valueOf((int) (Scene.distance / 100)), 450, 50, string_paint); - for (RectHittableObject o : Scene.rectHittableObjects) { - o.draw(canvas); - if (!o.equals(Scene.player)) - if (o.checkHit(Scene.player.getBorderRect())) { - isHit = true; - break; + try { + for (int i = 0; i < Scene.rectHittableObjects.size(); i++) { + RectHittableObject o = Scene.rectHittableObjects.get(i); + if (o.getX() > 0 - o.getWidth() - 100) + o.draw(canvas); + else { + Scene.rectHittableObjects.remove(o); } + if (!o.equals(Scene.player)) + if (o.checkHit(Scene.player.getBorderRect())) { + isHit = true; + break; + } + } + } catch (ConcurrentModificationException e) { + System.out.println("ConcurrentModificationException"); + } + if (DEBUG) { + canvas.drawText("DrawTime: " + String.valueOf((end - start)) + " ms", 50, 100, string_paint); + canvas.drawText("Width: " + String.valueOf(canvas.getWidth()), 50, 150, string_paint); + canvas.drawText("Height: " + String.valueOf(canvas.getHeight()), 50, 200, string_paint); + canvas.drawText("HardwareAccelerated: " + String.valueOf(canvas.isHardwareAccelerated()), 50, 250, string_paint); + canvas.drawText("ClipBounds: " + canvas.getClipBounds().toString(), 50, 300, string_paint); + int count = 0; + for (RectHittableObject o : Scene.rectHittableObjects) { + if (o.getMoveStarted()) { + count += 1; + } + if (!o.equals(Scene.player) && o.getMoveStarted()) { + int x1 = Scene.player.getX(); + int y1 = Scene.player.getY(); + int x2 = o.getX(); + int y2 = o.getY(); + int distance = (int) Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + Paint paint = new Paint(); + paint.setStrokeWidth(5f); + paint.setColor(Color.CYAN); + + if (distance < 450) { + string_paint.setColor(Color.RED); + string_paint.setTextSize(80); + paint.setColor(Color.RED); + canvas.drawLine(Scene.player.getX(), Scene.player.getY(), o.getX(), o.getY(), paint); + canvas.drawText(String.valueOf(distance), (x1 + x2) / 2, (y1 + y2) / 2, string_paint); + string_paint.setColor(Color.BLACK); + paint.setColor(Color.BLACK); + string_paint.setTextSize(50); + } else { + canvas.drawLine(Scene.player.getX(), Scene.player.getY(), o.getX(), o.getY(), paint); + canvas.drawText(String.valueOf(distance), (x1 + x2) / 2, (y1 + y2) / 2, string_paint); + } + + } + } + if (DEBUG) { + Paint paint = new Paint(); + paint.setTextSize(100); + paint.setColor(Color.RED); + canvas.drawText("DEBUG MODE", (int) (Scene.screenWidth * 0.6), 200, paint); + } + if (Player.getIsJumping() && !isHit) { + canvas.drawText("Need Jump !", (int) (Scene.screenWidth * 0.2), Scene.screenHeight / 2, string_paint1); + } + canvas.drawText("Moving Obj: " + count, 50, 350, string_paint); + canvas.drawText("Jump H: " + Scene.player.getJump_h(), 50, 400, string_paint); + canvas.drawText("Jump: " + Player.getIsJumping(), 50, 450, string_paint); + canvas.drawText("Draw Obj Count: " + Scene.rectHittableObjects.size(), 50, 500, string_paint); + canvas.drawText("Left up: " + String.valueOf(Scene.player.getLeft_up()), Scene.player.getX() - 100, Scene.player.getY() + Player.playerHeight + 100, string_paint); + } for (Drawable o : Scene.staticObject) { o.draw(canvas); } - if(isHit){ + if (isHit) { System.out.println("HIT!!!!!!!!!!!!!!!!"); - canvas.drawText("Game Over !" , (int) (Scene.screenWidth * 0.2), Scene.screenHeight/2, string_paint1); - final Vibrator vibrator=(Vibrator)context.getSystemService(VIBRATOR_SERVICE); - if(vibrator.hasVibrator()) + canvas.drawText("Game Over !", (int) (Scene.screenWidth * 0.2), Scene.screenHeight / 2, string_paint1); + final Vibrator vibrator = (Vibrator) context.getSystemService(VIBRATOR_SERVICE); + if (vibrator.hasVibrator()) vibrator.vibrate(300); isHit = false; + isGameOver = true; Scene.end(); Scene.init_game_object(context); - Scene.startMove(); - } } } finally { if (canvas != null) { holder.unlockCanvasAndPost(canvas); + if (isGameOver) { + try { + Thread.sleep(1500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + isGameOver = false; + } } } } diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Movable.java b/app/src/main/java/com/echo/colorizeit/myganme/Movable.java index 824f401..4b4781a 100644 --- a/app/src/main/java/com/echo/colorizeit/myganme/Movable.java +++ b/app/src/main/java/com/echo/colorizeit/myganme/Movable.java @@ -7,4 +7,5 @@ public interface Movable { void startMoveLeftX(int speed); void startMoveUpY(int speed); void startMoveXY(int speedX, int speedY); + void moveSingle(); } diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Player.java b/app/src/main/java/com/echo/colorizeit/myganme/Player.java index 6311abb..e80828e 100644 --- a/app/src/main/java/com/echo/colorizeit/myganme/Player.java +++ b/app/src/main/java/com/echo/colorizeit/myganme/Player.java @@ -6,16 +6,24 @@ import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; +import android.graphics.Rect; import com.example.myapplication.R; public class Player extends RectHittableObject { public static final int playerWidth = 150; - public static final int playerHeight= 150; + public static final int playerHeight = 150; public static final float g = 9.8f; private static Thread thread; private static Boolean isJumping = false; + private static Boolean canNewJumping = true; private Bitmap player_image; + private Bitmap player_image_all; + private long jump_start_time; + private long jump_current_time; + private int jump_up_v0 = 6400; + private double jump_h = 0; + private Rect[] crop_array = new Rect[6]; public Player(int x, int y, int width, int height, Context context) { @@ -25,7 +33,7 @@ public class Player extends RectHittableObject { @Override public void startMoveUpY(int speed) { - if(!isJumping) { + if (!isJumping) { isJumping = true; long start_time = System.currentTimeMillis(); thread = new Thread(new Runnable() { @@ -38,6 +46,7 @@ public class Player extends RectHittableObject { long current_time = System.currentTimeMillis(); t = (current_time - start_time); h = (speed * t - 0.5 * g * t * t) / 10000; + jump_h = h; setLocation(getX(), (int) (Scene.groundY - Player.playerHeight - h)); long end = System.currentTimeMillis(); while (end - start < GameView.minDrawTime) { @@ -59,6 +68,29 @@ public class Player extends RectHittableObject { } } + @Override + public void moveSingle() { +// if(canNewJumping){ +// jump_start_time = System.currentTimeMillis(); +// canNewJumping = false; +// isJumping = true; +// } +// if(isJumping) { +// jump_current_time = System.currentTimeMillis(); +// int x = getX() - jump_up_v0 / GameView.FPS; +// long t = (jump_current_time - jump_start_time); +// long h = (long) ((jump_up_v0 * t - 0.5 * g * t * t) / 10000); +// if (h <= 0) { +// isJumping = false; +// canNewJumping = true; +// } +// else { +// setLocation(getX(), (int) (Scene.groundY - Player.playerHeight - h)); +// } +// } + + } + @Override public void startMoveLeftX(int speed) { //stop x move @@ -71,13 +103,91 @@ public class Player extends RectHittableObject { @Override public void draw(Canvas canvas) { - + if (GameView.DEBUG) + canvas.drawRect(getBorderRect(), getDefault_paint()); Paint paint = getDefault_paint(); paint.setColor(Color.BLUE); -// canvas.drawRect(getBorderRect(), paint); - if(player_image==null) - player_image = BitmapFactory.decodeResource(getContext().getResources(), R.mipmap.player); - canvas.drawBitmap(player_image,null,getBorder_rect(),null); + if (player_image == null) { +// player_image = BitmapFactory.decodeResource(getContext().getResources(), R.mipmap.player); + player_image_all = BitmapFactory.decodeResource(getContext().getResources(), R.mipmap.playerall); + int single_width = player_image_all.getWidth() / 6; + int single_height = player_image_all.getHeight(); + for (int i = 0; i < 6; i++) { + int x = single_width * i; + crop_array[i] = new Rect(x, 0, x + single_width, single_height); + } + } + + canvas.drawBitmap(player_image_all, crop_array[(Scene.distance/20) % 4], getBorder_rect(), null); + + } + + public static int getPlayerWidth() { + return playerWidth; + } + + public static int getPlayerHeight() { + return playerHeight; + } + + public static float getG() { + return g; + } + + public static Boolean getIsJumping() { + return isJumping; + } + + public static void setIsJumping(Boolean isJumping) { + Player.isJumping = isJumping; + } + + public static Boolean getCanNewJumping() { + return canNewJumping; + } + + public static void setCanNewJumping(Boolean canNewJumping) { + Player.canNewJumping = canNewJumping; + } + + public Bitmap getPlayer_image() { + return player_image; + } + + public void setPlayer_image(Bitmap player_image) { + this.player_image = player_image; + } + + public long getJump_start_time() { + return jump_start_time; + } + + public void setJump_start_time(long jump_start_time) { + this.jump_start_time = jump_start_time; + } + + public long getJump_current_time() { + return jump_current_time; } + public void setJump_current_time(long jump_current_time) { + this.jump_current_time = jump_current_time; + } + + public int getJump_up_v0() { + return jump_up_v0; + } + + public void setJump_up_v0(int jump_up_v0) { + this.jump_up_v0 = jump_up_v0; + } + + + public double getJump_h() { + return jump_h; + } + + public void setJump_h(double jump_h) { + this.jump_h = jump_h; + } } diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Scene.java b/app/src/main/java/com/echo/colorizeit/myganme/Scene.java index c0d1128..e738f2d 100644 --- a/app/src/main/java/com/echo/colorizeit/myganme/Scene.java +++ b/app/src/main/java/com/echo/colorizeit/myganme/Scene.java @@ -1,13 +1,13 @@ package com.echo.colorizeit.myganme; import android.content.Context; -import android.util.Log; import java.util.ArrayList; +import java.util.ConcurrentModificationException; import java.util.Random; public class Scene { - private static int speed = 420; + public static int speed = 420; public static int distance = 0; //from right of the screen public static int screenWidth; public static int screenHeight; @@ -17,88 +17,143 @@ public class Scene { public static Boolean running = true; private static ArrayList threads = new ArrayList<>(); public static Player player; - + private static Context context; + private static Random random = new Random(); public Scene(int screenWidth, int screenHeight) { this.screenWidth = screenWidth; this.screenHeight = screenHeight; groundY = (int) (screenHeight * 0.8); + distance = 0; } - public static void startMove(){ - Log.d("Scene","startMove"); - running = true; - distance = 0; - Thread thread = new Thread(new Runnable() { - @Override - public void run() { - while(running){ - long start = System.currentTimeMillis(); - distance += speed/GameView.FPS; + public static void startMove() { +// Log.d("Scene","startMove"); +// running = true; + + long start = System.currentTimeMillis(); + distance += speed / GameView.FPS; + if (distance % 200 == 0) { + genNewObj(); + } // Log.d("Scene","Distance:" + distance); - for(RectHittableObject o: rectHittableObjects){ - if(o.getX() - distance < screenWidth && !o.getMoveStarted()){ - o.setX(o.getX() - distance); - o.startMoveLeftX(speed); - } - } - long end = System.currentTimeMillis(); - while(end - start < GameView.minDrawTime){ - try { - Thread.sleep(1); - } catch (InterruptedException e) { - e.printStackTrace(); + try { + for (int i = 0; i < rectHittableObjects.size(); i++) { + RectHittableObject o = rectHittableObjects.get(i); + if (o.getX() - distance < screenWidth && !o.getMoveStarted()) { + o.setMoveStarted(true); + o.setX(o.getX() - distance); + } + if (o.getMoveStarted()) { + o.moveSingle(); + } + //Cheat + if (GameView.DEBUG) { + if (!o.equals(player) && o instanceof Box) { + if (Math.abs(o.getRight_bottom().x - player.getRight_bottom().x) < 200) { + System.out.println("JUMP"); + Scene.player.startMoveUpY(6400); } - end = System.currentTimeMillis(); } } } - }); - threads.add(thread); - thread.start(); + } catch (ConcurrentModificationException e) { + System.out.println("ConcurrentModificationException"); + } + + long end = System.currentTimeMillis(); +// Thread thread = new Thread(new Runnable() { +// @Override +// public void run() { +// while(running){ +// long start = System.currentTimeMillis(); +// distance += speed/GameView.FPS; +//// Log.d("Scene","Distance:" + distance); +// for(RectHittableObject o: rectHittableObjects){ +// if(o.getX() - distance < screenWidth && !o.getMoveStarted()){ +// o.setX(o.getX() - distance); +// o.startMoveLeftX(speed); +// } +// } +// long end = System.currentTimeMillis(); +// while(end - start < GameView.minDrawTime){ +// try { +// Thread.sleep(1); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// end = System.currentTimeMillis(); +// } +// } +// +// } +// }); +// threads.add(thread); +// thread.start(); } - public static void init_game_object(Context context){ + public static void genNewObj() { + new Thread(new Runnable() { + @Override + public void run() { + rectHittableObjects.add(new Box(Scene.screenWidth + distance + 2000 + random.nextInt(500), Scene.groundY - 100, 100, 100, context)); + rectHittableObjects.add(new Cloud(Scene.screenWidth + distance + 500 + random.nextInt(2000), 300, 150, 100, context)); + rectHittableObjects.add(new Cloud(Scene.screenWidth + distance + 0 + random.nextInt(2000), 100, 150, 100, context)); + rectHittableObjects.add(new Cloud(Scene.screenWidth + distance + 1000 + random.nextInt(500), 100, 150, 100, context)); + rectHittableObjects.add(new Bird(Scene.screenWidth + distance + 1200 + random.nextInt(600), 200, 100, 100, context)); + rectHittableObjects.add(new BirdMoving(Scene.screenWidth + distance + 600 + random.nextInt(300), 400, 100, 100, context)); + } + }).start(); + + } + + public static void init_game_object(Context context) { + distance = 0; Random random = new Random(); - if(rectHittableObjects != null) + Scene.context = context; + if (rectHittableObjects != null) rectHittableObjects.clear(); staticObject.add(new Ground()); System.out.println(rectHittableObjects.size()); - player = new Player(300,groundY - Player.playerHeight, Player.playerWidth, Player.playerHeight,context); + player = new Player(300, groundY - Player.playerHeight, Player.playerWidth, Player.playerHeight, context); rectHittableObjects.add(player); - for(int i = 5; i < 100; i++){ - rectHittableObjects.add(new Box(i * 800 + random.nextInt(500),Scene.groundY - 100, 100,100,context)); - } - for(int i = 2; i < 100; i++){ - rectHittableObjects.add(new Cloud(i * 800 + random.nextInt(400), 300, 150,100,context)); - rectHittableObjects.add(new Cloud(i * 1000 + random.nextInt(800), 100, 150,100,context)); - rectHittableObjects.add(new Bird(i * 900 + random.nextInt(800), 200, 100,100,context)); - } + rectHittableObjects.add(new Box(distance + 3000 + random.nextInt(500), Scene.groundY - 100, 100, 100, context)); + rectHittableObjects.add(new Cloud(distance + 800 + random.nextInt(400), 300, 150, 100, context)); + rectHittableObjects.add(new Cloud(distance + 1000 + random.nextInt(800), 100, 150, 100, context)); + rectHittableObjects.add(new Bird(distance + 900 + random.nextInt(800), 200, 100, 100, context)); +// for (int i = 3; i < 10; i++) { +// rectHittableObjects.add(new Box(i * 1000 + random.nextInt(500), Scene.groundY - 100, 100, 100, context)); +// } +// for (int i = 2; i < 10; i++) { +// rectHittableObjects.add(new Cloud(i * 800 + random.nextInt(400), 300, 150, 100, context)); +// rectHittableObjects.add(new Cloud(i * 1000 + random.nextInt(800), 100, 150, 100, context)); +// rectHittableObjects.add(new Bird(i * 900 + random.nextInt(800), 200, 100, 100, context)); +// } } - public static void end(){ + public static void end() { running = false; - for(RectHittableObject o: rectHittableObjects){ - Thread thread = o.getThread(); - if(thread != null) { - try { - thread.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - for(Thread t: threads){ - try { - t.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } +// for(RectHittableObject o: rectHittableObjects){ +// Thread thread = o.getThread(); +// if(thread != null) { +// try { +// thread.join(); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// } +// } +// for(Thread t: threads){ +// try { +// t.join(); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// } rectHittableObjects.clear(); } diff --git a/app/src/main/res/mipmap-xhdpi/playerall.png b/app/src/main/res/mipmap-xhdpi/playerall.png new file mode 100644 index 0000000..4e58d6d Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/playerall.png differ