commit
861524fea5
91 changed files with 2451 additions and 469 deletions
|
@ -12,8 +12,8 @@ android {
|
|||
|
||||
defaultConfig {
|
||||
// versionCode and versionName must be hardcoded to support F-droid
|
||||
versionCode 800111
|
||||
versionName '8.0.11'
|
||||
versionCode 800101
|
||||
versionName '8.1.0'
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 30
|
||||
multiDexEnabled true
|
||||
|
@ -126,7 +126,7 @@ dependencies {
|
|||
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
|
||||
|
||||
// Google
|
||||
implementation 'com.google.android.material:material:1.2.0'
|
||||
implementation 'com.google.android.material:material:1.2.1'
|
||||
|
||||
// Koin
|
||||
implementation 'org.koin:koin-android:2.1.6'
|
||||
|
|
|
@ -2,11 +2,13 @@ package dev.lucasnlm.antimine
|
|||
|
||||
import android.content.DialogInterface
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.text.format.DateUtils
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.ActionBarDrawerToggle
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.widget.TooltipCompat
|
||||
|
@ -39,13 +41,14 @@ import dev.lucasnlm.antimine.share.ShareManager
|
|||
import dev.lucasnlm.antimine.stats.StatsActivity
|
||||
import dev.lucasnlm.antimine.support.SupportAppDialogFragment
|
||||
import dev.lucasnlm.antimine.theme.ThemeActivity
|
||||
import dev.lucasnlm.antimine.tutorial.view.TutorialCompleteDialogFragment
|
||||
import dev.lucasnlm.antimine.tutorial.view.TutorialLevelFragment
|
||||
import dev.lucasnlm.external.IBillingManager
|
||||
import dev.lucasnlm.external.IInstantAppManager
|
||||
import dev.lucasnlm.external.IPlayGamesManager
|
||||
import dev.lucasnlm.external.ReviewWrapper
|
||||
import dev.lucasnlm.external.model.PurchaseInfo
|
||||
import kotlinx.android.synthetic.main.activity_game.*
|
||||
import kotlinx.android.synthetic.main.activity_game.ad_placeholder
|
||||
import kotlinx.android.synthetic.main.activity_game.minesCount
|
||||
import kotlinx.android.synthetic.main.activity_game.timer
|
||||
import kotlinx.android.synthetic.main.activity_tv_game.*
|
||||
|
@ -101,7 +104,11 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
|
||||
findViewById<FrameLayout>(R.id.levelContainer).doOnLayout {
|
||||
if (!isFinishing) {
|
||||
loadGameFragment()
|
||||
if (!preferencesRepository.isTutorialCompleted()) {
|
||||
loadGameTutorial()
|
||||
} else {
|
||||
loadGameFragment()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -181,6 +188,13 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
currentSaveId = it
|
||||
}
|
||||
)
|
||||
|
||||
tips.observe(
|
||||
this@GameActivity,
|
||||
{
|
||||
tipsCounter.text = it.toString()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
|
@ -241,8 +255,45 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
)
|
||||
}
|
||||
|
||||
private fun refreshShortcutIcon(isEndGame: Boolean = false) {
|
||||
if (isEndGame || instantAppManager.isEnabled(this)) {
|
||||
private fun disableShortcutIcon(hide: Boolean = false) {
|
||||
tipsCounter.visibility = View.GONE
|
||||
shortcutIcon.apply {
|
||||
visibility = if (hide) View.GONE else View.VISIBLE
|
||||
isClickable = false
|
||||
animate().alpha(0.3f).start()
|
||||
}
|
||||
}
|
||||
|
||||
private fun refreshTipShortcutIcon() {
|
||||
tipsCounter.apply {
|
||||
visibility = View.VISIBLE
|
||||
text = gameViewModel.getTips().toString()
|
||||
}
|
||||
|
||||
shortcutIcon.apply {
|
||||
TooltipCompat.setTooltipText(this, getString(R.string.help))
|
||||
setImageResource(R.drawable.tip)
|
||||
setColorFilter(minesCount.currentTextColor)
|
||||
visibility = View.VISIBLE
|
||||
animate().alpha(1.0f).start()
|
||||
setOnClickListener {
|
||||
lifecycleScope.launch {
|
||||
analyticsManager.sentEvent(Analytics.UseTip)
|
||||
|
||||
if (gameViewModel.getTips() > 0) {
|
||||
if (!gameViewModel.revealRandomMine()) {
|
||||
Toast.makeText(applicationContext, R.string.cant_do_it_now, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(applicationContext, R.string.help_win_a_game, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun refreshEndGameShortcutIcon(victory: Boolean = false, isOldGame: Boolean) {
|
||||
if ((isOldGame || !victory) && !instantAppManager.isEnabled(this)) {
|
||||
shortcutIcon.apply {
|
||||
TooltipCompat.setTooltipText(this, getString(R.string.new_game))
|
||||
setImageResource(R.drawable.retry)
|
||||
|
@ -277,6 +328,7 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
}
|
||||
}
|
||||
|
||||
tipsCounter.visibility = View.GONE
|
||||
shortcutIcon.apply {
|
||||
when (status) {
|
||||
is Status.Over, is Status.Running -> {
|
||||
|
@ -317,7 +369,7 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
}
|
||||
|
||||
override fun onDrawerClosed(drawerView: View) {
|
||||
if (hasNoOtherFocusedDialog()) {
|
||||
if (hasNoOtherFocusedDialog() && hasActiveGameFragment()) {
|
||||
gameViewModel.resumeGame()
|
||||
}
|
||||
|
||||
|
@ -330,7 +382,9 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
}
|
||||
)
|
||||
|
||||
if (preferencesRepository.isFirstUse()) {
|
||||
if (preferencesRepository.isFirstUse() &&
|
||||
(preferencesRepository.isTutorialCompleted())
|
||||
) {
|
||||
openDrawer(GravityCompat.START)
|
||||
preferencesRepository.completeFirstUse()
|
||||
}
|
||||
|
@ -356,7 +410,9 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
R.id.previous_games -> openSaveHistory()
|
||||
R.id.stats -> openStats()
|
||||
R.id.play_games -> googlePlay()
|
||||
R.id.translation -> openCrowdIn()
|
||||
R.id.remove_ads -> showSupportAppDialog()
|
||||
R.id.tutorial -> loadGameTutorial()
|
||||
else -> handled = false
|
||||
}
|
||||
|
||||
|
@ -377,6 +433,7 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
|
||||
// New Features
|
||||
findItem(R.id.themes).setActionView(R.layout.new_icon)
|
||||
findItem(R.id.tutorial).setActionView(R.layout.new_icon)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -423,8 +480,27 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
|
||||
private fun loadGameFragment() {
|
||||
supportFragmentManager.apply {
|
||||
popBackStack()
|
||||
findFragmentByTag(TutorialLevelFragment.TAG)?.let { it ->
|
||||
beginTransaction().apply {
|
||||
remove(it)
|
||||
commitAllowingStateLoss()
|
||||
}
|
||||
}
|
||||
|
||||
if (findFragmentByTag(LevelFragment.TAG) == null) {
|
||||
beginTransaction().apply {
|
||||
replace(R.id.levelContainer, LevelFragment(), LevelFragment.TAG)
|
||||
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
|
||||
commitAllowingStateLoss()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadGameTutorial() {
|
||||
disableShortcutIcon(true)
|
||||
|
||||
supportFragmentManager.apply {
|
||||
findFragmentById(R.id.levelContainer)?.let { it ->
|
||||
beginTransaction().apply {
|
||||
remove(it)
|
||||
|
@ -433,8 +509,8 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
}
|
||||
|
||||
beginTransaction().apply {
|
||||
replace(R.id.levelContainer, LevelFragment())
|
||||
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
|
||||
replace(R.id.levelContainer, TutorialLevelFragment(), TutorialLevelFragment.TAG)
|
||||
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
|
||||
commitAllowingStateLoss()
|
||||
}
|
||||
}
|
||||
|
@ -503,6 +579,12 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
}
|
||||
}
|
||||
|
||||
private fun showCompletedTutorialDialog() {
|
||||
TutorialCompleteDialogFragment().run {
|
||||
showAllowingStateLoss(supportFragmentManager, TutorialCompleteDialogFragment.TAG)
|
||||
}
|
||||
}
|
||||
|
||||
private fun showEndGameDialog(victory: Boolean) {
|
||||
val currentGameStatus = status
|
||||
if (currentGameStatus is Status.Over && !isFinishing && !drawer.isDrawerOpen(GravityCompat.START)) {
|
||||
|
@ -514,7 +596,8 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
victory,
|
||||
score?.rightMines ?: 0,
|
||||
score?.totalMines ?: 0,
|
||||
currentGameStatus.time
|
||||
currentGameStatus.time,
|
||||
if (victory) 1 else 0
|
||||
).apply {
|
||||
showAllowingStateLoss(supportFragmentManager, EndGameDialogFragment.TAG)
|
||||
}
|
||||
|
@ -534,13 +617,17 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
}
|
||||
|
||||
private fun changeDifficulty(newDifficulty: Difficulty) {
|
||||
preferencesRepository.completeTutorial()
|
||||
|
||||
if (status == Status.PreGame) {
|
||||
GlobalScope.launch {
|
||||
loadGameFragment()
|
||||
lifecycleScope.launch {
|
||||
gameViewModel.startNewGame(newDifficulty)
|
||||
}
|
||||
} else {
|
||||
newGameConfirmation {
|
||||
GlobalScope.launch {
|
||||
loadGameFragment()
|
||||
lifecycleScope.launch {
|
||||
gameViewModel.startNewGame(newDifficulty)
|
||||
}
|
||||
}
|
||||
|
@ -551,19 +638,34 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
when (event) {
|
||||
Event.ResumeGame -> {
|
||||
status = Status.Running
|
||||
refreshShortcutIcon()
|
||||
refreshTipShortcutIcon()
|
||||
}
|
||||
Event.StartNewGame -> {
|
||||
status = Status.PreGame
|
||||
refreshShortcutIcon()
|
||||
disableShortcutIcon()
|
||||
refreshAds()
|
||||
}
|
||||
Event.Resume, Event.Running -> {
|
||||
status = Status.Running
|
||||
gameViewModel.runClock()
|
||||
refreshShortcutIcon()
|
||||
refreshTipShortcutIcon()
|
||||
keepScreenOn(true)
|
||||
}
|
||||
Event.StartTutorial -> {
|
||||
status = Status.PreGame
|
||||
gameViewModel.stopClock()
|
||||
disableShortcutIcon(true)
|
||||
loadGameTutorial()
|
||||
}
|
||||
Event.FinishTutorial -> {
|
||||
gameViewModel.startNewGame(Difficulty.Beginner)
|
||||
disableShortcutIcon()
|
||||
loadGameFragment()
|
||||
status = Status.Over(0, Score(4, 4, 25))
|
||||
analyticsManager.sentEvent(Analytics.TutorialCompleted)
|
||||
preferencesRepository.completeTutorial()
|
||||
showCompletedTutorialDialog()
|
||||
}
|
||||
Event.Victory -> {
|
||||
val isResuming = (status == Status.PreGame)
|
||||
val score = Score(
|
||||
|
@ -573,12 +675,14 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
)
|
||||
status = Status.Over(currentTime, score)
|
||||
gameViewModel.stopClock()
|
||||
gameViewModel.revealAllEmptyAreas()
|
||||
gameViewModel.showAllEmptyAreas()
|
||||
gameViewModel.victory()
|
||||
refreshShortcutIcon(true)
|
||||
refreshEndGameShortcutIcon(true, isResuming)
|
||||
keepScreenOn(false)
|
||||
|
||||
if (!isResuming) {
|
||||
gameViewModel.addNewTip()
|
||||
|
||||
waitAndShowEndGameDialog(
|
||||
victory = true,
|
||||
await = false
|
||||
|
@ -593,7 +697,7 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
totalArea
|
||||
)
|
||||
status = Status.Over(currentTime, score)
|
||||
refreshShortcutIcon(true)
|
||||
refreshEndGameShortcutIcon(false, isResuming)
|
||||
keepScreenOn(false)
|
||||
gameViewModel.stopClock()
|
||||
|
||||
|
@ -653,6 +757,10 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
} == 0
|
||||
}
|
||||
|
||||
private fun hasActiveGameFragment(): Boolean {
|
||||
return supportFragmentManager.findFragmentByTag(LevelFragment.TAG) != null
|
||||
}
|
||||
|
||||
override fun onDismiss(dialog: DialogInterface?) {
|
||||
gameViewModel.run {
|
||||
refreshUserPreferences()
|
||||
|
@ -708,6 +816,12 @@ class GameActivity : ThematicActivity(R.layout.activity_game), DialogInterface.O
|
|||
}
|
||||
}
|
||||
|
||||
private fun openCrowdIn() {
|
||||
Intent(Intent.ACTION_VIEW, Uri.parse("https://crowdin.com/project/antimine-android")).let {
|
||||
startActivity(it)
|
||||
}
|
||||
}
|
||||
|
||||
private fun showSupportAppDialog() {
|
||||
if (supportFragmentManager.findFragmentByTag(SupportAppDialogFragment.TAG) == null &&
|
||||
!instantAppManager.isEnabled(this)
|
||||
|
|
|
@ -5,6 +5,7 @@ import dev.lucasnlm.antimine.common.level.di.LevelModule
|
|||
import dev.lucasnlm.antimine.core.analytics.IAnalyticsManager
|
||||
import dev.lucasnlm.antimine.core.analytics.models.Analytics
|
||||
import dev.lucasnlm.antimine.core.di.CommonModule
|
||||
import dev.lucasnlm.antimine.core.preferences.IPreferencesRepository
|
||||
import dev.lucasnlm.antimine.di.AppModule
|
||||
import dev.lucasnlm.antimine.di.ViewModelModule
|
||||
import dev.lucasnlm.external.IAdsManager
|
||||
|
@ -14,6 +15,7 @@ import org.koin.core.context.startKoin
|
|||
|
||||
open class MainApplication : MultiDexApplication() {
|
||||
private val analyticsManager: IAnalyticsManager by inject()
|
||||
private val preferencesRepository: IPreferencesRepository by inject()
|
||||
|
||||
private val adsManager: IAdsManager by inject()
|
||||
|
||||
|
@ -29,6 +31,10 @@ open class MainApplication : MultiDexApplication() {
|
|||
sentEvent(Analytics.Open)
|
||||
}
|
||||
|
||||
if (BuildConfig.FLAVOR == "foss") {
|
||||
preferencesRepository.setPremiumFeatures(true)
|
||||
}
|
||||
|
||||
adsManager.start(applicationContext)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,12 +31,13 @@ class AboutViewModel(
|
|||
"Hungarian" to sequenceOf("Hermann Márk"),
|
||||
"Italian" to sequenceOf("Mattia - MisterWeeMan", "Nicola Lorenzetti"),
|
||||
"Japanese" to sequenceOf("Ryota Hasegawa"),
|
||||
"Korean" to sequenceOf("Forever_"),
|
||||
"Norwegian" to sequenceOf("Eule Hecking"),
|
||||
"Polish" to sequenceOf("Sebastian Jasiński", "Sebastian Skibiński"),
|
||||
"Portuguese (BR)" to sequenceOf("Lucas Lima"),
|
||||
"Russian" to sequenceOf("gaich@xda", "ask45t", "Ekaterina543"),
|
||||
"Spanish" to sequenceOf("Alfredo Jara", "Aldo Rodriguez", "Inail"),
|
||||
"Turkish" to sequenceOf("creuzwagen", "Fatih Fırıncı"),
|
||||
"Turkish" to sequenceOf("arda şahin", "creuzwagen", "Fatih Fırıncı"),
|
||||
"Ukrainian" to sequenceOf("Dmitry Shuba"),
|
||||
"Vietnamese" to sequenceOf("pnhpnh"),
|
||||
).map {
|
||||
|
|
|
@ -10,6 +10,7 @@ import dev.lucasnlm.antimine.playgames.viewmodel.PlayGamesViewModel
|
|||
import dev.lucasnlm.antimine.stats.viewmodel.StatsViewModel
|
||||
import dev.lucasnlm.antimine.text.viewmodel.TextViewModel
|
||||
import dev.lucasnlm.antimine.theme.viewmodel.ThemeViewModel
|
||||
import dev.lucasnlm.antimine.tutorial.viewmodel.TutorialViewModel
|
||||
import org.koin.androidx.viewmodel.dsl.viewModel
|
||||
import org.koin.dsl.module
|
||||
|
||||
|
@ -24,6 +25,9 @@ val ViewModelModule = module {
|
|||
viewModel { TextViewModel(get()) }
|
||||
viewModel { ThemeViewModel(get(), get(), get(), get()) }
|
||||
viewModel {
|
||||
GameViewModel(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get())
|
||||
GameViewModel(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get())
|
||||
}
|
||||
viewModel {
|
||||
TutorialViewModel(get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get(), get())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import android.annotation.SuppressLint
|
|||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
|
@ -12,11 +13,8 @@ import androidx.fragment.app.FragmentManager
|
|||
import androidx.lifecycle.lifecycleScope
|
||||
import dev.lucasnlm.antimine.R
|
||||
import dev.lucasnlm.antimine.common.level.viewmodel.GameViewModel
|
||||
import dev.lucasnlm.antimine.core.preferences.IPreferencesRepository
|
||||
import dev.lucasnlm.antimine.level.viewmodel.EndGameDialogEvent
|
||||
import dev.lucasnlm.antimine.level.viewmodel.EndGameDialogViewModel
|
||||
import dev.lucasnlm.external.Ads
|
||||
import dev.lucasnlm.external.IAdsManager
|
||||
import dev.lucasnlm.external.IInstantAppManager
|
||||
import kotlinx.coroutines.flow.collect
|
||||
import org.koin.android.ext.android.inject
|
||||
|
@ -25,9 +23,6 @@ import org.koin.androidx.viewmodel.ext.android.viewModel
|
|||
|
||||
class EndGameDialogFragment : AppCompatDialogFragment() {
|
||||
private val instantAppManager: IInstantAppManager by inject()
|
||||
private val adsManager: IAdsManager by inject()
|
||||
private val preferencesRepository: IPreferencesRepository by inject()
|
||||
|
||||
private val endGameViewModel by viewModel<EndGameDialogViewModel>()
|
||||
private val gameViewModel by sharedViewModel<GameViewModel>()
|
||||
|
||||
|
@ -40,7 +35,8 @@ class EndGameDialogFragment : AppCompatDialogFragment() {
|
|||
isVictory = if (getInt(DIALOG_TOTAL_MINES, 0) > 0) getBoolean(DIALOG_IS_VICTORY) else null,
|
||||
time = getLong(DIALOG_TIME, 0L),
|
||||
rightMines = getInt(DIALOG_RIGHT_MINES, 0),
|
||||
totalMines = getInt(DIALOG_TOTAL_MINES, 0)
|
||||
totalMines = getInt(DIALOG_TOTAL_MINES, 0),
|
||||
received = getInt(DIALOG_RECEIVED, -1)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
@ -72,6 +68,15 @@ class EndGameDialogFragment : AppCompatDialogFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
findViewById<TextView>(R.id.received_message).apply {
|
||||
if (state.received > 0 && state.isVictory == true) {
|
||||
visibility = View.VISIBLE
|
||||
text = getString(R.string.you_have_received, state.received)
|
||||
} else {
|
||||
visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
if (state.isVictory == true) {
|
||||
if (!instantAppManager.isEnabled(context)) {
|
||||
setNeutralButton(R.string.share) { _, _ ->
|
||||
|
@ -81,12 +86,6 @@ class EndGameDialogFragment : AppCompatDialogFragment() {
|
|||
} else {
|
||||
setNeutralButton(R.string.retry) { _, _ ->
|
||||
gameViewModel.retryObserver.postValue(Unit)
|
||||
|
||||
activity?.let {
|
||||
if (!preferencesRepository.isPremiumEnabled()) {
|
||||
adsManager.requestRewarded(it, Ads.RewardsAds)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -101,20 +100,27 @@ class EndGameDialogFragment : AppCompatDialogFragment() {
|
|||
}.create()
|
||||
|
||||
companion object {
|
||||
fun newInstance(victory: Boolean, rightMines: Int, totalMines: Int, time: Long) =
|
||||
EndGameDialogFragment().apply {
|
||||
arguments = Bundle().apply {
|
||||
putBoolean(DIALOG_IS_VICTORY, victory)
|
||||
putInt(DIALOG_RIGHT_MINES, rightMines)
|
||||
putInt(DIALOG_TOTAL_MINES, totalMines)
|
||||
putLong(DIALOG_TIME, time)
|
||||
}
|
||||
fun newInstance(
|
||||
victory: Boolean,
|
||||
rightMines: Int,
|
||||
totalMines: Int,
|
||||
time: Long,
|
||||
received: Int,
|
||||
) = EndGameDialogFragment().apply {
|
||||
arguments = Bundle().apply {
|
||||
putBoolean(DIALOG_IS_VICTORY, victory)
|
||||
putInt(DIALOG_RIGHT_MINES, rightMines)
|
||||
putInt(DIALOG_TOTAL_MINES, totalMines)
|
||||
putInt(DIALOG_RECEIVED, received)
|
||||
putLong(DIALOG_TIME, time)
|
||||
}
|
||||
}
|
||||
|
||||
const val DIALOG_IS_VICTORY = "dialog_state"
|
||||
private const val DIALOG_TIME = "dialog_time"
|
||||
private const val DIALOG_RIGHT_MINES = "dialog_right_mines"
|
||||
private const val DIALOG_TOTAL_MINES = "dialog_total_mines"
|
||||
private const val DIALOG_RECEIVED = "dialog_received"
|
||||
|
||||
val TAG = EndGameDialogFragment::class.simpleName!!
|
||||
}
|
||||
|
|
|
@ -24,7 +24,6 @@ open class LevelFragment : CommonLevelFragment(R.layout.fragment_level) {
|
|||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
recyclerGrid = view.findViewById(R.id.recyclerGrid)
|
||||
recyclerGrid.doOnLayout {
|
||||
lifecycleScope.launch {
|
||||
val loadGameUid = checkLoadGameDeepLink()
|
||||
|
@ -35,7 +34,7 @@ open class LevelFragment : CommonLevelFragment(R.layout.fragment_level) {
|
|||
loadGameUid != null -> gameViewModel.loadGame(loadGameUid)
|
||||
newGameDeepLink != null -> gameViewModel.startNewGame(newGameDeepLink)
|
||||
retryDeepLink != null -> gameViewModel.retryGame(retryDeepLink)
|
||||
else -> gameViewModel.loadLastGame()
|
||||
else -> gameViewModel.loadGame()
|
||||
}
|
||||
|
||||
withContext(Dispatchers.Main) {
|
||||
|
@ -58,9 +57,9 @@ open class LevelFragment : CommonLevelFragment(R.layout.fragment_level) {
|
|||
|
||||
levelSetup.observe(
|
||||
viewLifecycleOwner,
|
||||
{
|
||||
getView()?.let { view ->
|
||||
setupRecyclerViewSize(view, it)
|
||||
{ minefield ->
|
||||
getView()?.doOnLayout { view ->
|
||||
setupRecyclerViewSize(view, minefield)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
@ -76,7 +75,7 @@ open class LevelFragment : CommonLevelFragment(R.layout.fragment_level) {
|
|||
Event.Resume,
|
||||
Event.ResumeGame,
|
||||
Event.StartNewGame -> areaAdapter.setClickEnabled(true)
|
||||
null -> { }
|
||||
else -> { }
|
||||
}
|
||||
}
|
||||
)
|
||||
|
@ -113,4 +112,8 @@ open class LevelFragment : CommonLevelFragment(R.layout.fragment_level) {
|
|||
null
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val TAG = LevelFragment::class.simpleName
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ sealed class EndGameDialogEvent {
|
|||
val time: Long,
|
||||
val rightMines: Int,
|
||||
val totalMines: Int,
|
||||
val received: Int,
|
||||
) : EndGameDialogEvent()
|
||||
|
||||
data class ChangeEmoji(
|
||||
|
|
|
@ -7,4 +7,5 @@ data class EndGameDialogState(
|
|||
val title: String,
|
||||
val message: String,
|
||||
val isVictory: Boolean?,
|
||||
val received: Int
|
||||
)
|
||||
|
|
|
@ -70,6 +70,7 @@ class EndGameDialogViewModel(
|
|||
"",
|
||||
"",
|
||||
false,
|
||||
0
|
||||
)
|
||||
|
||||
override suspend fun mapEventToState(event: EndGameDialogEvent) = flow {
|
||||
|
@ -80,7 +81,8 @@ class EndGameDialogViewModel(
|
|||
titleEmoji = randomVictoryEmoji(),
|
||||
title = context.getString(R.string.you_won),
|
||||
message = messageTo(event.time, event.isVictory),
|
||||
isVictory = true
|
||||
isVictory = true,
|
||||
received = event.received
|
||||
)
|
||||
}
|
||||
false -> {
|
||||
|
@ -88,7 +90,8 @@ class EndGameDialogViewModel(
|
|||
titleEmoji = randomGameOverEmoji(),
|
||||
title = context.getString(R.string.you_lost),
|
||||
message = messageTo(event.time, event.isVictory),
|
||||
isVictory = false
|
||||
isVictory = false,
|
||||
received = event.received
|
||||
)
|
||||
}
|
||||
null -> {
|
||||
|
@ -96,7 +99,8 @@ class EndGameDialogViewModel(
|
|||
titleEmoji = randomNeutralEmoji(),
|
||||
title = context.getString(R.string.new_game),
|
||||
message = context.getString(R.string.new_game_request),
|
||||
isVictory = false
|
||||
isVictory = false,
|
||||
received = event.received
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ class SupportAppDialogFragment : AppCompatDialogFragment() {
|
|||
return AlertDialog.Builder(requireContext()).apply {
|
||||
setView(R.layout.dialog_payments)
|
||||
|
||||
setNeutralButton(R.string.rating_button_no) { _, _ ->
|
||||
setNeutralButton(R.string.no) { _, _ ->
|
||||
analyticsManager.sentEvent(Analytics.DenyIapDialog)
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,93 @@
|
|||
package dev.lucasnlm.antimine.theme.view
|
||||
|
||||
import dev.lucasnlm.antimine.common.level.models.Area
|
||||
import dev.lucasnlm.antimine.common.level.models.Mark
|
||||
|
||||
object ExampleField {
|
||||
fun getField() = listOf(
|
||||
Area(
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
hasMine = false,
|
||||
mistake = false,
|
||||
mark = Mark.None,
|
||||
isCovered = false
|
||||
),
|
||||
Area(
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
hasMine = true,
|
||||
mistake = false,
|
||||
mark = Mark.None,
|
||||
isCovered = false
|
||||
),
|
||||
Area(
|
||||
2,
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
hasMine = true,
|
||||
mistake = false,
|
||||
mark = Mark.None,
|
||||
isCovered = true
|
||||
),
|
||||
Area(
|
||||
3,
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
hasMine = false,
|
||||
mistake = false,
|
||||
mark = Mark.None,
|
||||
isCovered = false
|
||||
),
|
||||
Area(
|
||||
4,
|
||||
1,
|
||||
1,
|
||||
3,
|
||||
hasMine = false,
|
||||
mistake = false,
|
||||
mark = Mark.None,
|
||||
isCovered = false
|
||||
),
|
||||
Area(
|
||||
5,
|
||||
2,
|
||||
1,
|
||||
3,
|
||||
hasMine = true,
|
||||
mistake = false,
|
||||
mark = Mark.Flag,
|
||||
isCovered = true
|
||||
),
|
||||
Area(
|
||||
6,
|
||||
0,
|
||||
2,
|
||||
0,
|
||||
hasMine = true,
|
||||
mistake = false,
|
||||
mark = Mark.Question,
|
||||
isCovered = true
|
||||
),
|
||||
Area(
|
||||
7,
|
||||
1,
|
||||
2,
|
||||
4,
|
||||
hasMine = false,
|
||||
mistake = false,
|
||||
mark = Mark.None,
|
||||
isCovered = false
|
||||
),
|
||||
Area(
|
||||
8, 2, 2, 0,
|
||||
hasMine = false, mistake = false, mark = Mark.None, isCovered = true, revealed = true
|
||||
),
|
||||
)
|
||||
}
|
|
@ -12,7 +12,6 @@ import androidx.recyclerview.widget.RecyclerView
|
|||
import dev.lucasnlm.antimine.R
|
||||
import dev.lucasnlm.antimine.common.level.models.Area
|
||||
import dev.lucasnlm.antimine.common.level.models.AreaPaintSettings
|
||||
import dev.lucasnlm.antimine.common.level.models.Mark
|
||||
import dev.lucasnlm.antimine.common.level.view.AreaView
|
||||
import dev.lucasnlm.antimine.core.themes.model.AppTheme
|
||||
import dev.lucasnlm.antimine.theme.viewmodel.ThemeEvent
|
||||
|
@ -25,18 +24,7 @@ class ThemeAdapter(
|
|||
) : RecyclerView.Adapter<ThemeViewHolder>() {
|
||||
|
||||
private val themes: List<AppTheme> = themeViewModel.singleState().themes
|
||||
|
||||
private val minefield = listOf(
|
||||
Area(0, 0, 0, 1, hasMine = false, mistake = false, mark = Mark.None, isCovered = false),
|
||||
Area(1, 1, 0, 0, hasMine = true, mistake = false, mark = Mark.None, isCovered = false),
|
||||
Area(2, 2, 0, 0, hasMine = true, mistake = false, mark = Mark.None, isCovered = true),
|
||||
Area(3, 0, 1, 2, hasMine = false, mistake = false, mark = Mark.None, isCovered = false),
|
||||
Area(4, 1, 1, 3, hasMine = false, mistake = false, mark = Mark.None, isCovered = false),
|
||||
Area(5, 2, 1, 3, hasMine = true, mistake = false, mark = Mark.Flag, isCovered = true),
|
||||
Area(6, 0, 2, 0, hasMine = true, mistake = false, mark = Mark.Question, isCovered = true),
|
||||
Area(7, 1, 2, 4, hasMine = false, mistake = false, mark = Mark.None, isCovered = false),
|
||||
Area(8, 2, 2, 0, hasMine = false, mistake = false, mark = Mark.None, isCovered = true),
|
||||
)
|
||||
private val minefield = ExampleField.getField()
|
||||
|
||||
init {
|
||||
setHasStableIds(true)
|
||||
|
|
|
@ -0,0 +1,171 @@
|
|||
package dev.lucasnlm.antimine.tutorial.view
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import android.view.GestureDetector
|
||||
import android.view.KeyEvent
|
||||
import android.view.MotionEvent
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import dev.lucasnlm.antimine.common.level.models.Area
|
||||
import dev.lucasnlm.antimine.common.level.models.AreaPaintSettings
|
||||
import dev.lucasnlm.antimine.common.level.repository.IDimensionRepository
|
||||
import dev.lucasnlm.antimine.common.level.view.AreaAdapter
|
||||
import dev.lucasnlm.antimine.common.level.view.AreaView
|
||||
import dev.lucasnlm.antimine.common.level.view.AreaViewHolder
|
||||
import dev.lucasnlm.antimine.core.control.ControlStyle
|
||||
import dev.lucasnlm.antimine.core.preferences.IPreferencesRepository
|
||||
import dev.lucasnlm.antimine.tutorial.viewmodel.TutorialViewModel
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class TutorialAreaAdapter(
|
||||
context: Context,
|
||||
private val viewModel: TutorialViewModel,
|
||||
private val preferencesRepository: IPreferencesRepository,
|
||||
dimensionRepository: IDimensionRepository,
|
||||
) : RecyclerView.Adapter<AreaViewHolder>() {
|
||||
|
||||
private var field = listOf<Area>()
|
||||
private var isLowBitAmbient = false
|
||||
private var isAmbientMode = false
|
||||
private val paintSettings: AreaPaintSettings
|
||||
|
||||
private var clickEnabled: Boolean = false
|
||||
|
||||
init {
|
||||
setHasStableIds(false)
|
||||
paintSettings = AreaAdapter.createAreaPaintSettings(context.applicationContext, dimensionRepository.areaSize())
|
||||
}
|
||||
|
||||
fun setAmbientMode(isAmbientMode: Boolean, isLowBitAmbient: Boolean) {
|
||||
this.isLowBitAmbient = isLowBitAmbient
|
||||
this.isAmbientMode = isAmbientMode
|
||||
}
|
||||
|
||||
fun setClickEnabled(value: Boolean) {
|
||||
clickEnabled = value
|
||||
}
|
||||
|
||||
fun bindField(field: List<Area>) {
|
||||
this.field = field
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = field.size
|
||||
|
||||
private fun AreaView.onClickablePosition(position: Int, action: suspend (Int) -> Unit): Boolean {
|
||||
return when {
|
||||
position == RecyclerView.NO_POSITION -> {
|
||||
Log.d(TAG, "Item no longer exists.")
|
||||
false
|
||||
}
|
||||
clickEnabled -> {
|
||||
requestFocus()
|
||||
GlobalScope.launch {
|
||||
action(position)
|
||||
}
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AreaViewHolder {
|
||||
val view = AreaView(parent.context)
|
||||
return AreaViewHolder(view).apply {
|
||||
val style = preferencesRepository.controlStyle()
|
||||
if (style == ControlStyle.DoubleClick || style == ControlStyle.DoubleClickInverted) {
|
||||
view.isClickable = true
|
||||
view.setOnDoubleClickListener(
|
||||
object : GestureDetector.OnDoubleTapListener {
|
||||
override fun onDoubleTap(e: MotionEvent?): Boolean {
|
||||
return view.onClickablePosition(absoluteAdapterPosition) {
|
||||
viewModel.onDoubleClick(it)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDoubleTapEvent(e: MotionEvent?): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
|
||||
return view.onClickablePosition(absoluteAdapterPosition) {
|
||||
viewModel.onSingleClick(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
} else {
|
||||
view.setOnTouchListener { _, motionEvent ->
|
||||
when (motionEvent.action) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
view.isPressed = true
|
||||
true
|
||||
}
|
||||
MotionEvent.ACTION_UP -> {
|
||||
view.isPressed = false
|
||||
val dt = motionEvent.eventTime - motionEvent.downTime
|
||||
|
||||
if (dt > preferencesRepository.customLongPressTimeout()) {
|
||||
view.onClickablePosition(absoluteAdapterPosition) {
|
||||
viewModel.onLongClick(it)
|
||||
}
|
||||
} else {
|
||||
view.onClickablePosition(absoluteAdapterPosition) {
|
||||
viewModel.onSingleClick(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
view.setOnKeyListener { _, keyCode, keyEvent ->
|
||||
var handled = false
|
||||
if (keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
|
||||
when (keyEvent.action) {
|
||||
KeyEvent.ACTION_DOWN -> {
|
||||
handled = true
|
||||
view.isPressed = true
|
||||
}
|
||||
KeyEvent.ACTION_UP -> {
|
||||
handled = true
|
||||
view.isPressed = false
|
||||
val dt = keyEvent.eventTime - keyEvent.downTime
|
||||
if (dt > preferencesRepository.customLongPressTimeout()) {
|
||||
view.onClickablePosition(absoluteAdapterPosition) {
|
||||
viewModel.onLongClick(it)
|
||||
}
|
||||
} else {
|
||||
view.onClickablePosition(absoluteAdapterPosition) {
|
||||
viewModel.onSingleClick(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
handled
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getItem(position: Int) = field[position]
|
||||
|
||||
override fun getItemId(position: Int): Long = getItem(position).id.toLong()
|
||||
|
||||
override fun onBindViewHolder(holder: AreaViewHolder, position: Int) {
|
||||
val field = getItem(position)
|
||||
holder.run {
|
||||
val areaView = itemView as AreaView
|
||||
areaView.bindField(field, viewModel.getAppTheme(), isAmbientMode, isLowBitAmbient, paintSettings)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val TAG = TutorialAreaAdapter::class.simpleName!!
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
package dev.lucasnlm.antimine.tutorial.view
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatDialogFragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import dev.lucasnlm.antimine.R
|
||||
import dev.lucasnlm.antimine.common.level.models.Difficulty
|
||||
import dev.lucasnlm.antimine.common.level.models.Event
|
||||
import dev.lucasnlm.antimine.common.level.viewmodel.GameViewModel
|
||||
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
|
||||
|
||||
class TutorialCompleteDialogFragment : AppCompatDialogFragment() {
|
||||
private val gameViewModel by sharedViewModel<GameViewModel>()
|
||||
|
||||
fun showAllowingStateLoss(manager: FragmentManager, tag: String?) {
|
||||
val fragmentTransaction = manager.beginTransaction()
|
||||
fragmentTransaction.add(this, tag)
|
||||
fragmentTransaction.commitAllowingStateLoss()
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
gameViewModel.startNewGame(Difficulty.Beginner)
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog =
|
||||
AlertDialog.Builder(requireContext()).apply {
|
||||
val view = LayoutInflater
|
||||
.from(context)
|
||||
.inflate(R.layout.dialog_end_game, null, false)
|
||||
.apply {
|
||||
findViewById<TextView>(R.id.title).text = getString(R.string.tutorial_completed)
|
||||
findViewById<TextView>(R.id.subtitle).visibility = View.GONE
|
||||
findViewById<TextView>(R.id.received_message).visibility = View.GONE
|
||||
findViewById<ImageView>(R.id.title_emoji)
|
||||
.setImageResource(R.drawable.emoji_beaming_face_with_smiling_eyes)
|
||||
}
|
||||
|
||||
setView(view)
|
||||
setNeutralButton(R.string.retry) { _, _ ->
|
||||
gameViewModel.eventObserver.postValue(Event.StartTutorial)
|
||||
}
|
||||
setPositiveButton(R.string.resume) { _, _ -> }
|
||||
}.create()
|
||||
|
||||
companion object {
|
||||
val TAG = TutorialCompleteDialogFragment::class.simpleName!!
|
||||
}
|
||||
}
|
|
@ -0,0 +1,254 @@
|
|||
package dev.lucasnlm.antimine.tutorial.view
|
||||
|
||||
import dev.lucasnlm.antimine.common.level.models.Area
|
||||
import dev.lucasnlm.antimine.common.level.models.Mark
|
||||
|
||||
object TutorialField {
|
||||
fun getStep0(): List<Area> {
|
||||
return (0..24).map {
|
||||
Area(it, 0, 0, isCovered = true)
|
||||
}.toList()
|
||||
}
|
||||
|
||||
private fun getDefaultStep(): MutableList<Area> {
|
||||
return mutableListOf(
|
||||
Area(
|
||||
0, 0, 0, 0, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
1, 1, 0, 0, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
2, 2, 0, 0, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
3, 3, 0, 2, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
4, 4, 0, 0, hasMine = true,
|
||||
mistake = false, isCovered = true, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
5, 0, 1, 1, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
6, 1, 1, 1, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
7, 2, 1, 0, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
8, 3, 1, 2, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
9, 4, 1, 0, hasMine = true,
|
||||
mistake = false, isCovered = true, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
10, 0, 2, 0, hasMine = true,
|
||||
mistake = false, isCovered = true, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
11, 1, 2, 1, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
12, 2, 2, 0, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
13, 3, 2, 1, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
14, 4, 2, 1, hasMine = false,
|
||||
mistake = false, isCovered = true, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
15, 0, 3, 1, hasMine = false,
|
||||
mistake = false, isCovered = true, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
16, 1, 3, 2, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
17, 2, 3, 1, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
18, 3, 3, 1, hasMine = false,
|
||||
mistake = false, isCovered = false, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
19, 4, 3, 0, hasMine = false,
|
||||
mistake = false, isCovered = true, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
20, 0, 4, 0, hasMine = false,
|
||||
mistake = false, isCovered = true, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
21, 1, 4, 1, hasMine = false,
|
||||
mistake = false, isCovered = true, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
22, 2, 4, 0, hasMine = true,
|
||||
mistake = false, isCovered = true, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
23, 3, 4, 1, hasMine = false,
|
||||
mistake = false, isCovered = true, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
Area(
|
||||
24, 4, 4, 0, hasMine = false,
|
||||
mistake = false, isCovered = true, mark = Mark.None,
|
||||
highlighted = false,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
fun getStep1(): List<Area> {
|
||||
return getDefaultStep().apply {
|
||||
this[6] = this[6].copy(highlighted = true)
|
||||
this[10] = this[10].copy(highlighted = true)
|
||||
}
|
||||
}
|
||||
|
||||
fun getStep2(): List<Area> {
|
||||
return getDefaultStep().apply {
|
||||
this[10] = this[10].copy(mark = Mark.Flag)
|
||||
this[11] = this[11].copy(highlighted = true)
|
||||
this[15] = this[15].copy(highlighted = true)
|
||||
}
|
||||
}
|
||||
|
||||
fun getStep3(): List<Area> {
|
||||
return getDefaultStep().apply {
|
||||
this[10] = this[10].copy(mark = Mark.Flag)
|
||||
this[15] = this[15].copy(highlighted = true, isCovered = false)
|
||||
this[20] = this[20].copy(highlighted = true)
|
||||
this[21] = this[21].copy(highlighted = true)
|
||||
}
|
||||
}
|
||||
|
||||
fun getStep4(): List<Area> {
|
||||
return getDefaultStep().apply {
|
||||
this[10] = this[10].copy(mark = Mark.Flag)
|
||||
this[15] = this[15].copy(isCovered = false)
|
||||
this[20] = this[20].copy(isCovered = false)
|
||||
this[21] = this[21].copy(isCovered = false)
|
||||
this[16] = this[16].copy(highlighted = true)
|
||||
this[22] = this[22].copy(highlighted = true)
|
||||
}
|
||||
}
|
||||
|
||||
fun getStep5(): List<Area> {
|
||||
return getDefaultStep().apply {
|
||||
this[10] = this[10].copy(mark = Mark.Flag)
|
||||
this[15] = this[15].copy(isCovered = false)
|
||||
this[20] = this[20].copy(isCovered = false)
|
||||
this[21] = this[21].copy(isCovered = false)
|
||||
this[17] = this[17].copy(highlighted = true)
|
||||
this[23] = this[23].copy(highlighted = true)
|
||||
this[22] = this[22].copy(mark = Mark.Flag)
|
||||
}
|
||||
}
|
||||
|
||||
fun getStep6(): List<Area> {
|
||||
return getDefaultStep().apply {
|
||||
this[10] = this[10].copy(mark = Mark.Flag)
|
||||
this[15] = this[15].copy(isCovered = false)
|
||||
this[20] = this[20].copy(isCovered = false)
|
||||
this[21] = this[21].copy(isCovered = false)
|
||||
this[23] = this[23].copy(isCovered = false)
|
||||
this[22] = this[22].copy(mark = Mark.Flag)
|
||||
this[18] = this[18].copy(highlighted = true)
|
||||
|
||||
this[24] = this[24].copy(highlighted = true)
|
||||
this[19] = this[19].copy(highlighted = true)
|
||||
this[14] = this[14].copy(highlighted = true)
|
||||
}
|
||||
}
|
||||
|
||||
fun getStep7(): List<Area> {
|
||||
return getDefaultStep().apply {
|
||||
this[10] = this[10].copy(mark = Mark.Flag)
|
||||
this[15] = this[15].copy(isCovered = false)
|
||||
this[20] = this[20].copy(isCovered = false)
|
||||
this[21] = this[21].copy(isCovered = false)
|
||||
this[23] = this[23].copy(isCovered = false)
|
||||
this[22] = this[22].copy(mark = Mark.Flag)
|
||||
this[24] = this[24].copy(isCovered = false)
|
||||
this[19] = this[19].copy(isCovered = false)
|
||||
this[14] = this[14].copy(isCovered = false)
|
||||
this[13] = this[13].copy(highlighted = true)
|
||||
this[9] = this[9].copy(highlighted = true)
|
||||
}
|
||||
}
|
||||
|
||||
fun getStep8(): List<Area> {
|
||||
return getDefaultStep().apply {
|
||||
this[10] = this[10].copy(mark = Mark.Flag)
|
||||
this[15] = this[15].copy(isCovered = false)
|
||||
this[20] = this[20].copy(isCovered = false)
|
||||
this[21] = this[21].copy(isCovered = false)
|
||||
this[23] = this[23].copy(isCovered = false)
|
||||
this[22] = this[22].copy(mark = Mark.Flag)
|
||||
this[24] = this[24].copy(isCovered = false)
|
||||
this[19] = this[19].copy(isCovered = false)
|
||||
this[14] = this[14].copy(isCovered = false)
|
||||
this[8] = this[8].copy(highlighted = true)
|
||||
this[4] = this[4].copy(highlighted = true)
|
||||
this[9] = this[9].copy(mark = Mark.Flag)
|
||||
}
|
||||
}
|
||||
|
||||
fun getStep9(): List<Area> {
|
||||
return getDefaultStep().apply {
|
||||
this[10] = this[10].copy(mark = Mark.Flag)
|
||||
this[15] = this[15].copy(isCovered = false)
|
||||
this[20] = this[20].copy(isCovered = false)
|
||||
this[21] = this[21].copy(isCovered = false)
|
||||
this[23] = this[23].copy(isCovered = false)
|
||||
this[22] = this[22].copy(mark = Mark.Flag)
|
||||
this[24] = this[24].copy(isCovered = false)
|
||||
this[19] = this[19].copy(isCovered = false)
|
||||
this[14] = this[14].copy(isCovered = false)
|
||||
this[4] = this[4].copy(mark = Mark.Flag)
|
||||
this[9] = this[9].copy(mark = Mark.Flag)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,138 @@
|
|||
package dev.lucasnlm.antimine.tutorial.view
|
||||
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.text.bold
|
||||
import androidx.core.text.buildSpannedString
|
||||
import androidx.core.text.color
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import dev.lucasnlm.antimine.R
|
||||
import dev.lucasnlm.antimine.common.level.models.Event
|
||||
import dev.lucasnlm.antimine.common.level.repository.IDimensionRepository
|
||||
import dev.lucasnlm.antimine.common.level.view.SpaceItemDecoration
|
||||
import dev.lucasnlm.antimine.common.level.viewmodel.GameViewModel
|
||||
import dev.lucasnlm.antimine.core.preferences.IPreferencesRepository
|
||||
import dev.lucasnlm.antimine.tutorial.viewmodel.TutorialViewModel
|
||||
import kotlinx.android.synthetic.main.fragment_tutorial_level.*
|
||||
import kotlinx.coroutines.flow.collect
|
||||
import org.koin.android.ext.android.inject
|
||||
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
|
||||
class TutorialLevelFragment : Fragment(R.layout.fragment_tutorial_level) {
|
||||
private val dimensionRepository: IDimensionRepository by inject()
|
||||
private val preferencesRepository: IPreferencesRepository by inject()
|
||||
private val tutorialViewModel by viewModel<TutorialViewModel>()
|
||||
private val gameViewModel by sharedViewModel<GameViewModel>()
|
||||
private val areaAdapter by lazy {
|
||||
TutorialAreaAdapter(requireContext(), tutorialViewModel, preferencesRepository, dimensionRepository).apply {
|
||||
setClickEnabled(true)
|
||||
}
|
||||
}
|
||||
private lateinit var recyclerGrid: RecyclerView
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
recyclerGrid = view.findViewById(R.id.recyclerGrid)
|
||||
|
||||
recyclerGrid.apply {
|
||||
addItemDecoration(SpaceItemDecoration(R.dimen.field_padding))
|
||||
setHasFixedSize(true)
|
||||
layoutManager = GridLayoutManager(view.context, 5)
|
||||
adapter = areaAdapter
|
||||
}
|
||||
|
||||
lifecycleScope.launchWhenCreated {
|
||||
tutorialViewModel.run {
|
||||
field.observe(
|
||||
viewLifecycleOwner,
|
||||
{ list ->
|
||||
gameViewModel.stopClock()
|
||||
gameViewModel.elapsedTimeSeconds.postValue(0L)
|
||||
gameViewModel.mineCount.postValue(
|
||||
list.count { it.hasMine }.coerceAtLeast(4) - list.count { it.mark.isFlag() }
|
||||
)
|
||||
areaAdapter.bindField(list)
|
||||
|
||||
if (tutorialState.value.completed) {
|
||||
gameViewModel.eventObserver.postValue(Event.FinishTutorial)
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
lifecycleScope.launchWhenCreated {
|
||||
tutorialViewModel.tutorialState.collect {
|
||||
val flagAction = tutorialViewModel.flagActionLabel()
|
||||
val openAction = tutorialViewModel.openActionLabel()
|
||||
|
||||
tutorial_top.apply {
|
||||
text = buildSpannedString {
|
||||
it.topMessage
|
||||
.splitKeeping(flagAction, openAction)
|
||||
.forEach {
|
||||
when (it) {
|
||||
flagAction, openAction -> {
|
||||
bold { color(ContextCompat.getColor(context, R.color.accent)) { append(it) } }
|
||||
}
|
||||
else -> append(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
setTextColor(
|
||||
Color.argb(
|
||||
255,
|
||||
Color.red(tutorial_top.currentTextColor),
|
||||
Color.green(tutorial_top.currentTextColor),
|
||||
Color.blue(tutorial_top.currentTextColor),
|
||||
),
|
||||
)
|
||||
}
|
||||
tutorial_bottom.apply {
|
||||
text = buildSpannedString {
|
||||
it.bottomMessage
|
||||
.splitKeeping(flagAction, openAction)
|
||||
.forEach {
|
||||
when (it) {
|
||||
flagAction, openAction -> {
|
||||
bold { color(ContextCompat.getColor(context, R.color.accent)) { append(it) } }
|
||||
}
|
||||
else -> append(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
setTextColor(
|
||||
Color.argb(
|
||||
255,
|
||||
Color.red(tutorial_top.currentTextColor),
|
||||
Color.green(tutorial_top.currentTextColor),
|
||||
Color.blue(tutorial_top.currentTextColor),
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun String.splitKeeping(str: String): List<String> {
|
||||
return this.split(str).flatMap { listOf(it, str) }.dropLast(1).filterNot { it.isEmpty() }
|
||||
}
|
||||
|
||||
private fun String.splitKeeping(vararg targetStrings: String): List<String> {
|
||||
var res = listOf(this)
|
||||
targetStrings.forEach { str ->
|
||||
res = res.flatMap { it.splitKeeping(str) }
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
companion object {
|
||||
val TAG = TutorialLevelFragment::class.simpleName
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package dev.lucasnlm.antimine.tutorial.viewmodel
|
||||
|
||||
data class TutorialState(
|
||||
val step: Int,
|
||||
val topMessage: String,
|
||||
val bottomMessage: String,
|
||||
val completed: Boolean,
|
||||
)
|
|
@ -0,0 +1,220 @@
|
|||
package dev.lucasnlm.antimine.tutorial.viewmodel
|
||||
|
||||
import android.content.Context
|
||||
import dev.lucasnlm.antimine.common.R
|
||||
import dev.lucasnlm.antimine.common.level.models.Area
|
||||
import dev.lucasnlm.antimine.common.level.repository.IDimensionRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.IMinefieldRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.ISavesRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.IStatsRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.ITipRepository
|
||||
import dev.lucasnlm.antimine.common.level.utils.Clock
|
||||
import dev.lucasnlm.antimine.common.level.utils.IHapticFeedbackManager
|
||||
import dev.lucasnlm.antimine.common.level.viewmodel.GameViewModel
|
||||
import dev.lucasnlm.antimine.core.analytics.IAnalyticsManager
|
||||
import dev.lucasnlm.antimine.core.analytics.models.Analytics
|
||||
import dev.lucasnlm.antimine.core.control.ControlStyle
|
||||
import dev.lucasnlm.antimine.core.preferences.IPreferencesRepository
|
||||
import dev.lucasnlm.antimine.core.sound.ISoundManager
|
||||
import dev.lucasnlm.antimine.core.themes.repository.IThemeRepository
|
||||
import dev.lucasnlm.antimine.tutorial.view.TutorialField
|
||||
import dev.lucasnlm.external.IPlayGamesManager
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
|
||||
class TutorialViewModel(
|
||||
savesRepository: ISavesRepository,
|
||||
statsRepository: IStatsRepository,
|
||||
dimensionRepository: IDimensionRepository,
|
||||
themeRepository: IThemeRepository,
|
||||
soundManager: ISoundManager,
|
||||
minefieldRepository: IMinefieldRepository,
|
||||
analyticsManager: IAnalyticsManager,
|
||||
playGamesManager: IPlayGamesManager,
|
||||
tipRepository: ITipRepository,
|
||||
private val clock: Clock,
|
||||
private val context: Context,
|
||||
private val hapticFeedbackManager: IHapticFeedbackManager,
|
||||
private val preferencesRepository: IPreferencesRepository,
|
||||
) : GameViewModel(
|
||||
savesRepository,
|
||||
statsRepository,
|
||||
dimensionRepository,
|
||||
preferencesRepository,
|
||||
hapticFeedbackManager,
|
||||
themeRepository,
|
||||
soundManager,
|
||||
minefieldRepository,
|
||||
analyticsManager,
|
||||
playGamesManager,
|
||||
tipRepository,
|
||||
clock,
|
||||
) {
|
||||
val tutorialState = MutableStateFlow(
|
||||
TutorialState(
|
||||
0,
|
||||
context.getString(R.string.tutorial),
|
||||
context.getString(R.string.tutorial_0_bottom, openActionLabel()),
|
||||
completed = false,
|
||||
)
|
||||
)
|
||||
|
||||
init {
|
||||
field.postValue(TutorialField.getStep0())
|
||||
analyticsManager.sentEvent(Analytics.TutorialStarted)
|
||||
}
|
||||
|
||||
private fun currentStep(): Int {
|
||||
return tutorialState.value.step
|
||||
}
|
||||
|
||||
fun openActionLabel(): String =
|
||||
when (preferencesRepository.controlStyle()) {
|
||||
ControlStyle.Standard -> context.getString(R.string.single_click)
|
||||
ControlStyle.FastFlag -> context.getString(R.string.long_press)
|
||||
ControlStyle.DoubleClick -> context.getString(R.string.double_click)
|
||||
ControlStyle.DoubleClickInverted -> context.getString(R.string.single_click)
|
||||
}
|
||||
|
||||
fun flagActionLabel(): String =
|
||||
when (preferencesRepository.controlStyle()) {
|
||||
ControlStyle.Standard -> context.getString(R.string.long_press)
|
||||
ControlStyle.FastFlag -> context.getString(R.string.single_click)
|
||||
ControlStyle.DoubleClick -> context.getString(R.string.single_click)
|
||||
ControlStyle.DoubleClickInverted -> context.getString(R.string.double_click)
|
||||
}
|
||||
|
||||
private fun postStep(step: List<Area>, top: String, bottom: String, completed: Boolean = false) {
|
||||
field.postValue(step)
|
||||
clock.stop()
|
||||
tutorialState.value = tutorialState.value.copy(
|
||||
completed = completed,
|
||||
step = currentStep() + 1,
|
||||
topMessage = top,
|
||||
bottomMessage = bottom,
|
||||
)
|
||||
}
|
||||
|
||||
private fun openTileAction(index: Int) {
|
||||
when (currentStep()) {
|
||||
0 -> {
|
||||
postStep(
|
||||
TutorialField.getStep1(),
|
||||
context.getString(R.string.tutorial_1_top),
|
||||
context.getString(R.string.tutorial_1_bottom, flagActionLabel()),
|
||||
)
|
||||
}
|
||||
2 -> {
|
||||
if (index == 15) {
|
||||
postStep(
|
||||
TutorialField.getStep3(),
|
||||
context.getString(R.string.tutorial_3_top),
|
||||
context.getString(R.string.tutorial_3_bottom),
|
||||
)
|
||||
}
|
||||
}
|
||||
3 -> {
|
||||
if (index == 20 || index == 21) {
|
||||
postStep(
|
||||
TutorialField.getStep4(),
|
||||
context.getString(R.string.tutorial_4_top),
|
||||
context.getString(R.string.tutorial_4_bottom, flagActionLabel()),
|
||||
)
|
||||
}
|
||||
}
|
||||
5 -> {
|
||||
if (index == 23) {
|
||||
postStep(
|
||||
TutorialField.getStep6(),
|
||||
context.getString(R.string.tutorial_5_top),
|
||||
context.getString(R.string.tutorial_5_bottom, openActionLabel(), flagActionLabel()),
|
||||
)
|
||||
}
|
||||
}
|
||||
6 -> {
|
||||
if (index == 24 || index == 19 || index == 14) {
|
||||
postStep(
|
||||
TutorialField.getStep7(),
|
||||
context.getString(R.string.tutorial_5_top),
|
||||
context.getString(R.string.tutorial_5_bottom, openActionLabel(), flagActionLabel()),
|
||||
)
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
hapticFeedbackManager.explosionFeedback()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun longTileAction(index: Int) {
|
||||
when (currentStep()) {
|
||||
1 -> {
|
||||
if (index == 10) {
|
||||
postStep(
|
||||
TutorialField.getStep2(),
|
||||
context.getString(R.string.tutorial_2_top),
|
||||
context.getString(R.string.tutorial_2_bottom, openActionLabel()),
|
||||
)
|
||||
}
|
||||
}
|
||||
4 -> {
|
||||
if (index == 22) {
|
||||
postStep(
|
||||
TutorialField.getStep5(),
|
||||
context.getString(R.string.tutorial_5_top),
|
||||
context.getString(R.string.tutorial_5_bottom, openActionLabel(), flagActionLabel()),
|
||||
)
|
||||
}
|
||||
}
|
||||
7 -> {
|
||||
if (index == 9) {
|
||||
postStep(
|
||||
TutorialField.getStep8(),
|
||||
context.getString(R.string.tutorial_5_top),
|
||||
context.getString(R.string.tutorial_5_bottom, openActionLabel(), flagActionLabel()),
|
||||
)
|
||||
}
|
||||
}
|
||||
8 -> {
|
||||
if (index == 4) {
|
||||
postStep(
|
||||
TutorialField.getStep9(),
|
||||
context.getString(R.string.tutorial_5_top),
|
||||
context.getString(R.string.tutorial_5_bottom, openActionLabel(), flagActionLabel()),
|
||||
completed = true
|
||||
)
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
hapticFeedbackManager.explosionFeedback()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun onDoubleClick(index: Int) {
|
||||
clock.stop()
|
||||
when (preferencesRepository.controlStyle()) {
|
||||
ControlStyle.DoubleClick -> openTileAction(index)
|
||||
ControlStyle.DoubleClickInverted -> longTileAction(index)
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun onSingleClick(index: Int) {
|
||||
clock.stop()
|
||||
when (preferencesRepository.controlStyle()) {
|
||||
ControlStyle.Standard -> openTileAction(index)
|
||||
ControlStyle.FastFlag -> longTileAction(index)
|
||||
ControlStyle.DoubleClick -> longTileAction(index)
|
||||
ControlStyle.DoubleClickInverted -> openTileAction(index)
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun onLongClick(index: Int) {
|
||||
clock.stop()
|
||||
when (preferencesRepository.controlStyle()) {
|
||||
ControlStyle.Standard -> longTileAction(index)
|
||||
ControlStyle.FastFlag -> openTileAction(index)
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
}
|
10
app/src/main/res/drawable/tip.xml
Normal file
10
app/src/main/res/drawable/tip.xml
Normal file
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M12,3c-0.46,0 -0.93,0.04 -1.4,0.14C7.84,3.67 5.64,5.9 5.12,8.66c-0.48,2.61 0.48,5.01 2.22,6.56C7.77,15.6 8,16.13 8,16.69V19c0,1.1 0.9,2 2,2h0.28c0.35,0.6 0.98,1 1.72,1s1.38,-0.4 1.72,-1H14c1.1,0 2,-0.9 2,-2v-2.31c0,-0.55 0.22,-1.09 0.64,-1.46C18.09,13.95 19,12.08 19,10C19,6.13 15.87,3 12,3zM12.5,14h-1v-2.59L9.67,9.59l0.71,-0.71L12,10.5l1.62,-1.62l0.71,0.71l-1.83,1.83V14zM13.5,19c-0.01,0 -0.02,-0.01 -0.03,-0.01V19h-2.94v-0.01c-0.01,0 -0.02,0.01 -0.03,0.01c-0.28,0 -0.5,-0.22 -0.5,-0.5c0,-0.28 0.22,-0.5 0.5,-0.5c0.01,0 0.02,0.01 0.03,0.01V18h2.94v0.01c0.01,0 0.02,-0.01 0.03,-0.01c0.28,0 0.5,0.22 0.5,0.5C14,18.78 13.78,19 13.5,19zM13.5,17h-3c-0.28,0 -0.5,-0.22 -0.5,-0.5c0,-0.28 0.22,-0.5 0.5,-0.5h3c0.28,0 0.5,0.22 0.5,0.5C14,16.78 13.78,17 13.5,17z" />
|
||||
</vector>
|
5
app/src/main/res/drawable/translate.xml
Normal file
5
app/src/main/res/drawable/translate.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12.65,15.67c0.14,-0.36 0.05,-0.77 -0.23,-1.05l-2.09,-2.06 0.03,-0.03c1.74,-1.94 2.98,-4.17 3.71,-6.53h1.94c0.54,0 0.99,-0.45 0.99,-0.99v-0.02c0,-0.54 -0.45,-0.99 -0.99,-0.99L10,4L10,3c0,-0.55 -0.45,-1 -1,-1s-1,0.45 -1,1v1L1.99,4c-0.54,0 -0.99,0.45 -0.99,0.99 0,0.55 0.45,0.99 0.99,0.99h10.18C11.5,7.92 10.44,9.75 9,11.35c-0.81,-0.89 -1.49,-1.86 -2.06,-2.88 -0.16,-0.29 -0.45,-0.47 -0.78,-0.47 -0.69,0 -1.13,0.75 -0.79,1.35 0.63,1.13 1.4,2.21 2.3,3.21L3.3,16.87c-0.4,0.39 -0.4,1.03 0,1.42 0.39,0.39 1.02,0.39 1.42,0L9,14l2.02,2.02c0.51,0.51 1.38,0.32 1.63,-0.35zM17.5,10c-0.6,0 -1.14,0.37 -1.35,0.94l-3.67,9.8c-0.24,0.61 0.22,1.26 0.87,1.26 0.39,0 0.74,-0.24 0.88,-0.61l0.89,-2.39h4.75l0.9,2.39c0.14,0.36 0.49,0.61 0.88,0.61 0.65,0 1.11,-0.65 0.88,-1.26l-3.67,-9.8c-0.22,-0.57 -0.76,-0.94 -1.36,-0.94zM15.88,17l1.62,-4.33L19.12,17h-3.24z"/>
|
||||
</vector>
|
5
app/src/main/res/drawable/tutorial.xml
Normal file
5
app/src/main/res/drawable/tutorial.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M5,13.18v2.81c0,0.73 0.4,1.41 1.04,1.76l5,2.73c0.6,0.33 1.32,0.33 1.92,0l5,-2.73c0.64,-0.35 1.04,-1.03 1.04,-1.76v-2.81l-6.04,3.3c-0.6,0.33 -1.32,0.33 -1.92,0L5,13.18zM11.04,3.52l-8.43,4.6c-0.69,0.38 -0.69,1.38 0,1.76l8.43,4.6c0.6,0.33 1.32,0.33 1.92,0L21,10.09L21,16c0,0.55 0.45,1 1,1s1,-0.45 1,-1L23,9.59c0,-0.37 -0.2,-0.7 -0.52,-0.88l-9.52,-5.19c-0.6,-0.32 -1.32,-0.32 -1.92,0z"/>
|
||||
</vector>
|
|
@ -83,10 +83,26 @@
|
|||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:contentDescription="@string/new_game"
|
||||
android:padding="14dp"
|
||||
android:alpha="0.0"
|
||||
android:clickable="false"
|
||||
ads:layout_constraintRight_toRightOf="parent"
|
||||
ads:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/retry"
|
||||
tools:visibility="visible"/>
|
||||
tools:alpha="1.0"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tipsCounter"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="41dp"
|
||||
android:textSize="12sp"
|
||||
android:textStyle="bold"
|
||||
android:visibility="gone"
|
||||
tools:text="100"
|
||||
tools:visibility="visible"
|
||||
ads:layout_constraintBottom_toBottomOf="@+id/shortcutIcon"
|
||||
ads:layout_constraintEnd_toEndOf="@+id/shortcutIcon"
|
||||
ads:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/levelContainer"
|
||||
|
|
|
@ -50,4 +50,19 @@
|
|||
app:layout_constraintTop_toBottomOf="@+id/title"
|
||||
tools:text="You did 5/12 in 34 seconds." />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/received_message"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/you_have_received"
|
||||
android:layout_marginTop="4dp"
|
||||
android:textSize="14sp"
|
||||
android:textAlignment="center"
|
||||
android:gravity="center"
|
||||
app:drawableEndCompat="@drawable/tip"
|
||||
app:drawableTint="@color/accent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/subtitle"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
|
55
app/src/main/res/layout/fragment_tutorial_level.xml
Normal file
55
app/src/main/res/layout/fragment_tutorial_level.xml
Normal file
|
@ -0,0 +1,55 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_gravity="center">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tutorial_top"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="16sp"
|
||||
android:paddingHorizontal="24dp"
|
||||
android:gravity="center_horizontal"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toTopOf="@+id/recyclerGrid"
|
||||
tools:text="Tutorial"/>
|
||||
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recyclerGrid"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false"
|
||||
android:contentDescription="@null"
|
||||
android:fadeScrollbars="true"
|
||||
android:importantForAccessibility="no"
|
||||
android:overScrollMode="never"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:scrollbars="none" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tutorial_bottom"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal|bottom"
|
||||
android:gravity="center_horizontal"
|
||||
android:textSize="16sp"
|
||||
android:paddingHorizontal="24dp"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/recyclerGrid"
|
||||
tools:text="You can start by clicking at any random place." />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -78,6 +78,12 @@
|
|||
android:checkable="false"
|
||||
android:icon="@drawable/settings"
|
||||
android:title="@string/settings" />
|
||||
|
||||
<item
|
||||
android:id="@+id/tutorial"
|
||||
android:checkable="false"
|
||||
android:icon="@drawable/tutorial"
|
||||
android:title="@string/tutorial" />
|
||||
</group>
|
||||
|
||||
<group android:id="@+id/play_games_group">
|
||||
|
@ -103,6 +109,12 @@
|
|||
android:checkable="false"
|
||||
android:title="@string/rating" />
|
||||
|
||||
<item
|
||||
android:id="@+id/translation"
|
||||
android:icon="@drawable/translate"
|
||||
android:checkable="false"
|
||||
android:title="@string/translation" />
|
||||
|
||||
<item
|
||||
android:id="@+id/about"
|
||||
android:icon="@drawable/info"
|
||||
|
|
|
@ -25,6 +25,10 @@ class MockPreferencesRepository : IPreferencesRepository {
|
|||
|
||||
override fun completeFirstUse() { }
|
||||
|
||||
override fun isTutorialCompleted(): Boolean = true
|
||||
|
||||
override fun completeTutorial() { }
|
||||
|
||||
override fun customLongPressTimeout(): Long = 400L
|
||||
|
||||
override fun themeId(): Long = 1L
|
||||
|
@ -57,6 +61,14 @@ class MockPreferencesRepository : IPreferencesRepository {
|
|||
|
||||
override fun showSupport(): Boolean = true
|
||||
|
||||
override fun getTips(): Int = 0
|
||||
|
||||
override fun setTips(tips: Int) { }
|
||||
|
||||
override fun getExtraTips(): Int = 5
|
||||
|
||||
override fun setExtraTips(tips: Int) { }
|
||||
|
||||
override fun useFlagAssistant(): Boolean = false
|
||||
|
||||
override fun useHapticFeedback(): Boolean = true
|
||||
|
|
|
@ -48,7 +48,8 @@ class ThemeViewModelTest : IntentViewModelTest() {
|
|||
toolbarMine = R.drawable.mine,
|
||||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_exploded_red,
|
||||
mineLow = R.drawable.mine_low
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed,
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -81,7 +82,8 @@ class ThemeViewModelTest : IntentViewModelTest() {
|
|||
toolbarMine = R.drawable.mine_low,
|
||||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_exploded_white,
|
||||
mineLow = R.drawable.mine_low
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed,
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -114,7 +116,8 @@ class ThemeViewModelTest : IntentViewModelTest() {
|
|||
toolbarMine = R.drawable.mine_low,
|
||||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_exploded_white,
|
||||
mineLow = R.drawable.mine_low
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed,
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
@ -8,8 +8,8 @@ android {
|
|||
|
||||
defaultConfig {
|
||||
// versionCode and versionName must be hardcoded to support F-droid
|
||||
versionCode 800111
|
||||
versionName '8.0.11'
|
||||
versionCode 800101
|
||||
versionName '8.1.0'
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 30
|
||||
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
||||
|
|
|
@ -212,6 +212,15 @@ class GameController {
|
|||
}
|
||||
}
|
||||
|
||||
fun revealRandomMine(): Boolean {
|
||||
val result: Boolean
|
||||
field = MinefieldHandler(field.toMutableList(), false).run {
|
||||
result = revealRandomMine()
|
||||
result()
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
fun hasAnyMineExploded(): Boolean = mines().firstOrNull { it.mistake } != null
|
||||
|
||||
fun hasFlaggedAllMines(): Boolean = rightFlags() == minefield.mines
|
||||
|
|
|
@ -18,7 +18,7 @@ import dev.lucasnlm.antimine.common.level.database.models.Stats
|
|||
Save::class,
|
||||
Stats::class
|
||||
],
|
||||
version = 6,
|
||||
version = 7,
|
||||
exportSchema = false
|
||||
)
|
||||
@TypeConverters(
|
||||
|
|
|
@ -5,9 +5,11 @@ import dev.lucasnlm.antimine.common.level.database.AppDataBase
|
|||
import dev.lucasnlm.antimine.common.level.repository.IMinefieldRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.ISavesRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.IStatsRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.ITipRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.MinefieldRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.SavesRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.StatsRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.TipRepository
|
||||
import dev.lucasnlm.antimine.common.level.utils.Clock
|
||||
import dev.lucasnlm.antimine.common.level.utils.HapticFeedbackManager
|
||||
import dev.lucasnlm.antimine.common.level.utils.IHapticFeedbackManager
|
||||
|
@ -48,4 +50,8 @@ val LevelModule = module {
|
|||
single {
|
||||
HapticFeedbackManager(get())
|
||||
} bind IHapticFeedbackManager::class
|
||||
|
||||
single {
|
||||
TipRepository(get())
|
||||
} bind ITipRepository::class
|
||||
}
|
||||
|
|
|
@ -22,6 +22,13 @@ class MinefieldHandler(
|
|||
.forEach { field[it.id] = it.copy(isCovered = false) }
|
||||
}
|
||||
|
||||
fun revealRandomMine(): Boolean {
|
||||
return field.filter { it.hasMine && it.mark.isNone() && !it.revealed }.shuffled().firstOrNull()?.run {
|
||||
field[this.id] = this.copy(revealed = true)
|
||||
true
|
||||
} ?: false
|
||||
}
|
||||
|
||||
fun turnOffAllHighlighted() {
|
||||
field.filter { it.highlighted }
|
||||
.forEach { field[it.id] = it.copy(highlighted = false) }
|
||||
|
|
|
@ -10,4 +10,5 @@ data class Area(
|
|||
val isCovered: Boolean = true,
|
||||
val mark: Mark = Mark.None,
|
||||
val highlighted: Boolean = false,
|
||||
val revealed: Boolean = false,
|
||||
)
|
||||
|
|
|
@ -8,4 +8,6 @@ enum class Event {
|
|||
Running,
|
||||
Victory,
|
||||
GameOver,
|
||||
StartTutorial,
|
||||
FinishTutorial,
|
||||
}
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
package dev.lucasnlm.antimine.common.level.repository
|
||||
|
||||
import dev.lucasnlm.antimine.core.preferences.IPreferencesRepository
|
||||
|
||||
interface ITipRepository {
|
||||
fun setExtraTips(amount: Int)
|
||||
fun removeTip(): Boolean
|
||||
fun increaseTip()
|
||||
fun getTotalTips(): Int
|
||||
}
|
||||
|
||||
class TipRepository(
|
||||
private val preferencesRepository: IPreferencesRepository
|
||||
) : ITipRepository {
|
||||
override fun setExtraTips(amount: Int) {
|
||||
preferencesRepository.setExtraTips(amount)
|
||||
}
|
||||
|
||||
override fun removeTip(): Boolean {
|
||||
val tips = preferencesRepository.getTips()
|
||||
val extra = preferencesRepository.getExtraTips()
|
||||
|
||||
return when {
|
||||
tips >= 1 -> {
|
||||
preferencesRepository.setTips(tips - 1)
|
||||
true
|
||||
}
|
||||
preferencesRepository.getExtraTips() >= 1 -> {
|
||||
preferencesRepository.setExtraTips(extra - 1)
|
||||
true
|
||||
}
|
||||
else -> {
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun increaseTip() {
|
||||
val newValue = (preferencesRepository.getTips() + 1).coerceAtMost(MAX_TIPS).coerceAtLeast(0)
|
||||
preferencesRepository.setTips(newValue)
|
||||
}
|
||||
|
||||
override fun getTotalTips(): Int {
|
||||
return preferencesRepository.getExtraTips() + preferencesRepository.getTips()
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val MAX_TIPS = 15
|
||||
}
|
||||
}
|
|
@ -79,7 +79,21 @@ fun Area.paintOnCanvas(
|
|||
)
|
||||
question?.draw(canvas)
|
||||
}
|
||||
else -> {}
|
||||
else -> {
|
||||
if (revealed) {
|
||||
val padding = minePadding ?: context.resources.getDimension(R.dimen.mine_padding).toInt()
|
||||
|
||||
val revealedDrawable = ContextCompat.getDrawable(context, theme.assets.revealed)
|
||||
|
||||
revealedDrawable?.setBounds(
|
||||
rectF.left.toInt() + padding,
|
||||
rectF.top.toInt() + padding,
|
||||
rectF.right.toInt() - padding,
|
||||
rectF.bottom.toInt() - padding
|
||||
)
|
||||
revealedDrawable?.draw(canvas)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (isAmbientMode) {
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
package dev.lucasnlm.antimine.common.level.view
|
||||
|
||||
import android.content.Context
|
||||
import android.text.format.DateUtils
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.annotation.LayoutRes
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import dev.lucasnlm.antimine.common.R
|
||||
import dev.lucasnlm.antimine.common.level.models.Minefield
|
||||
import dev.lucasnlm.antimine.common.level.repository.IDimensionRepository
|
||||
import dev.lucasnlm.antimine.common.level.viewmodel.GameViewModel
|
||||
|
@ -23,6 +24,11 @@ abstract class CommonLevelFragment(@LayoutRes val contentLayoutId: Int) : Fragme
|
|||
}
|
||||
protected lateinit var recyclerGrid: RecyclerView
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
recyclerGrid = view.findViewById(R.id.recyclerGrid)
|
||||
}
|
||||
|
||||
private fun makeNewLayoutManager(boardWidth: Int) =
|
||||
FixedGridLayoutManager().apply {
|
||||
setTotalColumnCount(boardWidth)
|
||||
|
@ -35,12 +41,6 @@ abstract class CommonLevelFragment(@LayoutRes val contentLayoutId: Int) : Fragme
|
|||
setPadding(horizontalPadding, verticalPadding, 0, 0)
|
||||
layoutManager = makeNewLayoutManager(levelSetup.width)
|
||||
adapter = areaAdapter
|
||||
alpha = 0.0f
|
||||
|
||||
animate().apply {
|
||||
alpha(1.0f)
|
||||
duration = DateUtils.SECOND_IN_MILLIS
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ import dev.lucasnlm.antimine.common.level.repository.IDimensionRepository
|
|||
import dev.lucasnlm.antimine.common.level.repository.IMinefieldRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.ISavesRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.IStatsRepository
|
||||
import dev.lucasnlm.antimine.common.level.repository.ITipRepository
|
||||
import dev.lucasnlm.antimine.common.level.utils.Clock
|
||||
import dev.lucasnlm.antimine.common.level.utils.IHapticFeedbackManager
|
||||
import dev.lucasnlm.antimine.core.analytics.IAnalyticsManager
|
||||
|
@ -35,7 +36,7 @@ import kotlinx.coroutines.flow.filterNotNull
|
|||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
class GameViewModel(
|
||||
open class GameViewModel(
|
||||
private val savesRepository: ISavesRepository,
|
||||
private val statsRepository: IStatsRepository,
|
||||
private val dimensionRepository: IDimensionRepository,
|
||||
|
@ -46,6 +47,7 @@ class GameViewModel(
|
|||
private val minefieldRepository: IMinefieldRepository,
|
||||
private val analyticsManager: IAnalyticsManager,
|
||||
private val playGamesManager: IPlayGamesManager,
|
||||
private val tipRepository: ITipRepository,
|
||||
private val clock: Clock,
|
||||
) : ViewModel() {
|
||||
val eventObserver = MutableLiveData<Event>()
|
||||
|
@ -62,6 +64,7 @@ class GameViewModel(
|
|||
val difficulty = MutableLiveData<Difficulty>()
|
||||
val levelSetup = MutableLiveData<Minefield>()
|
||||
val saveId = MutableLiveData<Long>()
|
||||
val tips = MutableLiveData(tipRepository.getTotalTips())
|
||||
|
||||
fun startNewGame(newDifficulty: Difficulty = currentDifficulty): Minefield {
|
||||
clock.reset()
|
||||
|
@ -203,6 +206,11 @@ class GameViewModel(
|
|||
}
|
||||
}
|
||||
|
||||
suspend fun loadGame(): Minefield {
|
||||
val currentLevelSetup = levelSetup.value
|
||||
return currentLevelSetup ?: loadLastGame()
|
||||
}
|
||||
|
||||
fun pauseGame() {
|
||||
if (initialized) {
|
||||
if (gameController.hasMines()) {
|
||||
|
@ -245,7 +253,7 @@ class GameViewModel(
|
|||
}
|
||||
}
|
||||
|
||||
suspend fun onLongClick(index: Int) {
|
||||
open suspend fun onLongClick(index: Int) {
|
||||
gameController
|
||||
.longPress(index)
|
||||
.filterNotNull()
|
||||
|
@ -260,7 +268,7 @@ class GameViewModel(
|
|||
}
|
||||
}
|
||||
|
||||
suspend fun onDoubleClick(index: Int) {
|
||||
open suspend fun onDoubleClick(index: Int) {
|
||||
gameController
|
||||
.doubleClick(index)
|
||||
.filterNotNull()
|
||||
|
@ -271,7 +279,7 @@ class GameViewModel(
|
|||
}
|
||||
}
|
||||
|
||||
suspend fun onSingleClick(index: Int) {
|
||||
open suspend fun onSingleClick(index: Int) {
|
||||
gameController
|
||||
.singleClick(index)
|
||||
.filterNotNull()
|
||||
|
@ -354,7 +362,22 @@ class GameViewModel(
|
|||
clock.stop()
|
||||
}
|
||||
|
||||
fun revealAllEmptyAreas() = gameController.revealAllEmptyAreas()
|
||||
fun showAllEmptyAreas() {
|
||||
gameController.revealAllEmptyAreas()
|
||||
}
|
||||
|
||||
fun revealRandomMine(): Boolean {
|
||||
return if (gameController.revealRandomMine()) {
|
||||
if (tipRepository.removeTip()) {
|
||||
refreshField()
|
||||
}
|
||||
|
||||
tips.postValue(tipRepository.getTotalTips())
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
fun explosionDelay() = if (preferencesRepository.useAnimations()) 750L else 0L
|
||||
|
||||
|
@ -403,6 +426,14 @@ class GameViewModel(
|
|||
}
|
||||
}
|
||||
|
||||
fun addNewTip() {
|
||||
tipRepository.increaseTip()
|
||||
}
|
||||
|
||||
fun getTips(): Int {
|
||||
return tipRepository.getTotalTips()
|
||||
}
|
||||
|
||||
fun victory() {
|
||||
gameController.run {
|
||||
analyticsManager.sentEvent(
|
||||
|
|
|
@ -91,6 +91,10 @@ sealed class Analytics(
|
|||
|
||||
object OpenThemes : Analytics("Open Themes")
|
||||
|
||||
object TutorialStarted : Analytics("Tutorial Started")
|
||||
|
||||
object TutorialCompleted : Analytics("Tutorial Completed")
|
||||
|
||||
object OpenAchievements : Analytics("Open Achievements")
|
||||
|
||||
object OpenLeaderboards : Analytics("Open Leaderboards")
|
||||
|
@ -115,5 +119,7 @@ sealed class Analytics(
|
|||
|
||||
object TapRatingRequest : Analytics("Rating Request")
|
||||
|
||||
object UseTip : Analytics("Use Tip")
|
||||
|
||||
class TapGameReset(resign: Boolean) : Analytics("Game reset", mapOf("Resign" to resign.toString()))
|
||||
}
|
||||
|
|
|
@ -16,6 +16,9 @@ interface IPreferencesRepository {
|
|||
fun isFirstUse(): Boolean
|
||||
fun completeFirstUse()
|
||||
|
||||
fun isTutorialCompleted(): Boolean
|
||||
fun completeTutorial()
|
||||
|
||||
fun customLongPressTimeout(): Long
|
||||
|
||||
fun themeId(): Long
|
||||
|
@ -40,6 +43,11 @@ interface IPreferencesRepository {
|
|||
fun setShowSupport(show: Boolean)
|
||||
fun showSupport(): Boolean
|
||||
|
||||
fun getTips(): Int
|
||||
fun setTips(tips: Int)
|
||||
fun getExtraTips(): Int
|
||||
fun setExtraTips(tips: Int)
|
||||
|
||||
fun useFlagAssistant(): Boolean
|
||||
fun useHapticFeedback(): Boolean
|
||||
fun areaSizeMultiplier(): Int
|
||||
|
|
|
@ -77,6 +77,14 @@ class PreferencesRepository(
|
|||
preferencesManager.putBoolean(PREFERENCE_FIRST_USE, false)
|
||||
}
|
||||
|
||||
override fun isTutorialCompleted(): Boolean {
|
||||
return preferencesManager.getBoolean(PREFERENCE_TUTORIAL_COMPLETED, false)
|
||||
}
|
||||
|
||||
override fun completeTutorial() {
|
||||
preferencesManager.putBoolean(PREFERENCE_TUTORIAL_COMPLETED, true)
|
||||
}
|
||||
|
||||
override fun customLongPressTimeout(): Long =
|
||||
preferencesManager.getInt(PREFERENCE_LONG_PRESS_TIMEOUT, ViewConfiguration.getLongPressTimeout()).toLong()
|
||||
|
||||
|
@ -155,6 +163,10 @@ class PreferencesRepository(
|
|||
if (!preferencesManager.contains(PREFERENCE_LONG_PRESS_TIMEOUT)) {
|
||||
preferencesManager.putInt(PREFERENCE_LONG_PRESS_TIMEOUT, defaultLongPressTimeout)
|
||||
}
|
||||
|
||||
if (preferencesManager.contains(PREFERENCE_FIRST_USE)) {
|
||||
preferencesManager.putBoolean(PREFERENCE_TUTORIAL_COMPLETED, true)
|
||||
}
|
||||
}
|
||||
|
||||
override fun setPremiumFeatures(status: Boolean) {
|
||||
|
@ -174,6 +186,22 @@ class PreferencesRepository(
|
|||
return preferencesManager.getBoolean(PREFERENCE_SHOW_SUPPORT, true)
|
||||
}
|
||||
|
||||
override fun getTips(): Int {
|
||||
return preferencesManager.getInt(PREFERENCE_TIPS, 5)
|
||||
}
|
||||
|
||||
override fun setTips(tips: Int) {
|
||||
preferencesManager.putInt(PREFERENCE_TIPS, tips)
|
||||
}
|
||||
|
||||
override fun getExtraTips(): Int {
|
||||
return preferencesManager.getInt(PREFERENCE_EXTRA_TIPS, 0)
|
||||
}
|
||||
|
||||
override fun setExtraTips(tips: Int) {
|
||||
preferencesManager.putInt(PREFERENCE_EXTRA_TIPS, tips)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
private const val PREFERENCE_VIBRATION = "preference_vibration"
|
||||
private const val PREFERENCE_ASSISTANT = "preference_assistant"
|
||||
|
@ -192,9 +220,12 @@ class PreferencesRepository(
|
|||
private const val PREFERENCE_PROGRESSIVE_VALUE = "preference_progressive_value"
|
||||
private const val PREFERENCE_LONG_PRESS_TIMEOUT = "preference_long_press_timeout"
|
||||
private const val PREFERENCE_FIRST_USE = "preference_first_use"
|
||||
private const val PREFERENCE_TUTORIAL_COMPLETED = "preference_tutorial_completed"
|
||||
private const val PREFERENCE_USE_COUNT = "preference_use_count"
|
||||
private const val PREFERENCE_REQUEST_RATING = "preference_request_rating"
|
||||
private const val PREFERENCE_PREMIUM_FEATURES = "preference_premium_features"
|
||||
private const val PREFERENCE_SHOW_SUPPORT = "preference_show_support"
|
||||
private const val PREFERENCE_TIPS = "preference_current_tips"
|
||||
private const val PREFERENCE_EXTRA_TIPS = "preference_extra_tips"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,4 +10,5 @@ data class Assets(
|
|||
@DrawableRes val mine: Int,
|
||||
@DrawableRes val mineExploded: Int,
|
||||
@DrawableRes val mineLow: Int,
|
||||
@DrawableRes val revealed: Int,
|
||||
)
|
||||
|
|
|
@ -58,7 +58,8 @@ class ThemeRepository(
|
|||
toolbarMine = R.drawable.mine,
|
||||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_exploded_red,
|
||||
mineLow = R.drawable.mine_low
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed
|
||||
)
|
||||
|
||||
private fun fromDefaultPalette(context: Context) =
|
||||
|
|
|
@ -36,6 +36,7 @@ object Themes {
|
|||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_exploded_red,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_white,
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -69,6 +70,7 @@ object Themes {
|
|||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_exploded_white,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_white,
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -102,6 +104,7 @@ object Themes {
|
|||
mine = R.drawable.mine_low,
|
||||
mineExploded = R.drawable.mine_low,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_white,
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -139,6 +142,7 @@ object Themes {
|
|||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_exploded_white,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_white,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -171,6 +175,7 @@ object Themes {
|
|||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_exploded_red,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_white,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -203,6 +208,7 @@ object Themes {
|
|||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_exploded_red,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_white,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -235,6 +241,7 @@ object Themes {
|
|||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_exploded_red,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_white,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -267,6 +274,7 @@ object Themes {
|
|||
mine = R.drawable.mine_white,
|
||||
mineExploded = R.drawable.mine_white,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_black,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -299,6 +307,7 @@ object Themes {
|
|||
mine = R.drawable.mine_pink,
|
||||
mineExploded = R.drawable.mine_pink_exploded,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_white,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -331,6 +340,7 @@ object Themes {
|
|||
mine = R.drawable.mine_pink,
|
||||
mineExploded = R.drawable.mine_pink_exploded,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_white,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -362,7 +372,8 @@ object Themes {
|
|||
toolbarMine = R.drawable.mine_low,
|
||||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_pink_exploded,
|
||||
mineLow = R.drawable.mine_low
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_white,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -394,7 +405,8 @@ object Themes {
|
|||
toolbarMine = R.drawable.mine_low,
|
||||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_pink_exploded,
|
||||
mineLow = R.drawable.mine_low
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_white,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -427,6 +439,7 @@ object Themes {
|
|||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_pink_exploded,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_white,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -458,7 +471,8 @@ object Themes {
|
|||
toolbarMine = R.drawable.mine_low,
|
||||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_pink_exploded,
|
||||
mineLow = R.drawable.mine_low
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_white,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -491,6 +505,7 @@ object Themes {
|
|||
mine = R.drawable.mine_white,
|
||||
mineExploded = R.drawable.mine_white,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_black,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -522,7 +537,8 @@ object Themes {
|
|||
toolbarMine = R.drawable.mine_low,
|
||||
mine = R.drawable.mine_white,
|
||||
mineExploded = R.drawable.mine_white,
|
||||
mineLow = R.drawable.mine_low
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_black,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -555,6 +571,7 @@ object Themes {
|
|||
mine = R.drawable.mine_white,
|
||||
mineExploded = R.drawable.mine_white,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_black,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -587,6 +604,7 @@ object Themes {
|
|||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_exploded_red,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_black,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -619,6 +637,7 @@ object Themes {
|
|||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_exploded_red,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_black,
|
||||
)
|
||||
),
|
||||
AppTheme(
|
||||
|
@ -645,12 +664,13 @@ object Themes {
|
|||
),
|
||||
assets = Assets(
|
||||
wrongFlag = R.drawable.red_flag,
|
||||
flag = R.drawable.flag,
|
||||
flag = R.drawable.flag_black,
|
||||
questionMark = R.drawable.question,
|
||||
toolbarMine = R.drawable.mine,
|
||||
mine = R.drawable.mine,
|
||||
mineExploded = R.drawable.mine_exploded_red,
|
||||
mineLow = R.drawable.mine_low,
|
||||
revealed = R.drawable.mine_revealed_black,
|
||||
)
|
||||
)
|
||||
)
|
||||
|
|
9
common/src/main/res/drawable-night/mine_revealed.xml
Executable file
9
common/src/main/res/drawable-night/mine_revealed.xml
Executable file
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="512"
|
||||
android:viewportHeight="512">
|
||||
<path
|
||||
android:fillColor="#33000000"
|
||||
android:pathData="M331.722,124.091l-33.743,-67.204l-83.901,0l-33.84,65.28l-80.22,0l-37.443,65.714l37.443,67.649l-37.443,66.12l37.42,67.746l80.243,0l39.239,65.717l75.084,0l37.161,-66.643l79.759,-0.019l37.942,-66.801l-40.501,-65.64l40.501,-68.129l-38.02,-63.79z" />
|
||||
</vector>
|
9
common/src/main/res/drawable/mine_revealed.xml
Executable file
9
common/src/main/res/drawable/mine_revealed.xml
Executable file
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="512"
|
||||
android:viewportHeight="512">
|
||||
<path
|
||||
android:fillColor="#33ffffff"
|
||||
android:pathData="M331.722,124.091l-33.743,-67.204l-83.901,0l-33.84,65.28l-80.22,0l-37.443,65.714l37.443,67.649l-37.443,66.12l37.42,67.746l80.243,0l39.239,65.717l75.084,0l37.161,-66.643l79.759,-0.019l37.942,-66.801l-40.501,-65.64l40.501,-68.129l-38.02,-63.79z" />
|
||||
</vector>
|
9
common/src/main/res/drawable/mine_revealed_black.xml
Executable file
9
common/src/main/res/drawable/mine_revealed_black.xml
Executable file
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="512"
|
||||
android:viewportHeight="512">
|
||||
<path
|
||||
android:fillColor="#33000000"
|
||||
android:pathData="M331.722,124.091l-33.743,-67.204l-83.901,0l-33.84,65.28l-80.22,0l-37.443,65.714l37.443,67.649l-37.443,66.12l37.42,67.746l80.243,0l39.239,65.717l75.084,0l37.161,-66.643l79.759,-0.019l37.942,-66.801l-40.501,-65.64l40.501,-68.129l-38.02,-63.79z" />
|
||||
</vector>
|
9
common/src/main/res/drawable/mine_revealed_white.xml
Executable file
9
common/src/main/res/drawable/mine_revealed_white.xml
Executable file
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="512"
|
||||
android:viewportHeight="512">
|
||||
<path
|
||||
android:fillColor="#33ffffff"
|
||||
android:pathData="M331.722,124.091l-33.743,-67.204l-83.901,0l-33.84,65.28l-80.22,0l-37.443,65.714l37.443,67.649l-37.443,66.12l37.42,67.746l80.243,0l39.239,65.717l75.084,0l37.161,-66.643l79.759,-0.019l37.942,-66.801l-40.501,-65.64l40.501,-68.129l-38.02,-63.79z" />
|
||||
</vector>
|
|
@ -13,7 +13,6 @@
|
|||
android:fadeScrollbars="true"
|
||||
android:overScrollMode="never"
|
||||
android:padding="78dp"
|
||||
android:scrollbars="none"
|
||||
android:alpha="0" />
|
||||
android:scrollbars="none" />
|
||||
|
||||
</FrameLayout>
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
android:fadeScrollbars="true"
|
||||
android:importantForAccessibility="no"
|
||||
android:overScrollMode="never"
|
||||
android:scrollbars="none"
|
||||
android:alpha="0" />
|
||||
android:scrollbars="none" />
|
||||
|
||||
</FrameLayout>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="af">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">Verwyder versteekte myne van \'n mynveld.</string>
|
||||
<string name="tutorial">Handleiding</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Speletjies</string>
|
||||
<string name="previous_games">Vorige Speletjies</string>
|
||||
<string name="minefield">Moeilikheidsgraad</string>
|
||||
|
@ -21,20 +34,20 @@
|
|||
<string name="height">Hoogte</string>
|
||||
<string name="mines">Myne</string>
|
||||
<string name="retry_sure">Wil u \'n nuwe spel begin met hierdie kaart?</string>
|
||||
<string name="show_licenses">Show Licenses</string>
|
||||
<string name="show_licenses">Wys lisensies</string>
|
||||
<string name="new_game_request">Wil u \'n nuwe spel begin met hierdie kaart?</string>
|
||||
<string name="mines_remaining">%d myne</string>
|
||||
<string name="game_time">Game Time</string>
|
||||
<string name="game_time">Speeltyd</string>
|
||||
<string name="mine">Myne</string>
|
||||
<string name="settings_general">Algemeen</string>
|
||||
<string name="settings_gameplay">Gameplay</string>
|
||||
<string name="settings_gameplay">Spel</string>
|
||||
<string name="settings_accessibility">Toeganklikheid</string>
|
||||
<string name="size">Grootte</string>
|
||||
<string name="system">Stelsel</string>
|
||||
<string name="rating">Terugvoer</string>
|
||||
<string name="support_title">Ondersteun ons!</string>
|
||||
<string name="support_description">With your help, we\'ll be able to implement new features and keep our project active.</string>
|
||||
<string name="support_action">To support</string>
|
||||
<string name="support_description">Met u hulp kan ons nuwe funksies implementeer en ons projek aktief hou.</string>
|
||||
<string name="support_action">Ondersteuning</string>
|
||||
<string name="rating_message">If you like this game, please give us a feedback. It will help us a lot.</string>
|
||||
<string name="used_software_text">This game uses the following third parties software:</string>
|
||||
<string name="translators_text">This game was translated by the following people:</string>
|
||||
|
@ -43,11 +56,11 @@
|
|||
<string name="victories">Oorwinnings</string>
|
||||
<string name="you_lost">Jy het verloor!</string>
|
||||
<string name="defeats">Nederlae</string>
|
||||
<string name="game_over_desc_1">Good luck on your next game.</string>
|
||||
<string name="game_over_desc_4">You finished the minefield in %1$d seconds.</string>
|
||||
<string name="fail_to_share">Failed to share</string>
|
||||
<string name="game_over_desc_1">Sterkte met u volgende wedstryd.</string>
|
||||
<string name="game_over_desc_4">U het die wedstryd binne %1$d sekondes voltooi.</string>
|
||||
<string name="fail_to_share">Kon nie deel nie</string>
|
||||
<string name="version_s">Weergawe %1$s</string>
|
||||
<string name="sound_effects">Sound Effects</string>
|
||||
<string name="sound_effects">Byklanke</string>
|
||||
<string name="are_you_sure">Is jy seker?</string>
|
||||
<string name="enable_automatic_flags">Aktiveer outomatiese plasing van vlaggies</string>
|
||||
<string name="open_areas">Open Areas</string>
|
||||
|
@ -55,16 +68,19 @@
|
|||
<string name="average_time">Average Time</string>
|
||||
<string name="performance">Werkverrigting</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="use_question_mark">Use Question Mark</string>
|
||||
<string name="use_question_mark">Gebruik die vraagteken</string>
|
||||
<string name="control">Kontrole</string>
|
||||
<string name="arrow">➞</string>
|
||||
<string name="single_click">Single Click</string>
|
||||
<string name="double_click">Double Click</string>
|
||||
<string name="single_click">Enkele tik</string>
|
||||
<string name="double_click">Dubbeltik</string>
|
||||
<string name="long_press">Lang-druk</string>
|
||||
<string name="open_tile">Maak oop</string>
|
||||
<string name="flag_tile">Merk</string>
|
||||
<string name="retry">Weer probeer</string>
|
||||
<string name="empty">Leeg</string>
|
||||
<string name="cant_do_it_now">Onmoontlik om dit nou te doen</string>
|
||||
<string name="you_have_received">U het ontvang: +%1$d</string>
|
||||
<string name="help_win_a_game">Vir meer hulp, moet u \'n wedstryd wen.</string>
|
||||
<string name="unknown_error">Onbekende fout.</string>
|
||||
<string name="leaderboards">Leierbord</string>
|
||||
<string name="cancel">Kanselleer</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Ja</string>
|
||||
<string name="unlock">Ontsluit</string>
|
||||
<string name="achievements">Prestasies</string>
|
||||
<string name="rating_button_no">Nee</string>
|
||||
<string name="no">Nee</string>
|
||||
<string name="general">Algemeen</string>
|
||||
<string name="source_code">Bron Kode</string>
|
||||
<string name="translation">Vertalings</string>
|
||||
|
@ -91,7 +107,7 @@
|
|||
<string name="delete_all">Verwyder alles</string>
|
||||
<string name="themes">Temas</string>
|
||||
<string name="try_it">Încearcă</string>
|
||||
<string name="delete_all_message">Delete all events permanently.</string>
|
||||
<string name="delete_all_message">Vee alle gebeure permanent uit.</string>
|
||||
<string name="all_mines_disabled">All mines were disabled.</string>
|
||||
<string name="desc_convered_area">Covered area</string>
|
||||
<string name="desc_marked_area">Marked area</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Flag placed!</string>
|
||||
<string name="flag_removed">Flag removed!</string>
|
||||
<string name="remove_ad">Verwyder Advertensies</string>
|
||||
<string name="help">Help</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="ar">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">يجب عليك مسح لوحة مستطيلة تحتوي على ألغام مخفية دون تفجير أي منها.</string>
|
||||
<string name="tutorial">الدورة التعليمية</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">ألعاب</string>
|
||||
<string name="previous_games">الألعاب السابقة</string>
|
||||
<string name="minefield">الصعوبة</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">علم</string>
|
||||
<string name="retry">إعادة المحاولة</string>
|
||||
<string name="empty">فارغ</string>
|
||||
<string name="cant_do_it_now">من المستحيل القيام بذلك الآن</string>
|
||||
<string name="you_have_received">لقد استملت مبلغ: +%1$d</string>
|
||||
<string name="help_win_a_game">للمزيد من المساعدة، يجب أن تفوز بلعبة.</string>
|
||||
<string name="unknown_error">خطأ غير معروف.</string>
|
||||
<string name="leaderboards">المتصدرين</string>
|
||||
<string name="cancel">الغاء</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">نعم</string>
|
||||
<string name="unlock">فتح القفل</string>
|
||||
<string name="achievements">الإنجازات</string>
|
||||
<string name="rating_button_no">لا</string>
|
||||
<string name="no">لا</string>
|
||||
<string name="general">عام</string>
|
||||
<string name="source_code">رمز المصدر</string>
|
||||
<string name="translation">الترجمة</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">وضع العلم!</string>
|
||||
<string name="flag_removed">إزالة العلم!</string>
|
||||
<string name="remove_ad">إزالة الإعلانات</string>
|
||||
<string name="help">مساعدة</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="bg">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">Вие трябва да изчистите квадратна дъска която има скрити мини без да взривите нито една от тях.</string>
|
||||
<string name="tutorial">Туториал</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Игри</string>
|
||||
<string name="previous_games">Предишни Игри</string>
|
||||
<string name="minefield">Трудност</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Флаг</string>
|
||||
<string name="retry">Опитайте отново</string>
|
||||
<string name="empty">Празно</string>
|
||||
<string name="cant_do_it_now">Невъзможно е да се направи това сега</string>
|
||||
<string name="you_have_received">Получихте: +%1$d</string>
|
||||
<string name="help_win_a_game">За повече помощ трябва да спечелите игра.</string>
|
||||
<string name="unknown_error">Неизвестна грешка.</string>
|
||||
<string name="leaderboards">Класиране</string>
|
||||
<string name="cancel">Отказ</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Да</string>
|
||||
<string name="unlock">Отключи</string>
|
||||
<string name="achievements">Постижения</string>
|
||||
<string name="rating_button_no">Не</string>
|
||||
<string name="no">Не</string>
|
||||
<string name="general">Основни</string>
|
||||
<string name="source_code">Програмен Код</string>
|
||||
<string name="translation">Превод</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Флагът е сложен!</string>
|
||||
<string name="flag_removed">Глагът е премахнат!</string>
|
||||
<string name="remove_ad">Премахване на реклами</string>
|
||||
<string name="help">Помощ</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="ca">
|
||||
<string name="app_name">Antimines</string>
|
||||
<string name="app_description">Has de netejar un tauler rectangular amb mines amagades sense detonar-ne cap.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Jocs</string>
|
||||
<string name="previous_games">Partides prèvies</string>
|
||||
<string name="minefield">Camp de mines</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Bandera</string>
|
||||
<string name="retry">Reintenta</string>
|
||||
<string name="empty">Buida</string>
|
||||
<string name="cant_do_it_now">És impossible fer-ho ara</string>
|
||||
<string name="you_have_received">Heu rebut: +%1$d</string>
|
||||
<string name="help_win_a_game">Per obtenir més ajuda, heu de guanyar una partida.</string>
|
||||
<string name="unknown_error">Error desconegut.</string>
|
||||
<string name="leaderboards">Llista de líders</string>
|
||||
<string name="cancel">Cancel•lar</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Sí</string>
|
||||
<string name="unlock">Desbloqueja</string>
|
||||
<string name="achievements">Assoliments</string>
|
||||
<string name="rating_button_no">No</string>
|
||||
<string name="no">No</string>
|
||||
<string name="general">General</string>
|
||||
<string name="source_code">Codi font</string>
|
||||
<string name="translation">Traduccions</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Bandera col·locada!</string>
|
||||
<string name="flag_removed">Has tret la bandera!</string>
|
||||
<string name="remove_ad">Elimina els anuncis</string>
|
||||
<string name="help">Ajuda</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="cs">
|
||||
<string name="app_name">Anti-Mine</string>
|
||||
<string name="app_description">Musíte vyčistit obdélníkovou desku obsahující skryté miny, aniž by kterákoliv z nich vybuchla.</string>
|
||||
<string name="tutorial">Tutoriál</string>
|
||||
<string name="tutorial_completed">Tutoriál dokončen</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Hry</string>
|
||||
<string name="previous_games">Předchozí hry</string>
|
||||
<string name="minefield">Obtížnost</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Vlajka</string>
|
||||
<string name="retry">Opakovat</string>
|
||||
<string name="empty">Prázdné</string>
|
||||
<string name="cant_do_it_now">Není možné to nyní udělat</string>
|
||||
<string name="you_have_received">Obdrželi jste: +%1$d</string>
|
||||
<string name="help_win_a_game">Pro další pomoc musíte vyhrát hru.</string>
|
||||
<string name="unknown_error">Neznámá chyba.</string>
|
||||
<string name="leaderboards">Žebříčky</string>
|
||||
<string name="cancel">Zrušit</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Ano</string>
|
||||
<string name="unlock">Odemknout</string>
|
||||
<string name="achievements">Úspěchy</string>
|
||||
<string name="rating_button_no">Ne</string>
|
||||
<string name="no">Ne</string>
|
||||
<string name="general">Obecné</string>
|
||||
<string name="source_code">Zdrojový kód</string>
|
||||
<string name="translation">Překlad</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Vlajka umístěna!</string>
|
||||
<string name="flag_removed">Vlajka odstraněna!</string>
|
||||
<string name="remove_ad">Odstranit reklamy</string>
|
||||
<string name="help">Nápověda</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,97 +2,113 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="da">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">You have to clear a rectangular board containing hidden mines without detonating any of them.</string>
|
||||
<string name="games">Games</string>
|
||||
<string name="previous_games">Previous Games</string>
|
||||
<string name="minefield">Difficulty</string>
|
||||
<string name="tutorial">Vejledning</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Spil</string>
|
||||
<string name="previous_games">Forrige Spil</string>
|
||||
<string name="minefield">Sværhedsgrad</string>
|
||||
<string name="standard">Standard</string>
|
||||
<string name="beginner">Beginner</string>
|
||||
<string name="intermediate">Intermediate</string>
|
||||
<string name="expert">Expert</string>
|
||||
<string name="open">Open</string>
|
||||
<string name="beginner">Begynder</string>
|
||||
<string name="intermediate">Mellemliggende</string>
|
||||
<string name="expert">Ekspert</string>
|
||||
<string name="open">Åbn</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="animations">Animations</string>
|
||||
<string name="vibration">Haptic Feedback</string>
|
||||
<string name="about">About</string>
|
||||
<string name="events">Statistics</string>
|
||||
<string name="custom">Custom</string>
|
||||
<string name="animations">Animationer</string>
|
||||
<string name="vibration">Haptisk Feedback</string>
|
||||
<string name="about">Om</string>
|
||||
<string name="events">Statistik</string>
|
||||
<string name="custom">Tilpasset</string>
|
||||
<string name="start">Start</string>
|
||||
<string name="width">Width</string>
|
||||
<string name="height">Height</string>
|
||||
<string name="width">Bredde</string>
|
||||
<string name="height">Højde</string>
|
||||
<string name="mines">Mines</string>
|
||||
<string name="retry_sure">If you start a new game, your current progress will be lost.</string>
|
||||
<string name="show_licenses">Show Licenses</string>
|
||||
<string name="new_game_request">Do you want to start a new game?</string>
|
||||
<string name="mines_remaining">%d mines</string>
|
||||
<string name="game_time">Game Time</string>
|
||||
<string name="retry_sure">Hvis du starter et nyt spil, vil dit nuværende fremskridt gå tabt.</string>
|
||||
<string name="show_licenses">Vis Licenser</string>
|
||||
<string name="new_game_request">Vil du starte et nyt spil?</string>
|
||||
<string name="mines_remaining">%d miner</string>
|
||||
<string name="game_time">Spil Tid</string>
|
||||
<string name="mine">Mine</string>
|
||||
<string name="settings_general">General</string>
|
||||
<string name="settings_general">Generelt</string>
|
||||
<string name="settings_gameplay">Gameplay</string>
|
||||
<string name="settings_accessibility">Accessibility</string>
|
||||
<string name="size">Size</string>
|
||||
<string name="settings_accessibility">Tilgængelighed</string>
|
||||
<string name="size">Størrelse</string>
|
||||
<string name="system">System</string>
|
||||
<string name="rating">Feedback</string>
|
||||
<string name="support_title">Support us!</string>
|
||||
<string name="support_description">With your help, we\'ll be able to implement new features and keep our project active.</string>
|
||||
<string name="support_action">To support</string>
|
||||
<string name="rating_message">If you like this game, please give us a feedback. It will help us a lot.</string>
|
||||
<string name="used_software_text">This game uses the following third parties software:</string>
|
||||
<string name="translators_text">This game was translated by the following people:</string>
|
||||
<string name="sign_in_failed">Failed to sign in. Please check your network connection and try again.</string>
|
||||
<string name="you_won">You won!</string>
|
||||
<string name="victories">Victories</string>
|
||||
<string name="you_lost">You lost!</string>
|
||||
<string name="defeats">Defeats</string>
|
||||
<string name="game_over_desc_1">Good luck on your next game.</string>
|
||||
<string name="game_over_desc_4">You finished the minefield in %1$d seconds.</string>
|
||||
<string name="fail_to_share">Failed to share</string>
|
||||
<string name="rating">Tilbagemelding</string>
|
||||
<string name="support_title">Støt os!</string>
|
||||
<string name="support_description">Med din hjælp vil vi være i stand til at implementere nye funktioner og holde vores projekt aktivt.</string>
|
||||
<string name="support_action">Støtte</string>
|
||||
<string name="rating_message">Hvis du kan lide dette spil, bedes du give os en feedback. Det vil hjælpe os meget.</string>
|
||||
<string name="used_software_text">Dette spil bruger følgende tredjepartssoftware:</string>
|
||||
<string name="translators_text">Dette spil blev oversat af følgende personer:</string>
|
||||
<string name="sign_in_failed">Kan ikke forbinde. Tjek venligst din netværksforbindelse, og prøv igen.</string>
|
||||
<string name="you_won">Du vandt!</string>
|
||||
<string name="victories">Sejre</string>
|
||||
<string name="you_lost">Du tabte!</string>
|
||||
<string name="defeats">Nederlag</string>
|
||||
<string name="game_over_desc_1">Held og lykke med dit næste spil.</string>
|
||||
<string name="game_over_desc_4">Du færdiggjorde minefeltet om %1$d sekunder.</string>
|
||||
<string name="fail_to_share">Mislykkedes at dele</string>
|
||||
<string name="version_s">Version %1$s</string>
|
||||
<string name="sound_effects">Sound Effects</string>
|
||||
<string name="are_you_sure">Are you sure?</string>
|
||||
<string name="enable_automatic_flags">Enable automatic placing of flags</string>
|
||||
<string name="open_areas">Open Areas</string>
|
||||
<string name="total_time">Total Time</string>
|
||||
<string name="average_time">Average Time</string>
|
||||
<string name="performance">Performance</string>
|
||||
<string name="sound_effects">Lyd effekter</string>
|
||||
<string name="are_you_sure">Er du sikker?</string>
|
||||
<string name="enable_automatic_flags">Aktivér automatisk placering af flag</string>
|
||||
<string name="open_areas">Åbne Områder</string>
|
||||
<string name="total_time">Total Tid</string>
|
||||
<string name="average_time">Gennemsnitlig Tid</string>
|
||||
<string name="performance">Ydeevne</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="use_question_mark">Use Question Mark</string>
|
||||
<string name="use_question_mark">Brug flag med spørgsmålstegn</string>
|
||||
<string name="control">Controls</string>
|
||||
<string name="arrow">➞</string>
|
||||
<string name="single_click">Single Click</string>
|
||||
<string name="double_click">Double Click</string>
|
||||
<string name="long_press">Long Press</string>
|
||||
<string name="open_tile">Open</string>
|
||||
<string name="single_click">Enkelt tryk</string>
|
||||
<string name="double_click">Dobbeltklik</string>
|
||||
<string name="long_press">Langt tryk</string>
|
||||
<string name="open_tile">Åbn</string>
|
||||
<string name="flag_tile">Flag</string>
|
||||
<string name="retry">Retry</string>
|
||||
<string name="empty">Empty</string>
|
||||
<string name="unknown_error">Unknown error.</string>
|
||||
<string name="leaderboards">Leaderboards</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="resume">Resume</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="unlock">Unlock</string>
|
||||
<string name="retry">Forsøg igen</string>
|
||||
<string name="empty">Tomt</string>
|
||||
<string name="cant_do_it_now">Umuligt at gøre det nu</string>
|
||||
<string name="you_have_received">Du har modtaget: +%1$d</string>
|
||||
<string name="help_win_a_game">For mere hjælp, skal du vinde et spil.</string>
|
||||
<string name="unknown_error">Ukendt fejl.</string>
|
||||
<string name="leaderboards">Turneringsskema</string>
|
||||
<string name="cancel">Annuller</string>
|
||||
<string name="resume">Fortsæt</string>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="unlock">Lås op</string>
|
||||
<string name="achievements">Achievements</string>
|
||||
<string name="rating_button_no">No</string>
|
||||
<string name="general">General</string>
|
||||
<string name="source_code">Source Code</string>
|
||||
<string name="translation">Translation</string>
|
||||
<string name="licenses">Licenses</string>
|
||||
<string name="google_play_games">Google Play Games</string>
|
||||
<string name="connect">Connect</string>
|
||||
<string name="connecting">Connecting…</string>
|
||||
<string name="disconnect">Disconnect</string>
|
||||
<string name="disconnected">Disconnected</string>
|
||||
<string name="new_game">New Game</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="share_menu">Share…</string>
|
||||
<string name="no_network">No internet connection.</string>
|
||||
<string name="open_menu">Open Menu</string>
|
||||
<string name="close_menu">Close Menu</string>
|
||||
<string name="delete_all">Delete all</string>
|
||||
<string name="themes">Themes</string>
|
||||
<string name="try_it">Try It</string>
|
||||
<string name="delete_all_message">Delete all events permanently.</string>
|
||||
<string name="all_mines_disabled">All mines were disabled.</string>
|
||||
<string name="no">Nej</string>
|
||||
<string name="general">Generelt</string>
|
||||
<string name="source_code">Kildekode</string>
|
||||
<string name="translation">Oversættelser</string>
|
||||
<string name="licenses">Licenser</string>
|
||||
<string name="google_play_games">Google Play Spil</string>
|
||||
<string name="connect">Tilslut</string>
|
||||
<string name="connecting">Tilslutter…</string>
|
||||
<string name="disconnect">Afbryd</string>
|
||||
<string name="disconnected">Afbrudt</string>
|
||||
<string name="new_game">Nyt Spil</string>
|
||||
<string name="share">Del</string>
|
||||
<string name="share_menu">Del…</string>
|
||||
<string name="no_network">Ingen internetforbindelse.</string>
|
||||
<string name="open_menu">Åbn Menu</string>
|
||||
<string name="close_menu">Luk Menu</string>
|
||||
<string name="delete_all">Slet alle</string>
|
||||
<string name="themes">Temaer</string>
|
||||
<string name="try_it">Prøv det</string>
|
||||
<string name="delete_all_message">Slet alle begivenheder permanent.</string>
|
||||
<string name="all_mines_disabled">Alle miner blev deaktiveret.</string>
|
||||
<string name="desc_convered_area">Covered area</string>
|
||||
<string name="desc_marked_area">Marked area</string>
|
||||
<string name="desc_question_area">Doubtful area</string>
|
||||
|
@ -102,5 +118,6 @@
|
|||
<string name="you_exploded_a_mine">You exploded a mine!</string>
|
||||
<string name="flag_placed">Flag placed!</string>
|
||||
<string name="flag_removed">Flag removed!</string>
|
||||
<string name="remove_ad">Remove Ads</string>
|
||||
<string name="remove_ad">Fjern annoncer</string>
|
||||
<string name="help">Hjælp</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="de">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">Du musst ein rechteckiges Spielfeld, das versteckte Minen enthält, räumen, ohne irgendeine davon zur Explosion zu bringen.</string>
|
||||
<string name="tutorial">Anleitung</string>
|
||||
<string name="tutorial_completed">Anleitung Abgeschlossen</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Spiele</string>
|
||||
<string name="previous_games">Vorherige Spiele</string>
|
||||
<string name="minefield">Schwierigkeitsgrad</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Flagge</string>
|
||||
<string name="retry">Erneut versuchen</string>
|
||||
<string name="empty">Leer</string>
|
||||
<string name="cant_do_it_now">Das kann jetzt nicht gemacht werden</string>
|
||||
<string name="you_have_received">Du hast erhalten: +%1$d</string>
|
||||
<string name="help_win_a_game">Für mehr Hilfe musst du ein Spiel gewinnen.</string>
|
||||
<string name="unknown_error">Unbekannter Fehler.</string>
|
||||
<string name="leaderboards">Ranglisten</string>
|
||||
<string name="cancel">Abbrechen</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Ja</string>
|
||||
<string name="unlock">Entsperren</string>
|
||||
<string name="achievements">Erfolge</string>
|
||||
<string name="rating_button_no">Nein</string>
|
||||
<string name="no">Nein</string>
|
||||
<string name="general">Allgemein</string>
|
||||
<string name="source_code">Quellcode</string>
|
||||
<string name="translation">Übersetzung</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Markierung platziert!</string>
|
||||
<string name="flag_removed">Markierung entfernt!</string>
|
||||
<string name="remove_ad">Werbung entfernen</string>
|
||||
<string name="help">Hilfe</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="el">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">Πρέπει να καθαρίσετε μια ορθογώνια πλακέτα που περιέχει κρυμμένες \"νάρκες\" χωρίς να πυροδοτήσετε καμία από αυτές.</string>
|
||||
<string name="tutorial">Οδηγίες</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Παιχνίδια</string>
|
||||
<string name="previous_games">Προηγούμενα Παιχνίδια</string>
|
||||
<string name="minefield">Δυσκολία</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Σημαία</string>
|
||||
<string name="retry">Ξαναδοκιμάστε</string>
|
||||
<string name="empty">Κενό</string>
|
||||
<string name="cant_do_it_now">Αδύνατο να το κάνουμε τώρα</string>
|
||||
<string name="you_have_received">Εχεις λάβει: +%1$d</string>
|
||||
<string name="help_win_a_game">Για περισσότερη βοήθεια, πρέπει να κερδίσετε ένα παιχνίδι.</string>
|
||||
<string name="unknown_error">Άγνωστο σφάλμα.</string>
|
||||
<string name="leaderboards">Πίνακες κατάταξης</string>
|
||||
<string name="cancel">Ακύρωση</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Ναι</string>
|
||||
<string name="unlock">Ξεκλείδωμα</string>
|
||||
<string name="achievements">Επιτεύγματα</string>
|
||||
<string name="rating_button_no">Όχι</string>
|
||||
<string name="no">Όχι</string>
|
||||
<string name="general">Γενικά</string>
|
||||
<string name="source_code">Πηγαίος Κώδικας</string>
|
||||
<string name="translation">Μετάφραση</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Η Σημαία τοποθετήθηκε!</string>
|
||||
<string name="flag_removed">Η σημαία αφαιρέθηκε!</string>
|
||||
<string name="remove_ad">Κατάργηση διαφημίσεων</string>
|
||||
<string name="help">Βοήθεια</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="en">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">You have to clear a rectangular board containing hidden mines without detonating any of them.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Games</string>
|
||||
<string name="previous_games">Previous Games</string>
|
||||
<string name="minefield">Difficulty</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Flag</string>
|
||||
<string name="retry">Retry</string>
|
||||
<string name="empty">Empty</string>
|
||||
<string name="cant_do_it_now">Impossible to do that now</string>
|
||||
<string name="you_have_received">You have received: %1$d</string>
|
||||
<string name="help_win_a_game">For more Help, you must win a game.</string>
|
||||
<string name="unknown_error">Unknown error.</string>
|
||||
<string name="leaderboards">Leaderboards</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Yes</string>
|
||||
<string name="unlock">Unlock</string>
|
||||
<string name="achievements">Achievements</string>
|
||||
<string name="rating_button_no">No</string>
|
||||
<string name="no">No</string>
|
||||
<string name="general">General</string>
|
||||
<string name="source_code">Source Code</string>
|
||||
<string name="translation">Translation</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Flag placed!</string>
|
||||
<string name="flag_removed">Flag removed!</string>
|
||||
<string name="remove_ad">Remove Ads</string>
|
||||
<string name="help">Help</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="es-rES">
|
||||
<string name="app_name">Anti-Mina</string>
|
||||
<string name="app_description">Usted tiene que limpiar un tablero cuadrado que contiene minas escondidas sin detonarlas.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">¡Tutorial Completado!</string>
|
||||
<string name="tutorial_0_bottom">Puedes empezar por %1$s en cualquier cuadrado aleatorio.</string>
|
||||
<string name="tutorial_1_top">Los números indican cuántas minas están adyacentes al cuadrado destacado.</string>
|
||||
<string name="tutorial_1_bottom">Por lo tanto, si la esquina 1️⃣ tiene sólo un cuadrado adyacente, debe ser una mina. %1$s para marcarlo.</string>
|
||||
<string name="tutorial_2_top">El siguiente cuadrado sin abrir no tiene una mina porque el número es 1️⃣ , no 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">Puedes abrirlo com %1$s.</string>
|
||||
<string name="tutorial_3_top">Puedes abrir todos los demás lugares sin abrir adyacentes a 1️⃣ . Sabes dónde está la mina adyacente.</string>
|
||||
<string name="tutorial_3_bottom">Puede abrir todos los otros cuadrados cerrados y adyacentes a 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">Sabemos dónde está una de las minas, así que sólo hay una posibilidad para la otra.</string>
|
||||
<string name="tutorial_4_bottom">%1$s para marcar la mina adyacente a 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Verifique el número resaltado.</string>
|
||||
<string name="tutorial_5_bottom">%1$s para abrir o %2$s para marcar.</string>
|
||||
<string name="games">Juegos</string>
|
||||
<string name="previous_games">Juegos anteriores</string>
|
||||
<string name="minefield">Dificultad</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Bandera</string>
|
||||
<string name="retry">Reintentar</string>
|
||||
<string name="empty">Vacío</string>
|
||||
<string name="cant_do_it_now">Imposible hacer eso ahora</string>
|
||||
<string name="you_have_received">Has recibido: +%1$d</string>
|
||||
<string name="help_win_a_game">Para obtener más Ayuda, debes ganar una partida.</string>
|
||||
<string name="unknown_error">Error desconocido.</string>
|
||||
<string name="leaderboards">Ránking</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Sí</string>
|
||||
<string name="unlock">Desbloquear</string>
|
||||
<string name="achievements">Logros</string>
|
||||
<string name="rating_button_no">No</string>
|
||||
<string name="no">No</string>
|
||||
<string name="general">General</string>
|
||||
<string name="source_code">Código Fuente</string>
|
||||
<string name="translation">Traducción</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">¡Bandera colocada!</string>
|
||||
<string name="flag_removed">¡Bandera eliminada!</string>
|
||||
<string name="remove_ad">Eliminar anuncios</string>
|
||||
<string name="help">Ayuda</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="fi">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">Sinun täytyy tyhjentää piileskeleviä miinoja sisältävä suorakulmainen taulu räjäyttämättä miinoja kertaakaan.</string>
|
||||
<string name="tutorial">Opetusohjelma</string>
|
||||
<string name="tutorial_completed">Opetuspeli Suoritettu</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Pelit</string>
|
||||
<string name="previous_games">Edelliset pelit</string>
|
||||
<string name="minefield">Vaikeustaso</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Lippu</string>
|
||||
<string name="retry">Yritä uudelleen</string>
|
||||
<string name="empty">Tyhjä</string>
|
||||
<string name="cant_do_it_now">Ei mahdollista tehdä sitä nyt</string>
|
||||
<string name="you_have_received">Olet saanut: +%1$d</string>
|
||||
<string name="help_win_a_game">Saat enemmän apua, sinun täytyy voittaa pelin.</string>
|
||||
<string name="unknown_error">Tuntematon virhe.</string>
|
||||
<string name="leaderboards">Tulostaulukot</string>
|
||||
<string name="cancel">Peruuta</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Kyllä</string>
|
||||
<string name="unlock">Avaa</string>
|
||||
<string name="achievements">Saavutukset</string>
|
||||
<string name="rating_button_no">No</string>
|
||||
<string name="no">Ei</string>
|
||||
<string name="general">Yleiset</string>
|
||||
<string name="source_code">Lähdekoodi</string>
|
||||
<string name="translation">Käännökset</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Lippu asetettu!</string>
|
||||
<string name="flag_removed">Lippu poistettu!</string>
|
||||
<string name="remove_ad">Poista Mainokset</string>
|
||||
<string name="help">Apua</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="fr">
|
||||
<string name="app_name">Anti-Mine</string>
|
||||
<string name="app_description">Vous devez vider un tableau rectangulaire contenant des mines cachées sans en détonner.</string>
|
||||
<string name="tutorial">Tutoriel</string>
|
||||
<string name="tutorial_completed">Tutoriel Terminé</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Jeux</string>
|
||||
<string name="previous_games">Parties précédentes</string>
|
||||
<string name="minefield">Difficulté</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Drapeau</string>
|
||||
<string name="retry">Réessayer</string>
|
||||
<string name="empty">Vide</string>
|
||||
<string name="cant_do_it_now">Impossible de faire cela maintenant</string>
|
||||
<string name="you_have_received">Vous avez reçu : +%1$d</string>
|
||||
<string name="help_win_a_game">Pour plus d\'Aide, vous devez gagner une partie.</string>
|
||||
<string name="unknown_error">Erreur inconnue.</string>
|
||||
<string name="leaderboards">Classements</string>
|
||||
<string name="cancel">Annuler</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Oui</string>
|
||||
<string name="unlock">Déverrouiller</string>
|
||||
<string name="achievements">Succès</string>
|
||||
<string name="rating_button_no">Non</string>
|
||||
<string name="no">Non</string>
|
||||
<string name="general">Général</string>
|
||||
<string name="source_code">Code source</string>
|
||||
<string name="translation">Traduction</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Drapeau placé !</string>
|
||||
<string name="flag_removed">Drapeau retiré !</string>
|
||||
<string name="remove_ad">Supprimer les publicités</string>
|
||||
<string name="help">Aide</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="hi">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">लोकप्रिय लॉजिक पजल माइन्सवीपर. बोर्ड से माइंस साफ करता है वर्ग से संकेत को प्रयोग करते हुए जिसे आपने पहले से खोला है.</string>
|
||||
<string name="tutorial">ट्यूटोरियल</string>
|
||||
<string name="tutorial_completed">ट्यूटोरियल पूरा हुआ</string>
|
||||
<string name="tutorial_0_bottom">आप किसी भी यादृच्छिक क्षेत्र पर %1$s द्वारा शुरू कर सकते हैं।</string>
|
||||
<string name="tutorial_1_top">संख्या इंगित करती है कि कितने खदान हाइलाइट किए गए क्षेत्र से सटे हैं।</string>
|
||||
<string name="tutorial_1_bottom">इसलिए, यदि कोने 1, में केवल एक निकट क्षेत्र है, तो यह एक खदान होना चाहिए। इसे चिह्नित करने के लिए %1$s</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">गेम्स</string>
|
||||
<string name="previous_games">पिछला गेम्स</string>
|
||||
<string name="minefield">कठिनाई</string>
|
||||
|
@ -32,9 +45,9 @@
|
|||
<string name="size">आकार</string>
|
||||
<string name="system">प्रणाली</string>
|
||||
<string name="rating">फीडबैक</string>
|
||||
<string name="support_title">हमें सपॉर्ट कीजिये!</string>
|
||||
<string name="support_description">With your help, we\'ll be able to implement new features and keep our project active.</string>
|
||||
<string name="support_action">To support</string>
|
||||
<string name="support_title">हमें सहयोग दीजिये!</string>
|
||||
<string name="support_description">आपकी मदद से, हम नई सुविधाओं को लागू करने और अपनी परियोजना को सक्रिय रखने में सक्षम होंगे।</string>
|
||||
<string name="support_action">हमें सहयोग दीजिये</string>
|
||||
<string name="rating_message">If you like this game, please give us a feedback. It will help us a lot.</string>
|
||||
<string name="used_software_text">This game uses the following third parties software:</string>
|
||||
<string name="translators_text">This game was translated by the following people:</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">ध्वज</string>
|
||||
<string name="retry">फिर प्रयास करें</string>
|
||||
<string name="empty">खाली</string>
|
||||
<string name="cant_do_it_now">Impossible to do that now</string>
|
||||
<string name="you_have_received">You have received: +%1$d</string>
|
||||
<string name="help_win_a_game">For more Help, you must win a game.</string>
|
||||
<string name="unknown_error">अज्ञात त्रुटि।</string>
|
||||
<string name="leaderboards">लीडरबोर्ड</string>
|
||||
<string name="cancel">रद्द करें</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">हाँ</string>
|
||||
<string name="unlock">अनलॉक करें</string>
|
||||
<string name="achievements">उपलब्धियां</string>
|
||||
<string name="rating_button_no">नहीं</string>
|
||||
<string name="no">नहीं</string>
|
||||
<string name="general">सामान्य</string>
|
||||
<string name="source_code">सोर्स कोड</string>
|
||||
<string name="translation">अनुवाद</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Flag placed!</string>
|
||||
<string name="flag_removed">Flag removed!</string>
|
||||
<string name="remove_ad">विज्ञापन निकालें</string>
|
||||
<string name="help">मदद</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="hu">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">Meg kell tisztítanod egy rejtett aknákkal teli, négyszögletes pályát anélkül, hogy akár egyet is felrobbantanál.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Játékok</string>
|
||||
<string name="previous_games">Előző játékok</string>
|
||||
<string name="minefield">Nehézség</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Zászló</string>
|
||||
<string name="retry">Újra</string>
|
||||
<string name="empty">Üres</string>
|
||||
<string name="cant_do_it_now">Most lehetetlen ezt megtenni</string>
|
||||
<string name="you_have_received">Kapott összeg: +%1$d</string>
|
||||
<string name="help_win_a_game">További segítségért meg kell nyernie egy játékot.</string>
|
||||
<string name="unknown_error">Ismeretlen hiba.</string>
|
||||
<string name="leaderboards">Ranglista</string>
|
||||
<string name="cancel">Mégse</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Igen</string>
|
||||
<string name="unlock">Zárolás feloldása</string>
|
||||
<string name="achievements">Trófeák</string>
|
||||
<string name="rating_button_no">Nem</string>
|
||||
<string name="no">Nem</string>
|
||||
<string name="general">Általános</string>
|
||||
<string name="source_code">Forráskód</string>
|
||||
<string name="translation">Fordítás</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Zászló elhelyezve!</string>
|
||||
<string name="flag_removed">Zászló eltávolítva!</string>
|
||||
<string name="remove_ad">Reklámok eltávolítása</string>
|
||||
<string name="help">Segítség</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="id">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">Kosongkan ranjau tersembunyi dari medan ranjau</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">Tutorial selesai</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Permainan</string>
|
||||
<string name="previous_games">Tantangan Sebelumnya</string>
|
||||
<string name="minefield">Kesulitan</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Bendera</string>
|
||||
<string name="retry">Ulangi</string>
|
||||
<string name="empty">Kosong</string>
|
||||
<string name="cant_do_it_now">Tidak mungkin melakukan itu sekarang</string>
|
||||
<string name="you_have_received">Anda telah menerima: +%1$d</string>
|
||||
<string name="help_win_a_game">Untuk Bantuan lebih lanjut, Anda harus memenangkan permainan.</string>
|
||||
<string name="unknown_error">Galat tak diketahui.</string>
|
||||
<string name="leaderboards">Papan Peringkat</string>
|
||||
<string name="cancel">Batal</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Ya</string>
|
||||
<string name="unlock">Buka</string>
|
||||
<string name="achievements">Prestasi</string>
|
||||
<string name="rating_button_no">Tidak</string>
|
||||
<string name="no">Tidak</string>
|
||||
<string name="general">Umum</string>
|
||||
<string name="source_code">Kode sumber</string>
|
||||
<string name="translation">Alih Bahasa</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Bendera diletakkan!</string>
|
||||
<string name="flag_removed">Bendera dihapus!</string>
|
||||
<string name="remove_ad">Hapus Iklan</string>
|
||||
<string name="help">Bantuan</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="it">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">L\'obbiettivo del gioco è ripulire un campo rettangolare che contiene mine nascoste senza detonarne nessuna.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">Tutorial Completato</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Giochi</string>
|
||||
<string name="previous_games">Partite Precedenti</string>
|
||||
<string name="minefield">Difficoltà</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Bandiera</string>
|
||||
<string name="retry">Riprova</string>
|
||||
<string name="empty">Vuoto</string>
|
||||
<string name="cant_do_it_now">Impossibile farlo ora</string>
|
||||
<string name="you_have_received">Hai ricevuto: +%1$d</string>
|
||||
<string name="help_win_a_game">Per ulteriori aiuti, devi vincere una partita.</string>
|
||||
<string name="unknown_error">Errore sconosciuto.</string>
|
||||
<string name="leaderboards">Classifiche</string>
|
||||
<string name="cancel">Annulla</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Sì</string>
|
||||
<string name="unlock">Sblocca</string>
|
||||
<string name="achievements">Progressi</string>
|
||||
<string name="rating_button_no">No</string>
|
||||
<string name="no">No</string>
|
||||
<string name="general">Generale</string>
|
||||
<string name="source_code">Codice sorgente</string>
|
||||
<string name="translation">Traduzione</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Bandiera piazzata!</string>
|
||||
<string name="flag_removed">Bandiera rimossa!</string>
|
||||
<string name="remove_ad">Rimuovi gli Annunci</string>
|
||||
<string name="help">Help</string>
|
||||
</resources>
|
||||
|
|
|
@ -1,106 +1,123 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="he">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">You have to clear a rectangular board containing hidden mines without detonating any of them.</string>
|
||||
<string name="games">Games</string>
|
||||
<string name="previous_games">Previous Games</string>
|
||||
<string name="minefield">Difficulty</string>
|
||||
<string name="standard">Standard</string>
|
||||
<string name="beginner">Beginner</string>
|
||||
<string name="intermediate">Intermediate</string>
|
||||
<string name="expert">Expert</string>
|
||||
<string name="open">Open</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="animations">Animations</string>
|
||||
<string name="vibration">Haptic Feedback</string>
|
||||
<string name="about">About</string>
|
||||
<string name="events">Statistics</string>
|
||||
<string name="custom">Custom</string>
|
||||
<string name="start">Start</string>
|
||||
<string name="width">Width</string>
|
||||
<string name="height">Height</string>
|
||||
<string name="mines">Mines</string>
|
||||
<string name="retry_sure">If you start a new game, your current progress will be lost.</string>
|
||||
<string name="show_licenses">Show Licenses</string>
|
||||
<string name="new_game_request">Do you want to start a new game?</string>
|
||||
<string name="mines_remaining">%d mines</string>
|
||||
<string name="game_time">Game Time</string>
|
||||
<string name="mine">Mine</string>
|
||||
<string name="settings_general">General</string>
|
||||
<string name="settings_gameplay">Gameplay</string>
|
||||
<string name="settings_accessibility">Accessibility</string>
|
||||
<string name="size">Size</string>
|
||||
<string name="system">System</string>
|
||||
<string name="rating">Feedback</string>
|
||||
<string name="support_title">Support us!</string>
|
||||
<string name="support_description">With your help, we\'ll be able to implement new features and keep our project active.</string>
|
||||
<string name="support_action">To support</string>
|
||||
<string name="app_description">צריך לנקות את הלוח הריבועי המכיל מוקשים נסתרים מבלי לפוצץ אף אחד מהם.</string>
|
||||
<string name="tutorial">הדרכה</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">משחקים</string>
|
||||
<string name="previous_games">משחקים קודמים</string>
|
||||
<string name="minefield">רמת קושי</string>
|
||||
<string name="standard">רגיל</string>
|
||||
<string name="beginner">רמת התחלה</string>
|
||||
<string name="intermediate">רמה בינונית</string>
|
||||
<string name="expert">רמה גבוהה</string>
|
||||
<string name="open">פתיחה</string>
|
||||
<string name="settings">הגדרות</string>
|
||||
<string name="animations">אנימציות</string>
|
||||
<string name="vibration">משוב רטט</string>
|
||||
<string name="about">אודות</string>
|
||||
<string name="events">סטטיסטיקה</string>
|
||||
<string name="custom">התאמה אישית</string>
|
||||
<string name="start">התחלה</string>
|
||||
<string name="width">רוחב</string>
|
||||
<string name="height">גובה</string>
|
||||
<string name="mines">מוקשים</string>
|
||||
<string name="retry_sure">כאשר יתחיל משחק חדש, ההתקדמות הנוכחית שלך תיעלם.</string>
|
||||
<string name="show_licenses">הצג רשיונות</string>
|
||||
<string name="new_game_request">האם ברצונך להתחיל משחק חדש?</string>
|
||||
<string name="mines_remaining">%d מוקשים</string>
|
||||
<string name="game_time">זמן משחק</string>
|
||||
<string name="mine">מוקש</string>
|
||||
<string name="settings_general">כללי</string>
|
||||
<string name="settings_gameplay">משחק</string>
|
||||
<string name="settings_accessibility">נגישות</string>
|
||||
<string name="size">גודל</string>
|
||||
<string name="system">מערכת</string>
|
||||
<string name="rating">משוב</string>
|
||||
<string name="support_title">תמכו בנו!</string>
|
||||
<string name="support_description">עם עזרתך, נוכל להוסיף דברים חדשים ולשמור על הפרויקט שלנו פעיל.</string>
|
||||
<string name="support_action">לתמוך</string>
|
||||
<string name="rating_message">If you like this game, please give us a feedback. It will help us a lot.</string>
|
||||
<string name="used_software_text">This game uses the following third parties software:</string>
|
||||
<string name="translators_text">This game was translated by the following people:</string>
|
||||
<string name="sign_in_failed">Failed to sign in. Please check your network connection and try again.</string>
|
||||
<string name="you_won">You won!</string>
|
||||
<string name="victories">Victories</string>
|
||||
<string name="you_lost">You lost!</string>
|
||||
<string name="defeats">Defeats</string>
|
||||
<string name="game_over_desc_1">Good luck on your next game.</string>
|
||||
<string name="game_over_desc_4">You finished the minefield in %1$d seconds.</string>
|
||||
<string name="fail_to_share">Failed to share</string>
|
||||
<string name="version_s">Version %1$s</string>
|
||||
<string name="sound_effects">Sound Effects</string>
|
||||
<string name="are_you_sure">Are you sure?</string>
|
||||
<string name="enable_automatic_flags">Enable automatic placing of flags</string>
|
||||
<string name="sign_in_failed">אין אפשרות להתחבר. בדוק את חיבור הרשת ונסה שוב.</string>
|
||||
<string name="you_won">ניצחת!</string>
|
||||
<string name="victories">נצחונות</string>
|
||||
<string name="you_lost">הפסדת!</string>
|
||||
<string name="defeats">הפסדים</string>
|
||||
<string name="game_over_desc_1">בהצלחה במשחק הבא.</string>
|
||||
<string name="game_over_desc_4">סיימת את שדה המוקשים ב%1$d שניות.</string>
|
||||
<string name="fail_to_share">השיתוף נכשל</string>
|
||||
<string name="version_s">גרסה %1$s</string>
|
||||
<string name="sound_effects">אפקטי צליל</string>
|
||||
<string name="are_you_sure">את/ה בטוח/ה?</string>
|
||||
<string name="enable_automatic_flags">מיקום דגלים אוטומטי</string>
|
||||
<string name="open_areas">Open Areas</string>
|
||||
<string name="total_time">Total Time</string>
|
||||
<string name="average_time">Average Time</string>
|
||||
<string name="performance">Performance</string>
|
||||
<string name="total_time">זמן כולל</string>
|
||||
<string name="average_time">זמן ממוצע</string>
|
||||
<string name="performance">ביצועים</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="use_question_mark">Use Question Mark</string>
|
||||
<string name="control">Controls</string>
|
||||
<string name="arrow">➞</string>
|
||||
<string name="single_click">Single Click</string>
|
||||
<string name="double_click">Double Click</string>
|
||||
<string name="long_press">Long Press</string>
|
||||
<string name="open_tile">Open</string>
|
||||
<string name="flag_tile">Flag</string>
|
||||
<string name="retry">Retry</string>
|
||||
<string name="empty">Empty</string>
|
||||
<string name="unknown_error">Unknown error.</string>
|
||||
<string name="leaderboards">Leaderboards</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="resume">Resume</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="unlock">Unlock</string>
|
||||
<string name="achievements">Achievements</string>
|
||||
<string name="rating_button_no">No</string>
|
||||
<string name="general">General</string>
|
||||
<string name="source_code">Source Code</string>
|
||||
<string name="translation">Translation</string>
|
||||
<string name="licenses">Licenses</string>
|
||||
<string name="use_question_mark">סימן שאלה</string>
|
||||
<string name="control">פקדים</string>
|
||||
<string name="arrow">🠨</string>
|
||||
<string name="single_click">לחיצה בודדת</string>
|
||||
<string name="double_click">לחיצה כפולה</string>
|
||||
<string name="long_press">לחץ לחיצה ארוכה</string>
|
||||
<string name="open_tile">פתוח</string>
|
||||
<string name="flag_tile">דגל</string>
|
||||
<string name="retry">נסה שנית</string>
|
||||
<string name="empty">ריק</string>
|
||||
<string name="cant_do_it_now">אי אפשר לעשות את זה עכשיו</string>
|
||||
<string name="you_have_received">קיבלת: +%1$d</string>
|
||||
<string name="help_win_a_game">לקבלת עזרה נוספת, עליך לנצח במשחק.</string>
|
||||
<string name="unknown_error">שגיאה לא ידועה.</string>
|
||||
<string name="leaderboards">לוח תוצאות</string>
|
||||
<string name="cancel">ביטול</string>
|
||||
<string name="resume">לְהַמשִׁיך</string>
|
||||
<string name="yes"> כן</string>
|
||||
<string name="unlock">בטל את הנעילה</string>
|
||||
<string name="achievements">הישגים</string>
|
||||
<string name="no">לא</string>
|
||||
<string name="general">כללי</string>
|
||||
<string name="source_code">קוד מקור</string>
|
||||
<string name="translation">תרגומים</string>
|
||||
<string name="licenses">רשיונות</string>
|
||||
<string name="google_play_games">Google Play Games</string>
|
||||
<string name="connect">Connect</string>
|
||||
<string name="connecting">Connecting…</string>
|
||||
<string name="disconnect">Disconnect</string>
|
||||
<string name="disconnected">Disconnected</string>
|
||||
<string name="new_game">New Game</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="share_menu">Share…</string>
|
||||
<string name="no_network">No internet connection.</string>
|
||||
<string name="open_menu">Open Menu</string>
|
||||
<string name="close_menu">Close Menu</string>
|
||||
<string name="delete_all">Delete all</string>
|
||||
<string name="themes">Themes</string>
|
||||
<string name="try_it">Try It</string>
|
||||
<string name="connect">התחבר</string>
|
||||
<string name="connecting">מתחבר…</string>
|
||||
<string name="disconnect">נתק</string>
|
||||
<string name="disconnected">מנותק</string>
|
||||
<string name="new_game">משחק חדש</string>
|
||||
<string name="share">שותף</string>
|
||||
<string name="share_menu">שותף…</string>
|
||||
<string name="no_network">אין חיבור לאינטרנט.</string>
|
||||
<string name="open_menu">פתח תפריט</string>
|
||||
<string name="close_menu">סגור תפריט</string>
|
||||
<string name="delete_all">מחק הכל</string>
|
||||
<string name="themes">ערכות נושא</string>
|
||||
<string name="try_it">נסה את זה</string>
|
||||
<string name="delete_all_message">Delete all events permanently.</string>
|
||||
<string name="all_mines_disabled">All mines were disabled.</string>
|
||||
<string name="desc_convered_area">Covered area</string>
|
||||
<string name="desc_marked_area">Marked area</string>
|
||||
<string name="desc_question_area">Doubtful area</string>
|
||||
<string name="desc_wrongly_marked_area">Wrongly marked area</string>
|
||||
<string name="exploded_mine">Exploded Mine</string>
|
||||
<string name="game_started">Game Started</string>
|
||||
<string name="you_exploded_a_mine">You exploded a mine!</string>
|
||||
<string name="flag_placed">Flag placed!</string>
|
||||
<string name="flag_removed">Flag removed!</string>
|
||||
<string name="remove_ad">Remove Ads</string>
|
||||
<string name="exploded_mine">מוקש מפוצץ</string>
|
||||
<string name="game_started">המשחק החל</string>
|
||||
<string name="you_exploded_a_mine">פוצצת מוקש!</string>
|
||||
<string name="flag_placed">דגל הונח!</string>
|
||||
<string name="flag_removed">דגל הוסר!</string>
|
||||
<string name="remove_ad">הסרת פרסומות</string>
|
||||
<string name="help">עזרה</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="ja">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">地雷が隠された長方形から1つも爆発させることなくクリアしましょう。</string>
|
||||
<string name="tutorial">チュートリアル</string>
|
||||
<string name="tutorial_completed">チュートリアル完了</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">ゲーム回数</string>
|
||||
<string name="previous_games">前のゲーム</string>
|
||||
<string name="minefield">難易度</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">旗</string>
|
||||
<string name="retry">リトライ</string>
|
||||
<string name="empty">空</string>
|
||||
<string name="cant_do_it_now">今それを行うことは不可能です</string>
|
||||
<string name="you_have_received">受け取りました: +%1$d</string>
|
||||
<string name="help_win_a_game">ヘルプを増やすには、ゲームに勝つ必要があります。</string>
|
||||
<string name="unknown_error">不明なエラーです。</string>
|
||||
<string name="leaderboards">リーダーボード</string>
|
||||
<string name="cancel">キャンセル</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">はい</string>
|
||||
<string name="unlock">ロック解除</string>
|
||||
<string name="achievements">達成</string>
|
||||
<string name="rating_button_no">いいえ</string>
|
||||
<string name="no">いいえ</string>
|
||||
<string name="general">全般</string>
|
||||
<string name="source_code">ソースコード</string>
|
||||
<string name="translation">翻訳</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">フラグを立てました!</string>
|
||||
<string name="flag_removed">フラグを消しました!</string>
|
||||
<string name="remove_ad">広告を削除</string>
|
||||
<string name="help">ヘルプ</string>
|
||||
</resources>
|
||||
|
|
|
@ -1,106 +1,123 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="ko">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">You have to clear a rectangular board containing hidden mines without detonating any of them.</string>
|
||||
<string name="games">Games</string>
|
||||
<string name="previous_games">Previous Games</string>
|
||||
<string name="app_description">당신은 이 사각형 게임판에 숨겨진 지뢰를 하나도 터뜨리지 않고 게임을 끝내야 합니다.</string>
|
||||
<string name="tutorial">튜토리얼</string>
|
||||
<string name="tutorial_completed">튜토리얼 완료</string>
|
||||
<string name="tutorial_0_bottom">아무 곳에나 %1$s해서 게임을 시작하세요.</string>
|
||||
<string name="tutorial_1_top">이 숫자는 선택한 곳의 인접한 구간에 얼마나 많은 지뢰가 있는지 나타냅니다.</string>
|
||||
<string name="tutorial_1_bottom">따라서, 1️⃣ 으로 표시된 부분에 인접한 구역이 한 군데밖에 없다면, 그것은 지뢰일 것입니다. %1$s해서 깃발을 세우세요.</string>
|
||||
<string name="tutorial_2_top">그 다음 열리지 않은 구역은 숫자가 2️⃣ 가 아닌 1️⃣ 이기에, 지뢰를 가지고 있지 않습니다.</string>
|
||||
<string name="tutorial_2_bottom">%1$s해서 그 칸을 여세요.</string>
|
||||
<string name="tutorial_3_top">이 1️⃣ 이라 표시된 구역에 똑같은 상황이 나왔습니다. 인접한 지뢰가 어디 있는지 확인할 수 있을겁니다.</string>
|
||||
<string name="tutorial_3_bottom">1️⃣ 근처의 모든 칸을 열어도 됩니다.</string>
|
||||
<string name="tutorial_4_top">이미 지뢰 하나는 어디 있는지 알고 있습니다. 그러니 나머지 하나가 있을 경우의 수는 단 한가지입니다.</string>
|
||||
<string name="tutorial_4_bottom">%1$s해서 2️⃣ 에 인접한 칸에 있는 지뢰에 깃발을 세우세요.</string>
|
||||
<string name="tutorial_5_top">표시된 숫자를 확인하세요.</string>
|
||||
<string name="tutorial_5_bottom">해당 구역이 안전하다고 생각하면 %1$s하고, 해당 구역에 지뢰가 있다고 생각하면 %2$s하세요.</string>
|
||||
<string name="games">게임</string>
|
||||
<string name="previous_games">이전 게임</string>
|
||||
<string name="minefield">난이도</string>
|
||||
<string name="standard">기본</string>
|
||||
<string name="beginner">초급</string>
|
||||
<string name="intermediate">중급</string>
|
||||
<string name="expert">고급</string>
|
||||
<string name="open">Open</string>
|
||||
<string name="open">오픈</string>
|
||||
<string name="settings">설정</string>
|
||||
<string name="animations">Animations</string>
|
||||
<string name="vibration">Haptic Feedback</string>
|
||||
<string name="about">About</string>
|
||||
<string name="animations">애니메이션</string>
|
||||
<string name="vibration">햅틱 피드백</string>
|
||||
<string name="about">정보</string>
|
||||
<string name="events">통계</string>
|
||||
<string name="custom">Custom</string>
|
||||
<string name="custom">사용자 지정</string>
|
||||
<string name="start">시작</string>
|
||||
<string name="width">Width</string>
|
||||
<string name="height">Height</string>
|
||||
<string name="width">가로</string>
|
||||
<string name="height">세로</string>
|
||||
<string name="mines">지뢰 수</string>
|
||||
<string name="retry_sure">If you start a new game, your current progress will be lost.</string>
|
||||
<string name="show_licenses">Show Licenses</string>
|
||||
<string name="new_game_request">Do you want to start a new game?</string>
|
||||
<string name="mines_remaining">%d mines</string>
|
||||
<string name="game_time">Game Time</string>
|
||||
<string name="mine">Mine</string>
|
||||
<string name="settings_general">General</string>
|
||||
<string name="settings_gameplay">Gameplay</string>
|
||||
<string name="settings_accessibility">Accessibility</string>
|
||||
<string name="size">Size</string>
|
||||
<string name="system">System</string>
|
||||
<string name="rating">Feedback</string>
|
||||
<string name="support_title">Support us!</string>
|
||||
<string name="support_description">With your help, we\'ll be able to implement new features and keep our project active.</string>
|
||||
<string name="support_action">To support</string>
|
||||
<string name="rating_message">If you like this game, please give us a feedback. It will help us a lot.</string>
|
||||
<string name="used_software_text">This game uses the following third parties software:</string>
|
||||
<string name="translators_text">This game was translated by the following people:</string>
|
||||
<string name="sign_in_failed">Failed to sign in. Please check your network connection and try again.</string>
|
||||
<string name="you_won">You won!</string>
|
||||
<string name="victories">Victories</string>
|
||||
<string name="you_lost">You lost!</string>
|
||||
<string name="defeats">Defeats</string>
|
||||
<string name="game_over_desc_1">Good luck on your next game.</string>
|
||||
<string name="game_over_desc_4">You finished the minefield in %1$d seconds.</string>
|
||||
<string name="fail_to_share">Failed to share</string>
|
||||
<string name="version_s">Version %1$s</string>
|
||||
<string name="sound_effects">Sound Effects</string>
|
||||
<string name="are_you_sure">Are you sure?</string>
|
||||
<string name="enable_automatic_flags">Enable automatic placing of flags</string>
|
||||
<string name="open_areas">Open Areas</string>
|
||||
<string name="total_time">Total Time</string>
|
||||
<string name="average_time">Average Time</string>
|
||||
<string name="performance">Performance</string>
|
||||
<string name="retry_sure">새 게임을 시작하면 현재 진행 상황이 손실됩니다.</string>
|
||||
<string name="show_licenses">저작권 표시</string>
|
||||
<string name="new_game_request">새로운 게임을 시작하시겠습니까?</string>
|
||||
<string name="mines_remaining">%d 개</string>
|
||||
<string name="game_time">게임 시간</string>
|
||||
<string name="mine">지뢰</string>
|
||||
<string name="settings_general">일반</string>
|
||||
<string name="settings_gameplay">게임 플레이</string>
|
||||
<string name="settings_accessibility">접근성</string>
|
||||
<string name="size">크기</string>
|
||||
<string name="system">시스템</string>
|
||||
<string name="rating">피드백</string>
|
||||
<string name="support_title">우리를 지원해주세요!</string>
|
||||
<string name="support_description">새로운 기능을 구현하고 프로젝트가 계속 진행될 수 있게 도와주세요.</string>
|
||||
<string name="support_action">지원</string>
|
||||
<string name="rating_message">이 게임이 좋으시다면, 피드백을 남겨주세요. 저희에게 많은 도움이 됩니다.</string>
|
||||
<string name="used_software_text">이 게임은 해당 서드파티 소프트웨어를 사용합니다:</string>
|
||||
<string name="translators_text">이 게임은 다음 사람들에 의해 번역되었습니다:</string>
|
||||
<string name="sign_in_failed">게임에 접속할 수 없습니다. 네트워크 환경을 확인해고 다시 접속해주세요.</string>
|
||||
<string name="you_won">성공!</string>
|
||||
<string name="victories">성공 횟수</string>
|
||||
<string name="you_lost">실패!</string>
|
||||
<string name="defeats">실패 횟수</string>
|
||||
<string name="game_over_desc_1">다음 판에서는 잘하시길 빕니다.</string>
|
||||
<string name="game_over_desc_4">%1$d초만에 이번 판을 끝내셨습니다.</string>
|
||||
<string name="fail_to_share">공유 실패</string>
|
||||
<string name="version_s">버전: %1$s</string>
|
||||
<string name="sound_effects">효과음</string>
|
||||
<string name="are_you_sure">확실합니까?</string>
|
||||
<string name="enable_automatic_flags">자동으로 깃발 놓기 사용</string>
|
||||
<string name="open_areas">칸 열기</string>
|
||||
<string name="total_time">총 시간</string>
|
||||
<string name="average_time">평균 시간</string>
|
||||
<string name="performance">퍼포먼스</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="use_question_mark">Use Question Mark</string>
|
||||
<string name="control">Controls</string>
|
||||
<string name="use_question_mark">물음표 깃발 사용</string>
|
||||
<string name="control">컨트롤</string>
|
||||
<string name="arrow">➞</string>
|
||||
<string name="single_click">Single Click</string>
|
||||
<string name="double_click">Double Click</string>
|
||||
<string name="long_press">Long Press</string>
|
||||
<string name="open_tile">Open</string>
|
||||
<string name="flag_tile">Flag</string>
|
||||
<string name="retry">Retry</string>
|
||||
<string name="empty">Empty</string>
|
||||
<string name="unknown_error">Unknown error.</string>
|
||||
<string name="leaderboards">Leaderboards</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="resume">Resume</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="unlock">Unlock</string>
|
||||
<string name="achievements">Achievements</string>
|
||||
<string name="rating_button_no">No</string>
|
||||
<string name="general">General</string>
|
||||
<string name="source_code">Source Code</string>
|
||||
<string name="translation">Translation</string>
|
||||
<string name="licenses">Licenses</string>
|
||||
<string name="google_play_games">Google Play Games</string>
|
||||
<string name="connect">Connect</string>
|
||||
<string name="connecting">Connecting…</string>
|
||||
<string name="disconnect">Disconnect</string>
|
||||
<string name="disconnected">Disconnected</string>
|
||||
<string name="new_game">New Game</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="share_menu">Share…</string>
|
||||
<string name="no_network">No internet connection.</string>
|
||||
<string name="open_menu">Open Menu</string>
|
||||
<string name="close_menu">Close Menu</string>
|
||||
<string name="delete_all">Delete all</string>
|
||||
<string name="themes">Themes</string>
|
||||
<string name="try_it">Try It</string>
|
||||
<string name="delete_all_message">Delete all events permanently.</string>
|
||||
<string name="all_mines_disabled">All mines were disabled.</string>
|
||||
<string name="desc_convered_area">Covered area</string>
|
||||
<string name="desc_marked_area">Marked area</string>
|
||||
<string name="desc_question_area">Doubtful area</string>
|
||||
<string name="desc_wrongly_marked_area">Wrongly marked area</string>
|
||||
<string name="exploded_mine">Exploded Mine</string>
|
||||
<string name="game_started">Game Started</string>
|
||||
<string name="you_exploded_a_mine">You exploded a mine!</string>
|
||||
<string name="flag_placed">Flag placed!</string>
|
||||
<string name="flag_removed">Flag removed!</string>
|
||||
<string name="remove_ad">Remove Ads</string>
|
||||
<string name="single_click">단일 클릭</string>
|
||||
<string name="double_click">더블 클릭</string>
|
||||
<string name="long_press">길게 누르기</string>
|
||||
<string name="open_tile">칸 열기</string>
|
||||
<string name="flag_tile">깃발 세우기</string>
|
||||
<string name="retry">재시도</string>
|
||||
<string name="empty">비어있음</string>
|
||||
<string name="cant_do_it_now">지금은 불가능 해</string>
|
||||
<string name="you_have_received">당신은 받았습니다: +%1$d</string>
|
||||
<string name="help_win_a_game">더 많은 도움을 받으려면 게임에서 승리해야합니다.</string>
|
||||
<string name="unknown_error">알 수 없는 오류 발생</string>
|
||||
<string name="leaderboards">리더보드</string>
|
||||
<string name="cancel">취소</string>
|
||||
<string name="resume">계속하기</string>
|
||||
<string name="yes">네</string>
|
||||
<string name="unlock">잠금 해제</string>
|
||||
<string name="achievements">도전 과제</string>
|
||||
<string name="no">아니오</string>
|
||||
<string name="general">기본설정</string>
|
||||
<string name="source_code">소스 코드</string>
|
||||
<string name="translation">번역</string>
|
||||
<string name="licenses">라이선스</string>
|
||||
<string name="google_play_games">Google Play 게임</string>
|
||||
<string name="connect">연결하기</string>
|
||||
<string name="connecting">연결중…</string>
|
||||
<string name="disconnect">연결 해제</string>
|
||||
<string name="disconnected">연결 해제됨</string>
|
||||
<string name="new_game">새 게임</string>
|
||||
<string name="share">공유하기</string>
|
||||
<string name="share_menu">…을 통해 공유하기</string>
|
||||
<string name="no_network">인터넷에 연결되어 있지 않습니다.</string>
|
||||
<string name="open_menu">메뉴 열기</string>
|
||||
<string name="close_menu">메뉴 닫기</string>
|
||||
<string name="delete_all">모두 삭제</string>
|
||||
<string name="themes">테마 선택</string>
|
||||
<string name="try_it">사용해보세요</string>
|
||||
<string name="delete_all_message">모든 이벤트 알림을 영구히 삭제합니다.</string>
|
||||
<string name="all_mines_disabled">모든 지뢰를 찾았습니다.</string>
|
||||
<string name="desc_convered_area">연 칸</string>
|
||||
<string name="desc_marked_area">깃발 꽂은 칸</string>
|
||||
<string name="desc_question_area">의심스러운 칸</string>
|
||||
<string name="desc_wrongly_marked_area">깃발을 잘못 꽂은 칸</string>
|
||||
<string name="exploded_mine">터진 지뢰</string>
|
||||
<string name="game_started">게임 시작됨</string>
|
||||
<string name="you_exploded_a_mine">지뢰가 터졌습니다!</string>
|
||||
<string name="flag_placed">깃발 설치 완료!</string>
|
||||
<string name="flag_removed">깃발 제거 완료!</string>
|
||||
<string name="remove_ad">광고 제거</string>
|
||||
<string name="help">도움말</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="nl">
|
||||
<string name="app_name">Antimijn</string>
|
||||
<string name="app_description">Je moet een rechthoekig bord met verborgen mijnen verwijderen zonder er een te ontploffen.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">Tutorial Voltooid</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Games</string>
|
||||
<string name="previous_games">Vorige games</string>
|
||||
<string name="minefield">Moeilijkheidsgraad</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Vlag</string>
|
||||
<string name="retry">Opnieuw</string>
|
||||
<string name="empty">Leeg</string>
|
||||
<string name="cant_do_it_now">Onmogelijk om dat nu te doen</string>
|
||||
<string name="you_have_received">Je hebt ontvangen: +%1$d</string>
|
||||
<string name="help_win_a_game">Voor meer hulp moet je een spel winnen.</string>
|
||||
<string name="unknown_error">Onbekende fout.</string>
|
||||
<string name="leaderboards">Ranglijsten</string>
|
||||
<string name="cancel">Anneleren</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Ja</string>
|
||||
<string name="unlock">Ontgrendelen</string>
|
||||
<string name="achievements">Achievements</string>
|
||||
<string name="rating_button_no">Nee</string>
|
||||
<string name="no">Nee</string>
|
||||
<string name="general">Algemeen</string>
|
||||
<string name="source_code">Bron code</string>
|
||||
<string name="translation">Vertaling</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Vlag geplaatst!</string>
|
||||
<string name="flag_removed">Vlag verwijderd!</string>
|
||||
<string name="remove_ad">Verwijder advertenties</string>
|
||||
<string name="help">Help</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="no">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">Du må fjerne en rektangulær plate med skjulte miner uten å løsne noen av dem.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Spill</string>
|
||||
<string name="previous_games">Tidligere Spill</string>
|
||||
<string name="minefield">Vanskelighet</string>
|
||||
|
@ -33,8 +46,8 @@
|
|||
<string name="system">System</string>
|
||||
<string name="rating">Ttilbakemelding</string>
|
||||
<string name="support_title">Støtt oss!</string>
|
||||
<string name="support_description">Med din hjelp kan vi implementere nye funksjoner og holde prosjektet vårt aktivt.</string>
|
||||
<string name="support_action">Støtte</string>
|
||||
<string name="support_description">Med hjelpen din kan vi implementere nye funksjoner og holde prosjektet aktivt.</string>
|
||||
<string name="support_action">For å støtte</string>
|
||||
<string name="rating_message">Hvis du liker dette spillet, gi oss en tilbakemelding. Det vil hjelpe oss mye.</string>
|
||||
<string name="used_software_text">Dette spillet bruker følgende tredjeparter programvare:</string>
|
||||
<string name="translators_text">Dette spillet ble oversatt av følgende personer:</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Flagg</string>
|
||||
<string name="retry">Prøv på nytt</string>
|
||||
<string name="empty">Tom</string>
|
||||
<string name="cant_do_it_now">Umulig å gjøre det nå</string>
|
||||
<string name="you_have_received">Du har mottatt: +%1$d</string>
|
||||
<string name="help_win_a_game">For mer hjelp, må du vinne et spill.</string>
|
||||
<string name="unknown_error">Ukjent feil.</string>
|
||||
<string name="leaderboards">Leaderboards</string>
|
||||
<string name="cancel">Avbryt</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Ja</string>
|
||||
<string name="unlock">Lås opp</string>
|
||||
<string name="achievements">Prestasjoner</string>
|
||||
<string name="rating_button_no">Nei</string>
|
||||
<string name="no">Nei</string>
|
||||
<string name="general">Generelt</string>
|
||||
<string name="source_code">Kildekode</string>
|
||||
<string name="translation">Oversettelse</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Flagg plassert!</string>
|
||||
<string name="flag_removed">Flagg fjernet!</string>
|
||||
<string name="remove_ad">Fjern Reklame</string>
|
||||
<string name="help">Hjelp</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="pl">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">Znajdź wszystkie ukryte miny znajdujące się na kwadratowej planszy unikając ich detonacji.</string>
|
||||
<string name="tutorial">Samouczek</string>
|
||||
<string name="tutorial_completed">Samouczek ukończony</string>
|
||||
<string name="tutorial_0_bottom">%1$s na dowolnym polu, aby rozpocząć.</string>
|
||||
<string name="tutorial_1_top">Liczby wskazują, jaka ilość min przylega do podświetlonego pola.</string>
|
||||
<string name="tutorial_1_bottom">Z tego wynika, że jeśli do narożnika 1️⃣ przylega tylko jedno pole, musi znajdować się tam mina. %1$s, aby ją oznaczyć.</string>
|
||||
<string name="tutorial_2_top">Na kolejnym nieodkrytym polu nie znajduje się mina, ponieważ posiada ono liczbę 1️⃣ , a nie 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">Możesz je odkryć przez %1$s.</string>
|
||||
<string name="tutorial_3_top">To samo dzieje się w przypadku tego 1️⃣ . Z pewnością wiesz, gdzie jest przylegająca mina.</string>
|
||||
<string name="tutorial_3_bottom">Możesz odkryć wszystkie pozostałe pola przylegające do 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">Wiemy już, gdzie jest jedna z min. Istnieje więc tylko jedna możliwa pozycja dla drugiej.</string>
|
||||
<string name="tutorial_4_bottom">%1$s, aby oznaczyć minę przylegającą do 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Sprawdź podświetlony numer.</string>
|
||||
<string name="tutorial_5_bottom">%1$s, aby odkryć lub %2$s, aby oznaczyć.</string>
|
||||
<string name="games">Rozgrywki</string>
|
||||
<string name="previous_games">Poprzednie rozgrywki</string>
|
||||
<string name="minefield">Rozgrywki</string>
|
||||
|
@ -61,10 +74,13 @@
|
|||
<string name="single_click">Pojedyncze kliknięcie</string>
|
||||
<string name="double_click">Podwójne kliknięcie</string>
|
||||
<string name="long_press">Długie naciśnięcie</string>
|
||||
<string name="open_tile">Otwórz</string>
|
||||
<string name="open_tile">Odkryj</string>
|
||||
<string name="flag_tile">Oznacz</string>
|
||||
<string name="retry">Jeszcze raz</string>
|
||||
<string name="empty">Puste</string>
|
||||
<string name="cant_do_it_now">Nie można tego teraz zrobić</string>
|
||||
<string name="you_have_received">Otrzymałeś: +%1$d</string>
|
||||
<string name="help_win_a_game">Aby uzyskać więcej pomocy, musisz wygrać grę.</string>
|
||||
<string name="unknown_error">Nieznany błąd.</string>
|
||||
<string name="leaderboards">Tablica wyników</string>
|
||||
<string name="cancel">Anuluj</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Tak</string>
|
||||
<string name="unlock">Odblokuj</string>
|
||||
<string name="achievements">Osiągnięcia</string>
|
||||
<string name="rating_button_no">Nie</string>
|
||||
<string name="no">Nie</string>
|
||||
<string name="general">Ogólne</string>
|
||||
<string name="source_code">Kod źródłowy</string>
|
||||
<string name="translation">Tłumaczenie</string>
|
||||
|
@ -102,5 +118,6 @@
|
|||
<string name="you_exploded_a_mine">Zdetonowano minę!</string>
|
||||
<string name="flag_placed">Umieszczono flagę!</string>
|
||||
<string name="flag_removed">Usunięto flagę!</string>
|
||||
<string name="remove_ad">Usunąć reklamy</string>
|
||||
<string name="remove_ad">Usuń reklamy</string>
|
||||
<string name="help">Pomoc</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="pt-rBR">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">Você deve limpar um campo cheio de mines escondidas sem detonar nenhumas delas.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">Tutorial Concluído</string>
|
||||
<string name="tutorial_0_bottom">Para começar dê um %1$s em qualquer quadrado aleatório.</string>
|
||||
<string name="tutorial_1_top">Os números indicam quantas minas existem adjacentes ao quadrado destacado.</string>
|
||||
<string name="tutorial_1_bottom">Portanto, se o canto 1️⃣ tem apenas um quadrado adjacente, ele deve ter uma minha. Use %1$s para sinalizá-lo.</string>
|
||||
<string name="tutorial_2_top">O próximo quadrado fechado não tem uma mina porque o número é 1️⃣ , não 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">Você pode abri-lo com %1$s.</string>
|
||||
<string name="tutorial_3_top">O mesmo acontece nesse 1️⃣ . Você sabe onde está a mina adjacente.</string>
|
||||
<string name="tutorial_3_bottom">Você pode abrir todos os outros quadrados fechados adjacentes a 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">Sabemos onde está uma das minas. Então, há apenas uma possibilidade para a outra.</string>
|
||||
<string name="tutorial_4_bottom">%1$s para sinalizar a mina adjacente a 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Verifique o número destacado.</string>
|
||||
<string name="tutorial_5_bottom">%1$s para abrir ou %2$s para sinalizar.</string>
|
||||
<string name="games">Jogos</string>
|
||||
<string name="previous_games">Jogos anteriores</string>
|
||||
<string name="minefield">Dificuldade</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Bandeira</string>
|
||||
<string name="retry">Tentar de novo</string>
|
||||
<string name="empty">Vazio</string>
|
||||
<string name="cant_do_it_now">Impossível fazer isso agora</string>
|
||||
<string name="you_have_received">Você recebeu: +%1$d</string>
|
||||
<string name="help_win_a_game">Para mais Ajuda, você deve ganhar um jogo.</string>
|
||||
<string name="unknown_error">Erro Desconhecido.</string>
|
||||
<string name="leaderboards">Classificações</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Sim</string>
|
||||
<string name="unlock">Desbloquear</string>
|
||||
<string name="achievements">Conquistas</string>
|
||||
<string name="rating_button_no">Não</string>
|
||||
<string name="no">Não</string>
|
||||
<string name="general">Geral</string>
|
||||
<string name="source_code">Código fonte</string>
|
||||
<string name="translation">Tradução</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Bandeira colocada!</string>
|
||||
<string name="flag_removed">Bandeira removida!</string>
|
||||
<string name="remove_ad">Remover Propagandas</string>
|
||||
<string name="help">Ajuda</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="pt-rPT">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">Você deve limpar um campo contendo minas escondidas sem detonar nenhuma delas.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">Tutorial Completo</string>
|
||||
<string name="tutorial_0_bottom">Você pode começar por %1$s em qualquer quadrado aleatório.</string>
|
||||
<string name="tutorial_1_top">Os números indicam quantas minas estão adjacentes ao quadrado em destaque.</string>
|
||||
<string name="tutorial_1_bottom">Portanto, se o canto 1️⃣ tem apenas um quadrado adjacente, ele deve ter uma mina. %1$s para sinalizá-lo.</string>
|
||||
<string name="tutorial_2_top">O próximo quadrado não aberto não tem uma mina, porque o número é 1️⃣ , não 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">Você pode abri-lo com %1$s.</string>
|
||||
<string name="tutorial_3_top">O mesmo acontece neste 1️⃣ . Você sabe onde está a sua mina adjacente.</string>
|
||||
<string name="tutorial_3_bottom">Você pode abrir todos os outros lugares não abertos adjacentes a 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">Sabemos onde está uma das minas. Então, há apenas uma possibilidade para a outra.</string>
|
||||
<string name="tutorial_4_bottom">%1$s para sinalizar a mina adjacente a 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Verifique o número destacado.</string>
|
||||
<string name="tutorial_5_bottom">%1$s para abrir ou %2$s para marcar.</string>
|
||||
<string name="games">Jogos</string>
|
||||
<string name="previous_games">Jogos anteriores</string>
|
||||
<string name="minefield">Dificuldade</string>
|
||||
|
@ -58,13 +71,16 @@
|
|||
<string name="use_question_mark">Usar Ponto de Interrogação</string>
|
||||
<string name="control">Controlos</string>
|
||||
<string name="arrow">➞</string>
|
||||
<string name="single_click">Clique único</string>
|
||||
<string name="double_click">Duplo Clique</string>
|
||||
<string name="long_press">Toque longo</string>
|
||||
<string name="single_click">Toque Único</string>
|
||||
<string name="double_click">Toque Duplo</string>
|
||||
<string name="long_press">Toque Longo</string>
|
||||
<string name="open_tile">Abrir</string>
|
||||
<string name="flag_tile">Bandeira</string>
|
||||
<string name="retry">Tentar Novamente</string>
|
||||
<string name="empty">Vazio</string>
|
||||
<string name="cant_do_it_now">Impossível fazer isso agora</string>
|
||||
<string name="you_have_received">Você recebeu: +%1$d</string>
|
||||
<string name="help_win_a_game">Para mais Ajuda, você deve ganhar um jogo.</string>
|
||||
<string name="unknown_error">Erro desconhecido.</string>
|
||||
<string name="leaderboards">Líderes</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Sim</string>
|
||||
<string name="unlock">Desbloquear</string>
|
||||
<string name="achievements">Conquistas</string>
|
||||
<string name="rating_button_no">Não</string>
|
||||
<string name="no">Não</string>
|
||||
<string name="general">Geral</string>
|
||||
<string name="source_code">Código Fonte</string>
|
||||
<string name="translation">Tradução</string>
|
||||
|
@ -85,7 +101,7 @@
|
|||
<string name="new_game">Novo Jogo</string>
|
||||
<string name="share">Compartilhar</string>
|
||||
<string name="share_menu">Compartilhar…</string>
|
||||
<string name="no_network">Sem ligação à internet.</string>
|
||||
<string name="no_network">Sem ligação à Internet.</string>
|
||||
<string name="open_menu">Abrir o Menu</string>
|
||||
<string name="close_menu">Fechar menu</string>
|
||||
<string name="delete_all">Apagar tudo</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Bandeira colocada!</string>
|
||||
<string name="flag_removed">Bandeira removida!</string>
|
||||
<string name="remove_ad">Remover Anúncios</string>
|
||||
<string name="help">Ajuda</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="ro">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">You have to clear a rectangular board containing hidden mines without detonating any of them.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">Tutorial completat</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Games</string>
|
||||
<string name="previous_games">Previous Games</string>
|
||||
<string name="minefield">Dificultate</string>
|
||||
|
@ -26,56 +39,59 @@
|
|||
<string name="mines_remaining">%d de mine</string>
|
||||
<string name="game_time">Durata Jocului</string>
|
||||
<string name="mine">Mină</string>
|
||||
<string name="settings_general">General</string>
|
||||
<string name="settings_gameplay">Gameplay</string>
|
||||
<string name="settings_accessibility">Accessibility</string>
|
||||
<string name="size">Size</string>
|
||||
<string name="system">System</string>
|
||||
<string name="rating">Feedback</string>
|
||||
<string name="support_title">Support us!</string>
|
||||
<string name="support_description">With your help, we\'ll be able to implement new features and keep our project active.</string>
|
||||
<string name="support_action">To support</string>
|
||||
<string name="rating_message">If you like this game, please give us a feedback. It will help us a lot.</string>
|
||||
<string name="settings_general">Generalități</string>
|
||||
<string name="settings_gameplay">Joc</string>
|
||||
<string name="settings_accessibility">Accesibilitate</string>
|
||||
<string name="size">Dimensiune</string>
|
||||
<string name="system">Sistem</string>
|
||||
<string name="rating">Opinii</string>
|
||||
<string name="support_title">Susțineți-ne!</string>
|
||||
<string name="support_description">Cu ajutorul tău, vom fi capabili să implementăm noi funcții și să menținem proiectul nostru activ.</string>
|
||||
<string name="support_action">Suport</string>
|
||||
<string name="rating_message">Dacă vă place acest joc, vă rugăm să ne dați un feedback. Ne va ajuta foarte mult.</string>
|
||||
<string name="used_software_text">This game uses the following third parties software:</string>
|
||||
<string name="translators_text">This game was translated by the following people:</string>
|
||||
<string name="sign_in_failed">Nu se poate conecta. Te rugăm să îți verifici conexiunea la rețea și să încerci din nou.</string>
|
||||
<string name="you_won">You won!</string>
|
||||
<string name="victories">Victories</string>
|
||||
<string name="you_lost">You lost!</string>
|
||||
<string name="defeats">Defeats</string>
|
||||
<string name="game_over_desc_1">Good luck on your next game.</string>
|
||||
<string name="game_over_desc_4">You finished the minefield in %1$d seconds.</string>
|
||||
<string name="fail_to_share">Failed to share</string>
|
||||
<string name="version_s">Version %1$s</string>
|
||||
<string name="sound_effects">Sound Effects</string>
|
||||
<string name="are_you_sure">Are you sure?</string>
|
||||
<string name="enable_automatic_flags">Enable automatic placing of flags</string>
|
||||
<string name="you_won">Aţi câștigat!</string>
|
||||
<string name="victories">Victorii</string>
|
||||
<string name="you_lost">Aţi pierdut!</string>
|
||||
<string name="defeats">Înfrângeri</string>
|
||||
<string name="game_over_desc_1">Mult noroc la următorul joc.</string>
|
||||
<string name="game_over_desc_4">Ai terminat câmpul minat în %1$d secunde.</string>
|
||||
<string name="fail_to_share">Share-uirea imaginii a eșuat</string>
|
||||
<string name="version_s">Versiunea %1$s</string>
|
||||
<string name="sound_effects">Efecte sonore</string>
|
||||
<string name="are_you_sure">Sînteți sigur?</string>
|
||||
<string name="enable_automatic_flags">Activează plasarea automată a steagurilor</string>
|
||||
<string name="open_areas">Open Areas</string>
|
||||
<string name="total_time">Total Time</string>
|
||||
<string name="average_time">Average Time</string>
|
||||
<string name="performance">Performance</string>
|
||||
<string name="total_time">Timp total</string>
|
||||
<string name="average_time">Timp mediu</string>
|
||||
<string name="performance">Performanță</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="use_question_mark">Use Question Mark</string>
|
||||
<string name="control">Controls</string>
|
||||
<string name="use_question_mark">Folosește Semn de Întrebare</string>
|
||||
<string name="control">Controale</string>
|
||||
<string name="arrow">➞</string>
|
||||
<string name="single_click">Single Click</string>
|
||||
<string name="double_click">Double Click</string>
|
||||
<string name="long_press">Long Press</string>
|
||||
<string name="open_tile">Open</string>
|
||||
<string name="flag_tile">Flag</string>
|
||||
<string name="single_click">Atingere simplă</string>
|
||||
<string name="double_click">Apasare dubla</string>
|
||||
<string name="long_press">Atingeți lung</string>
|
||||
<string name="open_tile">Deschide</string>
|
||||
<string name="flag_tile">Steag</string>
|
||||
<string name="retry">Încearcă din nou</string>
|
||||
<string name="empty">Empty</string>
|
||||
<string name="empty">Gol</string>
|
||||
<string name="cant_do_it_now">Nu se poate face acest lucru acum</string>
|
||||
<string name="you_have_received">Ați primit: +%1$d</string>
|
||||
<string name="help_win_a_game">Pentru mai mult ajutor, trebuie să câștigi un joc.</string>
|
||||
<string name="unknown_error">Eroare necunoscută.</string>
|
||||
<string name="leaderboards">Clasamente</string>
|
||||
<string name="cancel">Anulează</string>
|
||||
<string name="resume">Continuă</string>
|
||||
<string name="yes">Da</string>
|
||||
<string name="unlock">Unlock</string>
|
||||
<string name="unlock">Deblochează</string>
|
||||
<string name="achievements">Achievements</string>
|
||||
<string name="rating_button_no">No</string>
|
||||
<string name="no">Nu</string>
|
||||
<string name="general">General</string>
|
||||
<string name="source_code">Cod sursă</string>
|
||||
<string name="translation">Translation</string>
|
||||
<string name="translation">Translare</string>
|
||||
<string name="licenses">Licenţe</string>
|
||||
<string name="google_play_games">Jocurile Google Play</string>
|
||||
<string name="connect">Conectează-te</string>
|
||||
|
@ -88,9 +104,9 @@
|
|||
<string name="no_network">Lipseste conexiune la internet.</string>
|
||||
<string name="open_menu">Deschide meniul</string>
|
||||
<string name="close_menu">Închide meniul</string>
|
||||
<string name="delete_all">Delete all</string>
|
||||
<string name="themes">Themes</string>
|
||||
<string name="try_it">Try It</string>
|
||||
<string name="delete_all">Șterge tot</string>
|
||||
<string name="themes">Teme</string>
|
||||
<string name="try_it">Încearcă-l</string>
|
||||
<string name="delete_all_message">Delete all events permanently.</string>
|
||||
<string name="all_mines_disabled">Toate minele au fost dezactivate.</string>
|
||||
<string name="desc_convered_area">Covered area</string>
|
||||
|
@ -102,5 +118,6 @@
|
|||
<string name="you_exploded_a_mine">Ai explodat o mină!</string>
|
||||
<string name="flag_placed">Steagul a fost plasat!</string>
|
||||
<string name="flag_removed">Steagul a fost eliminat!</string>
|
||||
<string name="remove_ad">Remove Ads</string>
|
||||
<string name="remove_ad">Eliminați Reclamele</string>
|
||||
<string name="help">Ajutor</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="ru">
|
||||
<string name="app_name">Anti-Mine</string>
|
||||
<string name="app_description">Вам необходимо расчистить прямоугольную площадь со спрятанными минами, не взорвав ни одну из них.</string>
|
||||
<string name="tutorial">Обучение</string>
|
||||
<string name="tutorial_completed">Обучение завершено</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Игры</string>
|
||||
<string name="previous_games">Предыдущие игры</string>
|
||||
<string name="minefield">Сложность</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Флаг</string>
|
||||
<string name="retry">Повторить</string>
|
||||
<string name="empty">Пусто</string>
|
||||
<string name="cant_do_it_now">Невозможно сделать это сейчас</string>
|
||||
<string name="you_have_received">Вы получили: +%1$d</string>
|
||||
<string name="help_win_a_game">Для получения дополнительной помощи вы должны выиграть игру.</string>
|
||||
<string name="unknown_error">Неизвестная ошибка.</string>
|
||||
<string name="leaderboards">Списки лидеров</string>
|
||||
<string name="cancel">Отмена</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Да</string>
|
||||
<string name="unlock">Разблокировать</string>
|
||||
<string name="achievements">Достижения</string>
|
||||
<string name="rating_button_no">Нет</string>
|
||||
<string name="no">Нет</string>
|
||||
<string name="general">Общее</string>
|
||||
<string name="source_code">Исходный код</string>
|
||||
<string name="translation">Перевод</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Флаг установлен!</string>
|
||||
<string name="flag_removed">Флаг снят!</string>
|
||||
<string name="remove_ad">Удалить рекламу</string>
|
||||
<string name="help">Помощь</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="sv-rSE">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">You have to clear a rectangular board containing hidden mines without detonating any of them.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Games</string>
|
||||
<string name="previous_games">Previous Games</string>
|
||||
<string name="minefield">Difficulty</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Flag</string>
|
||||
<string name="retry">Retry</string>
|
||||
<string name="empty">Empty</string>
|
||||
<string name="cant_do_it_now">Impossible to do that now</string>
|
||||
<string name="you_have_received">You have received: +%1$d</string>
|
||||
<string name="help_win_a_game">For more Help, you must win a game.</string>
|
||||
<string name="unknown_error">Unknown error.</string>
|
||||
<string name="leaderboards">Leaderboards</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Yes</string>
|
||||
<string name="unlock">Unlock</string>
|
||||
<string name="achievements">Achievements</string>
|
||||
<string name="rating_button_no">No</string>
|
||||
<string name="no">No</string>
|
||||
<string name="general">General</string>
|
||||
<string name="source_code">Source Code</string>
|
||||
<string name="translation">Translation</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Flag placed!</string>
|
||||
<string name="flag_removed">Flag removed!</string>
|
||||
<string name="remove_ad">Remove Ads</string>
|
||||
<string name="help">Help</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="th">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">You have to clear a rectangular board containing hidden mines without detonating any of them.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Games</string>
|
||||
<string name="previous_games">Previous Games</string>
|
||||
<string name="minefield">Difficulty</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Flag</string>
|
||||
<string name="retry">Retry</string>
|
||||
<string name="empty">Empty</string>
|
||||
<string name="cant_do_it_now">Impossible to do that now</string>
|
||||
<string name="you_have_received">You have received: +%1$d</string>
|
||||
<string name="help_win_a_game">For more Help, you must win a game.</string>
|
||||
<string name="unknown_error">Unknown error.</string>
|
||||
<string name="leaderboards">Leaderboards</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Yes</string>
|
||||
<string name="unlock">Unlock</string>
|
||||
<string name="achievements">Achievements</string>
|
||||
<string name="rating_button_no">No</string>
|
||||
<string name="no">No</string>
|
||||
<string name="general">General</string>
|
||||
<string name="source_code">Source Code</string>
|
||||
<string name="translation">Translation</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Flag placed!</string>
|
||||
<string name="flag_removed">Flag removed!</string>
|
||||
<string name="remove_ad">Remove Ads</string>
|
||||
<string name="help">Help</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="tr">
|
||||
<string name="app_name">Anti-Mine</string>
|
||||
<string name="app_description">Hiçbirini patlatmadan gizli mayın içeren dikdörtgen bir tahtayı temizlemelisiniz.</string>
|
||||
<string name="tutorial">Eğitim</string>
|
||||
<string name="tutorial_completed">Eğitim tamamlandı</string>
|
||||
<string name="tutorial_0_bottom">Rastgele karede %1$s ile başlayabilirsiniz.</string>
|
||||
<string name="tutorial_1_top">Numaralar vurgulanan kareye kaç tane bitişik mayın olduğuna işaret eder.</string>
|
||||
<string name="tutorial_1_bottom">Bu nedenle, köşe 1 sadece bir bitişik kareye sahipse, bu bir mayın olmalıdır. İşaretlemek için %1$s.</string>
|
||||
<string name="tutorial_2_top">Bir sonraki açılmamış karede mayın yok çünkü sayı 2️⃣değil, 1️⃣.</string>
|
||||
<string name="tutorial_2_bottom">%1$s ile açabilirsin.</string>
|
||||
<string name="tutorial_3_top">Bu 1️⃣\'de de aynı şey. Bitişik mayının nerede olduğunu biliyorsun.</string>
|
||||
<string name="tutorial_3_bottom">1️⃣\'e bitişik bütün açılmamış mayınları açabilirsin.</string>
|
||||
<string name="tutorial_4_top">Mayınların bir tanesinin nerede olduğunu biliyoruz. Böylece diğer mayın için sadece bir olasılık var.</string>
|
||||
<string name="tutorial_4_bottom">2️⃣\'ye komşu olan mayını işaretlemek için %1$s.</string>
|
||||
<string name="tutorial_5_top">Vurgulanan numarayı kontrol edin.</string>
|
||||
<string name="tutorial_5_bottom">Açmak için %1$s ya da işaretlemek için %2$s.</string>
|
||||
<string name="games">Oyunlar</string>
|
||||
<string name="previous_games">Önceki Oyunlar</string>
|
||||
<string name="minefield">Zorluk</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Bayrak</string>
|
||||
<string name="retry">Yeniden dene</string>
|
||||
<string name="empty">Boş</string>
|
||||
<string name="cant_do_it_now">Bunu şimdi yapmak imkansız</string>
|
||||
<string name="you_have_received">Aldın: +%1$d</string>
|
||||
<string name="help_win_a_game">Daha fazla Yardım için bir oyun kazanmalısınız.</string>
|
||||
<string name="unknown_error">Bilinmeyen hata.</string>
|
||||
<string name="leaderboards">Liderlik Tablosu</string>
|
||||
<string name="cancel">İptal</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Evet</string>
|
||||
<string name="unlock">Kilidini Aç</string>
|
||||
<string name="achievements">Başarımlar</string>
|
||||
<string name="rating_button_no">Hayır</string>
|
||||
<string name="no">Hayır</string>
|
||||
<string name="general">Genel</string>
|
||||
<string name="source_code">Kaynak Kodu</string>
|
||||
<string name="translation">Çeviri</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Bayrak yerleştirildi!</string>
|
||||
<string name="flag_removed">Bayrak kaldırıldı!</string>
|
||||
<string name="remove_ad">Reklamları kaldır</string>
|
||||
<string name="help">Yardım</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="uk">
|
||||
<string name="app_name">Сапер</string>
|
||||
<string name="app_description">Вам потрібно очистити поле від схованих мін, не детонуючи їх.</string>
|
||||
<string name="tutorial">Навчальний посібник</string>
|
||||
<string name="tutorial_completed">Навчання пройдено</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Ігри</string>
|
||||
<string name="previous_games">Попередня гра</string>
|
||||
<string name="minefield">Складність</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Прапор</string>
|
||||
<string name="retry">Повторити</string>
|
||||
<string name="empty">Пусто</string>
|
||||
<string name="cant_do_it_now">Неможливо зробити це зараз</string>
|
||||
<string name="you_have_received">Ви отримали: +%1$d</string>
|
||||
<string name="help_win_a_game">Для отримання додаткової допомоги ви повинні виграти гру.</string>
|
||||
<string name="unknown_error">Невідома помилка.</string>
|
||||
<string name="leaderboards">Таблиця лідерів</string>
|
||||
<string name="cancel">Відмінити</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Так</string>
|
||||
<string name="unlock">Розблокування</string>
|
||||
<string name="achievements">Досягнення</string>
|
||||
<string name="rating_button_no">Ні</string>
|
||||
<string name="no">Ні</string>
|
||||
<string name="general">Загальне</string>
|
||||
<string name="source_code">Вихідний код</string>
|
||||
<string name="translation">Переклад</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Прапор розміщено!</string>
|
||||
<string name="flag_removed">Прапор вилучено!</string>
|
||||
<string name="remove_ad">Прибрати рекламу</string>
|
||||
<string name="help">Help</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="vi">
|
||||
<string name="app_name">Dò mìn</string>
|
||||
<string name="app_description">Bạn phải mở tất cả các ô trên một bãi mìn mà không làm nổ cục mìn nào.</string>
|
||||
<string name="tutorial">Hướng dẫn</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Trò chơi</string>
|
||||
<string name="previous_games">Trò chơi Trước</string>
|
||||
<string name="minefield">Độ khó</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">Cờ</string>
|
||||
<string name="retry">Thử lại</string>
|
||||
<string name="empty">Trống</string>
|
||||
<string name="cant_do_it_now">Không thể làm điều đó bây giờ</string>
|
||||
<string name="you_have_received">Bạn đã nhận được: +%1$d</string>
|
||||
<string name="help_win_a_game">Để có thêm Trợ giúp, bạn phải thắng một trò chơi.</string>
|
||||
<string name="unknown_error">Lỗi không xác định.</string>
|
||||
<string name="leaderboards">Bảng xếp hạng</string>
|
||||
<string name="cancel">Huỷ</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">Có</string>
|
||||
<string name="unlock">Mở khoá</string>
|
||||
<string name="achievements">Thành tựu</string>
|
||||
<string name="rating_button_no">Không</string>
|
||||
<string name="no">Không</string>
|
||||
<string name="general">Tổng quan</string>
|
||||
<string name="source_code">Mã nguồn</string>
|
||||
<string name="translation">Dịch thuật</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">Đã cắm cờ!</string>
|
||||
<string name="flag_removed">Đã tháo cờ hiệu!</string>
|
||||
<string name="remove_ad">Loại bỏ quảng cáo</string>
|
||||
<string name="help">Trợ Giúp</string>
|
||||
</resources>
|
||||
|
|
|
@ -2,6 +2,19 @@
|
|||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="zh-rCN">
|
||||
<string name="app_name">Antimine - 扫雷</string>
|
||||
<string name="app_description">你需要清除一个隐藏着地雷的矩形面板,不能使任何地雷爆炸。</string>
|
||||
<string name="tutorial">教学模式</string>
|
||||
<string name="tutorial_completed">已完成的教程</string>
|
||||
<string name="tutorial_0_bottom">你可以在任意的正方形开始 %1$s.</string>
|
||||
<string name="tutorial_1_top">数字表明有多少地雷与高亮的正方形相邻。</string>
|
||||
<string name="tutorial_1_bottom">因此,如果角 1️⃣ 只有一个相邻的正方形,它必须是一个地雷。 %1$s 来标记它。</string>
|
||||
<string name="tutorial_2_top">下一个未打开的方块没有地雷,因为数字是 1️⃣ , 而不是 2️⃣ 。</string>
|
||||
<string name="tutorial_2_bottom">您可以通过 %1$s 打开它。</string>
|
||||
<string name="tutorial_3_top">此 1️⃣ 发生同样的情况。您知道其相邻的矿藏在哪里。</string>
|
||||
<string name="tutorial_3_bottom">您可以在 1️⃣ 旁打开所有其他未打开的方块</string>
|
||||
<string name="tutorial_4_top">我们知道其中一枚地雷在哪里,因此,另一枚地雷只有一种可能性。</string>
|
||||
<string name="tutorial_4_bottom">%1$s 标记附近的 2️⃣ 的矿。</string>
|
||||
<string name="tutorial_5_top">检查高亮的数字。</string>
|
||||
<string name="tutorial_5_bottom">%1$s 打开或 %2$s 标记。</string>
|
||||
<string name="games">游戏</string>
|
||||
<string name="previous_games">上一局</string>
|
||||
<string name="minefield">难度</string>
|
||||
|
@ -65,6 +78,9 @@
|
|||
<string name="flag_tile">标志</string>
|
||||
<string name="retry">重试</string>
|
||||
<string name="empty">空</string>
|
||||
<string name="cant_do_it_now">现在无法做到这一点。</string>
|
||||
<string name="you_have_received">您已收到: +%1$d</string>
|
||||
<string name="help_win_a_game">为了获得更多帮助,你必须赢得一场游戏。</string>
|
||||
<string name="unknown_error">未知错误。</string>
|
||||
<string name="leaderboards">排行榜</string>
|
||||
<string name="cancel">取消</string>
|
||||
|
@ -72,7 +88,7 @@
|
|||
<string name="yes">是</string>
|
||||
<string name="unlock">解锁</string>
|
||||
<string name="achievements">成就</string>
|
||||
<string name="rating_button_no">否</string>
|
||||
<string name="no">否</string>
|
||||
<string name="general">通用</string>
|
||||
<string name="source_code">源代码</string>
|
||||
<string name="translation">翻译</string>
|
||||
|
@ -103,4 +119,5 @@
|
|||
<string name="flag_placed">标记已放置!</string>
|
||||
<string name="flag_removed">标记已移除!</string>
|
||||
<string name="remove_ad">去除广告</string>
|
||||
<string name="help">帮助</string>
|
||||
</resources>
|
||||
|
|
|
@ -1,7 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" tools:locale="en">
|
||||
<string name="app_name">Antimine</string>
|
||||
<string name="app_description">You have to clear a rectangular board containing hidden mines without detonating any of them.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="tutorial_completed">Tutorial Completed</string>
|
||||
<string name="tutorial_0_bottom">You can start by %1$s at any random square.</string>
|
||||
<string name="tutorial_1_top">The numbers indicates how many mines are adjacent to the highlighted square.</string>
|
||||
<string name="tutorial_1_bottom">Therefore, if the corner 1️⃣ has only one adjacent square, it must be a mine. %1$s to flag it.</string>
|
||||
<string name="tutorial_2_top">The next unopened square doesn\'t have a mine because the number is 1️⃣ , not 2️⃣ .</string>
|
||||
<string name="tutorial_2_bottom">You can open it by %1$s.</string>
|
||||
<string name="tutorial_3_top">The same happens on this 1️⃣ . You know where its adjacent mine is.</string>
|
||||
<string name="tutorial_3_bottom">You can open all other unopened squares adjacent to 1️⃣ .</string>
|
||||
<string name="tutorial_4_top">We know where one of the mines are. So, there\'s only one possibility to the other one.</string>
|
||||
<string name="tutorial_4_bottom">%1$s to flag the mine adjacent to 2️⃣ .</string>
|
||||
<string name="tutorial_5_top">Check the highlighted number.</string>
|
||||
<string name="tutorial_5_bottom">%1$s to open or %2$s to mark.</string>
|
||||
<string name="games">Games</string>
|
||||
<string name="previous_games">Previous Games</string>
|
||||
<string name="minefield">Difficulty</string>
|
||||
|
@ -9,6 +20,7 @@
|
|||
<string name="beginner">Beginner</string>
|
||||
<string name="intermediate">Intermediate</string>
|
||||
<string name="expert">Expert</string>
|
||||
<string name="support_description">With your help, we\'ll be able to implement new features and keep our project active.</string>
|
||||
<string name="open">Open</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="animations">Animations</string>
|
||||
|
@ -33,7 +45,6 @@
|
|||
<string name="system">System</string>
|
||||
<string name="rating">Feedback</string>
|
||||
<string name="support_title">Support us!</string>
|
||||
<string name="support_description">With your help, we\'ll be able to implement new features and keep our project active.</string>
|
||||
<string name="support_action">To support</string>
|
||||
<string name="rating_message">If you like this game, please give us a feedback. It will help us a lot.</string>
|
||||
<string name="used_software_text">This game uses the following third parties software:</string>
|
||||
|
@ -65,6 +76,9 @@
|
|||
<string name="flag_tile">Flag</string>
|
||||
<string name="retry">Retry</string>
|
||||
<string name="empty">Empty</string>
|
||||
<string name="cant_do_it_now">Impossible to do that now</string>
|
||||
<string name="you_have_received">You have received: +%1$d</string>
|
||||
<string name="help_win_a_game">For more Help, you must win a game.</string>
|
||||
<string name="unknown_error">Unknown error.</string>
|
||||
<string name="leaderboards">Leaderboards</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
|
@ -72,7 +86,7 @@
|
|||
<string name="yes">Yes</string>
|
||||
<string name="unlock">Unlock</string>
|
||||
<string name="achievements">Achievements</string>
|
||||
<string name="rating_button_no">No</string>
|
||||
<string name="no">No</string>
|
||||
<string name="general">General</string>
|
||||
<string name="source_code">Source Code</string>
|
||||
<string name="translation">Translation</string>
|
||||
|
@ -103,4 +117,7 @@
|
|||
<string name="flag_placed">Flag placed!</string>
|
||||
<string name="flag_removed">Flag removed!</string>
|
||||
<string name="remove_ad">Remove Ads</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="app_description">You have to clear a rectangular board containing hidden mines without detonating any of them.</string>
|
||||
<string name="app_name">Antimine</string>
|
||||
</resources>
|
||||
|
|
|
@ -6,8 +6,8 @@ android {
|
|||
compileSdkVersion 30
|
||||
|
||||
defaultConfig {
|
||||
versionCode 800111
|
||||
versionName '8.0.11'
|
||||
versionCode 800101
|
||||
versionName '8.1.0'
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 30
|
||||
}
|
||||
|
|
|
@ -10,8 +10,8 @@ android {
|
|||
compileSdkVersion 30
|
||||
|
||||
defaultConfig {
|
||||
versionCode 800111
|
||||
versionName '8.0.11'
|
||||
versionCode 800101
|
||||
versionName '8.1.0'
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 30
|
||||
}
|
||||
|
|
|
@ -8,8 +8,8 @@ android {
|
|||
|
||||
defaultConfig {
|
||||
// versionCode and versionName must be hardcoded to support F-droid
|
||||
versionCode 800111
|
||||
versionName '8.0.11'
|
||||
versionCode 800101
|
||||
versionName '8.1.0'
|
||||
applicationId 'dev.lucasnlm.antimine'
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 30
|
||||
|
|
|
@ -17,8 +17,6 @@ class WatchLevelFragment : CommonLevelFragment(R.layout.fragment_level) {
|
|||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
recyclerGrid = view.findViewById(R.id.recyclerGrid)
|
||||
recyclerGrid.doOnLayout {
|
||||
lifecycleScope.launch {
|
||||
val levelSetup = gameViewModel.loadLastGame()
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="new_game">New Game</string>
|
||||
<string name="victory">You won! 😎</string>
|
||||
<string name="game_over">Exploded! 😢</string>
|
||||
<string name="new_game">Nyt spil</string>
|
||||
<string name="victory">Du vandt! 😎</string>
|
||||
<string name="game_over">Eksploderet! 😢</string>
|
||||
</resources>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="new_game">New Game</string>
|
||||
<string name="victory">You won! 😎</string>
|
||||
<string name="game_over">Exploded! 😢</string>
|
||||
<string name="new_game">משחק חדש</string>
|
||||
<string name="victory">נצחון! 😎</string>
|
||||
<string name="game_over">פיצוץ! 😢</string>
|
||||
</resources>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="new_game">New Game</string>
|
||||
<string name="victory">You won! 😎</string>
|
||||
<string name="game_over">Exploded! 😢</string>
|
||||
<string name="new_game">새 게임</string>
|
||||
<string name="victory">승리! 😎</string>
|
||||
<string name="game_over">펑! 게임 오버! 😢</string>
|
||||
</resources>
|
||||
|
|
Loading…
Reference in a new issue