这里是给出的Unity代码的简体中文翻译:
主游戏类:
using System.Collections.Generic;
using System.Collections;
using UnityEngine;
using Unity.VisualScripting;
public class MatchGame : MonoBehaviour
{
// 卡片预设
public Card cardPrefab;
// 网格布局
[SerializeField] Transform grid;
// 卡片图标
[SerializeField] Sprite[] iconSprites;
// 卡片配对列表
public List<Sprite> cardPairs = new List<Sprite>();
// 活动卡片列表
public List<Card> activeCards = new List<Card>();
Card cardOne;
Card cardTwo;
// 指导面板
public GameObject instructionsPanel;
// 胜利面板
public GameObject winPanel;
// 输败面板
public GameObject losePanel;
// 圈数限制
private int maxRounds = 3;
// 当前圈数
private int roundNum = 0;
// 成对次数
int matches = 0;
int num;
int requiredMatches;
void Start()
{
// 启动游戏
StartGame();
}
// 准备卡片
private void PrepareCards()
{
// 清空卡片配对列表
cardPairs.Clear();
// 根据图标数量计算卡片数量
for (int i = 0; i < iconSprites.Length / num; i++)
{
// 添加两张相同的卡片
cardPairs.Add(iconSprites[i]);
cardPairs.Add(iconSprites[i]);
}
// Shuffle卡片
Shuffle(cardPairs);
}
// Shuffle卡片
private void Shuffle(List<Sprite> cardList)
{
// 循环交换列表项
for (int i = cardList.Count - 1; i > 0; i--)
{
// 生成随机索引
int num = Random.Range(0, i + 1);
// 交换列表项
Sprite temp = cardList[i];
cardList[i] = cardList[num];
cardList[num] = temp;
}
}
// 生产卡片
private void SpawnCards()
{
// 循环生成卡片
for (int i = 0; i < cardPairs.Count; i++)
{
// Instantiate卡片
Card spawnedCard = Instantiate(cardPrefab, grid);
// 设置卡片图标
spawnedCard.SetIcon(cardPairs[i]);
// 设置卡片对应的MatchGame实例
spawnedCard.matchGame = this;
// 添加卡片到活动卡片列表
activeCards.Add(spawnedCard);
}
}
// 销毁卡片
private void DespawnCards()
{
//oreach活动卡片
foreach (Card spawnedCard in activeCards)
{
// Destroy卡片
if (spawnedCard != null)
{
Destroy(spawnedCard);
}
}
// 清空活动卡片列表
activeCards.Clear();
}
// 设置卡片
public void SetCard(Card card)
{
// 判断卡片是否已被选择
if (card.selected == false)
{
// 展示卡片图标
card.Show();
// 判断是否需要设置第一个卡片
if (cardOne == null)
{
// 设置第一个卡片
cardOne = card;
return;
}
// 判断是否需要设置第二个卡片
if (cardTwo == null)
{
// 设置第二个卡片
cardTwo = card;
// 检查卡片是否匹配
StartCoroutine(CheckCards(cardOne, cardTwo));
// 重置卡片状态
cardOne = null;
cardTwo = null;
}
}
}
// 检查卡片是否匹配
IEnumerator CheckCards(Card a, Card b)
{
// 等待 0.5 秒
yield return new WaitForSeconds(0.5f);
// 判断卡片是否匹配
if (a.iconShown == b.iconShown)
{
// 增加匹配次数
matches++;
// 判断是否达成圈数限制
if (matches >= requiredMatches)
{
// 判断是否达成最大圈数限制
if (roundNum >= maxRounds)
{
// 函数注释
}
else
{
// 重置圈数和匹配次数
roundNum++;
StartRound();
}
}
}
else
{
// 隐藏卡片
a.Hide();
b.Hide();
}
}
// 重新开始
public void PlayAgain()
{
// 激活指导面板
instructionsPanel.SetActive(true);
// 禁用胜利面板和输败面板
winPanel.SetActive(false);
losePanel.SetActive(false);
}
// 启动游戏
public void StartGame()
{
// 禁用指导面板
instructionsPanel.SetActive(false);
// 初始化圈数和匹配次数
roundNum = 1;
StartRound();
}
// 启动圈
private void StartRound()
{
// 销毁卡片
DespawnCards();
// 初始化参数
num = 1;
requiredMatches = 12;
matches = 0;
// 判断是否需要调整参数
if (roundNum == 1)
{
num = 3;
requiredMatches = 4;
}
else if (roundNum == 2)
{
num = 2;
requiredMatches = 6;
}
// 准备卡片
PrepareCards();
// 生产卡片
SpawnCards();
}
// 结束游戏
private void EndGame()
{
// 激活胜利面板
winPanel.SetActive(true);
}
}
**卡片对象类:**
```csharp
using UnityEngine;
using UnityEngine.UI;
public class Card : MonoBehaviour
{
// 卡片图标
[SerializeField] private Image icon;
// 卡片隐藏图标
public Sprite iconHidden;
// 卡片显示图标
public Sprite iconShown;
// 是否已被选择
public bool selected;
// 匹配游戏实例
public MatchGame matchGame;
// 点击事件
public void OnMouseDown()
{
// 向MatchGame设置卡片
matchGame.SetCard(this);
}
// 设置卡片图标
public void SetIcon(Sprite s)
{
iconShown = s;
}
// 展示卡片图标
public void Show()
{
// 向卡片图标赋值
icon.sprite = iconShown;
// 设置是否已被选择
selected = true;
}
// 隐藏卡片图标
public void Hide()
{
// 向卡片图标赋值
icon.sprite = iconHidden;
// 设置是否已被选择
selected = false;
}
}
评论 (0)