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)