๐ŸŽฎ A Minesweeper like puzzle game, built using Jetpack Compose, for Android.

Last update: May 22, 2022

Minesweeper w/ Jetpack Compose

This is a Minesweeper-like puzzle game, built using Jetpack Compose, for Android.

The objective of this game is to clear a rectangular board containing hidden "mines" or bombs without detonating any of them, with help from clues about the number of neighboring mines in each cell.

Try out the app, download the apk from the link below:

Minesweeper-JC

Demo

Dark mode Light mode
Using Views - Light theme Using Views - Dark theme

Features :

  • Zoomable and Pannable minefield
  • Safe first click - The first cell is never a mine as the minefield is generated around the first click
  • Multiple difficulty levels to choose from
  • Quick toggle for click / flag mode
  • Haptic & Aural feedback
  • Day / Night theme
  • Animating gradient cell background
  • Randomly generated levels

Controls :

  • Tap a cell to reveal it
  • Long press an unrevealed cell to flag/unflag it
  • Tap an already revealed cell to expose potentially solved cells

Package Structure :

com.jayasuryat.minesweeperjc
โ”œโ”€โ”€ ๐Ÿ“‚ app/                          # App module
โ”‚   โ”œโ”€โ”€ presentation/                 # Navigation & Screens
โ”‚   โ”œโ”€โ”€ theme/                        # Theming
โ”‚   โ””โ”€โ”€ MinesweeperApp.kt
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ minesweeper-engine/           # Module for driving all the logics of the game
โ”‚   โ”œโ”€โ”€ controller/                   # Game actions, events, game controller and action handlers
โ”‚   โ”‚   โ””โ”€โ”€ model/                    # Models for actions and events
โ”‚   โ”œโ”€โ”€ gridgenerator/                # Generators for the minefield
โ”‚   โ”œโ”€โ”€ model/                        # Models for cells and grid
โ”‚   โ”œโ”€โ”€ state/                        # Stateful grid and utils
โ”‚   โ””โ”€โ”€ util/
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ minesweeper-engine-debug/     # Module for debug utils related to minesweeper-engine
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ minesweeper-ui/               # Module for all of the UI components of the mine grid
โ”‚   โ””โ”€โ”€ composable/
โ”‚       โ”œโ”€โ”€ action/                   # Action listeners for Minefield interaction actions
โ”‚       โ”œโ”€โ”€ cell/                     # All composables related to MineCells
โ”‚       โ”œโ”€โ”€ component/                # Helper composables
โ”‚       โ”œโ”€โ”€ grid/                     # All composables related to MineGrid
โ”‚       โ””โ”€โ”€ theme/                    # Theming for Minefield UI components
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ ui-game/                      # Module for the actual MineField screen
โ”‚   โ”œโ”€โ”€ composable/                   # All UI components
โ”‚   โ”‚   โ”œโ”€โ”€ feedback/                 # Composables for handling feedback
โ”‚   โ”‚   โ””โ”€โ”€ topbar/                   # Composables for game TopBar
โ”‚   โ”œโ”€โ”€ feedback/                     # Helper classes for performing feedback operations
โ”‚   โ”œโ”€โ”€ logic/                        # Game logic coordinators
โ”‚   โ””โ”€โ”€ GameScreen.kt                 # Actual Game-Screen
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ ui-difficulty-selection/      # Module for difficulty selection screen
โ”‚
โ””โ”€โ”€ ๐Ÿ“‚ util/                         # Module for common utilities

Contributions

Contributions are welcome! See Contributing Guidelines.

Credits

All the SFX used in this project are sourced from freesound.org and are licensed under the Creative Commons 0 License.

License

 Copyright 2022 Jaya Surya Thotapalli

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

GitHub

