<?xml version="1.0" encoding="utf-8"?>
<resources>
+
<integer name="row">5</integer>
<integer name="col">8</integer>
<integer name="checkrow">5</integer>
<integer name="checkcol">8</integer>
+
<string-array name="code">
+
<!-- 1 -->
<item>1</item>
<item>0</item>
<item>0</item>
<item>0</item>
</string-array>
+
+ <integer-array name="answer">
+ <item>11</item>
+ <item>30</item>
+ </integer-array>
+
</resources>
\ No newline at end of file
import android.view.View;
public class MatrixView extends View {
+ Context ctx;
Resources res;
float width, height;
int row, col, checkrow, checkcol;
+ int[] cAnswer;
+ ArrayList<Integer> uAnswer;
String[] bits;
ArrayList<Rect> selRects;
- public MatrixView(Context context, Resources res) {
- super(context);
+ public MatrixView(Context ctx, Resources res) {
+ super(ctx);
setFocusable(true);
setFocusableInTouchMode(true);
+ this.ctx = ctx;
this.res = res;
row = res.getInteger(R.integer.row);
col = res.getInteger(R.integer.col);
checkrow = res.getInteger(R.integer.checkrow);
checkcol = res.getInteger(R.integer.checkcol);
+ cAnswer = res.getIntArray(R.array.answer);
+ uAnswer = new ArrayList<Integer>();
bits = res.getStringArray(R.array.code);
selRects = new ArrayList<Rect>();
}
if (event.getAction() != MotionEvent.ACTION_DOWN) {
return super.onTouchEvent(event);
} else {
+ // position
int selX, selY;
selX = (int) (event.getX() / width);
selY = (int) (event.getY() / height);
|| selX == checkcol || selY == checkrow) {
return true;
}
+ // create Rect
Rect r = new Rect();
r.set((int) (selX * width), (int) (selY * height), (int) (selX
* width + width), (int) (selY * height + height));
if (!selRects.remove(r)) {
selRects.add(r);
+ uAnswer.add((selY - 1) * col + selX);
+ } else {
+ uAnswer.remove((Object) ((selY - 1) * col + selX));
}
if (bits[(selY - 1) * col + (selX - 1)].equals("0")) {
bits[(selY - 1) * col + (selX - 1)] = new String("1");
public void reset() {
bits = res.getStringArray(R.array.code);
+ uAnswer = new ArrayList<Integer>();
selRects = new ArrayList<Rect>();
invalidate();
}
+ public int finish() {
+ boolean check;
+ if (uAnswer.size() == cAnswer.length) {
+ for (int i = 0; i < cAnswer.length; i++) {
+ check = false;
+ for (int j = 0; j < uAnswer.size(); j++) {
+ if (cAnswer[i] == uAnswer.get(j)) {
+ check = true;
+ }
+ }
+ if (!check) {
+ return 0;
+ }
+ }
+ return 100;
+ }
+ return 0;
+ }
}
\ No newline at end of file