diff --git a/android/gradle.properties b/android/gradle.properties index 818e87b23b224ced309ae5c147e5ed827826e237..db7a1ee2908d6e94aeb319e1c1b548a8bb245891 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=0.0.2 -app.versionCode=2 +app.versionName=0.0.3 +app.versionCode=3 diff --git a/assets/icons/button_back.png b/assets/icons/button_back.png new file mode 100644 index 0000000000000000000000000000000000000000..2a802ff2d2bc0c90488a1c319288be9f28cdea5e Binary files /dev/null and b/assets/icons/button_back.png differ diff --git a/assets/icons/button_start.png b/assets/icons/button_start.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3b74a3b98f45de590a7f290b810daba7120912 Binary files /dev/null and b/assets/icons/button_start.png differ diff --git a/assets/icons/difficulty_easy.png b/assets/icons/difficulty_easy.png new file mode 100644 index 0000000000000000000000000000000000000000..66f1476dadfda62b03378a040f10737d9edbab1c Binary files /dev/null and b/assets/icons/difficulty_easy.png differ diff --git a/assets/icons/difficulty_hard.png b/assets/icons/difficulty_hard.png new file mode 100644 index 0000000000000000000000000000000000000000..2c1aef8bb260d6e5241a0856c11cfae129c9d24e Binary files /dev/null and b/assets/icons/difficulty_hard.png differ diff --git a/assets/icons/difficulty_medium.png b/assets/icons/difficulty_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..146d9b9ca714b9c82e9a5188e88e5cc8736b893e Binary files /dev/null and b/assets/icons/difficulty_medium.png differ diff --git a/assets/icons/difficulty_nightmare.png b/assets/icons/difficulty_nightmare.png new file mode 100644 index 0000000000000000000000000000000000000000..4cda5bce2f117d694c2940ba080121c4bc0c8b74 Binary files /dev/null and b/assets/icons/difficulty_nightmare.png differ diff --git a/assets/icons/game_fail.png b/assets/icons/game_fail.png new file mode 100644 index 0000000000000000000000000000000000000000..e93f8fa2815c0bac52c52a719f296671ac841e08 Binary files /dev/null and b/assets/icons/game_fail.png differ diff --git a/assets/icons/game_win.png b/assets/icons/game_win.png new file mode 100644 index 0000000000000000000000000000000000000000..d73741df40e8cb97e2bf0eec929bba2e7859459a Binary files /dev/null and b/assets/icons/game_win.png differ diff --git a/assets/icons/size_10x10.png b/assets/icons/size_10x10.png new file mode 100644 index 0000000000000000000000000000000000000000..7cdbbb197a5dc4cab3a3e41259f8a3fa39cff9b8 Binary files /dev/null and b/assets/icons/size_10x10.png differ diff --git a/assets/icons/size_15x15.png b/assets/icons/size_15x15.png new file mode 100644 index 0000000000000000000000000000000000000000..45b2f4b3c2d657cd840e5ace4ceac18a8e4386f3 Binary files /dev/null and b/assets/icons/size_15x15.png differ diff --git a/assets/icons/size_20x20.png b/assets/icons/size_20x20.png new file mode 100644 index 0000000000000000000000000000000000000000..29ec37fc99149d700b7d4627fd13e982347da8fb Binary files /dev/null and b/assets/icons/size_20x20.png differ diff --git a/assets/skins/default_0.png b/assets/skins/default_0.png new file mode 100644 index 0000000000000000000000000000000000000000..586de0573e7f77d97c16942f603b8ee6d9c7d7bc Binary files /dev/null and b/assets/skins/default_0.png differ diff --git a/assets/skins/default_1.png b/assets/skins/default_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c4b951d92fa7c2c3d7843ef06e725fab8fc34e48 Binary files /dev/null and b/assets/skins/default_1.png differ diff --git a/assets/skins/default_2.png b/assets/skins/default_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c47dee8a726f1e8e7f5193bfd5650f608e755124 Binary files /dev/null and b/assets/skins/default_2.png differ diff --git a/assets/skins/default_3.png b/assets/skins/default_3.png new file mode 100644 index 0000000000000000000000000000000000000000..7da3d63267168150d65b94e11187d833f63d5e6a Binary files /dev/null and b/assets/skins/default_3.png differ diff --git a/assets/skins/default_4.png b/assets/skins/default_4.png new file mode 100644 index 0000000000000000000000000000000000000000..1bfd5edb7930ebf522874d20a79596bc03b5fe49 Binary files /dev/null and b/assets/skins/default_4.png differ diff --git a/assets/skins/default_5.png b/assets/skins/default_5.png new file mode 100644 index 0000000000000000000000000000000000000000..38d695079a8377d20cb67e7e300a2a9b2c38da69 Binary files /dev/null and b/assets/skins/default_5.png differ diff --git a/assets/skins/default_6.png b/assets/skins/default_6.png new file mode 100644 index 0000000000000000000000000000000000000000..a9074fa7dfbdcb7506cf0296c9385eb7bc410269 Binary files /dev/null and b/assets/skins/default_6.png differ diff --git a/assets/skins/default_7.png b/assets/skins/default_7.png new file mode 100644 index 0000000000000000000000000000000000000000..8bf9bda2e28c5ef165e2a8e0ed3eaee7973be116 Binary files /dev/null and b/assets/skins/default_7.png differ diff --git a/assets/skins/default_8.png b/assets/skins/default_8.png new file mode 100644 index 0000000000000000000000000000000000000000..8733181012a39f2acc822446787d29bc79c113ec Binary files /dev/null and b/assets/skins/default_8.png differ diff --git a/assets/skins/default_mine.png b/assets/skins/default_mine.png new file mode 100644 index 0000000000000000000000000000000000000000..71f1ea3c0204c33522ed29671136ea61d074e4b6 Binary files /dev/null and b/assets/skins/default_mine.png differ diff --git a/assets/skins/default_unknown.png b/assets/skins/default_unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..be034071b95e7be9a24632a1ff4c7a68ad25b0c7 Binary files /dev/null and b/assets/skins/default_unknown.png differ diff --git a/assets/skins/empty.png b/assets/skins/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..586de0573e7f77d97c16942f603b8ee6d9c7d7bc Binary files /dev/null and b/assets/skins/empty.png differ diff --git a/fastlane/metadata/android/en-US/changelogs/1.txt b/fastlane/metadata/android/en-US/changelogs/1.txt new file mode 100644 index 0000000000000000000000000000000000000000..777d1a0ba948b3f865c80691b3dbd9989ab3cefe --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/1.txt @@ -0,0 +1 @@ +Add initial empty app diff --git a/fastlane/metadata/android/en-US/changelogs/2.txt b/fastlane/metadata/android/en-US/changelogs/2.txt new file mode 100644 index 0000000000000000000000000000000000000000..fe56ebf91e506ee59b7d03cf8b12af27f3218d98 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/2.txt @@ -0,0 +1 @@ +Improve CI/CD, add jabber notification on create tag diff --git a/fastlane/metadata/android/en-US/changelogs/3.txt b/fastlane/metadata/android/en-US/changelogs/3.txt new file mode 100644 index 0000000000000000000000000000000000000000..c4767c31cd60be21ad424c3e0b8357a7a045e229 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/3.txt @@ -0,0 +1 @@ +Add minimal playable game. diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt new file mode 100644 index 0000000000000000000000000000000000000000..fe3f142e53937dcc8b1e95ccee28655b2732e27f --- /dev/null +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -0,0 +1 @@ +Simple Minehunter Game diff --git a/fastlane/metadata/android/en-US/images/icon.png b/fastlane/metadata/android/en-US/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a8cff21a3902028c01974a4f3062e10c15544ee9 Binary files /dev/null and b/fastlane/metadata/android/en-US/images/icon.png differ diff --git a/fastlane/metadata/android/en-US/short_description.txt b/fastlane/metadata/android/en-US/short_description.txt new file mode 100644 index 0000000000000000000000000000000000000000..fe3f142e53937dcc8b1e95ccee28655b2732e27f --- /dev/null +++ b/fastlane/metadata/android/en-US/short_description.txt @@ -0,0 +1 @@ +Simple Minehunter Game diff --git a/fastlane/metadata/android/en-US/title.txt b/fastlane/metadata/android/en-US/title.txt new file mode 100644 index 0000000000000000000000000000000000000000..fe3f142e53937dcc8b1e95ccee28655b2732e27f --- /dev/null +++ b/fastlane/metadata/android/en-US/title.txt @@ -0,0 +1 @@ +Simple Minehunter Game diff --git a/fastlane/metadata/android/fr-FR/changelogs/1.txt b/fastlane/metadata/android/fr-FR/changelogs/1.txt new file mode 100644 index 0000000000000000000000000000000000000000..92466631aefea3581239016047dac2ac13731baa --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/1.txt @@ -0,0 +1 @@ +Création de l'application minimale, vide. diff --git a/fastlane/metadata/android/fr-FR/changelogs/2.txt b/fastlane/metadata/android/fr-FR/changelogs/2.txt new file mode 100644 index 0000000000000000000000000000000000000000..cdf380ac4f91ab3c0d9d07ac7af06ee46adfa7a2 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/2.txt @@ -0,0 +1 @@ +Amélioration de la chaîne CI/CD, envoi d'un message à la création de version diff --git a/fastlane/metadata/android/fr-FR/changelogs/3.txt b/fastlane/metadata/android/fr-FR/changelogs/3.txt new file mode 100644 index 0000000000000000000000000000000000000000..75d529883f8fa154d4ea9bd7307daab48f0680d0 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/3.txt @@ -0,0 +1 @@ +Ajout du jeu minimal, jouable. diff --git a/fastlane/metadata/android/fr-FR/full_description.txt b/fastlane/metadata/android/fr-FR/full_description.txt new file mode 100644 index 0000000000000000000000000000000000000000..170a1a633d68331f0ae329b7d3af80123aac1ce5 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/full_description.txt @@ -0,0 +1 @@ +Jeu du démineur simple diff --git a/fastlane/metadata/android/fr-FR/short_description.txt b/fastlane/metadata/android/fr-FR/short_description.txt new file mode 100644 index 0000000000000000000000000000000000000000..170a1a633d68331f0ae329b7d3af80123aac1ce5 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/short_description.txt @@ -0,0 +1 @@ +Jeu du démineur simple diff --git a/fastlane/metadata/android/fr-FR/title.txt b/fastlane/metadata/android/fr-FR/title.txt new file mode 100644 index 0000000000000000000000000000000000000000..170a1a633d68331f0ae329b7d3af80123aac1ce5 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/title.txt @@ -0,0 +1 @@ +Jeu du démineur simple diff --git a/icons/build_icons.sh b/icons/build_application_icons.sh similarity index 92% rename from icons/build_icons.sh rename to icons/build_application_icons.sh index fefc393e2f601cd671938068d23247d6bfb1682b..569a16a50dd3015a45c291a93305ff0f67f77c72 100755 --- a/icons/build_icons.sh +++ b/icons/build_application_icons.sh @@ -4,7 +4,6 @@ command -v inkscape >/dev/null 2>&1 || { echo >&2 "I require inkscape but it's not installed. Aborting."; exit 1; } command -v scour >/dev/null 2>&1 || { echo >&2 "I require scour but it's not installed. Aborting."; exit 1; } command -v optipng >/dev/null 2>&1 || { echo >&2 "I require optipng but it's not installed. Aborting."; exit 1; } -command -v convert >/dev/null 2>&1 || { echo >&2 "I require convert (imagemagick) but it's not installed. Aborting."; exit 1; } CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" BASE_DIR="$(dirname "${CURRENT_DIR}")" @@ -46,3 +45,4 @@ build_icon 48 ${BASE_DIR}/android/app/src/main/res/mipmap-mdpi/ic_launcher build_icon 96 ${BASE_DIR}/android/app/src/main/res/mipmap-xhdpi/ic_launcher build_icon 144 ${BASE_DIR}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher build_icon 192 ${BASE_DIR}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher +build_icon 512 ${BASE_DIR}/fastlane/metadata/android/en-US/images/icon diff --git a/icons/build_game_icons.sh b/icons/build_game_icons.sh new file mode 100755 index 0000000000000000000000000000000000000000..aae2bcba4f5c4a055565bdc501e43ab802c7c377 --- /dev/null +++ b/icons/build_game_icons.sh @@ -0,0 +1,74 @@ +#! /bin/bash + +# Check dependencies +command -v inkscape >/dev/null 2>&1 || { echo >&2 "I require inkscape but it's not installed. Aborting."; exit 1; } +command -v scour >/dev/null 2>&1 || { echo >&2 "I require scour but it's not installed. Aborting."; exit 1; } +command -v optipng >/dev/null 2>&1 || { echo >&2 "I require optipng but it's not installed. Aborting."; exit 1; } + +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" +BASE_DIR="$(dirname "${CURRENT_DIR}")" + +OPTIPNG_OPTIONS="-preserve -quiet -o7" + +# optimize svg +function optimize_svg() { + SOURCE="$1" + + cp ${SOURCE} ${SOURCE}.tmp + scour \ + --remove-descriptive-elements \ + --enable-id-stripping \ + --enable-viewboxing \ + --enable-comment-stripping \ + --nindent=4 \ + -i ${SOURCE}.tmp \ + -o ${SOURCE} + rm ${SOURCE}.tmp +} + +# build icons +function build_icon() { + ICON_SIZE=192 + SOURCE="$1" + TARGET="$2" + + optimize_svg "${SOURCE}" + + inkscape \ + --export-width=${ICON_SIZE} \ + --export-height=${ICON_SIZE} \ + --export-filename=${TARGET} \ + ${SOURCE} + + optipng ${OPTIPNG_OPTIONS} ${TARGET} +} + +function build_icon_for_skin() { + SKIN_CODE="$1" + + build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/mine.svg ${BASE_DIR}/assets/skins/${SKIN_CODE}_mine.png + build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/unknown.svg ${BASE_DIR}/assets/skins/${SKIN_CODE}_unknown.png + for VALUE in {0..8}; + do + if [ -f "${CURRENT_DIR}/skins/${SKIN_CODE}/${VALUE}.svg" ]; then + build_icon ${CURRENT_DIR}/skins/${SKIN_CODE}/${VALUE}.svg ${BASE_DIR}/assets/skins/${SKIN_CODE}_${VALUE}.png + fi + done +} + +# Game icons +build_icon ${CURRENT_DIR}/button_back.svg ${BASE_DIR}/assets/icons/button_back.png +build_icon ${CURRENT_DIR}/button_start.svg ${BASE_DIR}/assets/icons/button_start.png +build_icon ${CURRENT_DIR}/difficulty_easy.svg ${BASE_DIR}/assets/icons/difficulty_easy.png +build_icon ${CURRENT_DIR}/difficulty_medium.svg ${BASE_DIR}/assets/icons/difficulty_medium.png +build_icon ${CURRENT_DIR}/difficulty_hard.svg ${BASE_DIR}/assets/icons/difficulty_hard.png +build_icon ${CURRENT_DIR}/difficulty_nightmare.svg ${BASE_DIR}/assets/icons/difficulty_nightmare.png +build_icon ${CURRENT_DIR}/game_fail.svg ${BASE_DIR}/assets/icons/game_fail.png +build_icon ${CURRENT_DIR}/game_win.svg ${BASE_DIR}/assets/icons/game_win.png +build_icon ${CURRENT_DIR}/size_10x10.svg ${BASE_DIR}/assets/icons/size_10x10.png +build_icon ${CURRENT_DIR}/size_15x15.svg ${BASE_DIR}/assets/icons/size_15x15.png +build_icon ${CURRENT_DIR}/size_20x20.svg ${BASE_DIR}/assets/icons/size_20x20.png +build_icon ${CURRENT_DIR}/skins/empty.svg ${BASE_DIR}/assets/skins/empty.png + +# Skins +build_icon_for_skin "default" diff --git a/icons/button_back.svg b/icons/button_back.svg new file mode 100644 index 0000000000000000000000000000000000000000..2622a578dba53ce582afabfc587c2a85a1fb6eaa --- /dev/null +++ b/icons/button_back.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x=".44662" y=".89101" width="92.772" height="91.894" ry="11.689" fill="#e41578" stroke="#fff" stroke-width=".238"/><path d="m59.387 71.362c1.1248 1.1302 4.0012 1.1302 4.0012 0v-45.921c0-1.1316-2.8832-1.1316-4.0121 0l-37.693 20.918c-1.1289 1.1248-1.1479 2.9551-0.02171 4.084z" fill="#fefeff" stroke="#930e4e" stroke-linecap="round" stroke-linejoin="round" stroke-width="8.257"/><path d="m57.857 68.048c0.96243 0.96706 3.4236 0.96706 3.4236 0v-39.292c0-0.96825-2.467-0.96825-3.4329 0l-32.252 17.898c-0.96594 0.96243-0.9822 2.5285-0.01858 3.4945z" fill="#fefeff" stroke="#feffff" stroke-linecap="round" stroke-linejoin="round" stroke-width="4.314"/></svg> diff --git a/icons/button_start.svg b/icons/button_start.svg new file mode 100644 index 0000000000000000000000000000000000000000..e9d49d2172b9a0305db82779971e3c1e12f34a70 --- /dev/null +++ b/icons/button_start.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x=".44662" y=".89101" width="92.772" height="91.894" ry="11.689" fill="#49a1ee" stroke="#fff" stroke-width=".238"/><path d="m34.852 25.44c-1.1248-1.1302-4.0012-1.1302-4.0012 0v45.921c0 1.1316 2.8832 1.1316 4.0121 0l37.693-20.918c1.1289-1.1248 1.1479-2.9551 0.02171-4.084z" fill="#fefeff" stroke="#105ca1" stroke-linecap="round" stroke-linejoin="round" stroke-width="8.257"/><path d="m36.382 28.754c-0.96243-0.96706-3.4236-0.96706-3.4236 0v39.292c0 0.96825 2.467 0.96825 3.4329 0l32.252-17.898c0.96594-0.96243 0.9822-2.5285 0.01858-3.4945z" fill="#fefeff" stroke="#feffff" stroke-linecap="round" stroke-linejoin="round" stroke-width="4.314"/></svg> diff --git a/icons/difficulty_easy.svg b/icons/difficulty_easy.svg new file mode 100644 index 0000000000000000000000000000000000000000..da0e21f6c94972d3e3f19d21cd44d4f712e3174d --- /dev/null +++ b/icons/difficulty_easy.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 102 102" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="100" height="100" ry="0" fill="#41ff6a" stroke="#000" stroke-width="2"/><path d="m23.408 53.415 20.8 13.7c0.2 0.1 0.3 0.2 0.5 0.3 1.3 0.5 2.8-0.1 3.3-1.3 0.5-1.3-0.1-2.8-1.3-3.3l-23.2-9.6c-0.2 0-0.3 0.2-0.1 0.2zm23.7 11.6c0.1 0.8-0.5 1.4-1.3 1.5s-1.4-0.5-1.5-1.3 0.5-1.4 1.3-1.5c0.8 0 1.5 0.5 1.5 1.3z"/><path d="m41.708 36.515c0.1 0.4 0.6 0.7 1 0.7 0.9-0.1 1.9-0.1 2.8-0.1 1.5 0 2.9 0.1 4.3 0.3 0.6 0.1 1.2-0.4 1.2-1v-6.9c0-0.6-0.5-1-1-1-3.2 0.1-6.4 0.7-9.3 1.6-0.5 0.2-0.8 0.7-0.6 1.3z"/><path d="m52.508 37.815c2.1 0.5 4.2 1.3 6.2 2.2 0.5 0.3 1.2 0 1.4-0.6l2.7-8.2c0.2-0.5-0.1-1.1-0.6-1.3-3-0.9-6.1-1.5-9.3-1.6-0.6 0-1 0.4-1 1v7.5c-0.1 0.5 0.2 0.9 0.6 1z"/><path d="m81.508 46.115-8.4 6.1c-0.4 0.3-0.5 0.8-0.3 1.3 0.9 1.6 1.6 3.2 2.2 4.9 0.2 0.5 0.7 0.8 1.2 0.6l9.8-3.2c0.5-0.2 0.8-0.7 0.6-1.3-1-2.9-2.3-5.7-3.8-8.2-0.2-0.4-0.9-0.6-1.3-0.2z"/><path d="m32.908 40.015c2.3-1.1 4.7-2 7.2-2.5 0.6-0.1 1-0.7 0.8-1.3l-1.5-4.7c-0.2-0.5-0.8-0.8-1.3-0.6-2.9 1.2-5.7 2.7-8.2 4.6-0.4 0.3-0.5 0.9-0.2 1.4l2 2.8c0.2 0.4 0.8 0.5 1.2 0.3z"/><path d="m63.408 31.615-2.8 8.6c-0.1 0.4 0 0.9 0.4 1.1 1.7 1 3.4 2.2 4.9 3.6 0.4 0.4 1.1 0.3 1.5-0.1l5.7-7.9c0.3-0.4 0.2-1.1-0.2-1.4-2.5-1.9-5.3-3.4-8.2-4.6-0.5-0.2-1.1 0.1-1.3 0.7z"/><path d="m67.908 46.815c1.3 1.4 2.5 2.8 3.5 4.4 0.3 0.5 0.9 0.6 1.4 0.3l8.3-6c0.4-0.3 0.5-0.9 0.2-1.4-1.8-2.5-3.9-4.8-6.2-6.8-0.4-0.4-1.1-0.3-1.5 0.2l-5.9 8.1c-0.2 0.3-0.2 0.8 0.2 1.2z"/><path d="m24.408 46.315c1.8-2 3.9-3.7 6.2-5.1 0.5-0.3 0.6-1 0.3-1.4l-1.8-2.4c-0.3-0.5-1-0.6-1.5-0.2-2.3 2-4.4 4.3-6.2 6.8-0.3 0.4-0.2 1.1 0.2 1.4l1.4 1c0.5 0.3 1 0.3 1.4-0.1z"/><path d="m13.808 54.815 6 2c0.5 0.2 1-0.1 1.2-0.6 1.1-2.6 2.2-4.3 3.9-6.4 0.4-0.4 0.3-1.1-0.2-1.4l-5.9-4.2c-0.5-0.3-1.1-0.2-1.4 0.3-1.6 2.5-3.2 6.1-4.1 9-0.3 0.6 0 1.2 0.5 1.3z"/><path d="m75.808 60.915c0.4 1.7 0.7 3.5 0.9 5.3 0 0.5 0.5 0.9 1 0.9h10.2c0.6 0 1-0.5 1-1-0.1-3.1-0.5-6-1.3-8.9-0.1-0.6-0.7-0.9-1.3-0.7l-9.8 3.2c-0.6 0.2-0.9 0.7-0.7 1.2z"/><path d="m15.808 67.115c0.1-3.2 0.7-6.3 1.7-9.2 0.2-0.5-0.1-1.1-0.6-1.3l-0.4-0.1c-0.5-0.2-1.1 0.1-1.3 0.7-0.8 3.2-1.3 6.5-1.3 9.9z"/></svg> diff --git a/icons/difficulty_hard.svg b/icons/difficulty_hard.svg new file mode 100644 index 0000000000000000000000000000000000000000..254346afe6f2b8c3cf79ee079881802f863caee9 --- /dev/null +++ b/icons/difficulty_hard.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 102 102" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="100" height="100" ry="0" fill="#d31158" stroke="#000" stroke-width="2"/><path d="m69.154 59.254-24.4 5.1c-0.2 0-0.4 0.1-0.5 0.1-1.3 0.6-1.9 2-1.4 3.3 0.6 1.3 2 1.9 3.3 1.4l23-9.7c0.2 0 0.1-0.2 0-0.2zm-25 8.7c-0.6-0.5-0.6-1.4-0.1-2s1.4-0.6 2-0.1 0.6 1.4 0.1 2c-0.5 0.5-1.4 0.6-2 0.1z"/><path d="m41.054 38.354c0.1 0.4 0.6 0.7 1 0.7 0.9-0.1 1.9-0.1 2.8-0.1 1.5 0 2.9 0.1 4.3 0.3 0.6 0.1 1.2-0.4 1.2-1v-6.9c0-0.6-0.5-1-1-1-3.2 0.1-6.4 0.7-9.3 1.6-0.5 0.2-0.8 0.7-0.6 1.3z"/><path d="m51.854 39.754c2.1 0.5 4.2 1.3 6.2 2.2 0.5 0.3 1.2 0 1.4-0.6l2.7-8.2c0.2-0.5-0.1-1.1-0.6-1.3-3-0.9-6.1-1.5-9.3-1.6-0.6 0-1 0.4-1 1v7.5c-0.2 0.5 0.1 0.9 0.6 1z"/><path d="m82.754 46.554-12.2 8.9c-0.4 0.3-0.5 0.8-0.3 1.3 0.9 1.6 1.2 2.6 1.8 4.3 0.2 0.5 0.7 0.8 1.2 0.6l14.4-4.7c0.5-0.2 0.8-0.7 0.6-1.3-1-2.9-2.6-6.4-4.1-8.9-0.3-0.5-1-0.6-1.4-0.2z"/><path d="m32.154 41.854c2.3-1.1 4.7-2 7.2-2.5 0.6-0.1 1-0.7 0.8-1.3l-1.5-4.7c-0.2-0.5-0.8-0.8-1.3-0.6-2.9 1.2-5.7 2.7-8.2 4.6-0.4 0.3-0.5 0.9-0.2 1.4l2 2.8c0.3 0.4 0.8 0.5 1.2 0.3z"/><path d="m62.754 33.454-2.8 8.6c-0.1 0.4 0 0.9 0.4 1.1 1.7 1 3.4 2.2 4.9 3.6 0.4 0.4 1.1 0.3 1.5-0.1l5.7-7.9c0.3-0.4 0.2-1.1-0.2-1.4-2.5-1.9-5.3-3.4-8.2-4.6-0.5-0.1-1.1 0.2-1.3 0.7z"/><path d="m67.154 48.654c1.3 1.4 2.5 2.8 3.5 4.4 0.3 0.5 0.9 0.6 1.4 0.3l8.3-6c0.4-0.3 0.5-0.9 0.2-1.4-1.8-2.5-3.9-4.8-6.2-6.8-0.4-0.4-1.1-0.3-1.5 0.2l-5.9 8.1c-0.2 0.3-0.1 0.9 0.2 1.2z"/><path d="m23.654 48.154c1.8-2 3.9-3.7 6.2-5.1 0.5-0.3 0.6-1 0.3-1.4l-1.7-2.4c-0.3-0.5-1-0.6-1.5-0.2-2.3 2-4.4 4.3-6.2 6.8-0.3 0.4-0.2 1.1 0.2 1.4l1.4 1c0.4 0.4 1 0.3 1.3-0.1z"/><path d="m15.954 57.654 0.5 0.2c0.5 0.2 1-0.1 1.2-0.6 1.1-2.6 2.5-5 4.2-7.1 0.4-0.4 0.3-1.1-0.2-1.4l-1.2-0.8c-0.3-0.4-1-0.2-1.3 0.3-1.6 2.5-2.9 5.3-3.8 8.2-0.2 0.5 0.1 1.1 0.6 1.2z"/><path d="m75.054 62.754c0.4 1.7 0.7 3.5 0.9 5.3 0 0.5 0.5 0.9 1 0.9h10.2c0.6 0 1-0.5 1-1-0.1-3.1-0.5-6-1.3-8.9-0.1-0.6-0.7-0.9-1.3-0.7l-9.8 3.2c-0.5 0.2-0.8 0.7-0.7 1.2z"/><path d="m15.054 68.954c0.1-3.2 0.7-6.3 1.7-9.2 0.2-0.5-0.1-1.1-0.6-1.3l-0.3-0.1c-0.5-0.2-1.1 0.1-1.3 0.7-0.8 3.2-1.3 6.5-1.3 9.9z"/></svg> diff --git a/icons/difficulty_medium.svg b/icons/difficulty_medium.svg new file mode 100644 index 0000000000000000000000000000000000000000..a6a8c5565ce3937fdb73613f7f53e14f1c888630 --- /dev/null +++ b/icons/difficulty_medium.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 102 102" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="100" height="100" ry="0" fill="#eeb517" stroke="#000" stroke-width="2"/><path d="m53.928 43.009-11 21.7c-0.1 0.2-0.1 0.3-0.2 0.5-0.4 1.4 0.4 2.7 1.7 3.2 1.4 0.4 2.7-0.4 3.2-1.7l6.6-23.7c0-0.1-0.2-0.2-0.3 0zm-8.5 24.3c-0.8 0.1-1.5-0.4-1.6-1.1-0.1-0.8 0.4-1.5 1.1-1.6 0.8-0.1 1.5 0.4 1.6 1.1 0.1 0.8-0.4 1.5-1.1 1.6z"/><path d="m41.128 37.409c0.1 0.4 0.6 0.7 1 0.7 0.9-0.1 1.9-0.1 2.8-0.1 1.5 0 2.9 0.1 4.3 0.3 0.6 0.1 1.2-0.4 1.2-1v-6.9c0-0.6-0.5-1-1-1-3.2 0.1-6.4 0.7-9.3 1.6-0.5 0.2-0.8 0.7-0.6 1.3z"/><path d="m51.928 41.209c2.1 0.5 3.5 1 5.5 2 0.5 0.3 1.2 0 1.4-0.6l4.2-12.8c0.2-0.5-0.1-1.1-0.6-1.3-3-0.9-6.9-1.5-10.1-1.7-0.6 0-1 0.4-1 1v12.4c-0.1 0.5 0.2 0.9 0.6 1z"/><path d="m80.928 47.009-8.4 6.1c-0.4 0.3-0.5 0.8-0.3 1.3 0.9 1.6 1.6 3.2 2.2 4.9 0.2 0.5 0.7 0.8 1.2 0.6l9.8-3.2c0.5-0.2 0.8-0.7 0.6-1.3-1-2.9-2.3-5.7-3.8-8.2-0.2-0.4-0.9-0.5-1.3-0.2z"/><path d="m32.328 40.909c2.3-1.1 4.7-2 7.2-2.5 0.6-0.1 1-0.7 0.8-1.3l-1.5-4.7c-0.2-0.5-0.8-0.8-1.3-0.6-2.9 1.2-5.7 2.7-8.2 4.6-0.4 0.3-0.5 0.9-0.2 1.4l2 2.8c0.2 0.4 0.8 0.5 1.2 0.3z"/><path d="m62.828 32.509-2.8 8.6c-0.1 0.4 0 0.9 0.4 1.1 1.7 1 3.4 2.2 4.9 3.6 0.4 0.4 1.1 0.3 1.5-0.1l5.7-7.9c0.3-0.4 0.2-1.1-0.2-1.4-2.5-1.9-5.3-3.4-8.2-4.6-0.5-0.1-1.1 0.2-1.3 0.7z"/><path d="m67.328 47.709c1.3 1.4 2.5 2.8 3.5 4.4 0.3 0.5 0.9 0.6 1.4 0.3l8.3-6c0.4-0.3 0.5-0.9 0.2-1.4-1.8-2.5-3.9-4.8-6.2-6.8-0.4-0.4-1.1-0.3-1.5 0.2l-5.8 8.1c-0.3 0.3-0.3 0.9 0.1 1.2z"/><path d="m23.828 47.209c1.8-2 3.9-3.7 6.2-5.1 0.5-0.3 0.6-1 0.3-1.4l-1.8-2.4c-0.3-0.5-1-0.6-1.5-0.2-2.3 2-4.4 4.3-6.2 6.8-0.3 0.4-0.2 1.1 0.2 1.4l1.4 1c0.5 0.4 1 0.3 1.4-0.1z"/><path d="m16.128 56.709 0.5 0.2c0.5 0.2 1-0.1 1.2-0.6 1.1-2.6 2.5-5 4.2-7.1 0.4-0.4 0.3-1.1-0.2-1.4l-1.2-0.8c-0.5-0.3-1.1-0.2-1.4 0.3-1.6 2.5-2.9 5.3-3.8 8.2-0.1 0.5 0.2 1.1 0.7 1.2z"/><path d="m75.228 61.809c0.4 1.7 0.7 3.5 0.9 5.3 0 0.5 0.5 0.9 1 0.9h10.2c0.6 0 1-0.5 1-1-0.1-3.1-0.5-6-1.3-8.9-0.1-0.6-0.7-0.9-1.3-0.7l-9.8 3.2c-0.6 0.2-0.8 0.7-0.7 1.2z"/><path d="m15.228 68.009c0.1-3.2 0.7-6.3 1.7-9.2 0.2-0.5-0.1-1.1-0.6-1.3l-0.3-0.1c-0.5-0.2-1.1 0.1-1.3 0.7-0.8 3.2-1.3 6.5-1.3 9.9z"/></svg> diff --git a/icons/difficulty_nightmare.svg b/icons/difficulty_nightmare.svg new file mode 100644 index 0000000000000000000000000000000000000000..6d18292932921a21a9229cfb26efd1fd5c900423 --- /dev/null +++ b/icons/difficulty_nightmare.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 102 102" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="100" height="100" ry="0" fill="#727272" stroke="#000" stroke-width="2"/><path d="m70.135 63.932-24.924 0.42736c-0.19644-0.03756-0.41166 0.02311-0.50988 0.0043-1.3895 0.34521-2.2418 1.6076-1.9948 2.9784 0.34521 1.3895 1.6076 2.2418 2.9784 1.9948l24.412-5.2084c0.19644 0.03756 0.13578-0.17766 0.03756-0.19644zm-26.189 3.8507c-0.49544-0.60378-0.32643-1.4878 0.27734-1.9832 0.60378-0.49544 1.4878-0.32643 1.9832 0.27734 0.49544 0.60378 0.32643 1.4878-0.27734 1.9832-0.585 0.39721-1.4878 0.32643-1.9832-0.27734z"/><path d="m41.054 38.354c0.1 0.4 0.6 0.7 1 0.7 0.9-0.1 1.9-0.1 2.8-0.1 1.5 0 2.9 0.1 4.3 0.3 0.6 0.1 1.2-0.4 1.2-1v-6.9c0-0.6-0.5-1-1-1-3.2 0.1-6.4 0.7-9.3 1.6-0.5 0.2-0.8 0.7-0.6 1.3z"/><path d="m51.854 39.754c2.1 0.5 4.2 1.3 6.2 2.2 0.5 0.3 1.2 0 1.4-0.6l2.7-8.2c0.2-0.5-0.1-1.1-0.6-1.3-3-0.9-6.1-1.5-9.3-1.6-0.6 0-1 0.4-1 1v7.5c-0.2 0.5 0.1 0.9 0.6 1z"/><path d="m80.972 47.708-8.7626 6.3924c-0.2873 0.21547-0.35912 0.5746-0.21547 0.93372 0.64642 1.1492 0.86189 1.8674 1.2928 3.0884 0.14365 0.35912 0.50277 0.5746 0.86189 0.43094l10.343-3.3757c0.35912-0.14365 0.57459-0.50277 0.43095-0.93372-0.71824-2.0829-1.8674-4.5968-2.9448-6.3924-0.21547-0.35912-0.71824-0.43095-1.0055-0.14365z" stroke-width=".71824"/><path d="m32.154 41.854c2.3-1.1 4.7-2 7.2-2.5 0.6-0.1 1-0.7 0.8-1.3l-1.5-4.7c-0.2-0.5-0.8-0.8-1.3-0.6-2.9 1.2-5.7 2.7-8.2 4.6-0.4 0.3-0.5 0.9-0.2 1.4l2 2.8c0.3 0.4 0.8 0.5 1.2 0.3z"/><path d="m62.754 33.454-2.8 8.6c-0.1 0.4 0 0.9 0.4 1.1 1.7 1 3.4 2.2 4.9 3.6 0.4 0.4 1.1 0.3 1.5-0.1l5.7-7.9c0.3-0.4 0.2-1.1-0.2-1.4-2.5-1.9-5.3-3.4-8.2-4.6-0.5-0.1-1.1 0.2-1.3 0.7z"/><path d="m67.154 48.654c1.3 1.4 2.5 2.8 3.5 4.4 0.3 0.5 0.9 0.6 1.4 0.3l8.3-6c0.4-0.3 0.5-0.9 0.2-1.4-1.8-2.5-3.9-4.8-6.2-6.8-0.4-0.4-1.1-0.3-1.5 0.2l-5.9 8.1c-0.2 0.3-0.1 0.9 0.2 1.2z"/><path d="m23.654 48.154c1.8-2 3.9-3.7 6.2-5.1 0.5-0.3 0.6-1 0.3-1.4l-1.7-2.4c-0.3-0.5-1-0.6-1.5-0.2-2.3 2-4.4 4.3-6.2 6.8-0.3 0.4-0.2 1.1 0.2 1.4l1.4 1c0.4 0.4 1 0.3 1.3-0.1z"/><path d="m15.954 57.654 0.5 0.2c0.5 0.2 1-0.1 1.2-0.6 1.1-2.6 2.5-5 4.2-7.1 0.4-0.4 0.3-1.1-0.2-1.4l-1.2-0.8c-0.3-0.4-1-0.2-1.3 0.3-1.6 2.5-2.9 5.3-3.8 8.2-0.2 0.5 0.1 1.1 0.6 1.2z"/><path d="m73.314 60.926c0.51791 2.2011 0.90634 4.5317 1.1653 6.8623 0 0.64738 0.64738 1.1653 1.2948 1.1653h13.207c0.77686 0 1.2948-0.64738 1.2948-1.2948-0.12948-4.0138-0.64738-7.7686-1.6832-11.523-0.12948-0.77686-0.90634-1.1653-1.6832-0.90634l-12.689 4.1433c-0.64738 0.25895-1.0358 0.90634-0.90634 1.5537z" stroke-width="1.2948"/><path d="m15.054 68.954c0.1-3.2 0.7-6.3 1.7-9.2 0.2-0.5-0.1-1.1-0.6-1.3l-0.3-0.1c-0.5-0.2-1.1 0.1-1.3 0.7-0.8 3.2-1.3 6.5-1.3 9.9z"/></svg> diff --git a/icons/game_fail.svg b/icons/game_fail.svg new file mode 100644 index 0000000000000000000000000000000000000000..1b9e31313ebd610a0b3b503b84b603ad64f5ca5f --- /dev/null +++ b/icons/game_fail.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(.16545 0 0 .16545 4.4777 4.4833)"><g transform="translate(1,1)"><g fill="#f57c00"><polygon points="331.8 7.533 331.8 162.58 306.2 169.67 306.2 35.095"/><polygon points="281.28 144.07 281.28 236.06 255.68 243.14 255.68 171.63"/><polygon points="281.28 236.06 344.17 218.56 338.54 227.27 281.28 243.14"/><polygon points="485.4 127 391.53 272.07 472.09 305.6 468.33 314.73 365.93 272.07 454.17 135.7"/></g><g fill="#ff9801"><path d="m493.93 314.73-170.67 93.867v17.067h-136.53v-16.981c0.68-0.071 1.364-0.1 2.048-0.085h32.085v-25.6c0.014-4.707 3.826-8.52 8.533-8.533h34.816l86.955-47.189-60.928-25.344 48.299-74.667 5.632-8.704-62.891 17.493v-91.989h24.918v25.6l25.6-7.083v7.083l122.37-33.963-88.235 136.36 102.4 42.667 3.755-9.131z"/><path d="m306.2 35.095v108.97h-24.917l-25.6 27.563-23.296 25.002-17.237-9.045-71.083-37.205 7.168 17.152 50.859 122.2-45.909 3.498 55.979 41.983-35.328 20.139 44.715 19.115h7.851c-4.707 0.014-8.52 3.826-8.533 8.533v25.6h-32.085c-0.684-0.014-1.368 0.014-2.048 0.085v-0.085l-128-51.2 59.733-34.133-102.4-76.8 110.93-8.533-78.165-187.65-7.168-17.152 161.96 84.821 17.237 9.046z"/><polygon points="281.28 144.07 281.28 236.06 255.68 243.14 255.68 171.63"/><path d="m289.13 408.6h8.533v17.067h-127.91c0.939-8.961 8.021-16.042 16.981-16.981 0.68-0.071 1.364-0.1 2.048-0.085h32.085v-25.6c0.014-4.707 3.826-8.52 8.533-8.533h34.816l86.955-47.189-60.928-25.344 48.299-74.667 31.232-8.704-53.931 83.371 60.928 25.344-86.955 47.189h-9.215c4.707 0.014 8.52 3.826 8.533 8.533z"/><polygon points="281.28 236.06 344.17 218.56 338.54 227.27 281.28 243.14"/><polygon points="331.8 162.58 459.8 127 454.17 135.7 331.8 169.67"/></g><g fill="#ffb301"><polygon points="351.17 327.28 290.24 301.93 338.54 227.27 369.77 218.56 315.84 301.93 376.77 327.28 289.82 374.47 264.22 374.47"/><polygon points="281.28 144.07 281.28 236.06 255.68 243.14 255.68 171.63"/></g><polygon points="255.68 171.63 255.68 243.14 281.28 236.06 281.28 243.14 338.54 227.27 290.24 301.93 351.17 327.28 264.22 374.47 221.55 374.47 176.84 355.35 212.16 335.21 156.18 293.23 202.09 289.73 151.24 167.53 144.07 150.38 215.15 187.59 232.39 196.63" fill="#fdd834"/><polygon points="281.28 236.06 344.17 218.56 338.54 227.27 281.28 243.14" fill="#fec108"/><path d="m340.33 427.71v40.619h-170.67v-40.619c-0.014-0.684 0.014-1.368 0.085-2.048 0.939-8.961 8.021-16.042 16.981-16.981 0.68-0.071 1.364-0.1 2.048-0.085h132.44c0.684-0.014 1.368 0.014 2.048 0.085 9.726 1.03 17.097 9.249 17.067 19.029z" fill="#ffe0b2"/><path d="m289.13 383v25.6h-68.267v-25.6c0.014-4.707 3.826-8.52 8.533-8.533h51.2c4.708 0.014 8.521 3.826 8.534 8.533z" fill="#ecf0f1"/><path d="m16.067 451.27h477.87c4.713 0 8.533 3.821 8.533 8.533v34.133c0 4.713-3.821 8.533-8.533 8.533h-477.87c-4.713 0-8.533-3.821-8.533-8.533v-34.133c-1e-3 -4.712 3.82-8.533 8.533-8.533z" fill="#4e342e"/><path d="m16.067 451.27h452.27c4.713 0 8.533 3.821 8.533 8.533v34.133c0 4.713-3.821 8.533-8.533 8.533h-452.27c-4.713 0-8.533-3.821-8.533-8.533v-34.133c-1e-3 -4.712 3.82-8.533 8.533-8.533z" fill="#795548"/></g><path d="m494.93 443.73h-145.07v-15.05c-7e-3 -7.152-2.802-14.019-7.791-19.144l156.97-86.331c2.875-1.576 4.593-4.66 4.417-7.935-0.176-3.274-2.214-6.157-5.242-7.415l-92.967-38.733 88.317-136.49c1.921-2.977 1.805-6.831-0.294-9.686-2.098-2.855-5.742-4.117-9.156-3.172l-142.78 39.666v-150.91c-1e-3 -3.508-2.148-6.658-5.413-7.941s-6.982-0.437-9.371 2.132l-106.5 114.69-173.42-90.842c-3.184-1.669-7.073-1.163-9.724 1.266s-3.494 6.258-2.11 9.576l80.792 193.92-99.175 7.625c-3.541 0.275-6.542 2.714-7.533 6.124-0.992 3.41 0.233 7.078 3.075 9.209l92.008 69.008-48.458 27.692c-2.846 1.623-4.511 4.733-4.283 8.002 0.227 3.268 2.307 6.118 5.35 7.332l112.04 44.815c-4.151 4.906-6.441 11.117-6.47 17.544v15.05h-145.07c-9.421 0.011-17.055 7.645-17.067 17.065v34.133c0.012 9.421 7.646 17.054 17.067 17.067h477.87c9.421-0.012 17.054-7.646 17.067-17.067v-34.133c-0.013-9.42-7.647-17.054-17.068-17.066zm-371.23-112.06c2.496-1.425 4.106-4.01 4.284-6.878s-1.1-5.633-3.4-7.355l-84.267-63.208 88.342-6.792c2.729-0.212 5.19-1.719 6.619-4.053s1.651-5.212 0.598-7.738l-76.25-183 158.28 82.908c3.408 1.784 7.589 1.067 10.208-1.75l96.15-103.54v140.4c0 2.667 1.247 5.18 3.369 6.794s4.878 2.143 7.447 1.431l131.94-36.65-81.658 126.19c-1.372 2.124-1.732 4.747-0.982 7.162s2.532 4.373 4.866 5.346l86.042 35.85-153.22 84.275h-23.408v-17.067c-2e-3 -1.186-0.129-2.368-0.377-3.527l83.277-51.09c2.734-1.674 4.298-4.739 4.051-7.935-0.248-3.196-2.266-5.983-5.226-7.215l-51.442-21.433 48.35-74.733c1.921-2.977 1.805-6.831-0.294-9.686-2.098-2.855-5.742-4.117-9.156-3.172l-77.717 21.592v-87.883c-1e-3 -3.508-2.148-6.658-5.413-7.941s-6.982-0.437-9.371 2.132l-44.4 47.817-82.567-43.25c-3.184-1.669-7.073-1.163-9.723 1.266-2.651 2.429-3.494 6.258-2.11 9.576l53.517 128.44-34.167 2.625c-3.541 0.275-6.542 2.714-7.533 6.124-0.992 3.41 0.233 7.078 3.075 9.209l45.575 34.175-24.05 13.742c-2.665 1.524-4.307 4.361-4.3 7.431s1.661 5.9 4.333 7.411l40.673 22.969c-0.224 1.105-0.338 2.229-0.34 3.356v17.067h-23.958l-110.07-44.026zm93.942-8.441-37.833-28.375 23.325-1.792c2.729-0.212 5.19-1.719 6.619-4.053s1.651-5.212 0.598-7.738l-48.967-117.52 67.425 35.317c3.408 1.787 7.59 1.07 10.208-1.75l34.05-36.667v77.375c0 2.667 1.247 5.18 3.369 6.794 2.123 1.614 4.878 2.143 7.447 1.431l66.875-18.575-41.692 64.433c-1.372 2.124-1.732 4.747-0.982 7.162s2.532 4.373 4.865 5.346l45.467 18.95-71.972 44.153c-1.568-0.497-3.2-0.762-4.845-0.787h-51.2c-1.655 0.024-3.297 0.292-4.873 0.796l-31.052-17.529 22.283-12.733c2.495-1.425 4.106-4.01 4.284-6.878 0.179-2.868-1.1-5.633-3.399-7.355zm12.758 60.766h51.2v17.067h-51.2zm-51.2 44.684c7e-3 -5.824 4.726-10.543 10.55-10.55h132.5c5.824 7e-3 10.543 4.726 10.55 10.55v15.05h-153.6zm-162.13 66.25v-34.133h477.87l0.017 34.133z"/></g></svg> diff --git a/icons/game_win.svg b/icons/game_win.svg new file mode 100644 index 0000000000000000000000000000000000000000..fe20923864d0c5d39168eced03038b65106a596b --- /dev/null +++ b/icons/game_win.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(.17604 0 0 .17604 7.9341 1.7716)"><path d="m101.92 496.35c-1.8555 0-3.7109-0.69532-5.1484-2.0898-2.9297-2.8438-3-7.5234-0.15234-10.453l9.1875-9.4648c2.8438-2.9297 7.5234-3 10.453-0.15625s3 7.5234 0.15625 10.453l-9.1914 9.4648c-1.4492 1.4961-3.375 2.2461-5.3047 2.2461z" fill="#ff4e61"/><path d="m201.65 133.26c-1.8516 0-3.7109-0.69531-5.1445-2.0898-2.9297-2.8438-3-7.5234-0.15625-10.449l9.1914-9.4688c2.8438-2.9297 7.5195-3 10.449-0.15625s3 7.5234 0.15625 10.453l-9.1914 9.4688c-1.4492 1.4922-3.375 2.2422-5.3047 2.2422z" fill="#ff4e61"/><path d="m413.8 100.39c-1.8555 0-3.7109-0.69141-5.1484-2.0859-2.9297-2.8438-3-7.5234-0.15625-10.453l9.1914-9.4688c2.8438-2.9258 7.5234-2.9961 10.453-0.15234 2.9297 2.8398 3 7.5234 0.15625 10.449l-9.1914 9.4688c-1.4492 1.4922-3.375 2.2422-5.3047 2.2422z" fill="#5c73bc"/><path d="m413.8 463.77c-1.8555 0-3.7109-0.69532-5.1484-2.0859-2.9297-2.8438-3-7.5234-0.15625-10.453l9.1914-9.4688c2.8438-2.9258 7.5234-3 10.453-0.15625s3 7.5234 0.15625 10.453l-9.1914 9.4688c-1.4492 1.4922-3.375 2.2422-5.3047 2.2422z" fill="#fa0"/><path d="m63.07 112.91c-1.8516 0-3.7109-0.69141-5.1445-2.0859-2.9297-2.8438-3-7.5234-0.15625-10.453l9.1914-9.4687c2.8438-2.9258 7.5234-2.9961 10.453-0.15234 2.9258 2.8438 2.9961 7.5234 0.15234 10.449l-9.1914 9.4688c-1.4492 1.4922-3.375 2.2422-5.3047 2.2422z" fill="#fa0"/><path d="m12.309 278.82c-1.8516 0-3.7109-0.69141-5.1445-2.0859-2.9297-2.8438-3-7.5234-0.15625-10.453l9.1875-9.4688c2.8438-2.9297 7.5234-3 10.453-0.15625 2.9297 2.8438 3 7.5234 0.15625 10.453l-9.1914 9.4688c-1.4453 1.4922-3.375 2.2422-5.3047 2.2422z" fill="#2dc471"/><path d="m216.29 278.49-23.996 12.996c-6.2226 3.3711-13.496-2.0742-12.309-9.2148l4.582-27.523c0.47266-2.8359-0.4375-5.7266-2.4375-7.7344l-19.414-19.496c-5.0352-5.0547-2.2578-13.863 4.7031-14.906l26.824-4.0156c2.7656-0.41407 5.1524-2.1992 6.3867-4.7812l12-25.043c3.1133-6.4922 12.102-6.4922 15.215 0l11.996 25.043c1.2383 2.582 3.625 4.3672 6.3867 4.7812l26.828 4.0156c6.957 1.043 9.7344 9.8516 4.6992 14.906l-19.41 19.496c-2 2.0078-2.9141 4.8984-2.4414 7.7344l4.582 27.523c1.1914 7.1406-6.082 12.586-12.305 9.2148l-23.996-12.996c-2.4727-1.3398-5.4258-1.3398-7.8945 0z" fill="#ffd02f"/><path d="m220.24 512c-4.082 0-7.3906-3.3086-7.3906-7.3906v-115.59c0-4.082 3.3086-7.3945 7.3906-7.3945s7.3906 3.3125 7.3906 7.3945v115.59c0 4.082-3.3086 7.3906-7.3906 7.3906z" fill="#5c73bc"/><path d="m220.3 357.42h-0.11328c-4.082 0-7.3945-3.3125-7.3945-7.3945s3.3086-7.3906 7.3945-7.3906h0.11328c4.082 0 7.3906 3.3086 7.3906 7.3906s-3.3086 7.3945-7.3906 7.3945z" fill="#5c73bc"/><path d="m220.3 332h-0.14838c-4.082-0.0156-7.375-3.3398-7.3594-7.4219 0.0195-4.0742 3.3242-7.3594 7.3906-7.3594h0.14848c4.082 0.0156 7.375 3.3398 7.3594 7.4219-0.0156 4.0703-3.3242 7.3594-7.3906 7.3594z" fill="#fa0"/><path d="m87.234 230.89c-1.9297 0-3.8555-0.75-5.3047-2.2422l-79.34-81.738c-2.8438-2.9297-2.7773-7.6094 0.15234-10.449 2.9297-2.8438 7.6094-2.7734 10.453 0.15235l79.344 81.738c2.8438 2.9258 2.7734 7.6094-0.15625 10.449-1.4375 1.3945-3.293 2.0898-5.1484 2.0898z" fill="#ff4e61"/><path d="m113.95 258.5c-1.8633 0-3.7266-0.69922-5.1641-2.1055-2.9219-2.8516-2.9766-7.5312-0.125-10.453l0.082-0.082c2.8516-2.918 7.5312-2.9766 10.453-0.12109 2.9219 2.8516 2.9766 7.5312 0.12109 10.453l-0.0781 0.082c-1.4492 1.4805-3.3672 2.2266-5.2891 2.2266z" fill="#fa0"/><path d="m131.4 276.48c-1.8555 0-3.7109-0.69531-5.1484-2.0898-2.9258-2.8438-2.9961-7.5234-0.15235-10.449l0.0781-0.0859c2.8476-2.9297 7.5273-2.9961 10.453-0.15235 2.9297 2.8438 3 7.5234 0.15625 10.453l-0.082 0.082c-1.4492 1.4922-3.375 2.2422-5.3047 2.2422z" fill="#5c73bc"/><path d="m353.24 227.99c-1.8555 0-3.7109-0.69141-5.1445-2.0859-2.9297-2.8438-3-7.5234-0.15625-10.453l79.34-81.734c2.8438-2.9297 7.5234-3 10.453-0.15625 2.9297 2.8438 3 7.5234 0.15625 10.453l-79.344 81.734c-1.4492 1.4922-3.375 2.2422-5.3047 2.2422z" fill="#fa0"/><path d="m326.52 255.6c-1.9141 0-3.8242-0.73828-5.2695-2.2109l-0.082-0.082c-2.8633-2.9141-2.8203-7.5938 0.0899-10.453 2.9141-2.8633 7.5938-2.8203 10.453 0.0898l0.082 0.082c2.8594 2.9141 2.8203 7.5938-0.0937 10.453-1.4375 1.4141-3.3086 2.1211-5.1797 2.1211z" fill="#ff4e61"/><path d="m309.07 273.58c-1.9297 0-3.8555-0.75-5.3047-2.2422l-0.082-0.082c-2.8398-2.9297-2.7734-7.6094 0.15625-10.453s7.6094-2.7734 10.453 0.15234l0.082 0.082c2.8398 2.9297 2.7734 7.6094-0.15625 10.453-1.4375 1.3945-3.293 2.0898-5.1484 2.0898z" fill="#fa0"/><path d="m300.65 116.69c-1.2422 0-2.5-0.3125-3.6523-0.97266-3.5469-2.0234-4.7812-6.5391-2.7578-10.082l56.863-99.652c2.0234-3.543 6.5352-4.7773 10.082-2.7539 3.5469 2.0234 4.7812 6.5391 2.7578 10.082l-56.863 99.652c-1.3633 2.3867-3.8594 3.7266-6.4297 3.7266z" fill="#62d38f"/><path d="m281.52 150.33c-1.293 0-2.5977-0.33593-3.7891-1.0469l-0.0976-0.0586c-3.5-2.0938-4.6445-6.6328-2.5469-10.137 2.0938-3.5078 6.6328-4.6445 10.137-2.5508l0.0977 0.0586c3.5039 2.0938 4.6445 6.6328 2.5508 10.137-1.3867 2.3164-3.8359 3.5976-6.3516 3.5976z" fill="#fa0"/><path d="m269.02 172.25c-1.3008 0-2.6172-0.34375-3.8086-1.0625l-0.0977-0.0586c-3.4961-2.1094-4.6211-6.6523-2.5156-10.148 2.1094-3.4961 6.6523-4.6172 10.148-2.5117l0.0976 0.0586c3.4961 2.1094 4.6211 6.6523 2.5117 10.148-1.3867 2.3008-3.832 3.5742-6.3359 3.5742z" fill="#2dc471"/><path d="m139.96 116.69c-2.5703 0-5.0664-1.3398-6.4297-3.7305l-56.863-99.648c-2.0234-3.5469-0.78906-8.0586 2.7539-10.082 3.5469-2.0234 8.0625-0.79297 10.086 2.7539l56.863 99.648c2.0234 3.5469 0.78906 8.0625-2.7539 10.086-1.1562 0.66016-2.4141 0.97266-3.6562 0.97266z" fill="#5c73bc"/><path d="m159.09 150.33c-2.5078 0-4.957-1.2773-6.3438-3.582-2.1016-3.5-0.96875-8.043 2.5273-10.145l0.10157-0.0586c3.5-2.1016 8.0391-0.97266 10.141 2.5273 2.1055 3.5 0.97266 8.0391-2.5273 10.145l-0.0977 0.0586c-1.1914 0.71484-2.5039 1.0547-3.8008 1.0547z" fill="#ff4e61"/><path d="m171.6 172.25c-2.5 0-4.9375-1.2656-6.3281-3.5625-2.1172-3.4922-1-8.0352 2.4883-10.152l0.0977-0.0586c3.4961-2.1133 8.0391-1 10.156 2.4922 2.1133 3.4922 1 8.0352-2.4922 10.152l-0.0977 0.0586c-1.1992 0.72656-2.5195 1.0703-3.8242 1.0703z" fill="#fa0"/><path d="m402.14 357.28-15.523 11.602c-4.0234 3.0117-9.6523-0.043-9.5234-5.1641l0.5039-19.75c0.0508-2.0352-0.87109-3.9648-2.4688-5.1641l-15.508-11.621c-4.0234-3.0156-2.9453-9.4726 1.8242-10.93l18.391-5.6094c1.8906-0.57812 3.3906-2.082 4-4.0156l5.9375-18.785c1.5391-4.875 7.8359-5.8125 10.652-1.5898l10.863 16.285c1.1211 1.6758 2.9688 2.6797 4.9414 2.6797l19.18 0.0117c4.9766 4e-3 7.7891 5.8828 4.7578 9.9492l-11.676 15.672c-1.2031 1.6172-1.5586 3.7383-0.94922 5.6719l5.918 18.797c1.5312 4.875-3.0273 9.4453-7.7148 7.7344l-18.078-6.5977c-1.8594-0.67969-3.9258-0.37109-5.5273 0.82422z" fill="#ffd02f"/><path d="m261.51 512c-4.082 0-7.3906-3.3086-7.3906-7.3906 0-57.23 22.832-95.922 41.984-118.3 20.828-24.332 41.613-35.023 42.488-35.469 3.6406-1.8477 8.0898-0.39063 9.9336 3.2539 1.8438 3.6367 0.39453 8.0781-3.2422 9.9297-0.3125 0.16016-19.5 10.164-38.367 32.395-25.227 29.719-38.016 66.121-38.016 108.2 0 4.082-3.3086 7.3906-7.3906 7.3906z" fill="#ff4e61"/><path d="m102.86 397.35 11.766 15.605c3.0547 4.0469 9.2852 2.7305 10.547-2.2266l4.8633-19.113c0.5-1.9648 1.9102-3.5547 3.7695-4.2461l18.039-6.707c4.6797-1.7383 5.3906-8.25 1.207-11.016l-16.141-10.672c-1.6602-1.1016-2.6914-2.9726-2.7578-5.0039l-0.61719-19.75c-0.15625-5.1211-5.9492-7.832-9.7969-4.5859l-14.84 12.516c-1.5312 1.2891-3.5781 1.7227-5.4726 1.1562l-18.422-5.5c-4.7773-1.4258-9.0703 3.4102-7.2617 8.1836l6.9688 18.41c0.71875 1.8945 0.48438 4.0352-0.625 5.7188l-10.77 16.348c-2.793 4.2422 0.34375 9.9375 5.3125 9.6445l19.145-1.1406c1.9727-0.11719 3.875 0.77343 5.0859 2.3789z" fill="#ffd02f"/><path d="m179.02 512c-4.082 0-7.3906-3.3086-7.3906-7.3906 0-30.059-6.6797-57.559-19.852-81.734-1.9531-3.5859-0.62891-8.0742 2.957-10.027 3.5859-1.9531 8.0742-0.62891 10.027 2.9531 14.363 26.375 21.648 56.254 21.648 88.809 0 4.082-3.3086 7.3906-7.3906 7.3906z" fill="#fa0"/><path d="m268.93 55.898c0-11.285-8.8828-20.434-19.836-20.434-10.957 0-19.836 9.1484-19.836 20.434 0 11.285 8.8789 20.438 19.836 20.438 10.953 0 19.836-9.1523 19.836-20.438z" fill="#ffd02f"/><path d="m373.08 446.81c0-11.285-8.8789-20.434-19.832-20.434-10.957 0-19.836 9.1484-19.836 20.434s8.8789 20.434 19.836 20.434c10.953 0 19.832-9.1484 19.832-20.434z" fill="#5c73bc"/><path d="m44.129 450.86c0-9.0508-7.1211-16.387-15.91-16.387-8.7852 0-15.906 7.3359-15.906 16.387 0 9.0547 7.1211 16.391 15.906 16.391 8.7891 0 15.91-7.3359 15.91-16.391z" fill="#62d38f"/><path d="m88.172 288.35c0-9.0508-7.1211-16.387-15.91-16.387-8.7852 0-15.906 7.3359-15.906 16.387s7.1211 16.391 15.906 16.391c8.7891 0 15.91-7.3398 15.91-16.391z" fill="#5c73bc"/><g fill="#ff4e61"><path d="m210.84 16.391c0-9.0547-7.1211-16.391-15.906-16.391-8.7891 0-15.91 7.3359-15.91 16.391 0 9.0508 7.1211 16.387 15.91 16.387 8.7852 0 15.906-7.3359 15.906-16.387z"/><path d="m365.23 152.88c0-9.0508-7.125-16.391-15.91-16.391-8.7852 0-15.91 7.3398-15.91 16.391s7.125 16.387 15.91 16.387c8.7852 0 15.91-7.3359 15.91-16.387z"/><path d="m139.96 32.746c-1.8555 0-3.7109-0.69141-5.1484-2.0898-2.9297-2.8438-3-7.5195-0.15625-10.449l9.1914-9.4688c2.8438-2.9297 7.5234-3 10.449-0.15625 2.9297 2.8438 3 7.5234 0.15625 10.453l-9.1875 9.4688c-1.4492 1.4922-3.3789 2.2422-5.3047 2.2422z"/></g></g></svg> diff --git a/icons/size_10x10.svg b/icons/size_10x10.svg new file mode 100644 index 0000000000000000000000000000000000000000..538fd9d948716684c7c011b6cdd21c26237a7908 --- /dev/null +++ b/icons/size_10x10.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="0" fill="#c5ffc5" stroke="#000" stroke-width="2"/> + <path d="m32.035 62.07v35.93h35.93v-35.93zm31.808 31.808h-12.37v-12.37h12.37zm-0.0014-15.903h-12.369v-12.37h12.37zm-28.274-12.37h12.37v12.37h-12.37zm0 15.905h12.37v12.37h-12.37z" stroke-width="1.767"/><g transform="translate(1.9e-4,-4.3517)" fill="#00d600" stroke="#009100" aria-label="10x10"><path d="m15.292 8.8519v21.126h-5.8377v-13.843q-1.4169 1.0769-2.7488 1.7428-1.3177 0.66595-3.3156 1.2752v-4.7325q2.9472-0.94934 4.5767-2.2812 1.6295-1.3319 2.5505-3.2873z"/><path d="m21.569 19.507q0-5.9227 2.1254-8.289 2.1396-2.3663 6.5037-2.3663 2.097 0 3.4431 0.52426 1.3461 0.51009 2.1962 1.3461 0.85015 0.82182 1.3319 1.7428 0.49592 0.90683 0.79348 2.1254 0.58094 2.3238 0.58094 4.8459 0 5.6535-1.9128 8.2748t-6.5887 2.6213q-2.6213 0-4.2366-0.83598t-2.6496-2.4513q-0.75097-1.1477-1.176-3.1314-0.41091-1.9979-0.41091-4.4066zm5.7244 0.01417q0 3.9674 0.69429 5.4268 0.70846 1.4453 2.0404 1.4453 0.87849 0 1.5161-0.60928 0.65178-0.62345 0.94934-1.9554 0.31172-1.3319 0.31172-4.1516 0-4.1374-0.70846-5.5543-0.69429-1.4311-2.097-1.4311-1.4311 0-2.0687 1.4594-0.63762 1.4453-0.63762 5.3701z"/><path d="m40.174 14.93h6.8437l2.3946 4.1941 2.7772-4.1941h6.362l-5.1293 7.1696 5.4977 7.8781h-6.7304l-2.7772-4.8459-3.2731 4.8459h-6.2486l5.4693-7.8781z"/><path d="m73.358 8.8519v21.126h-5.8377v-13.843q-1.4169 1.0769-2.7488 1.7428-1.3177 0.66595-3.3156 1.2752v-4.7325q2.9472-0.94934 4.5767-2.2812 1.6295-1.3319 2.5505-3.2873z"/><path d="m79.635 19.507q0-5.9227 2.1254-8.289 2.1396-2.3663 6.5037-2.3663 2.097 0 3.4431 0.52426 1.3461 0.51009 2.1962 1.3461 0.85016 0.82182 1.3319 1.7428 0.49592 0.90683 0.79348 2.1254 0.58094 2.3238 0.58094 4.8459 0 5.6535-1.9128 8.2748t-6.5887 2.6213q-2.6213 0-4.2366-0.83598t-2.6496-2.4513q-0.75097-1.1477-1.176-3.1314-0.41091-1.9979-0.41091-4.4066zm5.7244 0.01417q0 3.9674 0.69429 5.4268 0.70846 1.4453 2.0404 1.4453 0.87849 0 1.5161-0.60928 0.65178-0.62345 0.94934-1.9554 0.31172-1.3319 0.31172-4.1516 0-4.1374-0.70846-5.5543-0.69429-1.4311-2.097-1.4311-1.4311 0-2.0687 1.4594-0.63762 1.4453-0.63762 5.3701z"/></g></svg> diff --git a/icons/size_15x15.svg b/icons/size_15x15.svg new file mode 100644 index 0000000000000000000000000000000000000000..51282ffebc8f9522da8f5ac043bafef6bd437d9c --- /dev/null +++ b/icons/size_15x15.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="0" fill="#ffdfba" stroke="#000" stroke-width="2"/> + <path d="m24.111 46.113v51.887h51.778v-51.887zm32.165 18.883v13.733h-12.836v-13.733zm-12.836-3.4332v-12.016h12.836v12.016zm28.731 32.615h-12.465v-12.016h12.465zm0-15.448h-12.465v-13.733h12.465zm-15.897 3.4332v12.016h-12.836v-12.016zm15.897-20.6h-12.465v-12.016h12.465zm-44.631-12.016h12.465v12.016h-12.465zm0 15.448h12.465v13.733h-12.465zm0 17.167h12.465v12.016h-12.465z" stroke-width="1.7167"/><g transform="matrix(1.0992 0 0 1.0992 -4.9603 -7.468)" fill="#ff9924" stroke="#9f5300" stroke-width=".90975" aria-label="15x15"><path d="m17.799 10.888v19.585h-5.4118v-12.833q-1.3135 0.99829-2.5483 1.6157-1.2216 0.61736-3.0737 1.1822v-4.3872q2.7322-0.88007 4.2427-2.1148 1.5106-1.2347 2.3644-3.0474z"/><path d="m25.785 11.216h12.702v4.269h-8.6037l-0.45974 2.8898q0.89321-0.42033 1.7601-0.6305 0.88007-0.21017 1.7339-0.21017 2.8898 0 4.6893 1.747 1.7996 1.747 1.7996 4.4004 0 1.8652-0.93261 3.586-0.91948 1.7207-2.6271 2.6271-1.6945 0.90634-4.3478 0.90634-1.9046 0-3.2707-0.35466-1.3529-0.36779-2.3118-1.0771-0.94575-0.72245-1.5368-1.6288-0.59109-0.90634-0.98516-2.2593l5.4118-0.59109q0.19703 1.3004 0.91948 1.9834 0.72245 0.6699 1.7207 0.6699 1.1165 0 1.839-0.84066 0.73558-0.8538 0.73558-2.5351 0-1.7207-0.73558-2.522-0.73558-0.80126-1.9572-0.80126-0.77499 0-1.4974 0.38093-0.53855 0.27584-1.1822 0.99829l-4.558-0.65677z"/><path d="m40.864 16.523h6.3444l2.2199 3.8881 2.5745-3.8881h5.8978l-4.755 6.6465 5.0965 7.3033h-6.2393l-2.5745-4.4923-3.0343 4.4923h-5.7927l5.0703-7.3033z"/><path d="m71.627 10.888v19.585h-5.4118v-12.833q-1.3135 0.99829-2.5483 1.6157-1.2216 0.61736-3.0737 1.1822v-4.3872q2.7322-0.88007 4.2427-2.1148 1.5106-1.2347 2.3644-3.0474z"/><path d="m79.614 11.216h12.702v4.269h-8.6037l-0.45974 2.8898q0.89321-0.42033 1.7601-0.6305 0.88007-0.21017 1.7339-0.21017 2.8898 0 4.6893 1.747t1.7995 4.4004q0 1.8652-0.93261 3.586-0.91948 1.7207-2.6271 2.6271-1.6945 0.90634-4.3478 0.90634-1.9046 0-3.2707-0.35466-1.3529-0.36779-2.3118-1.0771-0.94575-0.72245-1.5368-1.6288-0.59109-0.90634-0.98516-2.2593l5.4118-0.59109q0.19703 1.3004 0.91948 1.9834 0.72245 0.6699 1.7207 0.6699 1.1165 0 1.839-0.84066 0.73558-0.8538 0.73558-2.5351 0-1.7207-0.73558-2.522-0.73558-0.80126-1.9572-0.80126-0.77499 0-1.4974 0.38093-0.53855 0.27584-1.1822 0.99829l-4.558-0.65677z"/></g></svg> diff --git a/icons/size_20x20.svg b/icons/size_20x20.svg new file mode 100644 index 0000000000000000000000000000000000000000..4734ae11074e3114602c5eb40d58f24961ac2cd7 --- /dev/null +++ b/icons/size_20x20.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="0" fill="#ffc4c4" stroke="#000" stroke-width="2"/><path d="m15.971 30.405v67.595h68.058v-67.595zm32.033 19.075v12.498h-12.96v-12.498zm-12.96-3.4681v-12.138h12.96v12.138zm44.53 47.537h-12.138v-12.138h12.138zm0-15.965h-12.138v-12.138h12.138zm-15.965 0h-12.138v-12.138h12.138zm0 3.826v12.138h-12.138v-12.138zm15.965-19.431h-12.138v-12.498h12.138zm-15.965 0h-12.138v-12.498h12.138zm-15.606 3.4681v12.138h-12.96v-12.138zm0 15.965v12.138h-12.96v-12.138zm31.571-47.538v12.138h-12.138v-12.138zm-15.965 12.138h-12.138v-12.138h12.138zm-44.172-12.138h12.138v12.138h-12.138zm0 15.606h12.138v12.498h-12.138zm0 15.968h12.138v12.138h-12.138zm0 15.965h12.138v12.138h-12.138z" stroke-width="1.734"/><g transform="matrix(1.0243 0 0 1.0243 -.37355 -10.97)" fill="#ff1e1e" stroke="#8e0000" stroke-width=".97628" aria-label="20x20"><path d="m19.449 35.993h-17.121q0.29423-2.536 1.7794-4.7637 1.4992-2.2417 5.6043-5.2821 2.5079-1.8634 3.2085-2.8302 0.70054-0.96674 0.70054-1.8354 0-0.93872-0.70054-1.5972-0.68653-0.67252-1.7373-0.67252-1.0928 0-1.7934 0.68653-0.68653 0.68653-0.92471 2.4239l-5.7164-0.46236q0.33626-2.4099 1.2329-3.7549 0.89669-1.359 2.5219-2.0736 1.6393-0.72856 4.5255-0.72856 3.0123 0 4.6796 0.68653 1.6813 0.68653 2.634 2.1156 0.96674 1.4151 0.96674 3.1804 0 1.8774-1.1069 3.5868-1.0928 1.7093-3.9931 3.7549-1.7233 1.1909-2.3118 1.6673-0.57444 0.47637-1.359 1.247h8.9109z"/><path d="m21.887 25.639q0-5.8565 2.1016-8.1963 2.1156-2.3398 6.431-2.3398 2.0736 0 3.4046 0.5184 1.331 0.50439 2.1717 1.331 0.84065 0.81263 1.317 1.7233 0.49038 0.89669 0.7846 2.1016 0.57444 2.2978 0.57444 4.7917 0 5.5903-1.8915 8.1823t-6.515 2.592q-2.592 0-4.1892-0.82664t-2.62-2.4239q-0.74257-1.1349-1.1629-3.0964-0.40631-1.9755-0.40631-4.3574zm5.6604 0.01401q0 3.923 0.68653 5.3661 0.70054 1.4291 2.0176 1.4291 0.86867 0 1.4992-0.60246 0.6445-0.61648 0.93872-1.9335 0.30824-1.317 0.30824-4.1052 0-4.0912-0.70054-5.4922-0.68653-1.4151-2.0736-1.4151-1.4151 0-2.0456 1.4431-0.63049 1.4291-0.63049 5.3101z"/><path d="m40.284 21.114h6.7672l2.3678 4.1472 2.7461-4.1472h6.2908l-5.0719 7.0895 5.4362 7.79h-6.6551l-2.7461-4.7917-3.2365 4.7917h-6.1788l5.4082-7.79z"/><path d="m76.866 35.993h-17.121q0.29423-2.536 1.7794-4.7637 1.4992-2.2417 5.6043-5.2821 2.5079-1.8634 3.2085-2.8302 0.70054-0.96674 0.70054-1.8354 0-0.93872-0.70054-1.5972-0.68653-0.67252-1.7373-0.67252-1.0928 0-1.7934 0.68653-0.68653 0.68653-0.92471 2.4239l-5.7164-0.46236q0.33626-2.4099 1.233-3.7549 0.89669-1.359 2.5219-2.0736 1.6393-0.72856 4.5255-0.72856 3.0123 0 4.6796 0.68653 1.6813 0.68653 2.634 2.1156 0.96674 1.4151 0.96674 3.1804 0 1.8774-1.1069 3.5868-1.0928 1.7093-3.9931 3.7549-1.7233 1.1909-2.3118 1.6673-0.57444 0.47637-1.359 1.247h8.9109z"/><path d="m79.304 25.639q0-5.8565 2.1016-8.1963 2.1156-2.3398 6.431-2.3398 2.0736 0 3.4046 0.5184 1.331 0.50439 2.1717 1.331 0.84065 0.81263 1.317 1.7233 0.49038 0.89669 0.7846 2.1016 0.57444 2.2978 0.57444 4.7917 0 5.5903-1.8915 8.1823t-6.515 2.592q-2.592 0-4.1892-0.82664t-2.62-2.4239q-0.74257-1.1349-1.1629-3.0964-0.40631-1.9755-0.40631-4.3574zm5.6604 0.01401q0 3.923 0.68653 5.3661 0.70054 1.4291 2.0176 1.4291 0.86867 0 1.4992-0.60246 0.6445-0.61648 0.93872-1.9335 0.30824-1.317 0.30824-4.1052 0-4.0912-0.70054-5.4922-0.68653-1.4151-2.0736-1.4151-1.4151 0-2.0456 1.4431-0.63049 1.4291-0.63049 5.3101z"/></g> + </svg> diff --git a/icons/skins/default/0.svg b/icons/skins/default/0.svg new file mode 100644 index 0000000000000000000000000000000000000000..fed760a0ffab7c114180e079d0999d5464a914f1 --- /dev/null +++ b/icons/skins/default/0.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><text x="29.053539" y="43.304588" fill="#000000" font-family="sans-serif" font-size="40px" letter-spacing="0px" word-spacing="0px" style="line-height:1.25" xml:space="preserve"><tspan/></text></svg> diff --git a/icons/skins/default/1.svg b/icons/skins/default/1.svg new file mode 100644 index 0000000000000000000000000000000000000000..da4bfe1fc437d22bd1538d6e2806078c4189790a --- /dev/null +++ b/icons/skins/default/1.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/> +<g stroke-width="3.1763" aria-label="1"><path d="m66.056 3.7513v92.497h-25.559v-60.61q-6.2037 4.7148-12.035 7.6306-5.7695 2.9157-14.517 5.5833v-20.72q12.904-4.1565 20.038-9.988t11.167-14.393z"/></g></svg> diff --git a/icons/skins/default/2.svg b/icons/skins/default/2.svg new file mode 100644 index 0000000000000000000000000000000000000000..7f1a27e8b0270ba5493499bb3f450336d7dad014 --- /dev/null +++ b/icons/skins/default/2.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><g stroke-width="3.1763" aria-label="2"><path d="m87.905 96.249h-75.809q1.3028-11.229 7.8787-21.093 6.638-9.9259 24.815-23.388 11.105-8.2509 14.206-12.531 3.1019-4.2806 3.1019-8.1269 0-4.1565-3.1019-7.0722-3.0398-2.9778-7.6926-2.9778-4.8389 0-7.9408 3.0398-3.0398 3.0398-4.0944 10.732l-25.311-2.0472q1.4889-10.67 5.4593-16.626 3.9704-6.0176 11.167-9.1815 7.2583-3.2259 20.038-3.2259 13.338 0 20.72 3.0398 7.4445 3.0398 11.663 9.3676 4.2806 6.2657 4.2806 14.082 0 8.313-4.9009 15.882-4.8389 7.5685-17.681 16.626-7.6306 5.2732-10.236 7.3824-2.5435 2.1093-6.0176 5.5213h39.456z"/></g></svg> diff --git a/icons/skins/default/3.svg b/icons/skins/default/3.svg new file mode 100644 index 0000000000000000000000000000000000000000..e48bb58e31eaa99af11ab54f81aea35189a0d4d4 --- /dev/null +++ b/icons/skins/default/3.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><g stroke-width="3.1763" aria-label="3"><path d="m37.686 30.831-23.884-4.2806q2.9778-11.415 11.415-17.494 8.4991-6.0796 24.008-6.0796 17.805 0 25.745 6.638 7.9408 6.638 7.9408 16.688 0 5.8935-3.2259 10.67-3.2259 4.7769-9.7398 8.375 5.2732 1.3028 8.0648 3.0398 4.5287 2.7917 7.0102 7.3824 2.5435 4.5287 2.5435 10.856 0 7.9408-4.1565 15.261-4.1565 7.2583-11.973 11.229-7.8167 3.9083-20.534 3.9083-12.407 0-19.604-2.9157-7.1343-2.9157-11.787-8.4991-4.5907-5.6454-7.0722-14.144l25.249-3.35q1.4889 7.6306 4.5907 10.608 3.1639 2.9157 8.0028 2.9157 5.087 0 8.437-3.7222 3.412-3.7222 3.412-9.9259 0-6.3278-3.288-9.8019-3.2259-3.4741-8.8093-3.4741-2.9778 0-8.1889 1.4889l1.3028-18.053q2.1093 0.31018 3.288 0.31018 4.963 0 8.2509-3.1639 3.35-3.1639 3.35-7.5065 0-4.1565-2.4815-6.638t-6.8241-2.4815q-4.4667 0-7.2583 2.7296-2.7917 2.6676-3.7843 9.4296z"/></g></svg> diff --git a/icons/skins/default/4.svg b/icons/skins/default/4.svg new file mode 100644 index 0000000000000000000000000000000000000000..609d4409e1e78aa0f20618fc7a0a0b37fddd07bb --- /dev/null +++ b/icons/skins/default/4.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><g stroke-width="3.1763" aria-label="4"><path d="m56.297 79.25h-46.032v-20.782l46.032-54.717h22.023v55.895h11.415v19.604h-11.415v16.998h-22.023zm0-19.604v-28.599l-24.319 28.599z"/></g></svg> diff --git a/icons/skins/default/5.svg b/icons/skins/default/5.svg new file mode 100644 index 0000000000000000000000000000000000000000..3e4ce20f882889cce3fd54a6440da0189ae248bc --- /dev/null +++ b/icons/skins/default/5.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><g stroke-width="3.1763" aria-label="5"><path d="m23.479 3.7513h59.99v20.162h-40.634l-2.1713 13.648q4.2185-1.9852 8.313-2.9778 4.1565-0.99259 8.1889-0.99259 13.648 0 22.147 8.2509 8.4991 8.2509 8.4991 20.782 0 8.8093-4.4046 16.936-4.3426 8.1269-12.407 12.407-8.0028 4.2806-20.534 4.2806-8.9954 0-15.447-1.675-6.3898-1.737-10.919-5.087-4.4667-3.412-7.2583-7.6926-2.7917-4.2806-4.6528-10.67l25.559-2.7917q0.93056 6.1417 4.3426 9.3676 3.412 3.1639 8.1269 3.1639 5.2732 0 8.6852-3.9704 3.4741-4.0324 3.4741-11.973 0-8.1269-3.4741-11.911-3.4741-3.7843-9.2435-3.7843-3.6602 0-7.0722 1.7991-2.5435 1.3028-5.5833 4.7148l-21.527-3.1019z"/></g></svg> diff --git a/icons/skins/default/6.svg b/icons/skins/default/6.svg new file mode 100644 index 0000000000000000000000000000000000000000..684ec0f338496c51fc361f1d145d9c17bea7cb4f --- /dev/null +++ b/icons/skins/default/6.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><g stroke-width="3.1763" aria-label="6"><path d="m85.547 24.999-25.125 3.1019q-0.99259-5.2732-3.35-7.4445-2.2954-2.1713-5.7074-2.1713-6.1417 0-9.5537 6.2037-2.4815 4.4667-3.6602 19.107 4.5287-4.5907 9.3056-6.762 4.7769-2.2333 11.043-2.2333 12.159 0 20.534 8.6852 8.437 8.6852 8.437 22.023 0 8.9954-4.2806 16.44-4.2185 7.4445-11.787 11.291-7.5065 3.7843-18.859 3.7843-13.648 0-21.899-4.6528-8.2509-4.6528-13.214-14.827-4.9009-10.236-4.9009-27.048 0-24.629 10.36-36.044 10.36-11.477 28.723-11.477 10.856 0 17.122 2.5435 6.3278 2.4815 10.484 7.3204 4.1565 4.8389 6.3278 12.159zm-46.528 40.51q0 7.3824 3.7222 11.601 3.7222 4.1565 9.1195 4.1565 4.963 0 8.313-3.7843t3.35-11.291q0-7.6926-3.4741-11.725t-8.6232-4.0324q-5.2732 0-8.8713 3.9083-3.5361 3.9083-3.5361 11.167z"/></g></svg> diff --git a/icons/skins/default/7.svg b/icons/skins/default/7.svg new file mode 100644 index 0000000000000000000000000000000000000000..40d418cdf8746dc499e285f9ac1472ea15c7c4c3 --- /dev/null +++ b/icons/skins/default/7.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><g stroke-width="3.1763" aria-label="7"><path d="m13.119 4.5268h73.762v17.06q-9.6158 8.6852-16.068 18.797-7.8167 12.283-12.345 27.358-3.5982 11.725-4.8389 27.731h-25.187q2.9778-22.271 9.3676-37.346t20.224-32.259h-44.915z"/></g></svg> diff --git a/icons/skins/default/8.svg b/icons/skins/default/8.svg new file mode 100644 index 0000000000000000000000000000000000000000..c444e92a5a6a2218cb1dfd24f2815e73319d84e9 --- /dev/null +++ b/icons/skins/default/8.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><g stroke-width="3.1763" aria-label="8"><path d="m28.039 46.588q-5.9556-3.1639-8.6852-7.0722-3.7222-5.3352-3.7222-12.283 0-11.415 10.732-18.673 8.375-5.5833 22.147-5.5833 18.239 0 26.924 6.9482 8.7472 6.9482 8.7472 17.494 0 6.1417-3.4741 11.477-2.6056 3.9704-8.1889 7.6926 7.3824 3.5361 10.981 9.3676 3.6602 5.8315 3.6602 12.904 0 6.8241-3.1639 12.78-3.1019 5.8935-7.6926 9.1195-4.5287 3.2259-11.353 4.7148-6.762 1.5509-14.455 1.5509-14.455 0-22.085-3.412-7.6306-3.412-11.601-10.05t-3.9704-14.827q0-8.0028 3.7222-13.524 3.7222-5.5833 11.477-8.6232zm11.353-17.867q0 4.7148 2.9157 7.6306 2.9778 2.8537 7.8787 2.8537 4.3426 0 7.1343-2.8537t2.7917-7.3824q0-4.7148-2.9157-7.6306-2.9157-2.9778-7.4445-2.9778-4.5907 0-7.5065 2.9157-2.8537 2.8537-2.8537 7.4445zm-1.3648 39.145q0 6.0176 3.6602 9.8639 3.6602 3.7843 8.375 3.7843 4.5287 0 8.1269-3.8463 3.5982-3.9083 3.5982-9.8639 0-6.0176-3.6602-9.8639-3.5982-3.8463-8.375-3.8463-4.7148 0-8.2509 3.7222-3.4741 3.7222-3.4741 10.05z"/></g></svg> diff --git a/icons/skins/default/mine.svg b/icons/skins/default/mine.svg new file mode 100644 index 0000000000000000000000000000000000000000..4c2a1f5dee28181ddc9d369508ca3bbe6f1ebc46 --- /dev/null +++ b/icons/skins/default/mine.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><g transform="matrix(1.0346 0 0 1.0346 -1.7311 -1.7312)" fill="#eb0404" stroke="#870000" stroke-width="1.9331"><path d="m92.148 55.869c-0.626-0.939-1.482-1.519-2.568-1.739l-6.792-1.242c0.368-5.669-0.727-11.035-3.286-16.096l5.853-4.224c0.939-0.663 1.491-1.574 1.657-2.733 0.202-1.086-0.037-2.071-0.718-2.954l-0.469-0.718c-0.626-0.883-1.537-1.427-2.733-1.629-1.031-0.166-2.016 0.092-2.954 0.773l-5.632 4.059c-3.81-4.215-8.347-7.206-13.611-8.973l1.27-7.731c0.202-1.104-0.037-2.126-0.718-3.065-0.626-0.883-1.482-1.427-2.568-1.629l-0.856-0.166c-1.104-0.147-2.126 0.092-3.065 0.718-0.884 0.681-1.427 1.565-1.629 2.65l-1.16 7.427c-2.503-0.221-4.951-0.175-7.344 0.138-1.362 0.055-2.641 0.294-3.838 0.718-0.626 0.147-1.224 0.331-1.795 0.552l-3.451-7.51c-0.46-0.994-1.215-1.693-2.264-2.098-1.031-0.423-2.043-0.405-3.037 0.055l-0.773 0.414c-0.994 0.405-1.73 1.16-2.209 2.264-0.368 1.031-0.313 2.043 0.166 3.037l3.506 7.648c-0.202 0.11-0.405 0.249-0.607 0.414-5.264 3.681-9.019 8.31-11.265 13.888l-6.958-1.546c-1.086-0.276-2.098-0.074-3.037 0.607-0.994 0.534-1.592 1.344-1.795 2.43l-0.246 0.772c-0.203 1.104-0.018 2.172 0.552 3.203 0.626 0.883 1.491 1.463 2.595 1.739l6.626 1.546c-0.736 5.835 0.101 11.329 2.512 16.483l-5.411 3.672c-0.939 0.626-1.537 1.491-1.795 2.595-0.147 1.086 0.092 2.098 0.718 3.037l0.469 0.635c0.626 0.939 1.454 1.537 2.485 1.795 1.16 0.147 2.209-0.092 3.147-0.718l5.135-3.424c3.7 4.583 8.255 7.887 13.667 9.912l-1.242 6.323c-0.202 1.104 9e-3 2.154 0.635 3.147 0.626 0.883 1.482 1.427 2.568 1.629l0.801 0.166c1.086 0.258 2.098 0.101 3.037-0.469 0.939-0.681 1.509-1.574 1.712-2.678l1.242-6.074c6 0.626 11.651-0.285 16.952-2.733l4.003 6.074c0.626 0.939 1.509 1.518 2.651 1.739 1.049 0.258 2.043 0.074 2.982-0.552l0.69-0.387c0.939-0.626 1.537-1.518 1.795-2.678 0.203-1.086-9e-3 -2.098-0.635-3.037l-3.81-5.936c4.583-3.7 7.841-8.255 9.774-13.667l6.875 1.242c1.086 0.202 2.098-9e-3 3.037-0.635 0.883-0.607 1.427-1.463 1.629-2.568l0.166-0.773c0.202-1.103-0.01-2.143-0.636-3.119zm-50.085-15.013c-0.824 1.929-2.217 3.297-4.178 4.102-1.962 0.806-3.92 0.815-5.876 0.028-1.936-0.778-3.299-2.13-4.09-4.056s-0.774-3.853 0.05-5.782c0.844-1.92 2.247-3.284 4.209-4.089 1.962-0.806 3.91-0.819 5.846-0.041 1.956 0.787 3.329 2.144 4.12 4.069 0.79 1.925 0.763 3.848-0.081 5.769z" fill="#eb0404" stroke="#870000" stroke-width="1.9331"/></g></svg> diff --git a/icons/skins/default/unknown.svg b/icons/skins/default/unknown.svg new file mode 100644 index 0000000000000000000000000000000000000000..293eb2947da5a7a6d58f6e8270f11908f631bc59 --- /dev/null +++ b/icons/skins/default/unknown.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/><rect x="3.5527e-15" y="-7.1054e-15" width="100" height="100" fill="#696969" fill-opacity=".28943" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.1508"/></svg> diff --git a/icons/skins/empty.svg b/icons/skins/empty.svg new file mode 100644 index 0000000000000000000000000000000000000000..6b7cca72d5b5fe5d116270f4c6d4aa081402fbee --- /dev/null +++ b/icons/skins/empty.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="none"/></svg> diff --git a/lib/entities/cell.dart b/lib/entities/cell.dart new file mode 100644 index 0000000000000000000000000000000000000000..e2a6c0dad2cb19c305589d93875fd5bc959bdeae --- /dev/null +++ b/lib/entities/cell.dart @@ -0,0 +1,53 @@ +import 'package:flutter/material.dart'; + +import '../provider/data.dart'; +import '../utils/board_utils.dart'; + +class Cell { + bool isMined = false; + bool isExplored = false; + bool isMarked = false; + int minesCountAround = 0; + + Cell( + @required this.isMined, + ); + + Container widget(Data myProvider, int row, int col) { + String imageAsset = 'assets/skins/' + myProvider.skin + '_unknown.png'; + + Color backgroundColor = this.getBackgroundColor(); + + if (this.isExplored) { + if (this.isMined) { + imageAsset = 'assets/skins/' + myProvider.skin + '_mine.png'; + } else { + imageAsset = 'assets/skins/' + myProvider.skin + '_' + this.minesCountAround.toString() + '.png'; + } + } + + return Container( + decoration: BoxDecoration( + color: backgroundColor, + border: Border.all( + color: Colors.grey, + width: 1, + ), + ), + child: GestureDetector( + child: Image( + image: AssetImage(imageAsset), + fit: BoxFit.fill, + ), + onTap: () { + BoardUtils.walkOnCell(myProvider, row, col); + BoardUtils.checkBoardIsSolved(myProvider); + }, + ), + ); + } + + Color getBackgroundColor() { + return Colors.white; + } +} diff --git a/lib/layout/board.dart b/lib/layout/board.dart new file mode 100644 index 0000000000000000000000000000000000000000..b5e1d1263d986559bb3ead5b1defaf79c9498da4 --- /dev/null +++ b/lib/layout/board.dart @@ -0,0 +1,44 @@ +import 'package:flutter/material.dart'; + +import '../provider/data.dart'; + +class Board { + + static Container buildGameBoard(Data myProvider) { + return Container( + margin: EdgeInsets.all(2), + padding: EdgeInsets.all(2), + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(2), + border: Border.all( + color: Colors.black, + width: 2, + ), + ), + child: buildGameTileset(myProvider), + ); + } + + static Table buildGameTileset(Data myProvider) { + List cells = myProvider.cells; + + return Table( + defaultColumnWidth: IntrinsicColumnWidth(), + children: [ + for (var row = 0; row < myProvider.sizeVertical; row++) + TableRow(children: [ + for (var col = 0; col < myProvider.sizeHorizontal; col++) + Column(children: [ + cells[row][col].widget( + myProvider, + row, + col + ) + ]), + ]), + ] + ); + } + +} diff --git a/lib/layout/game.dart b/lib/layout/game.dart new file mode 100644 index 0000000000000000000000000000000000000000..8333c64de56f4bea171098b41fc89afde2d810ce --- /dev/null +++ b/lib/layout/game.dart @@ -0,0 +1,66 @@ +import 'package:flutter/material.dart'; + +import '../layout/board.dart'; +import '../provider/data.dart'; +import '../utils/game_utils.dart'; + +class Game { + + static Container buildGameWidget(Data myProvider) { + return Container( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Board.buildGameBoard(myProvider), + SizedBox(height: 2), + (myProvider.gameWin || myProvider.gameFail) ? Game.buildEndGameMessage(myProvider) : SizedBox(height: 2), + ], + ), + ); + } + + static FlatButton buildRestartGameButton(Data myProvider) { + return FlatButton( + child: Container( + child: Image( + image: AssetImage('assets/icons/button_back.png'), + fit: BoxFit.fill, + ), + ), + onPressed: () => GameUtils.resetGame(myProvider), + ); + } + + static Container buildEndGameMessage(Data myProvider) { + Image decorationImage = Image( + image: AssetImage( + myProvider.gameWin + ? 'assets/icons/game_win.png' + : myProvider.gameFail + ? 'assets/icons/game_fail.png' + : '' + ), + fit: BoxFit.fill, + ); + + return Container( + margin: EdgeInsets.all(2), + padding: EdgeInsets.all(2), + + child: Table( + defaultColumnWidth: IntrinsicColumnWidth(), + children: [ + TableRow( + children: [ + Column(children: [ decorationImage ]), + Column(children: [ buildRestartGameButton(myProvider) ]), + Column(children: [ decorationImage ]), + ], + ), + ] + ) + ); + } + +} diff --git a/lib/layout/parameters.dart b/lib/layout/parameters.dart new file mode 100644 index 0000000000000000000000000000000000000000..c15d8a1c89663a75cbcd32e19047484eed3632c5 --- /dev/null +++ b/lib/layout/parameters.dart @@ -0,0 +1,119 @@ +import 'package:flutter/material.dart'; + +import '../provider/data.dart'; +import '../utils/game_utils.dart'; + +class Parameters { + + static Container buildParametersSelector(Data myProvider) { + return Container( + padding: EdgeInsets.all(2), + margin: EdgeInsets.all(2), + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Parameters.buildParameterSelector(myProvider, 'difficulty'), + SizedBox(height: 5), + Parameters.buildParameterSelector(myProvider, 'size'), + SizedBox(height: 5), + + Parameters.buildStartGameButton(myProvider), + ], + ), + ); + } + + static Container buildStartGameButton(Data myProvider) { + return Container( + margin: EdgeInsets.all(2), + padding: EdgeInsets.all(2), + + child: Table( + defaultColumnWidth: IntrinsicColumnWidth(), + children: [ + TableRow( + children: [ + Column( + children: [ + Image( + image: AssetImage('assets/skins/empty.png'), + fit: BoxFit.fill, + ), + ] + ), + Column( + children: [ + FlatButton( + child: Container( + child: Image( + image: AssetImage('assets/icons/button_start.png'), + fit: BoxFit.fill, + ), + ), + onPressed: () => GameUtils.startGame(myProvider), + ), + ] + ), + Column( + children: [ + Image( + image: AssetImage('assets/skins/empty.png'), + fit: BoxFit.fill, + ), + ] + ), + ], + ), + ] + ) + ); + } + + static Table buildParameterSelector(Data myProvider, String parameterCode) { + List availableValues = myProvider.getParameterAvailableValues(parameterCode); + + return Table( + defaultColumnWidth: IntrinsicColumnWidth(), + children: [ + TableRow( + children: [ + for (var index = 0; index < availableValues.length; index++) + Column( + children: [ + _buildParameterButton(myProvider, parameterCode, availableValues[index]) + ] + ), + ], + ), + ], + ); + } + + static FlatButton _buildParameterButton(Data myProvider, String parameterCode, String parameterValue) { + String currentValue = myProvider.getParameterValue(parameterCode).toString(); + + bool isActive = (parameterValue == currentValue); + String imageAsset = 'assets/icons/' + parameterCode + '_' + parameterValue + '.png'; + + return FlatButton( + padding: EdgeInsets.all(2), + child: Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: isActive ? Colors.blue : Colors.white, + width: 10, + ), + ), + child: Image( + image: AssetImage(imageAsset), + fit: BoxFit.fill, + ), + ), + onPressed: () => myProvider.setParameterValue(parameterCode, parameterValue), + ); + } + +} diff --git a/lib/main.dart b/lib/main.dart index a317c62a527f381023b7d4269324b197fdf9fde7..dd1afff2ab481d34fc88bd2e0751f294b17f42ed 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,10 +1,15 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; import 'provider/data.dart'; import 'screens/home.dart'; -void main() => runApp(MyApp()); +void main() { + WidgetsFlutterBinding.ensureInitialized(); + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]) + .then((value) => runApp(MyApp())); +} class MyApp extends StatelessWidget { @override diff --git a/lib/provider/data.dart b/lib/provider/data.dart index 26ba51565a5338663d46e626c47259c3d6eb8915..d637afad75b6ffc73ceff166a5f68bc08a3a650f 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -2,4 +2,105 @@ import 'package:flutter/foundation.dart'; class Data extends ChangeNotifier { + // Configuration available values + List _availableDifficultyLevels = ['easy', 'medium', 'hard', 'nightmare']; + List _availableSizes = ['10x10', '15x15', '20x20']; + + List get availableDifficultyLevels => _availableDifficultyLevels; + List get availableSizes => _availableSizes; + + // Application default configuration + String _level = 'medium'; + String _size = '15x15'; + String _skin = 'default'; + + // Game data + bool _stateRunning = false; + bool _gameWin = false; + bool _gameFail = false; + int _sizeVertical = null; + int _sizeHorizontal = null; + List _cells = []; + + String get level => _level; + void updateLevel(String level) { + _level = level; + notifyListeners(); + } + + String get size => _size; + int get sizeVertical => _sizeVertical; + int get sizeHorizontal => _sizeHorizontal; + void updateSize(String size) { + _size = size; + _sizeHorizontal = int.parse(_size.split('x')[0]); + _sizeVertical = int.parse(_size.split('x')[1]); + notifyListeners(); + } + + String get skin => _skin; + void updateSkin(String skin) { + _skin = skin; + notifyListeners(); + } + + getParameterValue(String parameterCode) { + switch(parameterCode) { + case 'difficulty': { return _level; } + break; + case 'size': { return _size; } + break; + } + } + + List getParameterAvailableValues(String parameterCode) { + switch(parameterCode) { + case 'difficulty': { return _availableDifficultyLevels; } + break; + case 'size': { return _availableSizes; } + break; + } + } + + setParameterValue(String parameterCode, String parameterValue) { + switch(parameterCode) { + case 'difficulty': { updateLevel(parameterValue); } + break; + case 'size': { updateSize(parameterValue); } + break; + } + } + + List get cells => _cells; + void updateCells(List cells) { + _cells = cells; + notifyListeners(); + } + + void setCellAsExplored(int row, int col) { + _cells[row][col].isExplored = true; + notifyListeners(); + } + + bool get stateRunning => _stateRunning; + void updateStateRunning(bool stateRunning) { + _stateRunning = stateRunning; + updateGameWin(false); + updateGameFail(false); + notifyListeners(); + } + + bool get gameWin => _gameWin; + void updateGameWin(bool gameWin) { + print('updateGameWin: ' + (gameWin ? 'true' : 'false')); + _gameWin = gameWin; + notifyListeners(); + } + + bool get gameFail => _gameFail; + void updateGameFail(bool gameFail) { + print('updateGameFail: ' + (gameFail ? 'true' : 'false')); + _gameFail = gameFail; + notifyListeners(); + } } diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 7c832f2449376dc7d1298f0d8f066e26167f4133..39c0be2fa8e96df70f1f4e55e4b61a2a9be8b170 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -1,57 +1,53 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import '../layout/game.dart'; +import '../layout/parameters.dart'; import '../provider/data.dart'; +import '../utils/game_utils.dart'; class Home extends StatelessWidget { static const String id = 'home'; @override Widget build(BuildContext context) { - Data _myProvider = Provider.of<Data>(context); + Data myProvider = Provider.of<Data>(context); - return Scaffold( - appBar: AppBar( - title: Text('Minehunter game'), - ), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: <Widget>[ - Container( - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - margin: EdgeInsets.all(4), - padding: EdgeInsets.all(4), - decoration: BoxDecoration( - color: Colors.blue, - borderRadius: BorderRadius.circular(4), - border: Border.all( - color: Colors.green, - width: 4, - ), - ), - child: FlatButton( - child: Text( - '💣', - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 50, - fontWeight: FontWeight.w600, - color: Colors.black, - ), - ), - ), - ), - ], + List<Widget> menuActions = []; + + if (myProvider.stateRunning) { + menuActions = [ + FlatButton( + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(4), + border: Border.all( + color: Colors.blue, + width: 4, ), ), - ], + margin: EdgeInsets.all(8), + child: Image( + image: AssetImage('assets/icons/button_back.png'), + fit: BoxFit.fill + ), + ), + onPressed: () => GameUtils.resetGame(myProvider), ), + ]; + } + + return Scaffold( + appBar: AppBar( + actions: menuActions, ), + body: SafeArea( + child: Center( + child: myProvider.stateRunning + ? Game.buildGameWidget(myProvider) + : Parameters.buildParametersSelector(myProvider) + ), + ) ); } } diff --git a/lib/utils/board_utils.dart b/lib/utils/board_utils.dart new file mode 100644 index 0000000000000000000000000000000000000000..743a832d0d6e80344604d465bf4674cb59c1b0a6 --- /dev/null +++ b/lib/utils/board_utils.dart @@ -0,0 +1,195 @@ +import '../entities/cell.dart'; +import '../provider/data.dart'; + +class BoardUtils { + + static printGrid(List cells) { + print(''); + print('-------'); + for (var rowIndex = 0; rowIndex < cells.length; rowIndex++) { + String row = ''; + for (var colIndex = 0; colIndex < cells[rowIndex].length; colIndex++) { + row += cells[rowIndex][colIndex].isMined ? 'X' : '.'; + } + print(row); + } + print('-------'); + print(''); + } + + static List createEmptyBoard(int sizeHorizontal, int sizeVertical) { + int index = 0; + List cells = []; + for (var rowIndex = 0; rowIndex < sizeVertical; rowIndex++) { + List row = []; + for (var colIndex = 0; colIndex < sizeHorizontal; colIndex++) { + row.add(Cell(false)); + } + cells.add(row); + } + + return cells; + } + + static int getMinesCount(int sizeHorizontal, int sizeVertical, String level) { + int minesCountRatio = 0; + switch(level) { + case 'easy': { + minesCountRatio = 5; + } + break; + case 'medium': { + minesCountRatio = 10; + } + break; + case 'hard': { + minesCountRatio = 15; + } + break; + case 'nightmare': { + minesCountRatio = 20; + } + break; + } + + int minesCount = ((sizeHorizontal * sizeVertical) * minesCountRatio / 100).round(); + + print('Mines count: ' + minesCount.toString()); + + return minesCount; + } + + static List createBoard(int sizeHorizontal, int sizeVertical, String level) { + List cells = createEmptyBoard(sizeHorizontal, sizeVertical); + + // Shuffle cells to put random mines + List cellsArray = []; + for (var row = 0; row < sizeVertical; row++) { + for (var col = 0; col < sizeHorizontal; col++) { + cellsArray.add([row, col]); + } + } + cellsArray.shuffle(); + + // Put random mines on board + int minesCount = getMinesCount(sizeHorizontal, sizeVertical, level); + for (var mineIndex = 0; mineIndex < minesCount; mineIndex++) { + cells[cellsArray[mineIndex][0]][cellsArray[mineIndex][1]].isMined = true; + } + + // Compute all mines counts on cells + for (var row = 0; row < sizeVertical; row++) { + for (var col = 0; col < sizeHorizontal; col++) { + cells[row][col].minesCountAround = getMinesCountAround(cells, row, col); + } + } + + printGrid(cells); + + return cells; + } + + static void walkOnCell(Data myProvider, int row, int col) { + print('Walk on cell [' + col.toString() + ',' + row.toString() + ']'); + myProvider.setCellAsExplored(row, col); + + if (myProvider.cells[row][col].minesCountAround == 0) { + List safeCells = getAllSafeCellsAround(myProvider.cells, row, col); + for (var safeCellIndex = 0; safeCellIndex < safeCells.length; safeCellIndex++) { + int safeCellRow = safeCells[safeCellIndex][0]; + int safeCellCol = safeCells[safeCellIndex][1]; + if (!myProvider.cells[safeCellRow][safeCellCol].isExplored) { + walkOnCell(myProvider, safeCellRow, safeCellCol); + } + } + } + } + + static List getAllSafeCellsAround(List cells, int row, int col) { + int sizeHorizontal = cells.length; + int sizeVertical = cells[0].length; + + List safeCellsCoordinates = []; + + if (cells[row][col].minesCountAround == 0) { + for (var deltaRow = -1; deltaRow <= 1; deltaRow++) { + for (var deltaCol = -1; deltaCol <= 1; deltaCol++) { + int candidateRow = row + deltaRow; + int candidateCol = col + deltaCol; + if ( + (candidateRow >= 0 && candidateRow < sizeVertical) + && + (candidateCol >= 0 && candidateCol < sizeHorizontal) + && + !cells[candidateRow][candidateCol].isExplored + ) { + safeCellsCoordinates.add([candidateRow, candidateCol]); + } + } + } + } + + return safeCellsCoordinates; + } + + static int getMinesCountAround(List cells, int row, int col) { + int sizeHorizontal = cells.length; + int sizeVertical = cells[0].length; + + int minesCountAround = 0; + for (var deltaRow = -1; deltaRow <= 1; deltaRow++) { + for (var deltaCol = -1; deltaCol <= 1; deltaCol++) { + if ( + (row + deltaRow >= 0 && row + deltaRow < sizeVertical) + && + (col + deltaCol >= 0 && col + deltaCol < sizeHorizontal) + && + (cells[row + deltaRow][col + deltaCol].isMined) + ) { + minesCountAround++; + } + } + } + + return minesCountAround; + } + + static bool checkBoardIsSolved(Data myProvider) { + print('checkBoardIsSolved'); + List cells = myProvider.cells; + int sizeHorizontal = cells.length; + int sizeVertical = cells[0].length; + + myProvider.updateGameWin(false); + myProvider.updateGameFail(false); + + for (var row = 0; row < sizeVertical; row++) { + for (var col = 0; col < sizeHorizontal; col++) { + // Walked on a mine + if (cells[row][col].isMined == true && cells[row][col].isExplored == true) { + myProvider.updateGameFail(true); + return false; + } + } + } + + for (var row = 0; row < sizeVertical; row++) { + for (var col = 0; col < sizeHorizontal; col++) { + if ( + // Mine not already found + (cells[row][col].isMined == true && cells[row][col].isMarked == false) + || + // Safe cell marked as mined + (cells[row][col].isMined == false && cells[row][col].isMarked == true) + ) { + return false; + } + } + } + + print('-> ok all mines found!'); + myProvider.updateGameWin(true); + + return true; + } +} diff --git a/lib/utils/game_utils.dart b/lib/utils/game_utils.dart new file mode 100644 index 0000000000000000000000000000000000000000..03e51b7743f9243613e7b56814a6f9ba8b1b13b3 --- /dev/null +++ b/lib/utils/game_utils.dart @@ -0,0 +1,22 @@ +import '../provider/data.dart'; +import '../utils/board_utils.dart'; + +class GameUtils { + + static void resetGame(Data myProvider) { + myProvider.updateStateRunning(false); + } + + static void startGame(Data myProvider) { + print('Starting game: ' + myProvider.size + ' - ' + myProvider.level); + myProvider.updateSize(myProvider.size); + myProvider.updateStateRunning(true); + myProvider.updateCells( + BoardUtils.createBoard( + myProvider.sizeHorizontal, + myProvider.sizeVertical, + myProvider.level + ) + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index 8fe48be6a46a17b55d64d9bf688549189566046f..f57afd81a9fe9091b34d0f271f0797d0475ce325 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,7 +7,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.6.1" + version: "2.7.0" boolean_selector: dependency: transitive description: @@ -73,7 +73,7 @@ packages: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.4.0" nested: dependency: transitive description: @@ -141,7 +141,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.3.0" + version: "0.4.0" typed_data: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index cd7aa5949567a24b31417ee4ef8f65293622ad10..3915ac927c74635e0da63a07d902a9d06fca2292 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -19,3 +19,5 @@ flutter: uses-material-design: true assets: - assets/files/ + - assets/icons/ + - assets/skins/