GitHub - JetBrains/kotlinconf-spinner
source link: https://github.com/jetbrains/kotlinconf-spinner
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Kotlin Spinner Game
Simple spinner-like game intended to demonstrate capabilities of Kotlin/Native software stack
How to play
- Download and install the mobile application for Android or iOS
- The system will automatically assign you to a random team. Each team has a unique colour
- Spin the Kotlin logo using your fingers, or alternatively shake your phone
- Each two full rotations (i.e. 720 degrees) will increment your team's score
- The team with the highest score wins
Technical details
The entire application is implemented using Kotlin/Native
Server-Side
Server side runs on a linux server and is implemented using:
- microHTTPD HTTP server library
- SQLite for the database, storing score
- Jansson for JSON serialization and client/server communication
Client-Side
Android
You need to have ANDROID_HOME set to your Android SDK location.
Client side for Android is implemented in pure Kotlin/Native, as a Native Activity using:
- GLES version 3 interop for 3D rendering
- NDK input handling for input processing
- Open AL interop for sound playback
- Sensors native API
- libcurl file transfer library as HTTP client
Client side for iOS is implemented in pure Kotlin/Native using:
Implementation details
- Most graphical code, sound playback and user input reaction is shared between Android and iOS
- Server interaction on Android is asynchronous from the UI thread, using workers
- HTTP server works in multithreaded mode, state sharing between sessions performed via SQLite DB access
- Android app is split into separate loader and application code, so that dynamic library (libopenal.so) included with application can be used on older Androids
- WebAssembly frontend can fetch and render stats in the browser
Project Sources
Use JDK1.8, for Android compatibility, i.e.: export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home
To use microhttpd (HTTP server) install it, i.e.:
port install libmicrohttpd
apt install libmicrohttpd-dev
To use jansson (JSON library) install it, i.e.:
port install jansson
apt install libjansson-dev
To use sqlite (embedded SQL server) install it:
port install sqlite3
apt install libsqlite3-dev
To use curl (HTTP client) install it:
port install curl
apt install libcurl3-nss
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK