-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Ben Trengrove
committed
Nov 3, 2020
0 parents
commit 1603bf5
Showing
56 changed files
with
1,040 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
*.iml | ||
.gradle | ||
/local.properties | ||
/.idea/caches | ||
/.idea/libraries | ||
/.idea/modules.xml | ||
/.idea/workspace.xml | ||
/.idea/navEditor.xml | ||
/.idea/assetWizardSettings.xml | ||
.DS_Store | ||
/build | ||
/captures | ||
.externalNativeBuild | ||
.cxx | ||
local.properties |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
/build |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
plugins { | ||
id 'com.android.application' | ||
id 'kotlin-android' | ||
} | ||
|
||
android { | ||
compileSdkVersion 30 | ||
|
||
defaultConfig { | ||
applicationId "com.bentrengrove.chess" | ||
minSdkVersion 28 | ||
targetSdkVersion 30 | ||
versionCode 1 | ||
versionName "1.0" | ||
|
||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | ||
} | ||
|
||
buildTypes { | ||
release { | ||
minifyEnabled false | ||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' | ||
} | ||
} | ||
compileOptions { | ||
sourceCompatibility JavaVersion.VERSION_1_8 | ||
targetCompatibility JavaVersion.VERSION_1_8 | ||
} | ||
kotlinOptions { | ||
jvmTarget = '1.8' | ||
useIR = true | ||
} | ||
buildFeatures { | ||
compose true | ||
} | ||
composeOptions { | ||
kotlinCompilerExtensionVersion compose_version | ||
kotlinCompilerVersion '1.4.10' | ||
} | ||
} | ||
|
||
dependencies { | ||
|
||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" | ||
implementation 'androidx.core:core-ktx:1.3.2' | ||
implementation 'androidx.appcompat:appcompat:1.2.0' | ||
implementation 'com.google.android.material:material:1.2.1' | ||
implementation "androidx.compose.ui:ui:$compose_version" | ||
implementation "androidx.compose.material:material:$compose_version" | ||
implementation "androidx.ui:ui-tooling:$compose_version" | ||
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.0-alpha06' | ||
testImplementation 'junit:junit:4.+' | ||
androidTestImplementation 'androidx.test.ext:junit:1.1.2' | ||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# Add project specific ProGuard rules here. | ||
# You can control the set of applied configuration files using the | ||
# proguardFiles setting in build.gradle. | ||
# | ||
# For more details, see | ||
# http://developer.android.com/guide/developing/tools/proguard.html | ||
|
||
# If your project uses WebView with JS, uncomment the following | ||
# and specify the fully qualified class name to the JavaScript interface | ||
# class: | ||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { | ||
# public *; | ||
#} | ||
|
||
# Uncomment this to preserve the line number information for | ||
# debugging stack traces. | ||
#-keepattributes SourceFile,LineNumberTable | ||
|
||
# If you keep the line number information, uncomment this to | ||
# hide the original source file name. | ||
#-renamesourcefileattribute SourceFile |
24 changes: 24 additions & 0 deletions
24
app/src/androidTest/java/com/bentrengrove/chess/ExampleInstrumentedTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package com.bentrengrove.chess | ||
|
||
import androidx.test.platform.app.InstrumentationRegistry | ||
import androidx.test.ext.junit.runners.AndroidJUnit4 | ||
|
||
import org.junit.Test | ||
import org.junit.runner.RunWith | ||
|
||
import org.junit.Assert.* | ||
|
||
/** | ||
* Instrumented test, which will execute on an Android device. | ||
* | ||
* See [testing documentation](http://d.android.com/tools/testing). | ||
*/ | ||
@RunWith(AndroidJUnit4::class) | ||
class ExampleInstrumentedTest { | ||
@Test | ||
fun useAppContext() { | ||
// Context of the app under test. | ||
val appContext = InstrumentationRegistry.getInstrumentation().targetContext | ||
assertEquals("com.bentrengrove.chess", appContext.packageName) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
package="com.bentrengrove.chess"> | ||
|
||
<application | ||
android:allowBackup="true" | ||
android:icon="@mipmap/ic_launcher" | ||
android:label="@string/app_name" | ||
android:roundIcon="@mipmap/ic_launcher_round" | ||
android:supportsRtl="true" | ||
android:theme="@style/Theme.Chess"> | ||
<activity | ||
android:name=".MainActivity" | ||
android:label="@string/app_name" | ||
android:theme="@style/Theme.Chess.NoActionBar"> | ||
<intent-filter> | ||
<action android:name="android.intent.action.MAIN" /> | ||
|
||
<category android:name="android.intent.category.LAUNCHER" /> | ||
</intent-filter> | ||
</activity> | ||
</application> | ||
|
||
</manifest> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
package com.bentrengrove.chess | ||
|
||
import androidx.annotation.DrawableRes | ||
|
||
sealed class PieceType(val value: Int) { | ||
object Pawn: PieceType(1) | ||
object Knight: PieceType(3) | ||
object Bishop: PieceType(3) | ||
object Rook: PieceType(5) | ||
object Queen: PieceType(8) | ||
object King: PieceType(0) | ||
} | ||
|
||
sealed class PieceColor { | ||
object White: PieceColor() | ||
object Black: PieceColor() | ||
|
||
fun other(): PieceColor { | ||
return if (this == White) Black else White | ||
} | ||
} | ||
|
||
private fun pieceTypeFromId(id: String): Pair<PieceType, PieceColor> { | ||
val chars = id.toCharArray() | ||
if (chars.size != 3) throw IllegalStateException("Piece id should be 3 characters") | ||
val pieceColor = when (chars[0]) { | ||
'W' -> PieceColor.White | ||
'B' -> PieceColor.Black | ||
else -> throw IllegalStateException("First character should be W or B") | ||
} | ||
val pieceType = when (chars[1]) { | ||
'P' -> PieceType.Pawn | ||
'N' -> PieceType.Knight | ||
'B' -> PieceType.Bishop | ||
'R' -> PieceType.Rook | ||
'Q' -> PieceType.Queen | ||
'K' -> PieceType.King | ||
else -> throw IllegalStateException("Second character should be a piece type") | ||
} | ||
return pieceType to pieceColor | ||
} | ||
data class Piece(val id: String, val type: PieceType, val color: PieceColor) { | ||
companion object { | ||
fun pieceFromString(id: String): Piece { | ||
val types = pieceTypeFromId(id) | ||
return Piece(id, types.first, types.second) | ||
} | ||
} | ||
|
||
@DrawableRes | ||
fun imageResource(): Int { | ||
return when (type) { | ||
PieceType.Pawn -> if (color is PieceColor.White) R.drawable.w_pawn_2x_ns else R.drawable.b_pawn_2x_ns | ||
PieceType.Knight -> if (color is PieceColor.White) R.drawable.w_knight_2x_ns else R.drawable.b_knight_2x_ns | ||
PieceType.Bishop -> if (color is PieceColor.White) R.drawable.w_bishop_2x_ns else R.drawable.b_bishop_2x_ns | ||
PieceType.Rook -> if (color is PieceColor.White) R.drawable.w_rook_2x_ns else R.drawable.b_rook_2x_ns | ||
PieceType.Queen -> if (color is PieceColor.White) R.drawable.w_queen_2x_ns else R.drawable.b_queen_2x_ns | ||
PieceType.King -> if (color is PieceColor.White) R.drawable.w_king_2x_ns else R.drawable.b_king_2x_ns | ||
} | ||
} | ||
} | ||
|
||
data class Delta(val x: Int, val y: Int) | ||
data class Position(val x: Int, val y: Int) { | ||
operator fun plus(other: Position): Delta { | ||
return Delta(this.x + other.x, this.y + other.y) | ||
} | ||
|
||
operator fun minus(other: Position): Delta { | ||
return Delta(this.x - other.x, this.y - other.y) | ||
} | ||
} | ||
|
||
private val INITIAL_BOARD = listOf( | ||
listOf("BR0", "BN1", "BB2", "BQ3", "BK4", "BB5", "BN6", "BR7").map { Piece.pieceFromString(it) }, | ||
listOf("BP0", "BP1", "BP2", "BP3", "BP4", "BP5", "BP6", "BP7").map { Piece.pieceFromString(it) }, | ||
listOf(null, null, null, null, null, null, null, null), | ||
listOf(null, null, null, null, null, null, null, null), | ||
listOf(null, null, null, null, null, null, null, null), | ||
listOf(null, null, null, null, null, null, null, null), | ||
listOf("WP0", "WP1", "WP2", "WP3", "WP4", "WP5", "WP6", "WP7").map { Piece.pieceFromString(it) }, | ||
listOf("WR0", "WN1", "WB2", "WQ3", "WK4", "WB5", "WN6", "WR7").map { Piece.pieceFromString(it) } | ||
) | ||
data class Board(val pieces: List<List<Piece?>> = INITIAL_BOARD) { | ||
fun pieceAt(position: Position): Piece? { | ||
return pieces.getOrNull(position.y)?.getOrNull(position.x) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
package com.bentrengrove.chess | ||
|
||
import androidx.compose.foundation.Image | ||
import androidx.compose.foundation.background | ||
import androidx.compose.foundation.layout.* | ||
import androidx.compose.runtime.Composable | ||
import androidx.compose.ui.Modifier | ||
import androidx.compose.ui.graphics.Color | ||
import androidx.compose.ui.res.imageResource | ||
import androidx.compose.ui.unit.dp | ||
|
||
@Composable | ||
fun BoardView(modifier: Modifier = Modifier, board: Board) { | ||
Column { | ||
for (y in 0 until 8) { | ||
Row { | ||
for (x in 0 until 8) { | ||
val white = y % 2 == x % 2 | ||
val color = if (white) Color.LightGray else Color.DarkGray | ||
Box(modifier = Modifier.weight(1f).background(color).aspectRatio(1.0f)) { | ||
val position = Position(x, y) | ||
val piece = board.pieceAt(position) | ||
if (piece != null) { | ||
Image(imageResource(id = piece.imageResource()), modifier = Modifier.padding(4.dp).matchParentSize()) | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package com.bentrengrove.chess | ||
|
||
import android.os.Bundle | ||
import androidx.appcompat.app.AppCompatActivity | ||
import androidx.compose.foundation.Text | ||
import androidx.compose.material.MaterialTheme | ||
import androidx.compose.material.Surface | ||
import androidx.compose.runtime.Composable | ||
import androidx.compose.runtime.mutableStateOf | ||
import androidx.compose.runtime.remember | ||
import androidx.compose.runtime.getValue | ||
import androidx.compose.runtime.setValue | ||
import androidx.compose.ui.platform.setContent | ||
import androidx.ui.tooling.preview.Preview | ||
import com.bentrengrove.chess.ui.ChessTheme | ||
|
||
class MainActivity : AppCompatActivity() { | ||
override fun onCreate(savedInstanceState: Bundle?) { | ||
super.onCreate(savedInstanceState) | ||
setContent { | ||
ChessTheme { | ||
// A surface container using the 'background' color from the theme | ||
Surface(color = MaterialTheme.colors.background) { | ||
GameView() | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
||
@Composable | ||
fun GameView() { | ||
val board by remember { mutableStateOf(Board())} | ||
BoardView(board = board) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package com.bentrengrove.chess.ui | ||
|
||
import androidx.compose.ui.graphics.Color | ||
|
||
val purple200 = Color(0xFFBB86FC) | ||
val purple500 = Color(0xFF6200EE) | ||
val purple700 = Color(0xFF3700B3) | ||
val teal200 = Color(0xFF03DAC5) |
Oops, something went wrong.