Geautomatiseerd met Lego spelen
Dit hobby-project is jaren geleden ontstaan omdat ik een plaatje wilde omzetten naar Lego. Kan een foto zijn, maar in mijn geval wilde ik het klein houden en een sprite van een gameboy spel hebben.
Het betreft een Windows Forms applicatie, in c#. Op het beginscherm open je een afbeelding, vervolgens worden de kleuren vergeleken met bestaande legokleuren en worden de dichtstbijzijnde legokleuren weergegeven. Elke pixel wordt hierbij bekeken. Daarnaast wordt er (nog zonder rekening te houden met zwaartekracht) berekend of het blokjes van 1×4 of 2×4 moeten zijn.
De legokleuren staan gedefinieerd in een LegoColorBase klasse. De kleuren komen van hetinternet. Van iedere kleur houd ik dan (o.a.) de officiële Lego kleurnaam en hexcode en rgb bij.
Met een alom bekende delta e methode wordt de gelijkenis tussen twee kleuren berekend. Die vervolgens een nummer retourneert die stelt dat hoe hoger het getal is hoe meer gelijkenis er is. Deze gaat dus na per kleur van het plaatje, welke legokleur er het hoogste gelijkheidspercentage hebben. De 20 meest gelijke legokleuren worden vervolgens op het scherm getoond. Dit zodat de gebruiker zelf nog zijn menselijke oog kan gebruiken om de kleuren te vergelijken en een juiste vergelijking te maken.
Oké, we hebben het soort blokjes, de aantallen en kleuren. Maar hoe kom ik nu aan die fysieke legoblokjes in de echte wereld? De kleurblokjes op het scherm zijn klikbaar. Dit zijn PictureBox objecten. Er wordt een link toegevoegd aan het Click event van de PictureBox. Er wordt een url opgebouwd, van een webwinkel die individuele legoblokjes verkoopt, aan de hand van kleur en blokgrootte. Deze wordt gestart in Firefox.
We komen hier op de site van BrickScout, met de resultaten van de zoektermen van de kleur en grootte.
En bestellen maar! Voordat we het eindresultaat gaan bekijken, zal ik nog uiteenzetten welke verbeterpunten er zijn:
- De kleuren kunnen uit een bestand worden gelezen i.p.v. hardcoded in een initializer class, zodat de kleuren beheerbaarder zijn.
- Parallellisatie, zodat grotere plaatjes met meerdere threads tegelijk kan worden gelezen.
- Een webapplicatie ervan maken, in plaats Windows Forms/desktopapplicatie.
- De benodigde blokjes in één keer in het winkelmandje gooien, in plaats van dat per kleur en afmeting aan de gebruiker over te laten.
- Etc…
We gaan twee weken de toekomst in en…