private void addLine(Line l) { if (inLines(l.getA().ordX, l.getA().ordY, l.getB().ordX, l.getB().ordY) != null) { Log.d( "DOTS", "Line already exists at (" + l.getA().ordX + ", " + l.getB().ordY + ") to (" + l.getB().ordX + ", " + l.getB().ordY + ")"); return; } if (l.getA().ordX > l.getB().ordX || l.getA().ordY > l.getB().ordY) l.swapPoints(); // get the ordinal location of the points on the line int x1 = l.getA().ordX; int y1 = l.getA().ordY; int x2 = l.getB().ordX; int y2 = l.getB().ordY; int pointsScored = 0; addedSquares = new ArrayList<Square>(); int xSpace = drawer.getXSpace(); int ySpace = drawer.getYSpace(); if (y1 == y2) { // horizontal line // top square if (y1 > 0) { Line a = inLines(x1, y1, x1, y1 - ySpace); Line b = inLines(x1, y1 - ySpace, x2, y2 - ySpace); Line c = inLines(x2, y2, x2, y2 - ySpace); if (a != null && b != null && c != null) { Square s = new Square(a, b, c, l, gameState); squares.add(s); addedSquares.add(s); drawer.addSquare(s); pointsScored++; } } // bottom square Line a = inLines(x1, y1, x1, y1 + ySpace); Line b = inLines(x1, y1 + ySpace, x2, y1 + ySpace); Line c = inLines(x2, y2, x2, y2 + ySpace); if (a != null && b != null && c != null) { Square s = new Square(a, b, c, l, gameState); squares.add(s); addedSquares.add(s); drawer.addSquare(s); pointsScored++; } } else { // vertical line // left square if (x1 > 0) { Line a = inLines(x1, y1, x1 - xSpace, y1); Line b = inLines(x1 - xSpace, y1, x2 - xSpace, y2); Line c = inLines(x2, y2, x2 - xSpace, y2); if (a != null && b != null && c != null) { Square s = new Square(a, b, c, l, gameState); squares.add(s); addedSquares.add(s); drawer.addSquare(s); pointsScored++; } } // right square Line a = inLines(x1, y1, x1 + xSpace, y1); Line b = inLines(x1 + xSpace, y1, x2 + xSpace, y2); Line c = inLines(x2, y2, x2 + xSpace, y2); if (a != null && b != null && c != null) { Square s = new Square(a, b, c, l, gameState); squares.add(s); addedSquares.add(s); drawer.addSquare(s); pointsScored++; } } lines.add(l); addedLine = l; drawer.addLine(l); ((Button) findViewById(R.id.undoButton)).setEnabled(true); // add score mScores[gameState] += pointsScored; // progress player if (pointsScored == 0) { gameState++; if (gameState == mNumPlayers) gameState = 0; } updateView(); checkGameOver(); }