Попробовали относительно новую настолку "Космические дальнобойщики". Автор — Влаада Хватил, тот самый чех, который создал великую и нашумевшую Codenames.
Конкретно Galaxy Trucker он создал ещё раньше, но в какой-то момент решил чуть-чуть доработать и выпустить переиздание. В игре вы сначала собираете из тайлов космические корабли по определённым правилам. У кораблей есть, например, пушки, защитные поля, двигатели, отсеки для грузов и экипажа.
Затем летите доставлять грузы, и каждый ход тянется карта с происшествием. Это может быть что-то нейтральное (вы просто летите вперёд), что-то хорошее (вы забираете грузы, за которые потом вам заплатят) и что-то плохое (метеоритный дождь или нападение пиратов). Для того, чтобы справиться с разными проблемами, у вас на корабле должно быть подходящее оборудование, ещё и расположенное нужным образом. Прикольно сделана механика попадания метеоритов: точка удара задаётся броском кубиков, и ты реально каждый раз надеешься, что космический камень не попадёт в уязвимое место. Иногда такими ударами или, например, выстрелами пиратов сносит половину корабля, приходится дальше лететь на обломке.
Игра простая, но создаёт нужный экшен. Ещё за сравнительно небольшую цену в коробке много качественных компонентов. Вполне себе неплохой вариант для завершения настольного вечера после какой-нибудь более тяжёлой евростратегии.
#games
🚀 Вышел стабильный JavaScript движок от Google для Android
Новая стабильная библиотека Jetpack JavaScript Engine позволит разработчикам выполнять JS код в изолированной и ограниченной среде.
class MainActivity : ComponentActivity() {
// Теперь nullable, без lateinit
private var jsSandbox: JavaScriptSandbox? = null
private var jsIsolate: JavaScriptIsolate? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (!JavaScriptSandbox.isSupported()) {
Log.e("JS", "JavaScriptSandbox не поддерживается")
return
}
lifecycleScope.launch {
// Создаём и сохраняем в nullable-поле
jsSandbox = JavaScriptSandbox
.createConnectedInstanceAsync(applicationContext)
.await()
jsIsolate = jsSandbox?.createIsolate()
// При выполнении гарантируем, что jsIsolate != null
val result: String = jsIsolate
?.evaluateJavaScriptAsync(JS_SCRIPT_SCRING)
?.await()
?: "Ошибка: isolate не инициализирован"
Log.d("JS", "Результат выполнения: $result")
}
}
override fun onDestroy() {
super.onDestroy()
// Закрываем только если не null
jsIsolate?.close()
jsSandbox?.close()
}
}
#jetpack#js