任务22
CardUI 脚本 SetPosition 函数
{
transform.localPosition = Vector3.right * index* 20;
//防止还原
if (isSelected)
{
transform.localPosition += Vector3.up * 10;
}
{
transform.localPosition = -Vector3.up * 8 * index + Vector3.left * 8 * index;
}
}
任务22
CardUI 脚本 SetPosition 函数
<
public List<Card> FindThreeAndTwo(List<Card> cards, int weight)
{
List<Card> select = new List<Card>();
List<Card> Three = FindThree(cards, weight);
if(Three.Count > 0)
{
List<Card> copyCards = cards;
foreach (var card in Three)
{
copyCards.Remove(card);
}
List<Card> Two = FindDouble(copyCards, -1);
if(Two.Count != 0)
{
select.AddRange(Three);
select.AddRange(Two);
}
}
return select;
}
>
这里可能会出现一个极端bug,就是在找到三个却没有找到对的时候,会执行移除三个的操作,list是引用类型,所以会出现电脑吃不起却自己删除了三个一样的牌,不知道分析的对不对,所以需要用复制一个list出来,然后使用复制出来的list去移除三个的,再从复制出来的list中找对子,如果找到也无需移除原有牌,因为函数的目的只是找出能打的牌~不知道这样理解对不对,希望Ivy老师给出答复~~^_^
找炸弹的bug
<public List<Card> FindBoom(List<Card> cards, int weight)
{
List<Card> select = new List<Card>();
for (int i = 0; i < cards.Count - 3; i++)
{
if ((int)cards[i].CardWeight == (int)cards[i + 1].CardWeight &&
(int)cards[i].CardWeight == (int)cards[i + 2].CardWeight &&
(int)cards[i].CardWeight == (int)cards[i + 3].CardWeight)
{
int totalWeight = (int)cards[i].CardWeight + (int)cards[i + 1].CardWeight + (int)cards[i + 2].CardWeight + (int)cards[i + 3].CardWeight;
if (totalWeight > weight)
{
select.Add(cards[i]);
select.Add(cards[i + 1]);
select.Add(cards[i + 2]);
select.Add(cards[i + 3]);
break;
}
}
}
return select;
}>
加入电脑手牌中只有四张牌且是炸弹的话,那么count-4就会是0了,那么循环体就进不去了,就会找不到炸弹了,但是又的确有炸弹,所以要写成count - 3,其他的地方也有类似的错误,不知道对不对~^_^
只使用一个左键点击的方案
类:LearnButton
<
using UnityEngine;
using UnityEngine.UI;
using System;
using UnityEngine.EventSystems;
public class LearnButton : MonoBehaviour,IPointerClickHandler,IPointerExitHandler,IPointerUpHandler,IPointerDownHandler,IPointerEnterHandler{
/// <summary>
/// 划过选中
/// </summary>
public event Action HighlightedBtn;
/// <summary>
/// 点击选中
/// </summary>
public event Action<PointerEventData> PressedBtn;
public void OnPointerClick(PointerEventData eventData)
{
if (PressedBtn != null)
PressedBtn(eventData);
}
public void OnPointerEnter(PointerEventData eventData)
{
}
public void OnPointerExit(PointerEventData eventData)
{
if (HighlightedBtn != null)
HighlightedBtn();
}
public void OnPointerDown(PointerEventData eventData)
{
}
public void OnPointerUp(PointerEventData eventData)
{
}
}
>
类:CardUI
<
private void Btn_HighlightedBtn()
{
if (Input.GetMouseButton(0))
{
if (card.BelongTo == CharacterType.Player)
IsSelected = !IsSelected;
}
}
private void Btn_PressedBtn(PointerEventData eventData)
{
if (card.BelongTo == CharacterType.Player && eventData.button == PointerEventData.InputButton.Left)
IsSelected = !IsSelected;
}
>