Memory (juego de las parejas)

Contactar con el profesor

Descargar Recurso

Ubicar objetos en el canvas

Creo la siguiente jerarquía de objetos dentro del camvas:

  • Panel (con el componente vertical layout group)
    • panel1 (con el componente horizontal layout group)
      • carta1
      • carta2
      • carta3
      • carta4
      • carta5
    • panel2 (con el componente horizontal layout group)
      • carta1
      • carta2
      • carta3
      • carta4
      • carta5

Voltear cartas

GameController.cs
public class GameController : MonoBehaviour {
	public Sprite[] cardFace;
	public Sprite cardBack;
	public GameObject[]cards;

	void Start(){
	for (int id = 0; id < 2; id++) {
	for (int i = 0; i <cardFace.Length; i++) {
	bool test = false;
	int choice = 0;

	while (!test) {
		choice = Random.Range (0, cards.Length);
		//Voy buscando hasta encontrar una carta no inicializada
		//Si todas las cartas fueron ya inicializadas, obtendré un bucle infinito
		test = !(cards [choice].GetComponent<Card> ().initialized);
	}
	cards [choice].GetComponent<Card> ().cardFace = cardFace[i];
	cards [choice].GetComponent<Card> ().initialized = true;
	}
}
Card.cs
using UnityEngine;
using UnityEngine.UI;

public class Card : MonoBehaviour{
	public bool initialized = false;

	public Image cardBack;
	public Sprite cardFace;
	GameController gc;
	void Start(){
		gc = GameObject.Find("GameController").GetComponent<GameController>();
		cardBack = GetComponent<Image>();
		cardBack.sprite = gc.cardBack;
		GetComponent<Button>().onClick.AddListener(flipCard);
	}

	public void flipCard(){
		GetComponent<Image>().sprite = cardFace;
	}   
}

La carta llama al GameController

Destapo dos cartas

GameController.cs
private Card primeraCarta;
private Card segundaCarta;

public void evaluarCartas(Card4 carta){
	if (primeraCarta == null) {
		carta.GetComponent<Image> ().sprite = carta.cardFace;
		primeraCarta = carta;
	} else if (segundaCarta == null) {
		carta.GetComponent<Image> ().sprite = carta.cardFace;	
		segundaCarta = carta;
		if (primeraCarta.GetComponent<Image> ().sprite == segundaCarta.GetComponent<Image> ().sprite) {
			Debug.Log ("exito");
			primeraCarta = null;
			segundaCarta = null;
		} else {
			StartCoroutine (dejaCartasComoAlPrincipio());	
		}
	}
}

IEnumerator dejaCartasComoAlPrincipio(){
	yield return new WaitForSeconds (1f);
	primeraCarta.GetComponent<Image> ().sprite = cardBack;
	segundaCarta.GetComponent<Image> ().sprite = cardBack;
	primeraCarta = null;
	segundaCarta = null;
}
Card.cs
 private void flipCard(){
	// this.GetComponent<Image>().sprite = _cardFace;
	gc.evaluarCartas(this);
}

Añadir la detección de cuando se ha ganado la partida

← Soporte para Oculus Quest
Publicación →

Aviso Legal | Política de privacidad