Skip to content

A puzzle a day #143

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 97 additions & 0 deletions samples/a-puzzle-a-day/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# A Puzzle a Day

## Summary

A **Puzzle a Day** is a clever twist on the classic tangram concept. You’re given 8 colorful, irregular shapes and a game board that resembles a 7×7 grid - but with a catch: some cells are blocked and unusable, which changes how the pieces fit.
Your goal: place all the pieces so that they don’t overlap, and exactly two valid cells remain empty - one for the month, and one for the day.

Behind the scenes, the entire game is powered by Named Formulas and User Defined Functions - a modern, maintainable approach to building logic in Power Apps. This design dramatically reduces code duplication, standardizes all calculations, and improves code redability by keeping the logic declarative and modular. Every shape move, rotation, or board update is calculated cleanly and efficiently.

![Game completed](./assets/a-puzzle-a-day.png)
![Game](./assets/a-puzzle-a-day-video.gif)

## Applies to

![Power Apps](https://img.shields.io/badge/Power%20Apps-Yes-green "Yes")
![Power Automate](https://img.shields.io/badge/Power%20Automate-No-red "No")
![Power BI](https://img.shields.io/badge/Power%20BI-No-red "No")
![Power Pages](https://img.shields.io/badge/Power%20Pages-No-red "No")
![Power Virtual Agents](https://img.shields.io/badge/Power%20Virtual%20Agents-No-red "No")
![Dataverse](https://img.shields.io/badge/Dataverse-No-red "No")
![AI Builder](https://img.shields.io/badge/AI%20Builder-No-red "No")
![Custom Connectors](https://img.shields.io/badge/Custom%20Connectors-No-red "No")
![Power Fx](https://img.shields.io/badge/Power%20Fx-Yes-green "Yes")

## Compatibility

![Premium License](https://img.shields.io/badge/Premium%20License-Not%20Required-red.svg "Premium license not required")
![Experimental Features](https://img.shields.io/badge/Experimental%20Features-Yes-green.svg "Rely on experimental features")

## Contributors

* [Katerina Chernevskaya](https://github.com/Katerina-Chernevskaya)

## Version history

Version|Date|Comments
-------|----|--------
1.0|April 17, 2025|Initial release

## Prerequisites

Make sure that experimental features are enabled:
- User-defined functions
- User-defined types
![experimental-features](./assets/experimental-features.png)

## Minimal path to awesome

### Using the solution zip

* [Download](./solution/a-puzzle-a-day.zip) the `.zip` from the `solution` folder
* Within **Power Apps Studio**, import the solution `.zip` file using **Solutions** > **Import Solution** and select the `.zip` file you just packed.

### Using the source code

You can also use the [Power Apps CLI](https://docs.microsoft.com/powerapps/developer/data-platform/powerapps-cli) to pack the source code by following these steps:

* Clone the repository to a local drive
* Pack the source files back into a solution `.zip` file:

```bash
pac solution pack --zipfile pathtodestinationfile --folder pathtosourcefolder --processCanvasApps
```

Making sure to replace `pathtosourcefolder` to point to the path to this sample's `sourcecode` folder, and `pathtodestinationfile` to point to the path of this solution's `.zip` file (located under the `solution` folder)
* Within **Power Apps Studio**, import the solution `.zip` file using **Solutions** > **Import Solution** and select the `.zip` file you just packed.

## Features

- Fully declarative Power Fx architecture: no Power Automate, no connectors - built entirely with Named Formulas, User Defined Functions, and native Power Apps logic.
- Named Formulas as data model:
- `nfCanva` — generates the board with titles and coordinates
- `nfShapesDefault` — stores default shape geometry, rotations, positions
- `nfForbiddenCells` — defines blocked cells on the board
- User Defined Functions (UDFs) for all game logic:
- `udfShape(shapeName)` — central lookup returning all dynamic shape parameters
- `udfShapeCanvaCells(shapeName)` — calculates absolute positions of shape cells based on position and rotation
- `udfMovementAvailability(shapeName)` — returns movement availability in all four directions using smart collision detection
- Modular gameplay functions:
- `udfMove(...)`, `udfRotate(...)`, `udfRemoveShape(...)` — all actions update both shape position and the board status (_canva)
- `udfUpdateCanva(...)` — modular board painter used consistently for all shape actions

## Help

We do not support samples, but this community is always willing to help, and we want to improve these samples. We use GitHub to track issues, which makes it easy for community members to volunteer their time and help resolve issues.

If you encounter any issues while using this sample, you can [create a new issue](https://github.com/pnp/powerapps-samples/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Abug-suspected&template=bug-report.yml&sample=a-puzzle-a-day&authors=@Katerina-Chernevskaya&title=a-puzzle-a-day%20-%20).

For questions regarding this sample, [create a new question](https://github.com/pnp/powerapps-samples/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Abug-suspected&template=question.yml&sample=a-puzzle-a-day&authors=@Katerina-Chernevskaya&title=a-puzzle-a-day%20-%20).

Finally, if you have an idea for improvement, [make a suggestion](https://github.com/pnp/powerapps-samples/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Abug-suspected&template=suggestion.yml&sample=a-puzzle-a-day&authors=@Katerina-Chernevskaya&title=a-puzzle-a-day%20-%20).

## Disclaimer

**THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.**

<img src="https://m365-visitor-stats.azurewebsites.net/powerplatform-samples/samples/a-puzzle-a-day" aria-hidden="true" />
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added samples/a-puzzle-a-day/assets/a-puzzle-a-day.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
73 changes: 73 additions & 0 deletions samples/a-puzzle-a-day/assets/sample.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
[
{
"name": "pnp-powerplatform-samples-a-puzzle-a-day",
"source": "pnp",
"title": "A Puzzle a Day",
"shortDescription": "A **Puzzle a Day** is a clever twist on the classic tangram concept. You’re given 8 colorful, irregular shapes and a game board that resembles a 7×7 grid - but with a catch: some cells are blocked and unusable, which changes how the pieces fit. Your goal: place all the pieces so that they don’t overlap, and exactly two valid cells remain empty - one for the month, and one for the day.",
"url": "https://github.com/pnp/powerplatform-samples/tree/main/samples/a-puzzle-a-day",
"downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/powerplatform-samples/tree/main/samples/a-puzzle-a-day",
"longDescription": [
"A **Puzzle a Day** is a clever twist on the classic tangram concept. You’re given 8 colorful, irregular shapes and a game board that resembles a 7×7 grid - but with a catch: some cells are blocked and unusable, which changes how the pieces fit. Your goal: place all the pieces so that they don’t overlap, and exactly two valid cells remain empty - one for the month, and one for the day. Behind the scenes, the entire game is powered by Named Formulas and User Defined Functions - a modern, maintainable approach to building logic in Power Apps. This design dramatically reduces code duplication, standardizes all calculations, and improves code redability by keeping the logic declarative and modular. Every shape move, rotation, or board update is calculated cleanly and efficiently."
],
"creationDateTime": "2025-04-17",
"updateDateTime": "2025-04-17",
"products": [
"Power Apps",
"Power Fx",
"Power Platform"
],
"tags": [
"tangram",
"puzzle"
],
"categories": [
"CANVAS"
],
"metadata": [
{
"key": "POWERAPPS-EXPERIMENTAL",
"value": "Yes"
},
{
"key": "POWERAPPS-PREMIUM",
"value": "No"
},
{
"key": "POWERAPPS-ONPREM",
"value": "No"
},
{
"key": "POWERAPPS-CUSTOMCONNECTOR",
"value": "No"
}
],
"thumbnails": [
{
"type": "image",
"order": 100,
"url": "https://raw.githubusercontent.com/Katerina-Chernevskaya/powerplatform-samples/f3a795e60197f190ca4470ce93da435c40b267b3/samples/a-puzzle-a-day/assets/a-puzzle-a-day.png",
"alt": "App preview"
},
{
"type": "video",
"order": 101,
"url": "https://www.youtube.com/embed/dmCXzPfsIto",
"alt": "A Puzzle a Day"
}
],
"authors": [
{
"gitHubAccount": "Katerina-Chernevskaya",
"pictureUrl": "https://github.com/Katerina-Chernevskaya.png",
"name": "Katerina Chernevskaya"
}
],
"references": [
{
"name": "Microsoft Power Platform documentation",
"description": "Discover how to make the most of Microsoft Power Platform products with online training courses, docs, and videos covering product capabilities and how-to guides.",
"url": "https://learn.microsoft.com/power-platform/"
}
]
}
]
8 changes: 8 additions & 0 deletions samples/a-puzzle-a-day/sourcecode/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# msbuild output directories
/bin
/obj

# MSBuild Binary and Structured Log
*.binlog
54 changes: 54 additions & 0 deletions samples/a-puzzle-a-day/sourcecode/APuzzleADay.cdsproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PowerAppsTargetsPath>$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\PowerApps</PowerAppsTargetsPath>
</PropertyGroup>

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" />
<Import Project="$(PowerAppsTargetsPath)\Microsoft.PowerApps.VisualStudio.Solution.props" Condition="Exists('$(PowerAppsTargetsPath)\Microsoft.PowerApps.VisualStudio.Solution.props')" />

<PropertyGroup>
<ProjectGuid>d0103190-eae1-4b68-b056-61f2047883f8</ProjectGuid>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<!--Remove TargetFramework when this is available in 16.1-->
<TargetFramework>net462</TargetFramework>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<SolutionRootPath>src</SolutionRootPath>
</PropertyGroup>

<!--
Solution Packager overrides, un-comment to use: SolutionPackagerType (Managed, Unmanaged, Both)
Solution Localization Control, if you want to enabled localization of your solution, un-comment SolutionPackageEnableLocalization and set the value to true. - Requires use of -loc flag on Solution Clone or Sync
-->
<!--
<PropertyGroup>
<SolutionPackageType>Managed</SolutionPackageType>
<SolutionPackageEnableLocalization>false</SolutionPackageEnableLocalization>
</PropertyGroup>
-->

<ItemGroup>
<PackageReference Include="Microsoft.PowerApps.MSBuild.Solution" Version="1.*" />
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All" />
</ItemGroup>

<ItemGroup>
<ExcludeDirectories Include="$(MSBuildThisFileDirectory)\.gitignore" />
<ExcludeDirectories Include="$(MSBuildThisFileDirectory)\bin\**" />
<ExcludeDirectories Include="$(MSBuildThisFileDirectory)\obj\**" />
<ExcludeDirectories Include="$(MSBuildThisFileDirectory)\*.cdsproj" />
<ExcludeDirectories Include="$(MSBuildThisFileDirectory)\*.cdsproj.user" />
<ExcludeDirectories Include="$(MSBuildThisFileDirectory)\*.sln" />
</ItemGroup>

<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)\**" Exclude="@(ExcludeDirectories)" />
<Content Include="$(SolutionPackageZipFilePath)">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>

<Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" />
<Import Project="$(PowerAppsTargetsPath)\Microsoft.PowerApps.VisualStudio.Solution.targets" Condition="Exists('$(PowerAppsTargetsPath)\Microsoft.PowerApps.VisualStudio.Solution.targets')" />

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<CanvasApp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Name>kch_apuzzleaday_72426</Name>
<AppVersion>2025-04-17T16:20:51Z</AppVersion>
<Status>Ready</Status>
<CreatedByClientVersion>3.25042.3.0</CreatedByClientVersion>
<MinClientVersion>3.25042.3.0</MinClientVersion>
<Tags>{"primaryDeviceWidth":"1366","primaryDeviceHeight":"768","supportsPortrait":"true","supportsLandscape":"true","primaryFormFactor":"Tablet","publisherVersion":"3.25042.3","minimumRequiredApiVersion":"2.2.0","hasComponent":"true","hasUnlockedComponent":"true","isUnifiedRootApp":"false","sienaVersion":"20250417T102635Z-3.25042.3.0","showStatusBar":"false"}</Tags>
<IsCdsUpgraded>0</IsCdsUpgraded>
<GalleryItemId xsi:nil="true"></GalleryItemId>
<BackgroundColor>RGBA(0,176,240,1)</BackgroundColor>
<DisplayName>A Puzzle A Day</DisplayName>
<Description>Engage your mind with A Puzzle A Day. This app offers an interactive experience where users can manipulate shapes to solve puzzles, enhancing cognitive skills and providing daily mental challenges.</Description>
<CommitMessage>ready for testing</CommitMessage>
<Publisher></Publisher>
<AuthorizationReferences>[]</AuthorizationReferences>
<ConnectionReferences>{}</ConnectionReferences>
<DatabaseReferences>{}</DatabaseReferences>
<AppComponents>[]</AppComponents>
<AppComponentDependencies>[]</AppComponentDependencies>
<CanConsumeAppPass>1</CanConsumeAppPass>
<CanvasAppType>0</CanvasAppType>
<BypassConsent>0</BypassConsent>
<AdminControlBypassConsent>0</AdminControlBypassConsent>
<EmbeddedApp xsi:nil="true"></EmbeddedApp>
<IntroducedVersion>1.0</IntroducedVersion>
<CdsDependencies>{"cdsdependencies":[]}</CdsDependencies>
<IsCustomizable>1</IsCustomizable>
<BackgroundImageUri>/CanvasApps/kch_apuzzleaday_72426_BackgroundImageUri</BackgroundImageUri>
<DocumentUri>/CanvasApps/kch_apuzzleaday_72426_DocumentUri.msapp</DocumentUri>
<AdditionalUris>
<AdditionalUri>/CanvasApps/kch_apuzzleaday_72426_AdditionalUris0_identity.json</AdditionalUri>
</AdditionalUris>
</CanvasApp>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"__Version":"0.1","App":"804be729-5d49-40c0-9037-b56a8d2fe82e","Test_7F478737223C4B69":"d022519a-dd59-4968-a2c8-e2d80551651a","Host":"e7862d44-e63a-4fdb-9671-dcbec8a14074","BlockA":"b1b0ab6f-6019-43e6-bbd6-ccaf147b16fd","GalleryA":"072fc18c-550d-478a-9d54-07ef41734db4","galleryTemplate2_2":"da3f6211-d10b-4c4e-9b2c-f006da36a552","HtmlTextA":"8db71e56-75d6-4d7c-ac7e-0bc503d8efb5","BlockC":"baaa8cba-001f-408c-8367-be40c27cd0cd","GalleryC":"7cf49779-c937-4ac8-90fb-3eb82d814d95","galleryTemplate2_3":"ca077ffe-75f3-475e-b853-37086fe38884","HtmlTextC":"a9473104-68bd-49e7-828a-c49db8a55a6e","BlockB":"77725804-5422-4742-b652-37bcade40977","GalleryB":"53857c7d-b58d-4035-a8ab-6700514ff46e","galleryTemplate2_1":"da3c8bac-75e6-4bb8-9f3d-bb3428f69f16","HtmlTextB":"87065bae-769e-4a8d-ade7-4f89a2e29de2","BlockD":"a0e517f9-6f32-46be-964f-0450c4b63bd3","GalleryD":"4fdf5a5b-cb54-4f63-88d9-fbb5c316e730","galleryTemplate2_4":"a0a91bb2-c3bc-403e-88ff-7ea614937aee","HtmlTextD":"fc33bf6d-e3b0-4699-8e18-3290350f3b1c","BlockE":"2d4cb210-9255-4ef0-ab5b-3569b47c5ffb","GalleryE":"3a2b8811-aa62-4050-a8cb-454ce10f9402","galleryTemplate2_5":"01039793-a02d-4e0e-bdfa-ab2acf507122","HtmlTextE":"49804de7-3e5b-4324-914e-3af6cd463090","BlockF":"0c4cc834-6039-44e3-9827-d394ba825208","GalleryF":"cdc3349f-ca9f-4d0d-9e4e-1ae8cb366a5a","galleryTemplate2_6":"ca51f746-3c80-4f3b-8180-a27633131cab","HtmlTextF":"aba47681-fabd-4a7d-baec-e9dfac0aa24c","BlockG":"de858a4e-e264-48fd-aaa4-b3226c6ad370","GalleryG":"7d351c91-47ca-47fc-965a-8fb396ae5ce6","galleryTemplate2_7":"f3eb98be-39c5-431b-861b-f967a3afd12a","HtmlTextG":"624fd849-956b-4c86-80b7-b1192c04ae8e","BlockH":"d5dab8f4-483f-4363-b410-86d95ae72325","GalleryH":"0cc6fcf8-4cec-4b59-8c9d-cacec4c69e22","galleryTemplate2_8":"96817d7e-7c51-40f1-8204-e1f7097fef6a","HtmlTextH":"d843cb1d-f598-4452-ae5a-aeced33419f2","Screen1":"d72df754-b7e4-48bf-b9e7-43ab714392e1","HtmlText2_3":"557dbcad-ac58-4d95-8905-d9778e0e1bd6","HtmlText2_2":"9e2ff7d3-40ed-4e1d-81a9-a255fe64e8fc","HtmlText2_1":"b0bb39ac-babc-472a-ae1d-578b31cbe311","Image2":"2192a416-d660-4d63-92ba-7958b3012bc1","Shape C Container":"d85ae98f-aca5-4fb7-8341-cf8e44a9be72","Shape C":"a4d8033b-6a89-4567-b6ae-6bad92bd025d","Shape C - select":"6c1bbfc5-1111-4da4-bc1c-d7f4066920ae","Shape D Container":"2669219d-c5fe-4650-8ca0-d0e6054412ce","Shape D":"e03df611-305f-4bd9-8315-4e3836808110","Shape D - select":"2aae77d5-2459-4d2a-93d2-ba702564f6ce","Shape B Container":"c1f03a5c-1225-40cb-9552-7ecccfd62288","Shape B":"c8325493-ff99-4271-bb8f-308e8bcd2645","Shape B - select":"39f9b93a-4b4b-4a80-9f5d-16c10fb40113","Image4":"662423be-a4bd-42b7-a7a0-3ca6363b48f6","Image4_1":"fde9641e-a645-4878-8dc5-5989e821ff84","Shape E Container":"9a402c6e-3e85-4daa-b9e5-7580378d32b2","Shape E":"521a0b5f-66a8-4a9a-9649-746ea5a0cb5e","Shape E - select":"7c01e020-7864-4c4b-9cde-6d4da1adac92","Canva":"1f6e77b2-d92a-47b5-9b1a-08ce46aa8d88","Canva Gallery":"58248e55-c36d-48f2-ae9f-ae0c6958c07d","galleryTemplate1":"6d686063-61a4-4d6c-b6aa-547273a35100","title":"cec4a6be-505c-448e-b1bb-dec2083a9f85","unlocked date and month":"6c2c6149-b761-4857-8ce4-2f068f936938","warning alert":"714545be-51f5-418c-9fbb-aecc216b8a15","Timer - HtmlText":"57b41bca-ca97-4cb6-b2ab-5423d52f95cb","Timer1":"a83762a8-f2cb-4328-8b80-4f17fd8fa094","Shape F Container":"8216bfba-4a66-4a52-a74f-fddc3701d48c","Shape F":"ec200c41-852a-4d8e-93c6-e55b44ecbf2d","Shape F - select":"465ab09c-7473-45b9-9c98-c7ff18c1068d","Start over - HtmlText":"a8e2af0d-ff4f-46dc-bed2-5a69b145cb08","Remove shape - HtmlText":"004f2a2e-52d3-433d-a9a3-9eb9cef115c3","Start over - Button":"db08e2de-b9ca-4522-8092-ef3e093193c0","Remove shape - Button":"c6ee76b3-cbc3-4956-900b-11629f1f9970","Remove shape - Icon":"e6478d06-583f-4d02-b2b9-1f7c8df7e41b","Start over - Icon":"ac96c97c-e53d-4318-8fe1-93e3119e3838","Shape A Container":"fd6d09d8-cd0e-4591-99a8-97992e98a86b","Shape A":"2e3b6ef0-449b-40a9-957b-2b1080c40570","Shape A - select":"9e342a60-c6bd-43a2-b392-286cd90425ec","Shape G Container":"c9f5fddb-25e1-4290-91f5-84dfae14670d","Shape G":"111ffe2c-cecb-48f7-b1d6-9dc5bb772a4b","Shape G - select":"a5fa05d5-2736-4edd-87a1-c11acefa3f94","Up - HtmlText":"323137ef-0b7d-492a-a8a2-716816a92266","Up":"983ac256-5929-44a8-a83b-3a5e8a988189","Up - Icon":"b18c0605-7676-4724-8052-5eda3337f983","Shape H Container":"0a915b0d-fd15-4ad2-9163-7cee60a57132","Shape H":"47e2862a-d5a1-4b48-800f-148c159e371f","Shape H - select":"88a50646-9052-4296-bd48-67d977bb5a1c","Left - HtmlText":"b080d674-04b8-4e15-b740-9d8f2f5e7f45","Rotate - HtmlText":"0241420f-f03e-444d-a8f1-db8452c7ffbc","Right - HtmlText":"bb762491-a436-4bbf-98bf-0e4e911c6154","Left":"dbc0a87b-bd7f-422a-bdd8-24d9a00fbbbf","Rotate":"2aabb410-0f63-42be-876e-ad5d40c0f267","Right":"b6cb77dc-aeaf-48a1-9693-8f77a5ca35c3","Left - Icon":"dfb86831-1524-4cb7-b6ce-c6fc5ec88e12","Rotate - Icon":"1fa214d8-fb45-438c-9412-2149ae1514e0","Right - Icon":"c82de033-86f6-41bf-bca4-8ab080a59f6f","Down - HtmlText":"4b3e293b-ca71-4e3b-a90d-75b347e6aaf2","Down":"4cd3ebd5-c6b4-4ce5-9956-0a66e27a532b","Down - Icon":"720c33b4-eb50-400a-b15e-408770eead2e","Label1":"34e8ab2e-b04b-4831-9868-2e5af98e3830","Start over - Group":"e239dec4-21f9-4ef3-b1c4-9fd509cd50bf","Remove shape - Group":"92c032fa-a6a2-40ff-ba60-d0e856804895","Up - Group":"000e6aab-e895-4132-875c-283187c8268f","Left - Group":"47fcc8c5-1700-49f0-8cee-77a2a6b4b43b","Rotate - Group":"457d450e-4805-47c4-92d6-359cba166002","Right - Group":"b76b2a03-9da9-4230-9ab1-d6072be40b6e","Down - Group":"94117ab2-566e-431b-bd95-4ec120265b55"}
Binary file not shown.
Binary file not shown.
Loading