Advertisement
Guest User

Untitled

a guest
Apr 28th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.31 KB | None | 0 0
  1. package rnd.tetrisandbnw;
  2.  
  3. import android.content.Context;
  4. import android.graphics.Bitmap;
  5. import android.graphics.Canvas;
  6. import android.graphics.Color;
  7. import android.graphics.Paint;
  8. import android.graphics.Path;
  9. import android.graphics.Point;
  10. import android.util.Log;
  11. import android.view.MotionEvent;
  12. import android.view.View;
  13.  
  14. import java.util.LinkedList;
  15.  
  16. /**
  17.  * Created by ioth1nkn0t on 27-4-17.
  18.  */
  19.  
  20. public class BnwView extends View {
  21.     private Path drawPath;
  22.     private Paint drawPaint, canvasPaint;
  23.     private int screenWidth;
  24.     private float middle;
  25.     private float pointCoords[];
  26.     private Canvas drawCanvas;
  27.     private float widthOff;
  28.     private Bitmap canvasBitmap, oldBitmap;
  29.     private LinkedList<Point> points;
  30.     private LinkedList<Point> solution;
  31.     private boolean toRemove = false;
  32.  
  33.     public BnwView(Context context) {
  34.         super(context);
  35.         setUpDrawing();
  36.     }
  37.  
  38.     private void setUpDrawing() {
  39.         drawPath = new Path();
  40.         drawPaint = new Paint();
  41.         drawPaint.setColor(Color.YELLOW);
  42.         drawPaint.setStrokeWidth(20);
  43.         drawPaint.setStyle(Paint.Style.STROKE);
  44.         pointCoords = new float[5];
  45.         points = new LinkedList<>();
  46.  
  47.     }
  48.  
  49.     @Override
  50.     public boolean onTouchEvent(MotionEvent event) {
  51.  
  52.         float touchX = event.getX();
  53.         float touchY = event.getY();
  54.         switch (event.getAction()) {
  55.             case MotionEvent.ACTION_DOWN:
  56.                 int i, j;
  57.                 for(i=0; i<5; i++)
  58.                     for (j = 0; j < 5; j++)
  59.                         if (Math.abs(touchX - pointCoords[i]) < 30 && Math.abs(touchY - pointCoords[j]) < 30 &&
  60.                                 (pointCoords[i] - points.getLast().x) == 0 && (pointCoords[j] - points.getLast().y) == 0) {
  61.                             if(points.size()>1)
  62.                                 drawPath.moveTo(pointCoords[i], pointCoords[j]);
  63.                             invalidate();
  64.                             return true;
  65.                         }
  66.                 if(touchX < (middle+300) && touchX > (middle-300) && touchY > (screenWidth+80) && touchY < (screenWidth+240)) {
  67.                     canvasBitmap = oldBitmap.copy(Bitmap.Config.ARGB_8888,true);
  68.                     drawPath.reset();
  69.                     toRemove = true;
  70.                     break;
  71.                 }
  72.             case MotionEvent.ACTION_MOVE:
  73.                 int k, l;
  74.                 for(k=0; k<5; k++) {
  75.                     for (l = 0; l < 5; l++) {
  76.                         if (Math.abs(touchX - pointCoords[k]) < 30 && Math.abs(touchY - pointCoords[l]) < 30) {
  77.                             if ((pointCoords[k] - points.getLast().x) == 0 && !(pointCoords[l] - points.getLast().y == 0)) {
  78.                                 if (pointCoords[l] < points.getLast().y) {
  79.                                     Point np = new Point(Math.round(pointCoords[k]), Math.round(points.getLast().y - widthOff));
  80.                                     if (points.isEmpty() || !points.contains(np)) {
  81.                                         drawPath.lineTo(pointCoords[k], points.getLast().y - widthOff);
  82.                                         points.add(np);
  83.                                         invalidate();
  84.                                         return true;
  85.                                     }
  86.                                 }
  87.                                 else if (pointCoords[l] > points.getLast().y) {
  88.                                     Point np = new Point(Math.round(pointCoords[k]), Math.round(points.getLast().y + widthOff));
  89.                                     if (points.isEmpty() || !points.contains(np)) {
  90.                                         drawPath.lineTo(pointCoords[k], points.getLast().y + widthOff);
  91.                                         points.add(np);
  92.                                         invalidate();
  93.                                         return true;
  94.                                     }
  95.                                 }
  96.                             }
  97.                             else if (!(pointCoords[k] - points.getLast().x == 0) && (pointCoords[l] - points.getLast().y == 0)) {
  98.                                 if (pointCoords[k] < points.getLast().x) {
  99.                                     Point np = new Point(Math.round(points.getLast().x - widthOff), Math.round(pointCoords[l]));
  100.                                     if (points.isEmpty() || !points.contains(np)) {
  101.                                         drawPath.lineTo(points.getLast().x - widthOff, pointCoords[l]);
  102.                                         points.add(np);
  103.                                         invalidate();
  104.                                         return true;
  105.                                     }
  106.                                 }
  107.                                 else if (pointCoords[k] > points.getLast().x) {
  108.                                     Point np = new Point(Math.round(points.getLast().x + widthOff), Math.round(pointCoords[l]));
  109.                                     if (points.isEmpty() || !points.contains(np)) {
  110.                                         drawPath.lineTo(points.getLast().x + widthOff, pointCoords[l]);
  111.                                         points.add(np);
  112.                                         invalidate();
  113.                                         return true;
  114.                                     }
  115.                                 }
  116.                             }
  117.                         }
  118.                     }
  119.                 }
  120.                 break;
  121.             case MotionEvent.ACTION_UP:
  122.                 if(solution.equals(points)) {
  123.                     drawCanvas.drawCircle(screenWidth/2,screenWidth/2,300,canvasPaint);
  124.                 }
  125.                 for(Point pt: points) {
  126.                     Log.d("points ",pt.toString());
  127.                 }
  128.                 Log.d("----","----------------------");
  129.                 for(Point pt: solution) {
  130.                     Log.d("soluti ",pt.toString());
  131.                 }
  132.                 if(toRemove) {
  133.                     points.clear();
  134.                     points.addLast(new Point(Math.round(pointCoords[0]),Math.round(pointCoords[4])));
  135.                     drawPath.moveTo(pointCoords[0],pointCoords[4]);
  136.                     toRemove = false;
  137.                     break;
  138.                 }
  139.                 drawCanvas.drawPath(drawPath,drawPaint);
  140.                 break;
  141.             default:
  142.                 return false;
  143.         }
  144.         invalidate();
  145.         return true;
  146.     }
  147.  
  148.     @Override
  149.     public void onDraw(Canvas canvas) {
  150.         canvas.drawBitmap(canvasBitmap,0,0,canvasPaint);
  151.         canvas.drawPath(drawPath,drawPaint);
  152.     }
  153.  
  154.     private void setCanvasPaint(Paint canvasPaint) {
  155.         canvasPaint.setColor(Color.BLACK);
  156.         canvasPaint.setStrokeWidth(20);
  157.         canvasPaint.setColor(Color.DKGRAY);
  158.         canvasPaint.setStyle(Paint.Style.STROKE);
  159.     }
  160.  
  161.     private void drawButton(Canvas drawCanvas) {
  162.         middle = screenWidth / 2;
  163.         Paint buttonPaint = new Paint();
  164.         buttonPaint.setColor(Color.DKGRAY);
  165.         buttonPaint.setStyle(Paint.Style.FILL);
  166.         drawCanvas.drawRect(middle-300,screenWidth+80,middle+300,screenWidth+240,buttonPaint);
  167.         buttonPaint.setTextSize(100);
  168.         buttonPaint.setColor(Color.WHITE);
  169.         drawCanvas.drawText("CLEAR",middle-160,screenWidth+180,buttonPaint);
  170.     }
  171.  
  172.     private void setDrawGrid(Canvas drawCanvas) {
  173.         drawCanvas.drawLine(80,80,screenWidth-80,80,canvasPaint);
  174.         drawCanvas.drawLine(screenWidth-80,80,screenWidth-80,screenWidth-80,canvasPaint);
  175.         drawCanvas.drawLine(screenWidth-80,screenWidth-80,80,screenWidth-80,canvasPaint);
  176.         drawCanvas.drawLine(80,screenWidth-80,80,80,canvasPaint);
  177.         canvasPaint.setStyle(Paint.Style.FILL);
  178.         drawCanvas.drawCircle(88,screenWidth-88,12,canvasPaint);
  179.         canvasPaint.setStyle(Paint.Style.STROKE);
  180.         widthOff = ((screenWidth-160) / 4);
  181.         float widthCurr = 80;
  182.         int i;
  183.         for(i=0;i<5;i++) {
  184.             drawCanvas.drawLine(widthCurr,80,widthCurr,screenWidth-80,canvasPaint);
  185.             drawCanvas.drawLine(80,widthCurr,screenWidth-80,widthCurr,canvasPaint);
  186.             Log.d("Current offset","widthCurr = " + widthCurr);
  187.             pointCoords[i] = widthCurr;
  188.             widthCurr += widthOff;
  189.         }
  190.         drawPath.moveTo(pointCoords[0],pointCoords[4]);
  191.         points.addLast(new Point(Math.round(pointCoords[0]),Math.round(pointCoords[4])));
  192.         drawButton(drawCanvas);
  193.     }
  194.  
  195.     private void setUpLevel() {
  196.         solution = new LinkedList<>();
  197.         int i, j;
  198.         for(i = 0; i<3; i++) {
  199.             solution.addLast( new Point( Math.round( pointCoords[i] ), Math.round( pointCoords[4] ) ) );
  200.             Log.d("x y coords", "x = " + pointCoords[i] + " y = " + pointCoords[4]);
  201.         }
  202.         for(j = 4; j>3; j--) {
  203.             solution.addLast( new Point( Math.round( pointCoords[i] ), Math.round( pointCoords[j] ) ) );
  204.             Log.d("x y coords", "x = " + pointCoords[i] + " y = " + pointCoords[j]);
  205.         }
  206.         for(;i>=1;i--) {
  207.             solution.addLast( new Point( Math.round( pointCoords[i] ), Math.round( pointCoords[j] ) ) );
  208.             Log.d("x y coords", "x = " + pointCoords[i] + " y = " + pointCoords[j]);
  209.         }
  210.         solution.addLast( new Point( Math.round( pointCoords[i] ), Math.round( pointCoords[j--] ) ) );
  211.         Log.d("x y coords", "x = " + pointCoords[i] + " y = " + pointCoords[j+1]);
  212.         solution.addLast( new Point( Math.round( pointCoords[i] ), Math.round( pointCoords[j] ) ) );
  213.         Log.d("x y coords", "x = " + pointCoords[i] + " y = " + pointCoords[j]);
  214.     }
  215.  
  216.     @Override
  217.     protected void onSizeChanged(int w, int h, int oldw, int oldh) {
  218.         super.onSizeChanged(w,h,oldw,oldh);
  219.         screenWidth = w;
  220.         canvasBitmap = Bitmap.createBitmap(w,w+300,Bitmap.Config.ARGB_8888);
  221.         canvasPaint = new Paint();
  222.         drawCanvas = new Canvas(canvasBitmap);
  223.         canvasPaint.setStyle(Paint.Style.FILL);
  224.         canvasPaint.setColor(Color.GRAY);
  225.         drawCanvas.drawRect(0,0,screenWidth,screenWidth,canvasPaint);
  226.         setCanvasPaint(canvasPaint);
  227.         setDrawGrid(drawCanvas);
  228.         oldBitmap = canvasBitmap.copy(Bitmap.Config.ARGB_8888,true);
  229.         setUpLevel();
  230.     }
  231. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement