Unity实现记忆翻牌Game
        【摘要】 实现翻牌game
    
    
    
    1. 场景搭建
2.卡片代码如下:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Card : MonoBehaviour, IPointerClickHandler
{
    public Sprite frontSprite;  // 卡片正面的精灵图
    public Sprite backSprite;  // 卡片背面的精灵图
    private Image image;
    private bool isFlipped = false;  // 是否已翻开
    private bool isMatched = false;  // 是否已匹配
    void Start()
    {
        image = GetComponent<Image>();
        image.sprite = backSprite;
    }
    public void OnPointerClick(PointerEventData eventData)
    {
        if (!isFlipped &&!isMatched)
        {
            Flip();
            // 这里可以通知游戏管理脚本,有卡片被翻开了,以便进行匹配判断等后续操作(后续结合游戏管理脚本完善逻辑)
        }
    }
    public void Flip()
    {
        isFlipped = true;
        image.sprite = frontSprite;
    }
    public void SetMatched()
    {
        isMatched = true;
    }
    public bool IsMatched()
    {
        return isMatched;
    }
    public bool IsFlipped()
    {
        return isFlipped;
    }
}
3.管理脚本代码如下:
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
public class MemoryGameManager : MonoBehaviour
{
    public Card[] cards;  // 所有卡片的数组
    private int numPairs = 8;  // 卡片对数
    private List<Card> flippedCards = new List<Card>();  // 已翻开的卡片列表
    void Start()
    {
        // 初始化卡片
        InitializeCards();
    }
    void InitializeCards()
    {
        List<Sprite> sprites = new List<Sprite>();
        for (int i = 0; i < numPairs; i++)
        {
            // 假设有多个不同的精灵图,这里重复添加两次,模拟成对的卡片
            sprites.Add(cards[i].frontSprite);
            sprites.Add(cards[i].frontSprite);
        }
        // 打乱精灵图顺序
        ShuffleSprites(sprites);
        for (int i = 0; i < cards.Length; i++)
        {
            cards[i].frontSprite = sprites[i];
        }
    }
    void ShuffleSprites(List<Sprite> sprites)
    {
        for (int i = 0; i < sprites.Count; i++)
        {
            int randomIndex = Random.Range(0, sprites.Count);
            Sprite temp = sprites[i];
            sprites[i] = sprites[randomIndex];
            sprites[randomIndex] = temp;
        }
    }
    public void CardClicked(Card card)
    {
        if (flippedCards.Count < 2)
        {
            card.Flip();
            flippedCards.Add(card);
            if (flippedCards.Count == 2)
            {
                // 检查两张卡片是否匹配
                CheckMatch();
            }
        }
    }
    void CheckMatch()
    {
        if (flippedCards[0].frontSprite == flippedCards[1].frontSprite)
        {
            flippedCards[0].SetMatched();
            flippedCards[1].SetMatched();
            flippedCards.Clear();
        }
        else
        {
            // 若不匹配,等待一定时间后将卡片翻回去
            Invoke("FlipBackCards", 1f);
        }
    }
    void FlipBackCards()
    {
        foreach (Card card in flippedCards)
        {
            card.Flip();
        }
        flippedCards.Clear();
    }
}
4.使用方法
            【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
                cloudbbs@huaweicloud.com
                
            
        
        
        
        
        
        
        - 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)