Maak een Match-3-game in Construct 2 The Basics

Welkom bij een nieuwe reeks tutorials waarin ik je laat zien hoe je in Construct 2 een Match-3-puzzelspel kunt bouwen. In dit eerste deel gaan we de basis leggen voor het spel en het basisraster leggen op het scherm.


Invoering

Een Match-3-game is een blokgebaseerde puzzel waarin je blokken in het spelgebied verplaatst om groepen van drie of meer te maken met een gemeenschappelijk attribuut (zoals een kleur of een vorm). In de meeste match-3-spellen krijgt de speler ook bonussen voor het matchen van meer dan drie blokken tegelijk.

De meeste match-3-puzzelspellen zijn competitief van aard, en het doel van de speler is over het algemeen gewoon om de hoogste score te behalen die ze kunnen voordat de tijd om is, of aan een andere verliesvoorwaarde is voldaan. Enkele voorbeelden van match-3-spellen zijn Pokemon Puzzle League, Bejeweled en de recente hit Candy Crush Saga.


Het spel dat we gaan maken

Ik besloot om de match-3-game te baseren die we gaan maken op Pokemon Puzzle League:


Klik en versleep aangrenzende blokken om ze te verwisselen. Probeer drie in een rij of kolom overeen te komen. Laat de blokken de top niet bereiken!

Als je nog nooit eerder hebt gespeeld, is PPL een vrij eenvoudige match-3 waarbij blokken vanaf de onderkant van het spelscherm stijgen en de speler wedstrijden moet maken om te voorkomen dat het spelscherm vol raakt. Als de blokken de top bereiken, verliest de speler en wordt hij gedwongen opnieuw opnieuw te beginnen.

Hier is een demo van de game waaraan we in de serie zullen werken:



In dit eerste artikel gaan we ons richten op het leggen van de basis voor onze game. Dit artikel richt zich specifiek op het opzetten van het project en het spawnen van een raster met willekeurige blokken voor de speler.


Voordat we beginnen

Voordat je aan deze tutorial begint, moet je ervoor zorgen dat je de nieuwste versie van Construct 2 (C2) installeert. Toen ik de originele versie van de game bouwde, gebruikte ik Release 122, dus als je een nieuwere versie hebt, zou het goed moeten gaan. Als je nog nooit C2 hebt gebruikt, moet je eerst deze handleiding raadplegen. Hierin worden de basisbeginselen beschreven van het gebruik van C2 en hoe je de meeste objecttypen maakt.

Download ook het grafische pakket dat ik voor deze zelfstudie heb gemaakt. Hoewel je natuurlijk elke gewenste afbeelding kunt gebruiken, zal ik een specifieke positionering geven voor veel items in deze tutorials, en die posities zijn gebaseerd op de afbeeldingen die ik heb gebruikt. Als u andere afbeeldingen gebruikt, moet u rekening houden met eventuele verschillen in grootte in die afbeeldingen bij het volgen van deze zelfstudies.

Zodra je alles hebt ingesteld en een goed begrip van C2 hebt, lees dan verder!


Het project opzetten

Voordat we daadwerkelijk alle gameplay kunnen bouwen, moeten we het project zelf opzetten. Laad C2 en volg deze stappen:

  1. Start een nieuw project.
  2. In de Projecteigenschappen, stel de venstergrootte in 600x600.
  3. Vul de Naam en Schrijver velden.
  4. Ga naar de Lagen paneel en voeg twee nieuwe lagen toe.
  5. Hernoem de onderste laag naar Achtergrond, de middelste laag naar Blocks, en de bovenste laag naar Game Field.
  6. Ga in Layout 1 en voeg een in Betegelde achtergrond voorwerp.
    1. Voor de Betegelde achtergrond object, gebruik BG-afbeeldingen / StandardBGTile.bmp van het grafische pakket.
    2. Ga naar de eigenschappen van het object en hernoem het GameBG.
    3. Stel de objecten in Laag naar Achtergrond.
    4. Stel de objecten in Grootte zijn 650, 650.
    5. Plaats het object zo dat het het volledige zichtbare gedeelte van de lay-out vult en er ongeveer zo uitziet:
  7. Maak nu een nieuwe Betegelde achtergrond voorwerp.
    1. Gebruik de afbeelding Game Field Images / GameFieldBorder.bmp.
    2. Geef het object een naam GameFieldBorder.
    3. Stel de Positie naar 9, -12.
    4. Stel de Grootte naar 16, 732.
    5. Stel de Laag naar Game Field.
  8. Maak een kopie van de  GameFieldBorder voorwerp.
    1. Stel de Positie van de kopie naar  368, -12 .
  9. Maak vervolgens een sprite voorwerp.
    1. Gebruik de afbeelding Game Field Images / GameFieldBottom.png.
    2. Noem maar op GameFieldBottom.
    3. Stel de Positie naar 197, 625.
    4. Stel de Grootte naar 344, 150.
    5. Stel de Laag naar Game Field.
  10. Maak een kopie van de GameFieldBottom voorwerp.
    1. Stel de Positie naar 196, -30.
    2. Stel de Hoek naar 180.

