Pumpktris - de Tetris pompoen (5 / 10 stap)

Stap 5: Programmering de spel


De bijgevoegde Pumpktris.ino.zip downloaden, unzip het en open het bestand in de Arduino-ontwikkelomgeving. Compileren en uploaden naar je Arduino. U moet nu kunnen spelen op de mini LED-matrix die u hebt ingesteld in de vorige stap. Ik heb geprobeerd om het commentaar van de code zo veel mogelijk, maar hier is een algemeen overzicht van de belangrijkste processen:

Beschrijving van de Shapes

Er zijn zeven tetrominos, elk met 4 pixels, en elk met vier mogelijke rotaties. We slaan dit alles in een multi-dimensionale array: de eerste dimensie van de zeven bestaande shapes, de tweede dimensie met de vier rotaties voor elke shape, de derde met vier pixel beschrijvingen die bestaan elk uit een X- en Y coördineren.

Dit beschrijft bijvoorbeeld de "T"-vorm:

/* T */ {
/ * hoek 0 * / {{0,1} {1,1}, {2,1}, {1,2}},
/ * hoek van 90 * / {{1,0} {1,1}, {2,1}, {1,2}},
/ * hoek van 180 * / {{1,0} {0,1}, {1,1}, {2,1}},
/ * hoek van 270 * / {{1,0} {0,1}, {1,1}, {1,2}}
}

Het bijhouden van het actieve stuk

Om bij te houden het stuk op dit moment in het spel, onderhoudt het programma een activePiece -variabele. Dit is de index van de actieve vorm in het hoogste niveau van de matrix. Het houdt ook een rotatie -variabele die de index van de huidige rotatie bevat. Een xOffset variabele tracks hoe ver links of rechts (0-7) elk stuk is, en yOffset worden bijgehouden hoe ver naar beneden (0-15) de Raad van bestuur is gedaald. Als u wilt tekenen van het actieve stuk wordt het programma toegevoegd dat de X en Y gecompenseerd waarden op de X- en Y-coördinaten van elke pixel van de huidige draaihoek van het geselecteerde stuk getrokken.

Het bijhouden van de vaste stukken

Het programma maakt gebruik van een 16 byte-matrix voor het bijhouden van de vaste stukken, met elke byte die een rij vertegenwoordigt. Bijvoorbeeld, zou de onderstaande matrix vertegenwoordigen een L-vormige shape zitten in het midden van de onderste twee rijen (zoals aangegeven door de 1s in de laatste twee bytes):

sampleGrid van de byte [16] =
{
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00100000,
B00111000
};

Botsingdetectie

Wanneer een poging wordt gedaan om de actieve knipt, controleert het programma eerst de nieuwe positie tegen de array van vaste stukken. Er zijn geen botsingen, beweging is toegestaan als de matrix opnieuw wordt getekend. Als er een botsing is gedetecteerd tijdens een poging om te bewegen, links, rechts, of om te draaien, is de actie verboden. Als er een botsing is gedetecteerd opgetreden bij het neerzetten van een stuk, het stuk in zijn standpunt wordt vastgesteld en wordt toegevoegd aan de matrix van vaste pixels.

Dropping stukken automatisch

Het tempo van het spel wordt gecontroleerd door de variabelen gravityTrigger en stepCounter . Elke lus van het programma verhoogt stepCounter, en elke keer stepCounter het aantal opgeslagen in gravityTrigger bereikt, het het actieve stuk één niveau daalt.

Als het spel vordert, wordt de gravityTrigger verlaagd zodat het actieve stuk steeds vaker zakt totdat eindelijk het daalt in elke lus van het programma.

Elke keer dat een actieve stuk is bevestigd aan het raster wordt gecontroleerd voor volledige bytes/rijen (B11111111). Als er om het even welk wordt gevonden, het hen af en aan drie keer knippert, dan worden deze verwijderd en daalt de rijen boven de leemte op te vullen.

Probleemoplossing
Als de stukken zijn niet van boven naar beneden vallen, maar in plaats daarvan gaan van links naar rechts, wijzigt u de waarde die is doorgegeven in de lijnen "matrixTop.setRotation(1);" en/of "matrixBottom.setRotation(1);" in het "Setup"-lus.

Als de stukken in de verkeerde matrix start, schakelen de fysieke locatie van elke matrix of omkeren van de adressen die zijn gedeclareerd in de "matrixTop.begin(0x70);" en "matrixBottom.begin(0x71);" lijnen van de "Setup"-lus.

Indien sommige rijen of kolommen niet licht, wiggle de mini LED matrix in de vrouwelijke headers. Ze kunnen niet goed contact maken.

Gerelateerde Artikelen

REUZE Pumpktris

REUZE Pumpktris

