summaryrefslogtreecommitdiff
path: root/app/src/main/java/space/jakob/mines
diff options
context:
space:
mode:
authorJakob L. Kreuze <jakob@memeware.net>2018-12-15 19:41:19 -0500
committerJakob L. Kreuze <jakob@memeware.net>2018-12-15 19:41:19 -0500
commit6212b809c34ecf4b75bf9635cf0df98262ab25d5 (patch)
tree53a4ed6015b4131c0205a757df134f31fe7f55f4 /app/src/main/java/space/jakob/mines
parent625685b9010a1157664d8f3f68b6884fd34f1b16 (diff)
Initial drawing from tile atlas
Diffstat (limited to 'app/src/main/java/space/jakob/mines')
-rw-r--r--app/src/main/java/space/jakob/mines/GameView.kt47
-rw-r--r--app/src/main/java/space/jakob/mines/Grid.kt9
2 files changed, 48 insertions, 8 deletions
diff --git a/app/src/main/java/space/jakob/mines/GameView.kt b/app/src/main/java/space/jakob/mines/GameView.kt
index c7294df..f323403 100644
--- a/app/src/main/java/space/jakob/mines/GameView.kt
+++ b/app/src/main/java/space/jakob/mines/GameView.kt
@@ -13,21 +13,56 @@
package space.jakob.mines
import android.content.Context
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
import android.graphics.Canvas
+import android.graphics.Rect
import android.graphics.Paint
import android.util.AttributeSet
import android.view.View
+import android.util.Log
+
+const val atlasWidth = 3
+
+enum class AtlasEntry {
+ BLANK, MASKED, UNMASKED,
+ ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT,
+ FLAG, UNKNOWN, MINE, TRIPPED,
+}
class GameView(context: Context, attrs: AttributeSet) : View(context, attrs) {
+ val atlas = BitmapFactory.decodeResource(context.resources, R.drawable.atlas);
+ val tileWidth = atlas.width / 3
+
+ var grid: Grid? = null
+
+ var cameraX = 0.0f
+ var cameraY = 0.0f
+ var sightX = 5.0f
+ var sightY = 5.0f
+
+ val scaledWidth: Int
+ get() = width / (sightX - cameraX).toInt()
+ val scaledHeight: Int
+ get() = height / (sightY - cameraY).toInt()
+
+ private fun atlasRect(entry: AtlasEntry, tileWidth: Int): Rect {
+ val x = (entry.ordinal % atlasWidth) * tileWidth
+ val y = (entry.ordinal / atlasWidth) * tileWidth
+ return Rect(x, y, x + tileWidth, y + tileWidth)
+ }
+
+ private fun drawTile(canvas: Canvas, entry: AtlasEntry, x: Int, y: Int) {
+ val src = atlasRect(entry, tileWidth)
+ val dst = Rect(x, y, x + scaledWidth, y + scaledHeight)
+ canvas.drawBitmap(atlas, src, dst, null)
+ }
+
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
- val textPaint = Paint().apply {
- textSize = 64f
- }
-
- canvas.apply {
- drawText("Hello, world!", 24f, 24f, textPaint)
+ for (i in 0..5) {
+ drawTile(canvas, AtlasEntry.MINE, i * scaledWidth - tileWidth / 2, 0)
}
}
}
diff --git a/app/src/main/java/space/jakob/mines/Grid.kt b/app/src/main/java/space/jakob/mines/Grid.kt
index 7ba9442..b61f5f1 100644
--- a/app/src/main/java/space/jakob/mines/Grid.kt
+++ b/app/src/main/java/space/jakob/mines/Grid.kt
@@ -10,6 +10,10 @@
// You should have received a copy of the GNU General Public License along with
// Mines. If not, see <https://www.gnu.org/licenses/>.
+package space.jakob.mines
+
+import java.util.Random
+
data class Tile(val adjacentMines: Int = 0, val mine: Boolean = false, val masked: Boolean = true)
/**
@@ -19,8 +23,9 @@ class Grid(val width: Int, val height: Int, val tiles: Array<Tile>) {
constructor(width: Int = 8, height: Int = 8, mines: Int = 10)
: this(width, height, Array<Tile>(width * height) { Tile() }) {
for (i in 0 until mines) {
- val x = (0 until width).random()
- val y = (0 until height).random()
+ // No access to kotlin.random.Random, so we have to use java.util.Random
+ val x = Random().nextInt(width)
+ val y = Random().nextInt(height)
placeMine(x, y)
}
}