斗地主洗牌+发牌+排序

斗地主洗牌+发牌+排序_第1张图片unity初始化54张牌到场景中

将55张UI牌(54张正面加1张背面)打包成Atlas,

制作一个UISprite拖成预设,后代码循环54次画出来

for (int i = 0; i < iAllCardNum; i++)//iAllCardNum=54

        {
            GameObject temp = Init("b" + (i + 1), i);//初始化整副牌
            CardList.Add(temp);
        }
GameObject Init(String name,int sortingOrder)//初始化牌
	{
        GameObject objtemp = Instantiate(CardsObjPrefab);//CardsObjPrefab牌预设

		objtemp.transform.parent = GameObject.Find ("UI Root").transform;
		objtemp.transform.localScale = Vector2.one;
		
		objtemp.name = name;
		objtemp.GetComponent<UISprite>().spriteName = name;

		Card temp = objtemp.GetComponent<Card> ();
		temp.Init(sortingOrder);
		temp.SetCardsPositive (false); 

		return objtemp;

	}



怎么控制其正面背面呢(给预设挂上一个组件脚本

public class Card : MonoBehaviour //将此脚本挂在牌预设上,初始化画的时候,分配其num,正面背面
{
    public bool IsSelected;//是否选中
    public CARDEVEN CardsEven;//牌事件
    public int num;//数字
	public int iCardId;

	public void Init(int sortingOrder)//初始化牌数据
    {
		iCardId = sortingOrder;

		if (sortingOrder == 52) {//给每张牌分配自己的Num
			this.num = 16;
		} else if (sortingOrder == 53) {
			this.num = 17;
		}
		else {
			this.num = (sortingOrder % 13 + 3);//统一从3开始,可自己定

		}
      this.CardsEven = CARDEVEN.NONE;
      this.IsSelected = false;
		this.iCardId = sortingOrder;
    }
	public void SetCardsPositive(bool IsPositive)//设置正面/背面
    {
        if (IsPositive)
        {
			gameObject.GetComponent<UISprite>().spriteName = "b"+(iCardId + 1);
        } 
        else
        {
			gameObject.GetComponent<UISprite>().spriteName = "CARD_Back";
        }
    }}


主要打乱牌顺序

void Shuffle()
{
  for (int i = 0 ; i < iAllCardNum  ; i ++)//iAllCardNum=54
{
  int p = (int)UnityEngine.Random.Range(1,iAllCardNum);
   GameObject tempCard = CardList[i];
  CardList[i] = CardList[p];//交换位置
   CardList[p] = tempCard;}
}

主要发牌动画思路:

2点确定一条直线,起始坐标vStart-==整副牌的末尾那张  , 终点坐标vEnd -== 玩家的坐标(3位玩家,数组),

得出2点之间的方向,和距离长度,然后改变移动这张牌的的坐标(起始坐标 vStart + 方向 * 速度 * 时间),

当这张牌移动距离长度到一定的的范围时则代表着此牌已经发送出去,后将这张牌添加到玩家手上+

将此牌从整幅牌中删除,并改变玩家数组索引,后再发这副牌的末尾那张,一直到整幅牌发至只剩3张作为抢地主


排序----冒泡排序

public void Sort(List<Card> list)
	{
		bool bIsOrderly = false;
		do 
		{
			bIsOrderly = true;
			for (int j = 0; j < list.Count - 1; j++)
			{
				if (list [j].num > list [j + 1].num) 
				{// > 从小到大  < 从大到小
					Card pTempobj = list [j];
					list [j] = list [j + 1];//交换
					list [j + 1] = pTempobj; 
					bIsOrderly = false;
				}
			}
		}while(!bIsOrderly);
}


你可能感兴趣的:(斗地主洗牌+发牌+排序)