vorig jaar voor Halloween, HaHaBird - aka Nathan Pryor, verlicht de Instructables Gemeenschap met zijn Pumpktris. Dit was een van de coolste Instructables ooit gepost. Nu dat we hier op Instructables buren met het prachtige, prachtige, wetenschap-tas
Tetris tabel

Tetris tabel

Stel je hebt honderden houten kubussen en een droom... een zeer bijzondere droom.  In het bijzonder de droom van het hebben van een Tetris-themed eindtafel voor uw woonkamer of patio.Of je die droom nog niet gehad, maar het klinkt nogal netjes anyway
Tetris-geïnspireerde modulaire Lamp

Tetris-geïnspireerde modulaire Lamp

Dit was een idee dat mijn schetsboek bezet voor een tijdje: een modulaire lamp waarvan eenheden bij contact met elkaar oplichten zou. Ik had lastig normen voor dit project:moet worden als lage kosten mogelijk (geen solderen/lasersnijden nodig)zo als
Pompoen likeur

Pompoen likeur

deze likeur smaakt van de rijke, aardse smaken van pompoen met slechts een aanraking van kruid.  Drankje rechte-up Voeg als een Halloween behandelen, toe aan warme cider, een pompoen champagne cocktail maken, of een pumpkintini.Stap 1: benodigdheden
Pompoen Cocktail

Pompoen Cocktail

pompoen CocktailGrappig ding te noemen dit een pompoen cocktail omdat hoewel het ziet als een eruit, het heeft geen pompoen in.  Ik ben geen fan van pompoen puree aanbrengend door om het even welk van mijn dranken zomaar waardoor het pompoen-ee proev
Origami Tetris

Origami Tetris

Modulaire origami bij zijn het fijnst!Onlangs leerde ik hoe te gebruiken modular origami te maken van felgekleurde kubussen en iemand noemde het aan mij dat het gebruikt kan worden om Tetris-achtige vormen te maken. Dat was al het excuus dat ik nodig
Interactieve Halloween pompoen (Arduino gebaseerd)

Interactieve Halloween pompoen (Arduino gebaseerd)

HET IDEEEen pompoen die gloeit, schudt en schreeuwt... [video]Het is Halloween, dus natuurlijk, dat we moesten een project die verband houdt met die.Het idee is om een pompoen, die zintuigen van de aanwezigheid van een persoon die probeert te krijgen
Halloween IOT pompoen Patch

Halloween IOT pompoen Patch

Doel: Wanneer kinderen het huis benadert wordt de pompoen Patch komt tot leven bieden een interactieve omgeving op basis van beweging en geluid detectie.Stap 1: Service LayerStap 2: Werk FlowWanneer beweging wordt gedetecteerd; Voer de volgende hande
Pompoen geïnkt

Pompoen geïnkt

een unieke getatoeëerd pompoen maken met een aantal interessante lijnen en ontwerpen.Stap 1: benodigdheden Art pennenPompoen van Michaels (wit of oranje)Witte verfSchuim borstelStap 2: Pompoen ontwerpen 1. kan je een witte pompoen, maar ik nog steeds
Roken van No-chemische pompoen

Roken van No-chemische pompoen

Er zijn zo veel grote Arduino gecontroleerd pompoenen / jack-o-lanterns! Dit is een ander, met een digitale LED flakkerende kaars licht en waterdamp zoals "rook" dus geen chemicaliën! Alleen water!De "rook" komt uit een vijver mist mak
Pompoen Pom Pom Garland

Pompoen Pom Pom Garland

Pom pom is gelijk aan de partij, plain en simpel. Dat is waarom ik ben zo enthousiast over dit super gemakkelijk DIY manier om lange garen pompoen pom pom slingers die aangepast voor elke gelegenheid zijn! Ik had een tutorial gezien ergens online Hoe
Eenvoudige kartonnen pompoen decoratie

Eenvoudige kartonnen pompoen decoratie

HalloIn dit instructable ik zal u tonen hoe maak je een eenvoudige pompoen decoratie, deze zijn ongelooflijk gemakkelijk te maken en kan gedaan worden in ongeveer 5 minutenDit instructable is ook een beetje van een facelift van een van mijn eerste in
Pompoen wijnkoeler

Pompoen wijnkoeler

Uw pompoen snijden in een wijnkoeler die dit jaar! Zet het tentoongesteld in uw huis of op uw halloween feest en genieten van een glas wijn. Functionele en leuk, deze feestelijke decoratie is zeker te behagen van het oog en het gehemelte.Volg langs o
De pompoen geven

De pompoen geven

De gnoe team maakte een slimme jackolantern op een recente team dag dat weg snoep, geeft zelfs wanneer u niet thuis.We gebruikten een Arduino Uno-board als de hersenen samen met een bewegingssensor en enkele heerlijke chocolade bedekte malted milk ba