diff --git a/app/build/outputs/apk/app-debug.apk b/app/build/outputs/apk/app-debug.apk new file mode 100644 index 0000000..8532b93 Binary files /dev/null and b/app/build/outputs/apk/app-debug.apk differ diff --git a/app/src/main/java/ru/ifmo/md/lesson1/WhirlView.java b/app/src/main/java/ru/ifmo/md/lesson1/WhirlView.java index 0e36777..ae94793 100644 --- a/app/src/main/java/ru/ifmo/md/lesson1/WhirlView.java +++ b/app/src/main/java/ru/ifmo/md/lesson1/WhirlView.java @@ -1,8 +1,11 @@ package ru.ifmo.md.lesson1; import android.content.Context; +import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Paint; +import android.graphics.Rect; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; @@ -10,22 +13,28 @@ import java.util.Random; /** -* Created by thevery on 11/09/14. -*/ + * Created by thevery on 11/09/14. + */ class WhirlView extends SurfaceView implements Runnable { - int [][] field = null; - int width = 0; - int height = 0; - int scale = 4; + int width = 240; + int height = 320; + int[][] field; + float scaleWidth = 0; + float scaleHeight = 0; final int MAX_COLOR = 10; int[] palette = {0xFFFF0000, 0xFF800000, 0xFF808000, 0xFF008000, 0xFF00FF00, 0xFF008080, 0xFF0000FF, 0xFF000080, 0xFF800080, 0xFFFFFFFF}; + int[] colors = new int[width * height]; SurfaceHolder holder; Thread thread = null; volatile boolean running = false; + Paint paint = new Paint(); + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Rect rect; public WhirlView(Context context) { super(context); holder = getHolder(); + initField(); } public void resume() { @@ -38,7 +47,8 @@ public void pause() { running = false; try { thread.join(); - } catch (InterruptedException ignore) {} + } catch (InterruptedException ignore) { + } } public void run() { @@ -53,61 +63,69 @@ public void run() { Log.i("TIME", "Circle: " + (finishTime - startTime) / 1000000); try { Thread.sleep(16); - } catch (InterruptedException ignore) {} + } catch (InterruptedException ignore) { + } } } } @Override public void onSizeChanged(int w, int h, int oldW, int oldH) { - width = w/scale; - height = h/scale; - initField(); + scaleWidth = ((float) w / width); + scaleHeight = ((float) h / height); + Log.d("size", w + " x " + h); + rect = new Rect(0, 0, (int) (width * scaleWidth), (int) (height * scaleHeight)); } void initField() { - field = new int[width][height]; + field = new int[height + 2][width + 2]; Random rand = new Random(); - for (int x=0; x=width) x2 -= width; - if (y2>=height) y2 -= height; - if ( (field[x][y]+1) % MAX_COLOR == field[x2][y2]) { - field2[x][y] = field[x2][y2]; - } - } - } + void updateField() { + for (int x = 1; x < width + 1; x++) { + field[0][x] = field[height][x]; + field[height + 1][x] = field[1][x]; + } + for (int y = 1; y < height + 1; y++) { + field[y][0] = field[y][width]; + field[y][width + 1] = field[y][1]; + } + field[0][0] = field[height][width]; + field[0][width + 1] = field[height][1]; + field[height + 1][0] = field[1][width]; + field[height + 1][width + 1] = field[1][1]; + for (int x = 1; x < width + 1; x++) { + for (int y = 1; y < height + 1; y++) { + int mod = (field[y][x] + 1) % MAX_COLOR; + change[y-1][x-1] = ((mod == field[y - 1][x - 1]) || (mod == field[y - 1][x]) || (mod == field[y - 1][x + 1]) + || (mod == field[y][x - 1]) || (mod == field[y][x + 1]) || + (mod == field[y + 1][x - 1]) || (mod == field[y + 1][x]) || (mod == field[y + 1][x + 1])); } } - field = field2; + for (int x = 1; x < width+1; x++) + for (int y = 1; y < height+1; y++) + if (change[y-1][x-1]) + field[y][x] = (field[y][x] + 1) < MAX_COLOR ? (field[y][x] + 1) : 0; } @Override public void onDraw(Canvas canvas) { - for (int x=0; x