斗地主洗牌+发牌+排序

2 篇文章 0 订阅

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);
}


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值