Het laatste wat we moeten doen is een achtergrond maken voor het werkelijke gebied waarin de blokken zullen verschijnen.

  1. Maak een nieuw sprite voorwerp.
    1. Ga naar de Kleur kiezer en stel de Rood, Groen, en Blauw naar 0, en de Alpha naar 200.
    2. Gebruik de Verfemmer om de hele afbeelding met deze kleur te vullen.
    3. Sluit de animatie-editor.
    4. Stel de Grootte naar 359, 570.
    5. Stel de Positie naar 195.294.
    6. Stel de Laag naar Achtergrond

Het speelveld is nu voltooid, maar we moeten nog steeds een Sprite maken die voor de blokken kan worden gebruikt. 

  1. Maak een nieuw sprite voorwerp.
    1. Open de animatie-editor en klik met de rechtermuisknop in de Animatiekaders venster en kies "Frames importeren ... ".
    2. Selecteer elke afbeelding in de Blocks map uit het grafische pakket en importeer ze allemaal.
    3. Verwijder frame 0, zodat het grijze blokframe frame 0 is en er geen leeg frame is.
    4. Controleer of je frames in dezelfde volgorde staan ​​als mijn blokken in de onderstaande afbeelding:

Voordat we verdergaan, wil ik de blokafbeeldingen uitleggen. Het grijze blok geeft een "inactief" blok weer, dat in een volgende tutorial zal worden geïmplementeerd. De resterende afbeeldingen zijn gegroepeerd in sets van drie voor elk blok: het eerste frame is voor wanneer het blok niet wordt gebruikt, het tweede is voor wanneer de speler het blok manipuleert en het derde is voor wanneer het blok is gematcht in een blok groep.

Tot slot, neem het blok dat we hebben gemaakt en plaats het ergens in de lay-out die zal voorkomen dat de speler het ziet tijdens een echt spel. Stel ook de grootte van het blok in 40, 40.

We hebben nu alle afbeeldingen toegevoegd die we nodig hebben voor dit artikel en kunnen doorgaan met het daadwerkelijk laten werken van de game.


Een willekeurig blokraster uitzetten

In de definitieve versie van het spel zullen de blokken te allen tijde omhoog gaan en nieuwe blokken zullen van onderaf op het scherm drukken. Maar voor nu moeten we de basismechanica aan het werk krijgen, dus we gaan gewoon een 8x8 raster van blokken maken en het daarbij laten.

Ga naar Evenementblad 1 en voeg deze globale variabelen toe om de initiële spawning-positie van de Blocks te bepalen:

 Global Variable: SPAWNX Value = 49 Constant = True Global Variable: SPAWNY Value = 526 Constant = True

We moeten ook nog een ding doen voordat we de eerste gebeurtenis maken: we moeten een instantievariabele maken voor het blok dat het blok vertelt welke kleur het is.

Maak een nieuwe instantievariabele voor het Block-object, noem deze Kleur en verander geen andere instellingen.

Nu zullen we onze eerste evenement maken. Het doel van dit evenement is om een ​​statisch raster met blokken te maken voor testdoeleinden:

 Gebeurtenis: Voorwaarde: Systeem> Aan het begin van de opmaak Voorwaarde: Systeem> Voor Naam: "Y" Start index = 0 Einde index = 7 Subgebeurtenis: Systeem> Voor Naam: "X" Start index = 0 Einde index = 7 Actie: Systeem> Create Object Object: Block X = (SPAWNX + (loopIndex ("X")) * (Block.Width + 2)) Y = (SPAWNY - (loopIndex ("Y")) * (Block.Width + 2) )

