Programozási match3 játékok Unity - programozás - cikkek Directory

Programozási match3 játékok Unity - programozás - cikkek Directory

Először hozzon létre blokkokat. Ehhez egy egyszerű kocka különböző színű (én 4 szín), és a skála kocka (0,8, 0,8, 0,8).
Ezután hozzon létre egy C # script, hívjuk Match3

Mit kell tennünk:
1) Generation játéktábla (lapok).
2) kiválasztása két blokk.
3) Ellenőrizze, hogy ezek mellett.
4) A csere a pozíciók és az adatok.
5) Összehasonlító blokkok.
6) A pusztítás és ívási helyek.

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „>
// Board
public int # 91;,] board;

// tömb
nyilvános Transform # 91;] blokkot;

érvényteleníti Start (# 41;<
blokkok = új int # 91, 10,10];
// generálása a fórumon
GenBoard (# 41 ;;
>


érvényteleníti GenBoard (# 41;<
// 10x10 = 100blocks
A (int x = 0; x A (int y = 0; y int randomNumber = Random.Range (0, block.Length # 41 ;; // ID
// tömb kapsz
Transform obj = (Transform # 41; példányosításához (blokk # 91; randomNumber] .transform, új Vector3 (x, y, 0 # 41;, Quaternion.identity # 41; a Transform;
// hozzárendeli a szülő
obj.parent = transzformálására;
// nevet hozzárendelni
obj.name = "Block # 91; X:" + x + "Y:" + y + "] ID:" + randomNumber;
// állítsa be az azonosítót a testület ebben a helyzetben
board # 91; x, y] = randomNumber;
>
>
>

Mi továbbadjuk az egyes blokk a fedélzeten, és kap véletlenszerűen szám azt (ez lesz a szín). Spawn egységet.
Ügyeljen arra, hogy hozzá egyes blokk prefabs a blokk tömböt.
Most hozzunk létre egy új szkriptet. Nevezzük Block. Rendeljen a script jön létre minden új egységet. Adjunk hozzá néhány változó a helyzet és azonosítót, akkor szükség lesz később.

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „>
// blokk összesen
public int ID;
public int x;
public int y;

privát Vector3 myScale;
privát float STARTTIME;

public static Transform válasszuk;
public static Transform moveTo;

érvényteleníti Start (# 41;<
myScale = transform.localScale;
StartTime = Time.time;
>

Most meg kell adni ezt a forgatókönyvet, hogy minden egyes blokk rendelni a helyét és azonosítóját. A Match3 script GenBoard funkció add

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „>
// csatolása szkriptet minden blokk
Blokk b = obj.gameObject.AddComponent(# 41 ;;
// hozzárendeli egy változó
b.x = x;
b.y = y;
b.ID = randomNumber;

Kiválasztása két blokk.

Válassza ki a két blokk, meg kell vizsgálni, hogy a játékos megnyomta a bal egérgombbal. Akkor kell ellenőrizni, hogy pontosan hogyan a blokk vége.
A szkriptblokk tudjuk használni onmouseover funkció, hogy hívják, ha a kurzor a blokk.
Aztán, ha semmi nincs kijelölve, és a játékos megnyomja a bal egérgombbal válassza ki a blokk. És ha a készülék már kiválasztott - válassza ki újra.
Ehhez meg kell határozni, két statikus változókat.

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „>
public static Transform válasszuk;
public static Transform moveTo;

void OnMouseExit (# 41;<
// Reset blokk MÉRLEG
transform.localScale = myScale;
>

Ellenőrizze, hogy a blokkok közelében
Annak ellenőrzésére, hogy a blokkok egymás mellett, meg kell tudni, hogy a helyzetük.
Block.select eléréséhez használni statikus változó. Kapjuk átalakítja a kijelölt blokk.
A Match3 script a frissítés funkciót, meg kell vizsgálni, hogy a két blokk van jelölve. Ha igen, akkor meg kell hívni CheckIfNear függvény, amely visszaadja igaz vagy hamis.

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „>
void Update (# 41;<
if (Block.select Block.moveTo # 41; // Ellenőrizze, hogy közel vannak
if (CheckIfNear (# 41; == true # 41;

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „>
bool CheckIfNear (# 41;<
Blokk sel = Block.select.gameObject.GetComponent(# 41 ;;
Blokk mov = Block.moveTo.gameObject.GetComponent(# 41 ;;

// Ellenőrizze a számot
ha (sel.x-1 == mov.x sel.y == mov.y # 41;<
// Bal
return true;
>
ha (sel.x + 1 == mov.x sel.y == mov.y # 41;<
// Jobb
return true;
>
if (sel.x == mov.x sel.y + 1 == mov.y # 41;<
// Up
return true;
>
if (sel.x == mov.x sel.y-1 == mov.y # 41;<
// Le
return true;
>
Debug.log ( „Mit akar kiválasztani?” # 41 ;;
return false;
>

Az Exchange blokk adat és helyzetváltoztatásai

Ehhez újra kell férniük a blokk komponenst blokk és a változás változókat.

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „>
void Swap (# 41;<
Blokk sel = Block.select.gameObject.GetComponent(# 41 ;;
Blokk mov = Block.moveTo.gameObject.GetComponent(# 41 ;;

Vector3 tempPos = sel.transform.position;
int tempX = sel.x;
int tempY = sel.y;

// cserehelyzetek
sel.transform.position = mov.transform.position;
mov.transform.position = tempPos;


// Data Exchange
sel.x = mov.x;
sel.y = mov.y;

mov.x = tempX;
mov.y = tempY;

// módosítása az azonosító szállni
board # 91; sel.x, sel.y] = sel.ID;
board # 91; mov.x, mov.y] = mov.ID;

Ellenőrzés összehasonlítás a következő.
Tudjuk, hogy a kiválasztott egységet. Ami például a fekete. Tudjuk, hogy a helyzet a blokk (férhetnek hozzá statikus változó). De nem tudjuk, hogy van - van 3 azonos egység mellett kiemelve.
Ahhoz, hogy tudjuk ezt, akkor:
1) A helyzet a kiválasztott blokk megy jobbra.
2) Ha a blokk azonos színű, mint a kiválasztott, ismét megy jobbra, és vegye figyelembe, hogy találtunk egy blokk.
3) Ha a blokk eltér a kiválasztott szín, megáll, nem megy jobbra többé.
Szinte ugyanezt más területeken, kivéve, hogy ebben az esetben abból indulunk ki, olyan helyzetben, hogy nem ellenőrzi a kijelölt blokk. Gróf indulunk szemben állva a blokkot. Nem akarjuk, hogy ellenőrizze, ugyanabban a blokkban kétszer.

Ugyanez az elv az alsó és felső irányban.

Akkor kell ellenőrizni, ha nem értünk van több azonos blokkokat. Ha countL + countr => 3, blokkok tönkre, és megjelöli azokat üres.

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „>
bool CheckMatch (# 41;<
// kap minden hozzáférés minden blokk a jelenet
Blokk # 91;] ALLB = FindObjectsOfType (typeof (blokk # 41; # 41; a blokk # 91];
Blokk sel = Block.select.gameObject.GetComponent(# 41 ;;

int countU = 0; // felfelé számlálót
int Countd = 0; // visszaszámol
int countL = 0; // számláló bal
int countr = 0; // helyes counter

// Top
A (int u = sel.y; u if (board # 91; sel.x, u] == sel.ID # 41;<
countU ++;
>


// Ellenőrizze, hogy van egy sor három blokk
ha (countL + countr> = 3 || Countd + countU> = # 3 41;<
ha (countL + countr> = # 3 41;<
// elpusztítani, és vegye figyelembe az üres blokkokat
A (int Cl = 0; cl<=countL; cl++)<
foreach (B blokk a ALLB # 41;<
if (b.x == sel.x-cl b.y == sel.y # 41;<
Elpusztítani (b.gameObject # 41 ;;
board # 91; b.x, b.y] = 500; // figyelmét az üres blokk
>
>
>
A (int cr = 0; cr foreach (B blokk a ALLB # 41;<
if (b.x == sel.x + cr b.y == sel.y # 41;<
Elpusztítani (b.gameObject # 41 ;;
board # 91; b.x, b.y] = 500;
>
>
>
>
ha (Countd + countU> = # 3 41;<
A (int cd = 0; cd<=countD; cd++)<
foreach (Blokk blc a ALLB # 41;<
if (blc.x == sel.x blc.y == sel.y - cd # 41;<
board # 91; blc.x, blc.y] = 500;
Elpusztítani (blc.gameObject # 41 ;;
>
>
>
A (int cu = 0; cu foreach (Blokk blc a ALLB # 41;<
if (blc.x == sel.x blc.y == sel.y + Cu # 41;<
board # 91; blc.x, blc.y] = 500;
Elpusztítani (blc.gameObject # 41 ;;
>
>
>
>
Respawn (# 41 ;;
return true;

Most új blokkok a jelzett helyeken a területen. Szinte ugyanezt tettük GenBoard funkció

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „>
void Respawn (# 41;<
A (int x = 0; x A (int y = 0; y ha (board # 91; x, y] == 500 # 41; int randomNumber = Random.Range (0, blocks.Length # 41 ;; // ID
Transform obj = (Transform # 41; példányosításához (blokk # 91; randomNumber] .transform, új Vector3 (x, y, 0 # 41;, Quaternion.identity # 41 ;;
obj.parent = transzformálására;
Blokk b = obj.gameObject.AddComponent(# 41 ;;
// hozzárendeli egy változó
b.ID = randomNumber;
b.x = x;
b.y = y;
// a ID szállni az új érték
board # 91; x, y] = randomNumber;
>
>
>
>

És már az Update funkció

? 200 '200px': '' + (this.scrollHeight + 5) + 'px'); „>
void Update (# 41;<
if (Block.select Block.moveTo # 41; // Ellenőrizze közel vannak
if (CheckIfNear (# 41; == true # 41;<
// Közel
Csere (# 41 ;; // cserélni álláspontjukat és az adatok

// Ellenőrizze a match3
if (CheckMatch (# 41; == true # 41;<
// Van mérkőzés
Block.select = null;
Block.moveTo = null;
>
más<
// Nincs találat, vissza őket alaphelyzetben
Csere (# 41 ;;
Block.select = null;
Block.moveTo = null;
>
>
más<
// Nem közelében
Block.select = null;
Block.moveTo = null;
// tudjuk ismét válassza ki az új blokkok
>
>
>

Kapcsolódó cikkek