unity翻牌游戏

代码

/**
 * 
 * 
 *    Title:
 *
 *    description:
 *     游戏主控
 *     
 *
 *    Date:
 *
 *    version:
 *
 *    modify Recoder:
 * 
 * 
 **/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameControler : MonoBehaviour
{
    private int[,] CardsArray = new int[4,5];
    private int intFirstNumCard;                                                 //第一张数字牌
    private int intSecondNumCard;                                                //第二张数字牌
    private Button BtnFirstNumCard;                                              //第一张数字牌控件
    private Button BtnSecondNumCard;                                             //第二张数字牌控件
    private bool boolIsFirstClick = true;                                        //判断是否是第一次点击
    private float Temptime;                                                     
    private float pubulictime;
    private float[] buttontime = new float[20];

    
    //定义按钮控件
    public Button btn1_1;
    public Button btn1_2;
    public Button btn1_3;
    public Button btn1_4;
    public Button btn1_5;

    public Button btn2_1;
    public Button btn2_2;
    public Button btn2_3;
    public Button btn2_4;
    public Button btn2_5;

    public Button btn3_1;
    public Button btn3_2;
    public Button btn3_3;
    public Button btn3_4;
    public Button btn3_5;
    public Button btn4_1;

    public Button btn4_2;
    public Button btn4_3;
    public Button btn4_4;
    public Button btn4_5;


    void Start()
    {
        //初始化二维数组
        StartPrepareGameData();

        //buttontime初始化
        buttontimevaluaing();

        //使用协程,进行轮询检测
       //StartCoroutine(JudgePuker(2));
    }

    void Update()
    {
        pubulictime += Time.deltaTime;
        Temptime += Time.deltaTime;                                             //定义一个不停走动的临时时间
        if (Temptime > 2)                                                       //两秒检测一次牌面
        {
            JudgePukerEquals(BtnFirstNumCard, BtnSecondNumCard, intFirstNumCard, intSecondNumCard);
            Temptime = 0;
        }
    }

    void buttontimevaluaing()
    {
        for (int i = 0; i < 20; i++)
        {
            buttontime[i] = pubulictime;
        }
    }

    //使用协程,进行轮询检测
    IEnumerable JudgePuker(int intTime)//IEnumerable C#内部定定义的接口,迭代器结构
    {
        while (true)
        {
            //等待指定描述
            yield return new WaitForSeconds(intTime);
        }
    }
   
    //比较两个button,如果相同就变灰,不相同就还原
    private void JudgePukerEquals(Button btn1,Button btn2,int numbercard1,int numbercard2)
    {
        if (btn1 != null && btn2 != null)                                       //要求前两个按钮不为空
        {   
            if (numbercard1 == numbercard2)                                     //当两个按钮的数值
            {
                Debug.Log(btn1.GetHashCode());                                  //得到“哈希值”(C#里面每个对象都有gethahcode,这是定义在父类object里面的)
                Debug.Log(btn2.GetHashCode());
                if (btn1 .GetHashCode() !=btn2.GetHashCode())                   //要求不为同一个按钮
                {
                    //如果相同就显示为灰色
                    switch (numbercard1)
                    {
                        case 1:
                            btn1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/1B", typeof(Sprite)) as Sprite;
                            btn2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/1B", typeof(Sprite)) as Sprite;
                            break;
                        case 2:
                            btn1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/2B", typeof(Sprite)) as Sprite;
                            btn2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/2B", typeof(Sprite)) as Sprite;
                            break;
                        case 3:
                            btn1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/3B", typeof(Sprite)) as Sprite;
                            btn2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/3B", typeof(Sprite)) as Sprite;
                            break;
                        case 4:
                            btn1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/4B", typeof(Sprite)) as Sprite;
                            btn2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/4B", typeof(Sprite)) as Sprite;
                            break;
                        case 5:
                            btn1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/5B", typeof(Sprite)) as Sprite;
                            btn2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/5B", typeof(Sprite)) as Sprite;
                            break;
                        case 6:
                            btn1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/6B", typeof(Sprite)) as Sprite;
                            btn2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/6B", typeof(Sprite)) as Sprite;
                            break;
                        case 7:
                            btn1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/7B", typeof(Sprite)) as Sprite;
                            btn2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/7B", typeof(Sprite)) as Sprite;
                            break;
                        case 8:
                            btn1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/8B", typeof(Sprite)) as Sprite;
                            btn2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/8B", typeof(Sprite)) as Sprite;
                            break;
                        case 9:
                            btn1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/9B", typeof(Sprite)) as Sprite;
                            btn2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/9B", typeof(Sprite)) as Sprite;
                            break;

                        default:
                            break;
                            //停止点击处理
                    }
                    //配对之后停止button监听
                    btn2.GetComponent<Button>().enabled = false;
                    btn1.GetComponent<Button>().enabled = false;
                    //重置比较的数字牌
                    intFirstNumCard = 0;
                    intSecondNumCard = 0;
                }
                
            }
            else
            {
                //button没有被锁住就翻转回来
                if(btn1.GetComponent<Button>().enabled==true)
                {
                    btn1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
                }
                if(btn2.GetComponent<Button>().enabled == true)
                {
                    btn2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
                }
                
            }
        }
       
    }
    //对每个数组下标随机添加数值,添加背景图
    private void StartPrepareGameData()
    {
        ArrayList al = CreateRandomDoublePlayCard();                            //获得成对出现的数列
        IEnumerator ietor = al.GetEnumerator();                                 //得到一个迭代器接口
        //遍历二位数组
        for(int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                if (ietor.MoveNext())
                {
                    CardsArray[i, j] = (int)ietor.Current;                      //迭代器可以依次的把al里面的数吐出来
                }
                
            }
        }
        #region 添加背景牌的初始图
        btn1_1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn1_2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn1_3.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn1_4.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn1_5.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;

        btn2_1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn2_2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn2_3.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn2_4.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn2_5.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;

        btn3_1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn3_2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn3_3.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn3_4.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn3_5.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;

        btn4_1.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn4_2.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn4_3.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn4_4.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        btn4_5.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/PokerBG3", typeof(Sprite)) as Sprite;
        #endregion
    }

    private ArrayList CreateRandomDoublePlayCard()                              //使数组成对出现
    {
        ArrayList al = new ArrayList();
        //产生10对数字牌
        for (int i = 0; i < 10; i++)                                            //随机添加是个数
        {
            al.Add(Random .Range(1, 9));
        }
        //使其成对出现
        for (int i = 0; i < 9; i++)                                             //复制之前添加的十个数
        {
            int intTemp = (int)al[i];
            al.Add(intTemp);
        }
        //乱序排列
        for (int i = 0; i < al.Count; i++)                                      //打乱顺序
        {
            int intRandomPosition = Random.Range(1, al.Count);
            int intTemp = (int)al[i];
            al[i] = al[intRandomPosition];
            al[intRandomPosition] = intTemp;
        }
        return al;
    }

    #region 玩家牌面点击响应
    public  void CilckButtion1_1()
    {
        ProcessUserClick(btn1_1, 0, 0);
    }
    public void CilckButtion1_2()
    {
        ProcessUserClick(btn1_2, 0, 1);
    }
    public void CilckButtion1_3()
    {
        ProcessUserClick(btn1_3, 0, 2);
    }
    public void CilckButtion1_4()
    {
        ProcessUserClick(btn1_4, 0, 3);
    }
    public void CilckButtion1_5()
    {
        ProcessUserClick(btn1_5, 0, 4);
    }
    public void CilckButtion2_1()
    {
        ProcessUserClick(btn2_1, 1, 0);
    }
    public void CilckButtion2_2()
    {
        ProcessUserClick(btn2_2, 1, 1);
    }
    public void CilckButtion2_3()
    {
        ProcessUserClick(btn2_3, 1, 2);
    }
    public void CilckButtion2_4()
    {
        ProcessUserClick(btn2_4, 1, 3);
    }
    public void CilckButtion2_5()
    {
        ProcessUserClick(btn2_5, 1, 4);
    }
    public void CilckButtion3_1()
    {
        ProcessUserClick(btn3_1, 2, 0);
    }
    public void CilckButtion3_2()
    {
        ProcessUserClick(btn3_2, 2, 1);
    }
    public void CilckButtion3_3()
    {
        ProcessUserClick(btn3_3, 2, 2);
    }
    public void CilckButtion3_4()
    {
        ProcessUserClick(btn3_4, 2, 3);
    }
    public void CilckButtion3_5()
    {
        ProcessUserClick(btn3_5, 2, 4);
    }
    public void CilckButtion4_1()
    {
        ProcessUserClick(btn4_1, 3, 0);
    }

    public void CilckButtion4_2()
    {
        ProcessUserClick(btn4_2, 3, 1);
    }
    public void CilckButtion4_3()
    {
        ProcessUserClick(btn4_3, 3, 2);
    }
    public void CilckButtion4_4()
    {
        ProcessUserClick(btn4_4, 3, 3);
    }
    public void CilckButtion4_5()
    {
        ProcessUserClick(btn4_5, 3, 4);
    }
    #endregion
    private  void  ProcessUserClick(Button butobj, int RowNumber, int colNumber)
    {
        if (boolIsFirstClick)                                                   //为第一次点击
        {
            boolIsFirstClick = false;
            intFirstNumCard = CardsArray[RowNumber,colNumber];                  //获得第一个图片对应的数
            //显示对应的图形(动态加载图片)
            DisplayPokerCardByNumber(butobj,intFirstNumCard);
            BtnFirstNumCard = butobj;
        }
        else                                                                    //第二次点击
        {
            boolIsFirstClick = true;
            intSecondNumCard = CardsArray[RowNumber, colNumber];                //获得第二个图片对应的数
            //显示对应的图形(动态加载图片)
            DisplayPokerCardByNumber(butobj, intSecondNumCard);
            BtnSecondNumCard = butobj;
        }
    }
    //点击显示牌面,动态的给button赋值图片
    private void DisplayPokerCardByNumber(Button btn, int numberCard)
    {
        switch (numberCard)
        {
            case 1:
                btn.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/1A", typeof(Sprite)) as Sprite;
                break;
            case 2:
                btn.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/2A", typeof(Sprite)) as Sprite;
                break;
            case 3:
                btn.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/3A", typeof(Sprite)) as Sprite;
                break;
            case 4:
                btn.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/4A", typeof(Sprite)) as Sprite;
                break;
            case 5:
                btn.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/5A", typeof(Sprite)) as Sprite;
                break;
            case 6:
                btn.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/6A", typeof(Sprite)) as Sprite;
                break;
            case 7:
                btn.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/7A", typeof(Sprite)) as Sprite;
                break;
            case 8:
                btn.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/8A", typeof(Sprite)) as Sprite;
                break;
            case 9:
                btn.GetComponent<Image>().overrideSprite = Resources.Load("Sprites/9A", typeof(Sprite)) as Sprite;
                break;

            default:
                break;
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值