https://github.com/JayaSuryaT/minesweeper-j-compose
Comments
  • 1. Bump kotlin-gradle-plugin from 1.5.31 to 1.6.21

    Bumps kotlin-gradle-plugin from 1.5.31 to 1.6.21.

    Release notes

    Sourced from kotlin-gradle-plugin's releases.

    Kotlin 1.6.20

    Changelog

    Compiler

    New Features

    • KT-48217 Add an annotation JvmDefaultWithCompatibility to allow generating DefaultImpls classes if -Xjvm-default=all option is used
    • KT-49929 [FIR] Support programmatic creation of annotation class instances
    • KT-49276 Warn about potential overload resolution change if Range/Progression starts implementing Collection
    • KT-47902 Do not propagate method deprecation through overrides
    • KT-49857 Require Xcode 13 for building Kotlin/Native compiler
    • KT-47701 Support instantiation of annotation classes on Native
    • KT-46085 Support experimental parallel compilation of a single module in the JVM backend
    • KT-46603 Generate SAM-conversions to Java interfaces extending 'java.io.Serializable' as serializable using java.lang.invoke.LambdaMetafactory

    Performance Improvements

    • KT-50156 HMPP: Slow frontend/ide performance in OKIO (ExpectActualDeclarationChecker)
    • KT-50073 Performance regression in adapted function references
    • KT-50076 Performance regression in super call to an interface member in $DefaultImpls
    • KT-50080 Performance regression in string template with generic property with primitive upper bound
    • KT-50084 Performance regression in concatenation with 'String?'
    • KT-50078 Performance regression in for-in-array loop
    • KT-50039 Performance regression in inner class constructor call with default parameters
    • KT-48784 An anonymous class has fields for variables that are only used in the constructor
    • KT-42010 Generate IINC instruction for postfix increment in JVM_IR
    • KT-48433 JVM_IR don't generate null check on 'this$0' parameter of inner class constructor
    • KT-48435 JVM_IR ConstForLoopBenchmark performance regression
    • KT-48507 JVM_IR ForLoopBenchmark regressions
    • KT-48640 Performance regression in 'longDownToLoop' benchmarks
    • KT-29822 Generate specialized bytecode for loops withIndex over unsigned arrays
    • KT-48669 Generate optimizable counter loop for loops over indices of unsigned arrays
    • KT-49444 Possible performance degradation with UInt downTo loop
    • KT-48944 Possible performance regression with comparison of local KFunctions
    • KT-17111 Eliminate redundant store/load instructions when the value stored is simple
    • KT-36837 Generate more compact code for for-in-range loop in JVM_IR
    • KT-48947 JVM / IR Possible performance regression with string templates
    • KT-48931 JVM / IR: Performance degradation with string concatenation
    • KT-36654 Generate more compact bytecode for safe call in JVM_IR

    Fixes

    • KT-24643 Prohibit using a type parameter declared for an extension property inside delegate
    • KT-51747 Make KtCallableDeclaration.getContextReceivers default to preserve compatibility
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-43493 NI: @โ€‹BuilderInference prevents compilation error of "Operator '==' cannot be applied to 'Long' and 'Int'"
    • KT-51649 Kotlin/Native: reduce binary size of watchosArm32 and iosArm32 targets by limiting inlining of runtime functions
    • KT-48626 JVM IR: incorrect behavior for captured for-loop parameter since 1.6.20-dev-723
    • KT-51036 JVM / IR: "NullPointerException: Parameter specified as non-null is null" with synchronized and companion object

    ... (truncated)

    Changelog

    Sourced from kotlin-gradle-plugin's changelog.

    1.6.20

    Compiler

    New Features

    • KT-48217 Add an annotation JvmDefaultWithCompatibility to allow generating DefaultImpls classes if -Xjvm-default=all option is used
    • KT-49929 [FIR] Support programmatic creation of annotation class instances
    • KT-49276 Warn about potential overload resolution change if Range/Progression starts implementing Collection
    • KT-47902 Do not propagate method deprecation through overrides
    • KT-49857 Require Xcode 13 for building Kotlin/Native compiler
    • KT-47701 Support instantiation of annotation classes on Native
    • KT-46085 Support experimental parallel compilation of a single module in the JVM backend
    • KT-46603 Generate SAM-conversions to Java interfaces extending 'java.io.Serializable' as serializable using java.lang.invoke.LambdaMetafactory

    Performance Improvements

    • KT-50156 HMPP: Slow frontend/ide performance in OKIO (ExpectActualDeclarationChecker)
    • KT-50073 Performance regression in adapted function references
    • KT-50076 Performance regression in super call to an interface member in $DefaultImpls
    • KT-50080 Performance regression in string template with generic property with primitive upper bound
    • KT-50084 Performance regression in concatenation with 'String?'
    • KT-50078 Performance regression in for-in-array loop
    • KT-50039 Performance regression in inner class constructor call with default parameters
    • KT-48784 An anonymous class has fields for variables that are only used in the constructor
    • KT-42010 Generate IINC instruction for postfix increment in JVM_IR
    • KT-48433 JVM_IR don't generate null check on 'this$0' parameter of inner class constructor
    • KT-48435 JVM_IR ConstForLoopBenchmark performance regression
    • KT-48507 JVM_IR ForLoopBenchmark regressions
    • KT-48640 Performance regression in 'longDownToLoop' benchmarks
    • KT-29822 Generate specialized bytecode for loops withIndex over unsigned arrays
    • KT-48669 Generate optimizable counter loop for loops over indices of unsigned arrays
    • KT-49444 Possible performance degradation with UInt downTo loop
    • KT-48944 Possible performance regression with comparison of local KFunctions
    • KT-17111 Eliminate redundant store/load instructions when the value stored is simple
    • KT-36837 Generate more compact code for for-in-range loop in JVM_IR
    • KT-48947 JVM / IR Possible performance regression with string templates
    • KT-48931 JVM / IR: Performance degradation with string concatenation
    • KT-36654 Generate more compact bytecode for safe call in JVM_IR

    Fixes

    • KT-24643 Prohibit using a type parameter declared for an extension property inside delegate
    • KT-51747 Make KtCallableDeclaration.getContextReceivers default to preserve compatibility
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-43493 NI: @โ€‹BuilderInference prevents compilation error of "Operator '==' cannot be applied to 'Long' and 'Int'"
    • KT-51649 Kotlin/Native: reduce binary size of watchosArm32 and iosArm32 targets by limiting inlining of runtime functions
    • KT-48626 JVM IR: incorrect behavior for captured for-loop parameter since 1.6.20-dev-723
    • KT-51036 JVM / IR: "NullPointerException: Parameter specified as non-null is null" with synchronized and companion object
    • KT-51471 Native: incorrect debug information when inheriting suspend fun invoke implementation

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Reviewed by dependabot[bot] at 2022-04-19 15:39
  • 2. Add support for resuming game

    Resuming game

    It would be nice if the user could resume the game from where they left off the last time.

    The flow could be something like this :

    1. User chooses a difficulty level, starts the game.
    2. Leaves the game / closes the app.
    3. User reopens the game.
    4. User is directly navigated to the game screen with the same grid where he left off the last time.
    5. He can continue from there or navigate back to the difficulty selection screen.
    6. On continuing, the user should be presented with the same grid that they had played and left the last time.
    7. In the difficulty selection screen, on selecting a difficulty level and starting a game, if a previous unfinished game with the same difficulty level exists, the user should be prompted with a dialog about whether he wants to continue or to start over.
    8. Based on what the user chooses, an appropriate game board should be rendered in the game screen.

    How?

    • [x] Choose a KMM library for DB (SQLDelight chosen).
    • [x] Extend the data module to have a DB to be able to store objects.
    • [x] #72
    • [x] #74
    • [x] #78
    • [x] #81
    • [x] #75
    • [x] Handle game restart.
    • [x] #79
    • [x] #80
    • [x] #82
    • [x] #83
    Reviewed by JayaSuryaT at 2022-04-10 15:42
  • 3. Bump kotlin-gradle-plugin from 1.5.31 to 1.6.10

    Bumps kotlin-gradle-plugin from 1.5.31 to 1.6.10.

    Release notes

    Sourced from kotlin-gradle-plugin's releases.

    Kotlin 1.6.10

    Changelog

    Android

    • KT-49798 [MPP] [Android] AGP 7.1.0+ android target publications leak 'AgpVersionAttr' attribute

    Compiler

    Performance Improvements

    • KT-49821 Optimize LazyClassMemberScope#getContributedDescriptors: use nameFilter

    Fixes

    • KT-49833 java.lang.NullPointerException caused by accidental newline in package directive
    • KT-49838 Type inference fails on 1.6.0: Cannot use 'CapturedType(*)' as reified type parameter
    • KT-49752 Regression in method return type inference: "IllegalStateException: Expected some types"
    • KT-49876 Kotlin/Native: cross-compilation of Linux static library is broken in Windows in 1.6.0
    • KT-49792 Atomicfu: "standalone invocation of kotlinx.atomicfu.AtomicInt::compareAndSet that was not traced to previous field load" with suspend function
    • KT-49834 Coroutine method transformer generates invalid locals table.
    • KT-49441 Support friend modules in Kotlin Native
    • KT-49248 K/N: Symbol with IrSimpleFunctionSymbolImpl is unbound after 1.5.30
    • KT-49651 Inconsistent compiler APIs for repeatable annotations
    • KT-49168 JVM IR: IndexOutOfBoundsException with fun interface + suspend function as SAM method
    • KT-49573 No annotated types, compiler emits "Annotated types are not supported in typeOf"
    • KT-47192 Build Fake Overrides for internal members of classes from friend module
    • KT-48673 IR: IllegalStateException for usage of internal member declared in a superclass in another module

    JavaScript

    • KT-47811 KJS / IR: "ClassCastException" when using suspend function in console.log

    Language Design

    • KT-49868 Support language version 1.3 in Kotlin 1.6.10

    Libraries

    • KT-50173 Different behavior of Regex escapeReplacement function in JVM and JS

    Tools. Android Extensions

    • KT-49799 NullPointerException when using kotlin-android-extensions synthetic after update to Kotlin 1.6.0

    Tools. Compiler Plugins

    • KT-50005 jvm-abi-gen plugin: do not change the declaration order in generated jars
    • KT-49726 JVM/IR: "IllegalArgumentException: Null argument in ExpressionCodegen for parameter VALUE_PARAMETER": Serialization with sealed class as type parameter

    ... (truncated)

    Changelog

    Sourced from kotlin-gradle-plugin's changelog.

    1.6.10

    Android

    • KT-49798 [MPP] [Android] AGP 7.1.0+ android target publications leak 'AgpVersionAttr' attribute

    Compiler

    Performance Improvements

    • KT-49821 Optimize LazyClassMemberScope#getContributedDescriptors: use nameFilter

    Fixes

    • KT-49833 java.lang.NullPointerException caused by accidental newline in package directive
    • KT-49838 Type inference fails on 1.6.0: Cannot use 'CapturedType(*)' as reified type parameter
    • KT-49752 Regression in method return type inference: "IllegalStateException: Expected some types"
    • KT-49876 Kotlin/Native: cross-compilation of Linux static library is broken in Windows in 1.6.0
    • KT-49792 Atomicfu: "standalone invocation of kotlinx.atomicfu.AtomicInt::compareAndSet that was not traced to previous field load" with suspend function
    • KT-49834 Coroutine method transformer generates invalid locals table.
    • KT-49441 Support friend modules in Kotlin Native
    • KT-49248 K/N: Symbol with IrSimpleFunctionSymbolImpl is unbound after 1.5.30
    • KT-49651 Inconsistent compiler APIs for repeatable annotations
    • KT-49168 JVM IR: IndexOutOfBoundsException with fun interface + suspend function as SAM method
    • KT-49573 No annotated types, compiler emits "Annotated types are not supported in typeOf"
    • KT-47192 Build Fake Overrides for internal members of classes from friend module
    • KT-48673 IR: IllegalStateException for usage of internal member declared in a superclass in another module

    JavaScript

    • KT-47811 KJS / IR: "ClassCastException" when using suspend function in console.log

    Language Design

    • KT-49868 Support language version 1.3 in Kotlin 1.6.10

    Libraries

    • KT-50173 Different behavior of Regex escapeReplacement function in JVM and JS

    Tools. Android Extensions

    • KT-49799 NullPointerException when using kotlin-android-extensions synthetic after update to Kotlin 1.6.0

    Tools. Compiler Plugins

    • KT-50005 jvm-abi-gen plugin: do not change the declaration order in generated jars
    • KT-49726 JVM/IR: "IllegalArgumentException: Null argument in ExpressionCodegen for parameter VALUE_PARAMETER": Serialization with sealed class as type parameter

    Tools. Gradle

    ... (truncated)

    Commits
    • 1b49105 Add changelog for 1.6.10
    • 72551e4 KT-50173 Fix Regex.escapeReplacement function in JS
    • c71e090 KGP - Fix flaky tests invoking javac through JDK APIs
    • 73120b9 [Gradle, JS] Add tests for windows ignore-scripts
    • 9bffcfa [Gradle, JS] Fix path setting in Windows
    • 06a205f Fix 'debug.keystore' location also for 'com.android.test' plugin.
    • a043f77 Disable publishing 'android-test-fixes' plugin to Gradle portal.
    • 1dcbd28 Kotlin Gradle plugin - Remove assertions from integration tests
    • 43df58a Pin AGP 'debug.keystore' in the repo.
    • e705a36 Apply default pluginManagement in settings for old test setup.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Reviewed by dependabot[bot] at 2021-12-24 07:32
  • 4. Bump gradle from 7.0.4 to 7.1.3

    Bumps gradle from 7.0.4 to 7.1.3.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Reviewed by dependabot[bot] at 2022-04-08 15:26
  • 5. Bump kotlin-gradle-plugin from 1.5.31 to 1.6.20

    Bumps kotlin-gradle-plugin from 1.5.31 to 1.6.20.

    Release notes

    Sourced from kotlin-gradle-plugin's releases.

    Kotlin 1.6.20-RC2

    Changelog

    Compiler

    Fixes

    • KT-51352 "ClassCastException: class ScopeCoroutine cannot be cast to class Iterable" caused by coroutines and context receivers
    • KT-51271 "ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3" with inlining of context function
    • KT-50520 "NPE: containingDeclaration.acโ€ฆlDeclarationType.REGULAR) must not be null" with implicit type on self-referencing lambda in a builder
    • KT-51471 Native: incorrect debug information when inheriting suspend fun invoke implementation
    • KT-51353 IncompatibleClassChangeError: Expected non-static field com.soywiz.korim.color.Colors.BLACK

    Native

    • KT-37368 Native compiler fails to compile big projects

    Native. Runtime

    Tools. JPS

    • KT-51434 Language version 1.7 is absent in Kotlin Compiler settings

    Tools. Gradle

    • KT-51588 Restoring from build cache breaks Kotlin incremental compilation

    Checksums

    File Sha256
    kotlin-compiler-1.6.20-RC2.zip 038da980d17432a44c41299b528b81040ca2578b634b0fd066661b45871711f2
    kotlin-native-linux-x86_64-1.6.20-RC2.tar.gz d8ada91551ad425697966c128725757d6c032eb25f0c58e737783d20914751c4
    kotlin-native-macos-x86_64-1.6.20-RC2.tar.gz a6e85afd0a920ab7d1c5dea6e5153515ecf98aafbbe60e6151e181455e6583d7
    kotlin-native-macos-aarch64-1.6.20-RC2.tar.gz 60d9b37177180997e2c42a26214b36242ccace62fa3af08091c8ed7df80410e0
    kotlin-native-windows-x86_64-1.6.20-RC2.zip 57da7b6e3438ffc44fe0e99846efa7fed1c458d74cf00d504f2583c4d99c41c8

    Kotlin 1.6.20-RC

    Changelog

    Compiler

    • KT-51302 Kotlin/Native 1.6.20-M1 compiler fails because of assertion in NativeAnnotationImplementationTransformer
    • KT-51148 "AssertionError: At this stage there should be no remaining variables with proper constraints" caused by two type parameters
    • KT-50970 Kotlin/Native: use arm instruction set instead of thumb-2 for iosArm32 and watchosArm32 targets
    • KT-50843 Kotlin/Native: LLVM constant merge pass does not work for Kotlin constants
    • KT-51157 JVM / IR: "IndexOutOfBoundsException: Index: 1, Size: 1" caused by interface hierarchy and UInt method parameter

    ... (truncated)

    Changelog

    Sourced from kotlin-gradle-plugin's changelog.

    1.6.10

    Android

    • KT-49798 [MPP] [Android] AGP 7.1.0+ android target publications leak 'AgpVersionAttr' attribute

    Compiler

    Performance Improvements

    • KT-49821 Optimize LazyClassMemberScope#getContributedDescriptors: use nameFilter

    Fixes

    • KT-49833 java.lang.NullPointerException caused by accidental newline in package directive
    • KT-49838 Type inference fails on 1.6.0: Cannot use 'CapturedType(*)' as reified type parameter
    • KT-49752 Regression in method return type inference: "IllegalStateException: Expected some types"
    • KT-49876 Kotlin/Native: cross-compilation of Linux static library is broken in Windows in 1.6.0
    • KT-49792 Atomicfu: "standalone invocation of kotlinx.atomicfu.AtomicInt::compareAndSet that was not traced to previous field load" with suspend function
    • KT-49834 Coroutine method transformer generates invalid locals table.
    • KT-49441 Support friend modules in Kotlin Native
    • KT-49248 K/N: Symbol with IrSimpleFunctionSymbolImpl is unbound after 1.5.30
    • KT-49651 Inconsistent compiler APIs for repeatable annotations
    • KT-49168 JVM IR: IndexOutOfBoundsException with fun interface + suspend function as SAM method
    • KT-49573 No annotated types, compiler emits "Annotated types are not supported in typeOf"
    • KT-47192 Build Fake Overrides for internal members of classes from friend module
    • KT-48673 IR: IllegalStateException for usage of internal member declared in a superclass in another module

    JavaScript

    • KT-47811 KJS / IR: "ClassCastException" when using suspend function in console.log

    Language Design

    • KT-49868 Support language version 1.3 in Kotlin 1.6.10

    Libraries

    • KT-50173 Different behavior of Regex escapeReplacement function in JVM and JS

    Tools. Android Extensions

    • KT-49799 NullPointerException when using kotlin-android-extensions synthetic after update to Kotlin 1.6.0

    Tools. Compiler Plugins

    • KT-50005 jvm-abi-gen plugin: do not change the declaration order in generated jars
    • KT-49726 JVM/IR: "IllegalArgumentException: Null argument in ExpressionCodegen for parameter VALUE_PARAMETER": Serialization with sealed class as type parameter

    Tools. Gradle

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Reviewed by dependabot[bot] at 2022-04-01 15:21
  • 6. Provide initial `GridGenerator` as a constructor param to `GameViewModel`

    Currently the initial grid generation logic is tied to GameViewModel. It would be better to decouple the initial state generation logic from the GameViewModel.

    If resuming the game becomes a feature, this would come in handy.
    Reviewed by JayaSuryaT at 2022-03-26 07:23
  • 7. Bump gradle from 7.0.4 to 7.1.2

    Bumps gradle from 7.0.4 to 7.1.2.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Reviewed by dependabot[bot] at 2022-02-24 15:25
  • 8. Bump gradle from 7.0.4 to 7.1.1

    Bumps gradle from 7.0.4 to 7.1.1.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Reviewed by dependabot[bot] at 2022-02-07 15:29
  • 9. Bump gradle-versions-plugin from 0.41.0 to 0.42.0

    Bumps gradle-versions-plugin from 0.41.0 to 0.42.0.

    Release notes

    Sourced from gradle-versions-plugin's releases.

    v0.42.0

    Prevent builds from failing w/ configuration cache enabled on Gradle 7.4+ (#410)

    Commits
    • b53e44f Merge pull request #585 from eygraber/dont-fail-w-configuration-cache
    • 2e75446 Prevent builds from failing w/ configuration cache enabled on Gradle 7.4+
    • ebd1655 Remove deblibs-gradle-plugin from the list (#580)
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Reviewed by dependabot[bot] at 2022-02-04 15:25
  • 10. Bump gradle from 7.0.4 to 7.1.0

    Bumps gradle from 7.0.4 to 7.1.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Reviewed by dependabot[bot] at 2022-01-26 15:28
  • 11. Persist user preferences

    There are a bunch of user preferences to be stored, see #53.

    TODO

    • [x] Choose a persistence library (preferably a KMM one, see here)
    • [x] Create a new module for persisting data
    • [x] Do the thing (implement persistence logic)
    Reviewed by JayaSuryaT at 2022-01-26 07:26
  • 12. Generate `compose compiler metrics` and fix any issues present

    Compose compile metrics

    Finally there is a good tool to give some information about how composables might be performing.


    • [x] Setup gradle configuration to enable compose compiler metrics
    • [x] Generate metrics
    • [ ] Check and fix if any issue(s) found
    Reviewed by JayaSuryaT at 2022-05-18 18:27
  • 13. Bump gradle from 7.1.3 to 7.2.0

    Bumps gradle from 7.1.3 to 7.2.0.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    Reviewed by dependabot[bot] at 2022-05-10 15:29
  • 14. Transparent status and navigation bar

    • [x] Make status bar transparent
    • [x] Update status bar icon's color based on theme
    • [ ] Consider navigation bar transparent
    • [ ] Consider updating navigation bar icon's color based on theme
    Reviewed by JayaSuryaT at 2022-05-03 16:32
  • 15. UI / UX Enhancements

    The current UI / UX situation is pretty OKAYY, there are a lot of things that could be improved.

    Things to do:

    (in priority order?, maybe)
    • [x] #88
    • [x] #93
    • [x] #96
    • [x] #97
    • [ ] #94
    • [ ] #95
    • [ ] Difficulty selection screen's UI needs a bit of work
    • [ ] #100
    • [ ] #99
    • [ ] Some of the SFX could be improved
    • [ ] Consider increasing the intensity of haptic feedback
    • [ ] Reconsider color schemes of Day / Night theme
    • [ ] Any other UI / UX things which could be improved

    All contributions are welcome, any contribution / feedback would be โ™กly.

    Contributions don't necessarily need to be code only, they could be font / UI / UX suggestions, references, or design files.

    Reviewed by JayaSuryaT at 2022-01-26 07:50
Wordle-solver - This application supports in finding the correct answer to the daily word puzzle game Wordle

Wordle-solver - This application supports in finding the correct answer to the daily word puzzle game Wordle

Jan 19, 2022
The Privacy Friendly 2048 app is an addictive puzzle game

Privacy Friendly 2048 The Privacy Friendly 2048 app is an addictive puzzle game. The game is considered to be won if you reach the number 2048 by push

Mar 23, 2022
Tangler a small casual puzzle inspired by the Tantrix board game but with a different twist.
Tangler a small casual puzzle inspired by the Tantrix board game but with a different twist.

Tangler game. Written in Kotlin, for desktop (Java JAR) and Android. The iOS module is present but was not built or tested.

Apr 22, 2022
Flappy Bird game built with Jetpack Compose & Jetpack Splash Screen
Flappy Bird game built with Jetpack Compose & Jetpack Splash Screen

Flappy Bird by Compose ?? Description Flappy Bird game built with Jetpack Compose & Jetpack Splash Screen. ?? Motivation and Context All UI built with

Dec 24, 2021
๐Ÿ›ฅ Stream Draw - a real-time multiplayer drawing & chat game app built entirely with Jetpack Compose
 ๐Ÿ›ฅ Stream Draw - a real-time multiplayer drawing & chat game app built entirely with Jetpack Compose

?? Stream Draw is a real-time multiplayer drawing & chat game app built entirely with Jetpack Compose. Draw and guess words with your friends! This pr

May 12, 2022
Our maze game is an 2d-animation game developed using android studio.
Our maze game is an 2d-animation game developed using android studio.

Our maze game is an 2d-animation game developed using android studio. The game consists of a ball and a board with a hole in the center of it. We are using accelerometer as controller to guide ball towards the hole. T

Apr 20, 2022
A GoBang game built with Compose Multiplatform
A GoBang game built with Compose Multiplatform

cmp-gobang English | ไธญๆ–‡ไป‹็ป A GoBang game built with Compose Multiplatform How to run config Host address add the IP of desktop into <server_host/> of s

May 15, 2022
Game made with Korge (Kotlin Multiplatform game engine)

MolesAttack Kotlin Multiplatform Game Play Html/js: https://feliperce.github.io/MolesAttack-Distribution/ Jar: https://feliperce.github.io/MolesAttack

Apr 29, 2022
Butterfly - Small and powerful weapons, own it, let your Android are developed like Tiger, Carry whole game!

Butterfly - Small and powerful weapons, own it, let your Android are developed like Tiger, Carry whole game!

May 5, 2022
Android 2048 Game in jetpack compose
Android 2048 Game in jetpack compose

Android 2048 Game in jetpack compose A simple 2048 game written with 100% Jetpack Compose. Features Jetpack Compose Material 3 MVVM Adaptable theme Da

Apr 17, 2022
TicTacToe Game Built With Kotlin
TicTacToe Game Built With Kotlin

?? TicTacToe/Kotlin.... ?? TicTacToe-Kotlin- , , , , , , ,

Dec 17, 2021
Chrome's Dino T-Rex game developed in Jetpack Compose
Chrome's Dino T-Rex game developed in Jetpack Compose

Chrome's Dino T-Rex game developed in Jetpack Compose

May 16, 2022
A simple Snake game implemented using Compose for Desktop
A simple Snake game implemented using Compose for Desktop

A simple Snake game implemented using Compose for Desktop

May 3, 2022
Wordle game clone written in Kotlin & using Compose UI Toolkit.
Wordle game clone written in Kotlin & using Compose UI Toolkit.

Wordle Compose Wordle game clone written in Kotlin & using Compose UI Toolkit. Screenshots Compose for Desktop Main screens Playing Victory End of gam

May 3, 2022
simple game implements with kotlin and jetpack.(covered by unit test)
simple game implements with kotlin and jetpack.(covered by unit test)

Simple Spy Game: Source Code ?? Published version ?? This repository contains a detailed game app that implements simple game using Koin, Room, Corout

Jan 26, 2022
Hangman Game for Android build with Compose
Hangman Game for Android build with Compose

Hangman Game for Android build with Compose. Built with jetpack components, Room for saving game history, preferences for loading game settings, ViewModels for persisting game state, LiveData/States for observing states, Koin for DI, minimal compose animations for good UX, Light/Dark theme :rainbow: MD3.

May 9, 2022
Basic template to create a game using minigdx

MiniGDX Game Template Create your first game using miniGDX by clicking the "Use this Template" button above. The game will be configured for: the JVM

May 9, 2022
Tic Tac Toe game using Test Driven Development
Tic Tac Toe game using Test Driven Development

Tic Tac Toe About this Kata This short and simple Kata should be performed using Test Driven Development (TDD). Rules The rules are described below :

Oct 11, 2021
A Tetris game written in Kotlin using JOGL.
A Tetris game written in Kotlin using JOGL.

A Fast Tetris Game Written in Kotlin Using JOGL. Note: This game is unfinished. Controls Arrow Key Left / Right -> Move the tetromino along the x-axis

Dec 29, 2021