diff --git a/app/build.gradle b/app/build.gradle
index ff405ce..e3d08db 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,8 +1,6 @@
plugins {
id 'com.android.application'
- id 'kotlin-android'
- id 'kotlin-android-extensions'
}
@@ -74,7 +72,7 @@ dependencies {
implementation 'com.sdsmdg.harjot:rotatingtext:1.0.2'
implementation 'ch.halcyon:squareprogressbar:1.6.4'
implementation 'com.github.chrisbanes:PhotoView:2.0.0'
- implementation 'com.quickbirdstudios:opencv:4.5.2'
+// implementation 'com.quickbirdstudios:opencv:4.5.2'
implementation 'com.jakewharton.timber:timber:5.0.1'
implementation 'com.itextpdf:itext7-core:7.1.8'
implementation 'com.etebarian:meow-bottom-navigation:1.2.0'
diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json
new file mode 100644
index 0000000..141020d
--- /dev/null
+++ b/app/release/output-metadata.json
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "APK",
+ "kind": "Directory"
+ },
+ "applicationId": "com.echo.colorize",
+ "variantName": "release",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 1,
+ "versionName": "1.0",
+ "outputFile": "app-release.apk"
+ }
+ ],
+ "elementType": "File"
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9aa20eb..2e42849 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,6 +8,7 @@
+
@@ -57,6 +58,15 @@
android:label="@string/app_name"
android:theme="@style/Theme.MyApplication.NoActionBar">
+ >
+
+
diff --git a/app/src/main/java/com/echo/colorizeit/MainActivity.java b/app/src/main/java/com/echo/colorizeit/MainActivity.java
index 98e1f9d..c0f3ede 100644
--- a/app/src/main/java/com/echo/colorizeit/MainActivity.java
+++ b/app/src/main/java/com/echo/colorizeit/MainActivity.java
@@ -16,6 +16,7 @@ import com.example.myapplication.R;
import com.echo.colorizeit.ui.a_image_upload_activity.ImageUploadViewActivity;
import com.google.android.material.snackbar.Snackbar;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
@@ -25,7 +26,6 @@ import androidx.appcompat.app.AppCompatActivity;
import com.example.myapplication.databinding.ActivityMainBinding;
-import org.opencv.android.OpenCVLoader;
import java.io.File;
import java.io.FileOutputStream;
@@ -45,10 +45,10 @@ public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
makeFullScreen();
- if (!OpenCVLoader.initDebug())
- Log.e("OpenCv", "Unable to load OpenCV");
- else
- Log.d("OpenCv", "OpenCV loaded");
+// if (!OpenCVLoader.initDebug())
+// Log.e("OpenCv", "Unable to load OpenCV");
+// else
+// Log.d("OpenCv", "OpenCV loaded");
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.appBarMain.toolbar);
@@ -98,6 +98,7 @@ public class MainActivity extends AppCompatActivity {
+
// DrawerLayout drawer = binding.drawerLayout;
// NavigationView navigationView = binding.navView;
// // Passing each menu ID as a set of Ids because each
diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Bird.java b/app/src/main/java/com/echo/colorizeit/myganme/Bird.java
new file mode 100644
index 0000000..ee839de
--- /dev/null
+++ b/app/src/main/java/com/echo/colorizeit/myganme/Bird.java
@@ -0,0 +1,29 @@
+package com.echo.colorizeit.myganme;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+
+import com.example.myapplication.R;
+
+public class Bird extends RectHittableObject{
+ private Bitmap bird;
+ 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)
+ bird = BitmapFactory.decodeResource(getContext().getResources(), R.mipmap.bird2);
+ canvas.drawBitmap(bird, null, getBorder_rect(), null);
+
+ }
+
+ @Override
+ public Boolean checkHit(Rect rect) {
+ return 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
new file mode 100644
index 0000000..6d85694
--- /dev/null
+++ b/app/src/main/java/com/echo/colorizeit/myganme/Box.java
@@ -0,0 +1,30 @@
+package com.echo.colorizeit.myganme;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+
+import com.example.myapplication.R;
+
+public class Box extends RectHittableObject {
+ private Bitmap obstacle;
+
+ public Box(int x, int y, int width, int height, Context context) {
+ super(x, y, width, height, context);
+
+
+ }
+
+
+ @Override
+ public void draw(Canvas canvas) {
+// canvas.drawRect(getBorderRect(), getDefault_paint());
+
+ if(obstacle== null)
+ obstacle = BitmapFactory.decodeResource(getContext().getResources(), R.mipmap.obstacle);
+ canvas.drawBitmap(obstacle, null, getBorder_rect(), null);
+
+ }
+
+}
diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Cloud.java b/app/src/main/java/com/echo/colorizeit/myganme/Cloud.java
new file mode 100644
index 0000000..016ae09
--- /dev/null
+++ b/app/src/main/java/com/echo/colorizeit/myganme/Cloud.java
@@ -0,0 +1,29 @@
+package com.echo.colorizeit.myganme;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+
+import com.example.myapplication.R;
+
+public class Cloud extends RectHittableObject{
+ private Bitmap cloud;
+ 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(cloud== null)
+ cloud = BitmapFactory.decodeResource(getContext().getResources(), R.mipmap.cloud);
+ canvas.drawBitmap(cloud, null, getBorder_rect(), null);
+
+ }
+ @Override
+ public Boolean checkHit(Rect rect) {
+ return false;
+ }
+}
diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Drawable.java b/app/src/main/java/com/echo/colorizeit/myganme/Drawable.java
new file mode 100644
index 0000000..811f9c8
--- /dev/null
+++ b/app/src/main/java/com/echo/colorizeit/myganme/Drawable.java
@@ -0,0 +1,7 @@
+package com.echo.colorizeit.myganme;
+
+import android.graphics.Canvas;
+
+public interface Drawable {
+ void draw(Canvas canvas);
+}
diff --git a/app/src/main/java/com/echo/colorizeit/myganme/GameActivity.java b/app/src/main/java/com/echo/colorizeit/myganme/GameActivity.java
new file mode 100644
index 0000000..af57f15
--- /dev/null
+++ b/app/src/main/java/com/echo/colorizeit/myganme/GameActivity.java
@@ -0,0 +1,45 @@
+package com.echo.colorizeit.myganme;
+
+import android.os.Bundle;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+public class GameActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ makeFullScreen();
+ super.onCreate(savedInstanceState);
+ GameView gameView = new GameView(this);
+// getSupportActionBar().hide();
+ setContentView(gameView);
+// gameView.setOnClickListener(new View.OnClickListener() {
+// @Override
+// public void onClick(View v) {
+// Scene.player.startMoveUpY(6400);
+// }
+// });
+ gameView.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ Scene.player.startMoveUpY(6400);
+ 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
new file mode 100644
index 0000000..21347e7
--- /dev/null
+++ b/app/src/main/java/com/echo/colorizeit/myganme/GameView.java
@@ -0,0 +1,151 @@
+package com.echo.colorizeit.myganme;
+
+import static android.content.Context.VIBRATOR_SERVICE;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.os.Vibrator;
+import android.util.Log;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+
+import androidx.annotation.NonNull;
+
+import java.util.ArrayList;
+
+public class GameView extends SurfaceView implements SurfaceHolder.Callback, Runnable {
+ 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;
+ private Scene scene;
+ public static Context context;
+ private ArrayList FPS_data = new ArrayList<>();
+ private float mean_fps = 0;
+ private Boolean isHit = false;
+
+
+ public GameView(Context context) {
+ super(context);
+ this.context = context;
+ init();
+
+ }
+
+ private void init() {
+ holder = getHolder();//得到SurfaceHolder对象
+ holder.addCallback(this);//注册SurfaceHolder
+ setFocusable(true);
+ setFocusableInTouchMode(true);
+ this.setKeepScreenOn(true);//保持屏幕长亮
+ //画笔
+ string_paint = new Paint();
+ string_paint.setColor(Color.BLACK);
+ string_paint.setTextSize(50);
+
+ string_paint1 = new Paint();
+ string_paint1.setColor(Color.BLACK);
+ string_paint1.setTextSize(250);
+
+ }
+
+ @Override
+ public void surfaceCreated(@NonNull SurfaceHolder holder) {
+ isDrawing = true;
+ new Thread(this).start();
+ int ScreenWidth = Math.abs(holder.getSurfaceFrame().right - holder.getSurfaceFrame().left);
+ int ScreenHeight = Math.abs(holder.getSurfaceFrame().top - holder.getSurfaceFrame().bottom);
+ scene = new Scene(ScreenWidth, ScreenHeight);
+ Scene.init_game_object(context);
+ Scene.startMove();
+
+ }
+
+ @Override
+ public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
+ }
+
+ @Override
+ public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
+ isDrawing = false;
+ canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
+ Scene.end();
+ }
+
+ @Override
+ public void run() {
+ Log.d("Draw Thread", "Draw Start");
+ long last_end = System.currentTimeMillis();
+ long last_start = System.currentTimeMillis();
+ while (isDrawing) {
+ long start = System.currentTimeMillis();
+ drawing(last_start, last_end);
+ long end = System.currentTimeMillis();
+ while (end - start < minDrawTime) {
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ end = System.currentTimeMillis();
+ }
+ last_end = end;
+ last_start = start;
+ }
+ }
+
+ private void drawing(long start, long end) {
+ try {
+ canvas = holder.lockCanvas();
+ if (canvas != null) {
+ canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
+ canvas.drawColor(Color.WHITE, PorterDuff.Mode.ADD);
+ int real_FPS = (int) (1000 / ((end - start) == 0 ? 1 : (end - start)));
+ FPS_data.add(real_FPS);
+ if (FPS_data.size() >= 5) {
+ int sum = 0;
+ for (int i : FPS_data) {
+ sum += i;
+ }
+ mean_fps = sum / FPS_data.size();
+ FPS_data.clear();
+ }
+ 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;
+ }
+ }
+ for (Drawable o : Scene.staticObject) {
+ o.draw(canvas);
+ }
+ 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())
+ vibrator.vibrate(300);
+ isHit = false;
+ Scene.end();
+ Scene.init_game_object(context);
+ Scene.startMove();
+
+ }
+ }
+ } finally {
+ if (canvas != null) {
+ holder.unlockCanvasAndPost(canvas);
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Ground.java b/app/src/main/java/com/echo/colorizeit/myganme/Ground.java
new file mode 100644
index 0000000..c0d5209
--- /dev/null
+++ b/app/src/main/java/com/echo/colorizeit/myganme/Ground.java
@@ -0,0 +1,24 @@
+package com.echo.colorizeit.myganme;
+
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+
+public class Ground implements Drawable{
+ private Paint paint;
+ public Ground() {
+ paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
+ paint.setStrokeWidth(10f);
+ paint.setColor(Color.GRAY);
+
+ paint.setStyle(Paint.Style.STROKE);
+ paint.setStrokeJoin(Paint.Join.ROUND);
+ paint.setStrokeCap(Paint.Cap.ROUND);
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+ canvas.drawLine(0,Scene.groundY, Scene.screenWidth, Scene.groundY, paint);
+ }
+
+}
diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Hittable.java b/app/src/main/java/com/echo/colorizeit/myganme/Hittable.java
new file mode 100644
index 0000000..7e13219
--- /dev/null
+++ b/app/src/main/java/com/echo/colorizeit/myganme/Hittable.java
@@ -0,0 +1,11 @@
+package com.echo.colorizeit.myganme;
+
+import android.graphics.Point;
+import android.graphics.Rect;
+
+public interface Hittable {
+ Rect getBorderRect();
+ Boolean checkHit(Rect rect);
+ Boolean checkHit(int left, int top, int right, int bottom);
+ Boolean checkHit(Point left_up, Point left_bottom, Point right_up, Point right_bottom);
+}
diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Movable.java b/app/src/main/java/com/echo/colorizeit/myganme/Movable.java
new file mode 100644
index 0000000..824f401
--- /dev/null
+++ b/app/src/main/java/com/echo/colorizeit/myganme/Movable.java
@@ -0,0 +1,10 @@
+package com.echo.colorizeit.myganme;
+
+public interface Movable {
+ void setLocation(int x, int y);
+ void moveX(int distance);
+ void moveY(int distance);
+ void startMoveLeftX(int speed);
+ void startMoveUpY(int speed);
+ void startMoveXY(int speedX, int speedY);
+}
diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Player.java b/app/src/main/java/com/echo/colorizeit/myganme/Player.java
new file mode 100644
index 0000000..6311abb
--- /dev/null
+++ b/app/src/main/java/com/echo/colorizeit/myganme/Player.java
@@ -0,0 +1,83 @@
+package com.echo.colorizeit.myganme;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+
+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 float g = 9.8f;
+ private static Thread thread;
+ private static Boolean isJumping = false;
+ private Bitmap player_image;
+
+
+ public Player(int x, int y, int width, int height, Context context) {
+ super(x, y, width, height, context);
+
+ }
+
+ @Override
+ public void startMoveUpY(int speed) {
+ if(!isJumping) {
+ isJumping = true;
+ long start_time = System.currentTimeMillis();
+ thread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ double h = 0;
+ long t = 0;
+ while (h >= 0) {
+ long start = System.currentTimeMillis();
+ long current_time = System.currentTimeMillis();
+ t = (current_time - start_time);
+ h = (speed * t - 0.5 * g * t * t) / 10000;
+ setLocation(getX(), (int) (Scene.groundY - Player.playerHeight - h));
+ long end = System.currentTimeMillis();
+ while (end - start < GameView.minDrawTime) {
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ end = System.currentTimeMillis();
+ }
+ }
+ setLocation(getX(), Scene.groundY - Player.playerHeight);
+ System.out.println(getBorder_rect());
+ isJumping = false;
+
+ }
+ });
+ thread.start();
+ }
+ }
+
+ @Override
+ public void startMoveLeftX(int speed) {
+ //stop x move
+ }
+
+ @Override
+ public void setX(int x) {
+
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+
+ 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);
+ }
+
+}
diff --git a/app/src/main/java/com/echo/colorizeit/myganme/RectHittableObject.java b/app/src/main/java/com/echo/colorizeit/myganme/RectHittableObject.java
new file mode 100644
index 0000000..d17f5f5
--- /dev/null
+++ b/app/src/main/java/com/echo/colorizeit/myganme/RectHittableObject.java
@@ -0,0 +1,305 @@
+package com.echo.colorizeit.myganme;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Point;
+import android.graphics.Rect;
+
+public abstract class RectHittableObject implements Hittable, Movable, Drawable {
+ private int x;
+ private int y;
+ private int width;
+ private int height;
+ private Point left_up;
+ private Point left_bottom;
+ private Point right_up;
+ private Point right_bottom;
+ private Rect border_rect;
+ private Boolean moveStarted = false;
+ private Paint default_paint;
+ private Context context;
+ private Thread thread;
+ private Boolean blocking = false;
+
+
+ public RectHittableObject(int x, int y, int width, int height, Context context) {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+ this.context = context;
+ left_up = new Point(x, y);
+ left_bottom = new Point(x, y + height);
+ right_up = new Point(x + width, y);
+ right_bottom = new Point(x + width, y + height);
+ border_rect = new Rect(x, y, x + width, y + height);
+
+ default_paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
+ default_paint.setStrokeWidth(10f);
+ default_paint.setColor(Color.parseColor("#FF4081"));
+ default_paint.setStyle(Paint.Style.STROKE);
+ default_paint.setStrokeJoin(Paint.Join.ROUND);
+ default_paint.setStrokeCap(Paint.Cap.ROUND);
+ }
+
+ public RectHittableObject(Point left_up, Point left_bottom, Point right_up, Point right_bottom, Context context) {
+ this.left_up = left_up;
+ this.left_bottom = left_bottom;
+ this.right_up = right_up;
+ this.right_bottom = right_bottom;
+ this.context = context;
+ x = left_up.x;
+ y = left_up.y;
+ width = Math.abs(left_up.x - right_up.x);
+ height = Math.abs(left_up.y - left_bottom.y);
+ border_rect = new Rect(x, y, x + width, y + height);
+
+ default_paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
+ default_paint.setStrokeWidth(10f);
+ default_paint.setColor(Color.parseColor("#FF4081"));
+ default_paint.setStyle(Paint.Style.STROKE);
+ default_paint.setStrokeJoin(Paint.Join.ROUND);
+ default_paint.setStrokeCap(Paint.Cap.ROUND);
+ }
+
+ public Context getContext() {
+ return context;
+ }
+
+ public void setContext(Context context) {
+ this.context = context;
+ }
+
+ public int getX() {
+ return x;
+ }
+
+ public void setX(int x) {
+ this.x = x;
+ }
+
+ public int getY() {
+ return y;
+ }
+
+ public void setY(int y) {
+ this.y = y;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public void setWidth(int width) {
+ this.width = width;
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+ public void setHeight(int height) {
+ this.height = height;
+ }
+
+ public Point getLeft_up() {
+ return left_up;
+ }
+
+ public void setLeft_up(Point left_up) {
+ this.left_up = left_up;
+ }
+
+ public Point getLeft_bottom() {
+ return left_bottom;
+ }
+
+ public void setLeft_bottom(Point left_bottom) {
+ this.left_bottom = left_bottom;
+ }
+
+ public Point getRight_up() {
+ return right_up;
+ }
+
+ public void setRight_up(Point right_up) {
+ this.right_up = right_up;
+ }
+
+ public Point getRight_bottom() {
+ return right_bottom;
+ }
+
+ public void setRight_bottom(Point right_bottom) {
+ this.right_bottom = right_bottom;
+ }
+
+ public Rect getBorder_rect() {
+ return border_rect;
+ }
+
+ public void setBorder_rect(Rect border_rect) {
+ this.border_rect = border_rect;
+ }
+
+ public void setMoveStarted(Boolean moveStarted) {
+ this.moveStarted = moveStarted;
+ }
+
+ public Paint getDefault_paint() {
+ return default_paint;
+ }
+
+ public void setDefault_paint(Paint default_paint) {
+ this.default_paint = default_paint;
+ }
+
+ @Override
+ public Rect getBorderRect() {
+ return border_rect;
+ }
+
+ @Override
+ public Boolean checkHit(Rect rect) {
+ return getBorderRect().intersect(rect);
+ }
+
+ @Override
+ public Boolean checkHit(int left, int top, int right, int bottom) {
+ return getBorderRect().intersect(new Rect(left, top, right, bottom));
+ }
+
+ @Override
+ public Boolean checkHit(Point left_up, Point left_bottom, Point right_up, Point right_bottom) {
+ return getBorderRect().intersect(new Rect(left_up.x, left_up.y, right_up.x, right_bottom.y));
+ }
+
+ @Override
+ public void setLocation(int x, int y) {
+ this.x = x;
+ this.y = y;
+ left_up = new Point(x, y);
+ left_bottom = new Point(x, y + height);
+ right_up = new Point(x + width, y);
+ right_bottom = new Point(x + width, y + height);
+ border_rect = new Rect(x, y, x + width, y + height);
+ }
+
+ @Override
+ public void moveX(int distance) {
+ this.x = this.x + distance;
+ left_up = new Point(x, y);
+ left_bottom = new Point(x, y + height);
+ right_up = new Point(x + width, y);
+ right_bottom = new Point(x + width, y + height);
+ border_rect = new Rect(x, y, x + width, y + height);
+ }
+
+ @Override
+ public void moveY(int distance) {
+ this.y = this.y + distance;
+ left_up = new Point(x, y);
+ left_bottom = new Point(x, y + height);
+ right_up = new Point(x + width, y);
+ right_bottom = new Point(x + width, y + height);
+ border_rect = new Rect(x, y, x + width, y + height);
+ }
+
+ @Override
+ public void startMoveLeftX(int speed) {
+ thread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ while (x > 0 - Scene.screenWidth && x < Scene.screenWidth && Scene.running) {
+ long start = System.currentTimeMillis();
+ x = x - speed / GameView.FPS;
+ setLocation(x, y);
+ long end = System.currentTimeMillis();
+ while (end - start < GameView.minDrawTime) {
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {
+ //e.printStackTrace();
+ }
+ end = System.currentTimeMillis();
+ }
+ }
+ }
+ });
+ thread.start();
+ moveStarted = true;
+ }
+
+ @Override
+ public void startMoveUpY(int speed) {
+ thread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ while (y > 0 - Scene.screenHeight && y < Scene.screenHeight && Scene.running) {
+ long start = System.currentTimeMillis();
+ y = y - speed / GameView.FPS;
+ setLocation(x, y);
+ long end = System.currentTimeMillis();
+ while (end - start < GameView.minDrawTime) {
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {
+ //e.printStackTrace();
+ }
+ end = System.currentTimeMillis();
+ }
+ }
+ }
+ });
+ thread.start();
+ moveStarted = true;
+ }
+
+ @Override
+ public void startMoveXY(int speedX, int speedY) {
+ thread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ while ((y > 0 - Scene.screenHeight || x > 0 - Scene.screenWidth) && (y < Scene.screenHeight || x < Scene.screenWidth)) {
+ long start = System.currentTimeMillis();
+ y = y - speedY / GameView.FPS;
+ x = x - speedX / GameView.FPS;
+ setLocation(x, y);
+ long end = System.currentTimeMillis();
+ while (end - start < GameView.minDrawTime) {
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {
+ //e.printStackTrace();
+ }
+ end = System.currentTimeMillis();
+ }
+ }
+ }
+ });
+ thread.start();
+ moveStarted = true;
+ }
+
+ public Boolean getMoveStarted() {
+ return moveStarted;
+ }
+
+
+ public Thread getThread() {
+ return thread;
+ }
+
+ public void setThread(Thread thread) {
+ this.thread = thread;
+ }
+
+ public Boolean getBlocking() {
+ return blocking;
+ }
+
+ public void setBlocking(Boolean blocking) {
+ this.blocking = blocking;
+ }
+}
diff --git a/app/src/main/java/com/echo/colorizeit/myganme/Scene.java b/app/src/main/java/com/echo/colorizeit/myganme/Scene.java
new file mode 100644
index 0000000..c0d1128
--- /dev/null
+++ b/app/src/main/java/com/echo/colorizeit/myganme/Scene.java
@@ -0,0 +1,106 @@
+package com.echo.colorizeit.myganme;
+
+import android.content.Context;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+public class Scene {
+ private static int speed = 420;
+ public static int distance = 0; //from right of the screen
+ public static int screenWidth;
+ public static int screenHeight;
+ public static int groundY;
+ public static ArrayList staticObject = new ArrayList<>();
+ public static ArrayList rectHittableObjects = new ArrayList<>();
+ public static Boolean running = true;
+ private static ArrayList threads = new ArrayList<>();
+ public static Player player;
+
+
+
+ public Scene(int screenWidth, int screenHeight) {
+ this.screenWidth = screenWidth;
+ this.screenHeight = screenHeight;
+ groundY = (int) (screenHeight * 0.8);
+ }
+
+ 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;
+// 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){
+ Random random = new Random();
+ 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);
+ 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));
+ }
+
+
+ }
+
+ 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();
+ }
+ }
+ rectHittableObjects.clear();
+
+ }
+
+}
diff --git a/app/src/main/java/com/echo/colorizeit/ui/a_image_upload_activity/ImageUploadViewActivity.java b/app/src/main/java/com/echo/colorizeit/ui/a_image_upload_activity/ImageUploadViewActivity.java
index 592530c..5f9a05a 100644
--- a/app/src/main/java/com/echo/colorizeit/ui/a_image_upload_activity/ImageUploadViewActivity.java
+++ b/app/src/main/java/com/echo/colorizeit/ui/a_image_upload_activity/ImageUploadViewActivity.java
@@ -22,6 +22,7 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.ui.AppBarConfiguration;
import com.echo.colorizeit.Util;
+import com.echo.colorizeit.myganme.GameActivity;
import com.echo.colorizeit.ui.BaseActivity;
import com.echo.colorizeit.ImageUtil.PhotoLib;
import com.echo.colorizeit.Interfaces.RequestsListener;
@@ -39,7 +40,6 @@ public class ImageUploadViewActivity extends BaseActivity {
private ImageUploadViewActivity _this = this;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -62,19 +62,25 @@ public class ImageUploadViewActivity extends BaseActivity {
// }
// });
model.setImageViewDataByPath(intent.getStringExtra("sourceFilePath"));
-
+ binding.imageProcessingAnimation.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(_this, GameActivity.class);
+ startActivity(intent);
+ }
+ });
colorize_image();
binding.CompareButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- if(model.getImageViewData().getValue() == model.getSourceImageBitmap()){
+ if (model.getImageViewData().getValue() == model.getSourceImageBitmap()) {
model.setImageViewDataByBitmap(model.getColorizedImageBitmap());
binding.uploadFinishAnimationView.playAnimation();
- }
- else{
+ } else {
model.setImageViewDataByBitmap(model.getSourceImageBitmap());
}
- }});
+ }
+ });
binding.SaveImageButton.setOnClickListener(new View.OnClickListener() {
@Override
@@ -162,7 +168,7 @@ public class ImageUploadViewActivity extends BaseActivity {
final Dialog dialog = new Dialog(_this, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
- ImageView imgView = new ImageView(_this);
+ ImageView imgView = new ImageView(_this);
imgView.setImageBitmap((Bitmap) model.getImageViewData().getValue());
dialog.setContentView(imgView);
dialog.show();
@@ -294,7 +300,6 @@ public class ImageUploadViewActivity extends BaseActivity {
}
-
public void makeFullScreen() {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
diff --git a/app/src/main/java/com/echo/colorizeit/ui/f_main_index_page_view/MainIndexPageFragment.java b/app/src/main/java/com/echo/colorizeit/ui/f_main_index_page_view/MainIndexPageFragment.java
index b76acdc..9e78a24 100644
--- a/app/src/main/java/com/echo/colorizeit/ui/f_main_index_page_view/MainIndexPageFragment.java
+++ b/app/src/main/java/com/echo/colorizeit/ui/f_main_index_page_view/MainIndexPageFragment.java
@@ -28,6 +28,7 @@ import androidx.lifecycle.ViewModelProvider;
import com.echo.colorizeit.ImageUtil.GlideEngine;
import com.echo.colorizeit.Util;
+import com.echo.colorizeit.myganme.GameActivity;
import com.echo.colorizeit.ui.BaseFragment;
import com.echo.colorizeit.ui.a_image_upload_activity.ImageUploadViewActivity;
import com.echo.colorizeit.ui.v_others.ResizableImageView;
@@ -172,6 +173,14 @@ public class MainIndexPageFragment extends BaseFragment {
}
});
+ binding.wellComeView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(getActivity(), GameActivity.class);
+ startActivity(intent);
+ }
+ });
+
return root;
}
diff --git a/app/src/main/res/mipmap-xhdpi/bird1.png b/app/src/main/res/mipmap-xhdpi/bird1.png
new file mode 100644
index 0000000..6b405d8
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/bird1.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/bird2.png b/app/src/main/res/mipmap-xhdpi/bird2.png
new file mode 100644
index 0000000..3483c9f
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/bird2.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/cloud.png b/app/src/main/res/mipmap-xhdpi/cloud.png
new file mode 100644
index 0000000..8fed6d2
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/cloud.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/obstacle.png b/app/src/main/res/mipmap-xhdpi/obstacle.png
new file mode 100644
index 0000000..c79f89f
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/obstacle.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/player.png b/app/src/main/res/mipmap-xhdpi/player.png
new file mode 100644
index 0000000..52c9613
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/player.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/steve1.png b/app/src/main/res/mipmap-xhdpi/steve1.png
new file mode 100644
index 0000000..4498fc9
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/steve1.png differ