Beide formules zeggen in principe hetzelfde. Eerst voegen we 2 toe aan de blokbreedte zodat elk blok een buffer van 2px heeft tussen het blok en zijn buren om valse positieven te voorkomen bij het gebruik van botsingsdetectie. Vervolgens vermenigvuldigen we dat aantal met de huidige index in de for-lus en voegen dat toe aan de startpositie X of Y. We nemen ook af van de Y-waarde omdat in C2 het 0-punt op de Y-as bovenaan het spelscherm staat, dus door de waarde van de Y-positie te verlagen plaatsen we een object dichter bij de bovenkant van het scherm.

Dus wat levert dit op? Dit betekent dat wanneer de X- en Y-lussen worden herhaald en de waarden van X en Y toenemen, de positie waarin elk blok wordt geplaatst, verandert, wat uiteindelijk resulteert in een vierkant raster:

Als je het spel nu uitvoert, heb je een raster met blokken - maar in plaats van verschillende kleuren, zullen ze allemaal achtereenvolgens elk blokbeeld doorlopen.

Om dit op te lossen, moeten we twee dingen doen.

Eerst moeten we elk blok een kleurwaarde toewijzen met de instantievariabele die we eerder hebben gemaakt. Voeg hiervoor nog een actie toe:

 Actie: Blokkeren> Waarde instellen Kleur = vloer (willekeurig (1,7))

Hierdoor krijgt het blok een willekeurige kleurwaarde van 1 tot 6. (De reden dat het niet van 1 tot 7 is, wordt uitgelegd in de uitleg van de Willekeurig functie.)

Uw functie zou er nu als volgt uit moeten zien:

We moeten ook een systeem toevoegen dat de afbeelding van een blok wijzigt op basis van de waarde. Hiertoe begint u met het toevoegen van een nieuwe Exemplaarvariabele aan het Block-object:

 Exemplaarvariabele voor bloknaam: "IsMatched" Type: Booleaanse beginwaarde = false

Voeg nu een nieuw evenement toe:

 Gebeurtenis: Systeem> Elke vinkje Actie: Blokkeren> Frame-waarde instellen = (Block.Color-1) * 3 + 1

Deze formule trekt eerst 1 af van de kleurwaarde van het blok om rekening te houden met het feit dat de waarden beginnen bij 1 in plaats van 0. Dan vermenigvuldigt dit getal met 3 om rekening te houden met het feit dat elk blok 3 animatieframes heeft. Als laatste voegt het 1 toe aan die waarde omdat de standaardafbeelding van een blok de eerste afbeelding in de reeks afbeeldingen is.

Laten we een snel voorbeeld bekijken met een blok met een kleurwaarde van 4, om te zien welk animatieframe het zal gebruiken. Eerst trekt het 1 van de kleurwaarde af om 3 te krijgen. Vervolgens vermenigvuldigt het dat getal met 3 om 9 te maken. Als laatste maakt het 1 van die waarde om 10. te maken. Dit betekent dat een blok met een kleurwaarde van 4 frame 10 zal gebruiken als het standaard animatieframe, en zal een paars / vierkant blok zijn.

Als je je spel nu uitvoert, zie je dat elk blok een andere kleur heeft, maar we hebben nog steeds geen animaties geïmplementeerd voor wanneer je muis over het blok zweeft of wanneer het is gematcht. Dit wordt behandeld in de volgende zelfstudie, samen met hoe je twee aangrenzende blokken kunt verwisselen.

Hier is een kleine demo van hoe de game er op dit moment uit zou moeten zien (neem hier de bron):

Klik om de demo te laden.

Als u alleen wilt blijven werken, begin dan met het wijzigen van het animatieframe van het blok op basis van een gebeurtenis "Muis> Cursor is over object". Je zou ook kunnen beginnen met het gebruik van het "Slepen en neerzetten" -gedrag om het blok te manipuleren en na te denken over hoe je kunt bepalen wat de speler probeert te doen met het blok wanneer ze het gaan slepen of wanneer ze het laten vallen.


Conclusie

Bedankt voor het lezen van dit deel van de tutorial, waarin we de basis leggen voor ons Match-3-spel. Kom snel weer terug voor het volgende deel van de serie! Je kunt op de hoogte blijven via Facebook, Twitter, Google+, RSS of e-mail.