From 109ae6fe4de6c323c6956a8a6f401b70f05ccaa6 Mon Sep 17 00:00:00 2001 From: gitknilch Date: Fri, 8 Mar 2013 19:08:56 +0100 Subject: [PATCH] more refactoring. Change-Id: Ie0c4755e14653a0579dc4c0d6c510523939ea5e5 Signed-off-by: gitknilch --- res/values/strings.xml | 2 +- src/de/cwde/freeshisen/Point.java | 32 ++- src/de/cwde/freeshisen/ShisenShoView.java | 228 ++++++---------------- 3 files changed, 88 insertions(+), 174 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 3519c0d..2d1f10d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -28,7 +28,7 @@ Get the source code: https://code.google.com/p/freeshisen/ Fastest Times Difficulty: Hard Difficulty: Easy - Clear + Clear Times Clears all saved times "Large: 1st " ", 2nd " diff --git a/src/de/cwde/freeshisen/Point.java b/src/de/cwde/freeshisen/Point.java index fc3e971..3a4a47d 100644 --- a/src/de/cwde/freeshisen/Point.java +++ b/src/de/cwde/freeshisen/Point.java @@ -2,29 +2,43 @@ package de.cwde.freeshisen; class Point { public Point(int i, int j) { - this.i=i; - this.j=j; + this.i = i; + this.j = j; + } + + public Point(Point p) { + this.i = p.i; + this.j = p.j; } public boolean equals(Point p) { - return (i==p.i && j==p.j); + return (i == p.i && j == p.j); + } + + public boolean equals(int myi, int myj) { + return (i == myi && j == myj); } public String toString() { - return "("+i+","+j+")"; + return "(" + i + "," + j + ")"; + } + + public void set(int i, int j) { + this.i = i; + this.j = j; } public static Point fromString(String s) { - String[] ij=s.split(",",2); - int i=Integer.parseInt(ij[0]); - int j=Integer.parseInt(ij[1]); - return new Point(i,j); + String[] ij = s.split(",", 2); + int i = Integer.parseInt(ij[0]); + int j = Integer.parseInt(ij[1]); + return new Point(i, j); } public int i; public int j; public Point copy() { - return new Point(this.i,this.j); + return new Point(this.i, this.j); } } diff --git a/src/de/cwde/freeshisen/ShisenShoView.java b/src/de/cwde/freeshisen/ShisenShoView.java index ecb4763..7d92a0a 100644 --- a/src/de/cwde/freeshisen/ShisenShoView.java +++ b/src/de/cwde/freeshisen/ShisenShoView.java @@ -44,8 +44,8 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback { private int tileWidth; private Bitmap bg; private Bitmap tile[]; - private int[] selection1=new int[2]; - private int[] selection2=new int[2]; + private Point selection1 = new Point(0,0); + private Point selection2 = new Point(0,0); private List path=null; private List pairs=null; private long startTime; @@ -60,8 +60,9 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback { private StatePaint pstate; private Canvas canvas = null; private SurfaceHolder surfaceHolder = null; + public ShisenShoView(ShisenSho shishenSho) { - super((Context)shishenSho); + super((Context) shishenSho); this.app = shishenSho; cstate = StatePlay.UNINITIALIZED; surfaceHolder = getHolder(); @@ -69,7 +70,7 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback { } public ShisenShoView(Context ctx) { - super((Context)ctx); + super((Context) ctx); // silence lint? } @@ -350,17 +351,7 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback { case SELECTED1: case SELECTED2: case MATCHED: - paint.setColor(selectcolor); - paint.setStyle(Style.STROKE); - paint.setStrokeCap(Cap.ROUND); - paint.setStrokeJoin(Join.ROUND); - paint.setStrokeWidth(3); - cbuffer.drawRect(new Rect( - x0+selection1[1]*tileWidth-2, - y0+selection1[0]*tileHeight-2, - x0+selection1[1]*tileWidth-2+tileWidth+2*2, - y0+selection1[0]*tileHeight-2+tileHeight+2*2), - paint); + highlightTile(cbuffer, x0, y0, selection1, selectcolor); break; } @@ -368,17 +359,7 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback { switch (pstate) { case SELECTED2: case MATCHED: - paint.setColor(selectcolor); - paint.setStyle(Style.STROKE); - paint.setStrokeCap(Cap.ROUND); - paint.setStrokeJoin(Join.ROUND); - paint.setStrokeWidth(3); - cbuffer.drawRect(new Rect( - x0+selection2[1]*tileWidth-2, - y0+selection2[0]*tileHeight-2, - x0+selection2[1]*tileWidth-2+tileWidth+2*2, - y0+selection2[0]*tileHeight-2+tileHeight+2*2), - paint); + highlightTile(cbuffer, x0, y0, selection2, selectcolor); break; } @@ -395,12 +376,7 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback { Point p0=null; for (Point p1 : path) { if (p0!=null) { - cbuffer.drawLine( - x0+p0.j*tileWidth-2+(tileWidth/2), - y0+p0.i*tileHeight-2+(tileHeight/2), - x0+p1.j*tileWidth-2+(tileWidth/2), - y0+p1.i*tileHeight-2+(tileHeight/2), - paint); + drawLine(cbuffer, x0, y0, p0, p1, paint); } p0=p1; } @@ -411,46 +387,31 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback { // Orange hint rectangles switch (pstate) { case HINT: - if (pairs!=null && pairs.size()>0) { - Line pair=pairs.get(0); - Point a=pair.a; - Point b=pair.b; - path=app.board.getPath(a,b); + if (pairs != null && pairs.size() > 0) { + Line pair = pairs.get(0); + Point a = pair.a; + Point b = pair.b; + path = app.board.getPath(a, b); paint.setColor(hintcolor); paint.setStyle(Style.STROKE); paint.setStrokeCap(Cap.ROUND); paint.setStrokeJoin(Join.ROUND); paint.setStrokeWidth(3); - cbuffer.drawRect(new Rect( - x0+a.j*tileWidth-2, - y0+a.i*tileHeight-2, - x0+a.j*tileWidth-2+tileWidth+2*2, - y0+a.i*tileHeight-2+tileHeight+2*2), - paint); + highlightTile(cbuffer, x0, y0, a, hintcolor); - if (path!=null) { - Point p0=null; + if (path != null) { + Point p0 = null; for (Point p1 : path) { - if (p0!=null) { - cbuffer.drawLine( - x0+p0.j*tileWidth-2+(tileWidth/2), - y0+p0.i*tileHeight-2+(tileHeight/2), - x0+p1.j*tileWidth-2+(tileWidth/2), - y0+p1.i*tileHeight-2+(tileHeight/2), - paint); + if (p0 != null) { + drawLine(cbuffer, x0, y0, p0, p1, paint); } - p0=p1; + p0 = p1; } - path=null; + path = null; } - cbuffer.drawRect(new Rect( - x0+b.j*tileWidth-2, - y0+b.i*tileHeight-2, - x0+b.j*tileWidth-2+tileWidth+2*2, - y0+b.i*tileHeight-2+tileHeight+2*2), - paint); + highlightTile(cbuffer, x0, y0, b, hintcolor); } break; } @@ -512,6 +473,31 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback { } + private void drawLine(Canvas cbuffer, int x0, int y0, Point p0, Point p1, + Paint paint) { + cbuffer.drawLine( + x0 + p0.j * tileWidth - 2 + (tileWidth / 2), + y0 + p0.i * tileHeight - 2 + (tileHeight / 2), + x0 + p1.j * tileWidth - 2 + (tileWidth / 2), + y0 + p1.i * tileHeight - 2 + (tileHeight / 2), paint); + } + + private void highlightTile(Canvas cbuffer, int x0, int y0, Point p, int color) { + Paint paint = new Paint(); + paint.setFlags(Paint.ANTI_ALIAS_FLAG); + paint.setColor(color); + paint.setStyle(Style.STROKE); + paint.setStrokeCap(Cap.ROUND); + paint.setStrokeJoin(Join.ROUND); + paint.setStrokeWidth(3); + Rect r = new Rect( + x0 + p.j * tileWidth - 2, + y0 + p.i * tileHeight - 2, + x0 + p.j * tileWidth * 2 + 2, + y0 + p.i * tileHeight * 2 + 2); + cbuffer.drawRect(r, paint); + } + @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction()==MotionEvent.ACTION_DOWN) { @@ -527,43 +513,40 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback { switch (cstate) { case IDLE: - if (i>=0 && - i=0 && j= 0 && i < app.board.boardSize[0] && j >= 0 + && j < app.board.boardSize[1] + && app.board.board[i][j] != 0) { + selection1.set(i, j); paint(StatePaint.SELECTED1); control(StatePlay.SELECTED1); } break; case SELECTED1: - if (i>=0 && i=0 && j= 0 && i < app.board.boardSize[0] && j >= 0 + && j < app.board.boardSize[1] + && app.board.board[i][j] != 0) { + if (selection1.equals(i, j)) { paint(StatePaint.BOARD); control(StatePlay.IDLE); } else { - selection2[0]=i; - selection2[1]=j; + selection2.set(i, j); paint(StatePaint.SELECTED2); - Point a=new Point(selection1[0],selection1[1]); - Point b=new Point(selection2[0],selection2[1]); - path=app.board.getPath(a,b); + Point a = selection1.copy(); + Point b = selection2.copy(); + path = app.board.getPath(a, b); paint(StatePaint.MATCHED); app.sleep(2); paint(StatePaint.BOARD); - if (path.size()>0) { - app.board.play(a,b); + if (path.size() > 0) { + app.board.play(a, b); } - path=null; + path = null; paint(StatePaint.BOARD); - pairs=app.board.getPairs(1); - if (pairs.size()==0) { - if (app.board.getNumPieces()==0) { + pairs = app.board.getPairs(1); + if (pairs.size() == 0) { + if (app.board.getNumPieces() == 0) { paint(StatePaint.WIN); } else { paint(StatePaint.LOSE); @@ -606,87 +589,4 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback { unregisterTimer(); } } - - /* - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - if (!initialized) initialize(); - - long currTime = System.currentTimeMillis(); - - a = (float)(currTime - startTime) / (float)duration; - if (a > (float)1.0) a = (float)1.0; - - x = Math.round(nextx*a + prevx*(1-a)); - y = Math.round(nexty*a + prevy*(1-a)); - - if (a == (float)1.0) computeNextTarget(); - - int bgWidth = bg.getWidth(); - int bgHeight = bg.getHeight(); - for (int i=0; i