单机玩家比牌

  • 在单机玩家的脚本中下注的方法中,会根据牌型,来进行决定是比牌、跟注、弃牌的操作
  • 在左右玩家的脚本基类中,创建一个比牌抽象类,在左右两个玩家中实现
  • 在下注方法中的比牌操作中,调用比牌的方法
  • 修改:在第二十骗博客中,写道,在左右玩家的脚本基类中的FixeUpdate中,调用下注的方法后,就把是否下注设置为false并且隐藏了倒计时,这里应该判断是否在比牌,如果不在比牌,则把下注设置为false,隐藏倒计时

LeftRightBaseManager_Stand



左右单机玩家实现抽象类

  • 在左右两个玩家的脚本中各自实现比牌的抽象类
  • 在ZhjManager_Stand中定义两个方法,一个左边玩家比牌一个右边玩家的比牌
  • 左边玩家比牌:如果自身玩家没有弃牌就和自身玩家比牌,否则就和右边玩家比牌
  • 右边同理
  • 在左右玩家的脚本中调用各自的脚本

创建比牌的界面

创建比牌的脚本VSPanel

  • 创建一个比牌玩家类,并进行序列化
  • 创建比牌类,设置UI,把比牌界面上的牌显示出来,
  • 实现比牌的逻辑
  • 设置比牌界面的显示以及关闭
  • 比牌界面显示后等到2s自动关闭
  • 关闭时调用比牌结果的方法。比牌结果的方法为设置下注下标,设置倒计时的显示或者隐藏
  • 监听和自身玩家比牌以及单机玩家的比牌的方法

VSPanel

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
public class VSPanel : MonoBehaviour
{[System.Serializable]public class Player{public Text txt_Name;public Image[] cardsArray;public Image img_Loser;public Image img_Win;}public float m_DelayTime = 2;public Player m_CamparePlayer;public Player m_CamparedPlayer;private BaseManager_Stand compare;private BaseManager_Stand compareD;private void Awake(){EventCenter.AddListener<BaseManager_Stand, BaseManager_Stand, string, string>(EventDefine.VSWithSelf, VSWithSelf);EventCenter.AddListener<BaseManager_Stand, BaseManager_Stand>(EventDefine.VSAI, CompareCard);}private void OnDestroy(){EventCenter.RemoveListener<BaseManager_Stand, BaseManager_Stand, string, string>(EventDefine.VSWithSelf, VSWithSelf);EventCenter.RemoveListener<BaseManager_Stand, BaseManager_Stand>(EventDefine.VSAI, CompareCard);}//延迟关闭比牌面板IEnumerator Delay(){yield return new WaitForSeconds(m_DelayTime);transform.DOScale(Vector3.zero,0.3f);}/// <summary>/// 延迟比较者胜利/// 比牌面板关闭后在继续执行/// </summary>IEnumerator CompareWin(){yield return new WaitForSeconds(m_DelayTime);compare.Win();compareD.Lose();}   /// <summary>/// 延迟被比较者胜利/// </summary>IEnumerator CompareDWin(){yield return new WaitForSeconds(m_DelayTime);compare.Lose();compareD.Win();}private void VSWithSelf(BaseManager_Stand compare,BaseManager_Stand compared,string campareName,string camparedName){//设置为比牌界面的缩放为1,0.3f后延迟2s关闭比牌界面transform.DOScale(Vector3.one, 0.3f).OnComplete(()=> {StartCoroutine(Delay());});//设置UIm_CamparePlayer.img_Loser.gameObject.SetActive(false);m_CamparePlayer.img_Win.gameObject.SetActive(false);m_CamparedPlayer.img_Loser.gameObject.SetActive(false);m_CamparedPlayer.img_Win.gameObject.SetActive(false);m_CamparePlayer.txt_Name.text = campareName;m_CamparedPlayer.txt_Name.text = camparedName;//显示比牌玩家的牌for (int i = 0; i < compare.m_CardList.Count; i++){string name = "card_" + compare.m_CardList[i].Color + "_" + compare.m_CardList[i].Weight;m_CamparePlayer.cardsArray[i].sprite = ResourcesManager.LoadCardSprite(name);}for (int i = 0; i < compared.m_CardList.Count; i++){string name = "card_" + compared.m_CardList[i].Color + "_" + compared.m_CardList[i].Weight;m_CamparedPlayer.cardsArray[i].sprite = ResourcesManager.LoadCardSprite(name);}//调用比牌的方法CompareCard(compare, compared);}/// <summary>/// 比牌的逻辑算法/// </summary>private void CompareCard(BaseManager_Stand compare, BaseManager_Stand compareD){this.compare = compare;this.compareD = compareD;//比较者的牌型大于被比较这的牌型if (compare.m_CardType > compareD.m_CardType){//比较者赢StartCoroutine(CompareWin());m_CamparePlayer.img_Win.gameObject.SetActive(true);m_CamparedPlayer.img_Loser.gameObject.SetActive(true);}//两者牌型相同else if (compare.m_CardType==compareD.m_CardType){if (compare.m_CardType==CardType.Min){CompareCardWhenMin(compare,compareD);}if (compare.m_CardType==CardType.Duizi){//663 662 766 866//记录对子和单张的大小int CompareDuiziValue = 0, CompareDanValue = 0, CompareDduiziValue = 0, CompareDdanValue = 0;//比较者  663的情况if (compare.m_CardList[0]==compare.m_CardList[1]){CompareDuiziValue = compare.m_CardList[0].Weight;CompareDanValue= compare.m_CardList[2].Weight;}//766的情况if (compare.m_CardList[1]==compare.m_CardList[2]){CompareDuiziValue = compare.m_CardList[1].Weight;CompareDanValue= compare.m_CardList[0].Weight;}//被比较者  663的情况if (compareD.m_CardList[0]== compareD.m_CardList[1]){CompareDduiziValue = compareD.m_CardList[0].Weight;CompareDdanValue = compareD.m_CardList[2].Weight;}//766的情况if (compare.m_CardList[1]== compareD.m_CardList[2]){CompareDduiziValue = compareD.m_CardList[1].Weight;CompareDdanValue = compareD.m_CardList[0].Weight;}if (CompareDuiziValue> CompareDduiziValue){//比较者赢StartCoroutine(CompareWin());m_CamparePlayer.img_Win.gameObject.SetActive(true);m_CamparedPlayer.img_Loser.gameObject.SetActive(true);}else if (CompareDuiziValue ==CompareDduiziValue){if (CompareDanValue== CompareDdanValue){//比较者赢StartCoroutine(CompareWin());m_CamparePlayer.img_Win.gameObject.SetActive(true);m_CamparedPlayer.img_Loser.gameObject.SetActive(true);}else{//被比较者赢StartCoroutine(CompareDWin());m_CamparePlayer.img_Loser.gameObject.SetActive(true);m_CamparedPlayer.img_Win.gameObject.SetActive(true);}}else{//被比较者赢StartCoroutine(CompareDWin());m_CamparePlayer.img_Loser.gameObject.SetActive(true);m_CamparedPlayer.img_Win.gameObject.SetActive(true);}}if (compare.m_CardType==CardType.Shunzi|| compare.m_CardType == CardType.Shunjin|| compare.m_CardType == CardType.Baozi){//三个牌值加起来进行比较int compareSum = 0, compareDSum = 0;for (int i = 0; i < compare.m_CardList.Count; i++){compareSum += compare.m_CardList[i].Weight;}for (int i = 0; i < compareD.m_CardList.Count; i++){compareDSum += compareD.m_CardList[i].Weight;}if (compareSum>compareDSum){//比较者赢StartCoroutine(CompareWin());m_CamparePlayer.img_Win.gameObject.SetActive(true);m_CamparedPlayer.img_Loser.gameObject.SetActive(true);}else{//被比较者赢StartCoroutine(CompareDWin());m_CamparePlayer.img_Loser.gameObject.SetActive(true);m_CamparedPlayer.img_Win.gameObject.SetActive(true);}}if (compare.m_CardType==CardType.Jinhua){CompareCardWhenMin(compare, compareD);}if (compare.m_CardType==CardType.Max){//被比较者赢StartCoroutine(CompareDWin());m_CamparePlayer.img_Loser.gameObject.SetActive(true);m_CamparedPlayer.img_Win.gameObject.SetActive(true);}}//小于else{//被比较者赢StartCoroutine(CompareDWin());m_CamparePlayer.img_Loser.gameObject.SetActive(true);m_CamparedPlayer.img_Win.gameObject.SetActive(true);}}//最小和金花的比较方法private void CompareCardWhenMin(BaseManager_Stand compare, BaseManager_Stand compareD){//比较第一张牌if (compare.m_CardList[0].Weight > compareD.m_CardList[0].Weight){//比较者赢StartCoroutine(CompareWin());m_CamparePlayer.img_Win.gameObject.SetActive(true);m_CamparedPlayer.img_Loser.gameObject.SetActive(true);}//第一张牌相同else if (compare.m_CardList[0].Weight == compareD.m_CardList[0].Weight){//比较第二张牌if (compare.m_CardList[1].Weight > compareD.m_CardList[1].Weight){//比较者赢StartCoroutine(CompareWin());m_CamparePlayer.img_Win.gameObject.SetActive(true);m_CamparedPlayer.img_Loser.gameObject.SetActive(true);}else if (compare.m_CardList[1].Weight == compareD.m_CardList[1].Weight){//比较第三张if (compare.m_CardList[2].Weight == compareD.m_CardList[2].Weight){//比较者赢StartCoroutine(CompareWin());m_CamparePlayer.img_Win.gameObject.SetActive(true);m_CamparedPlayer.img_Loser.gameObject.SetActive(true);}else{//被比较者赢StartCoroutine(CompareDWin());m_CamparePlayer.img_Loser.gameObject.SetActive(true);m_CamparedPlayer.img_Win.gameObject.SetActive(true);}}else{//被比较者赢StartCoroutine(CompareDWin());m_CamparePlayer.img_Loser.gameObject.SetActive(true);m_CamparedPlayer.img_Win.gameObject.SetActive(true);}}else{//被比较者赢StartCoroutine(CompareDWin());m_CamparePlayer.img_Loser.gameObject.SetActive(true);m_CamparedPlayer.img_Win.gameObject.SetActive(true);}}
}

实现玩家的比牌结果的方法

  • 在BaseManager_Stand中定义两个抽象类,Win和Lose,LeftRightBaseManager_Stand和SelfManager_Stand中实现
  • Lose为调用GiveUp的方法
  • 在三个脚本各自重新Win方法




在ZhjManager_Stand中创建的左右玩家的比牌方法中,广播VSPanel中的监听的方法

Zjh游戏(二十二)单机玩家比牌相关推荐

  1. Zjh游戏(十二)登陆功能的实现

    制作单线程 在所有涉及到数据库的操作,全部使用单线程 防止多个线程同时访问,从而造成数据错乱 using System; using System.Collections.Generic; using ...

  2. Python编写微信打飞机小游戏(十二)

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...

  3. libGDX游戏开发之打包游戏(十二)

    libGDX游戏开发之打包游戏(十二) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和goog ...

  4. 【Visual C++】游戏开发五十五 浅墨DirectX教程二十二 水乳交融的美学:alpha混合技术

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/15026917 作者:毛星 ...

  5. JAVA基础知识总结:一到二十二全部总结

    >一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...

  6. 总结二十二:如何在公司建立成功的技术文化(3)

    接上一篇:总结二十二:如何在公司建立成功的技术文化(2) 前言 不管你是继承一个积极的技术文化,还是自己创建,都要促进他发展并且保持他的积极性.这些都需要你不断做出准确的决策. 互相尊重 尊重是基础, ...

  7. 美国大兵的二十二条军规

    美国大兵的二十二条军规 第一条,你不是超人; 第二条,如果一个愚蠢的方法有效,那它就不是愚蠢的方法; 第三条,不要太显眼,因为那样会引人攻击; 第四条,别和比你勇敢的家伙待在一个掩体里; 第五条,别忘 ...

  8. 程序员编程艺术第一 二十二章集锦与总结(教你如何编程)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 程序员编 ...

  9. 程序员编程艺术第一~二十二章集锦与总结(教你如何编程)

    程序员编程艺术第一~二十二章集锦与总结(教你如何编程) 作者:July.编程艺术室. 出处:http://blog.csdn.net/v_JULY_v . 题记 好久没更新博客了,虽只有一个月,但对我 ...

最新文章

  1. linux下常用关机命令
  2. C/C++指针函数和函数指针
  3. 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。
  4. MyBatis(四)MyBatis插件原理
  5. nlm算法matlab代码_遗传算法GA的MATLAB代码
  6. python前后两个下划线_Python中一个下划线_和两个下划线__的区别
  7. Python变量的下划线
  8. bundler for jekyll
  9. juniper防火墙策略元素
  10. Python 综合应用 —— 名片管理系统
  11. hadoop大数据架构
  12. 国二office计算机基础知识,国二office计算机基础知识选择题
  13. 数据结构试卷三(含答案)
  14. Markdown 数学符号大全
  15. Cdn英文的读音音标_宋sir的美式音标教程 Unit 1 /i/ tea
  16. 分析服务用多维度、多场景的用户分层,带您深度玩转精细化游戏运营
  17. python-图像边缘化处理
  18. DTL 模板 for
  19. python残差分析图
  20. 平凡程序员一年又一年的感悟(2019)

热门文章

  1. 【代码收藏夹 · C51】51单片机延时函数
  2. vue 预渲染 (进行SEO优化)
  3. 高中时班上一同学的情书
  4. 点成分享|器官芯片——小白鼠的拯救者?
  5. mysql的安装配置与密码更改
  6. c语言mac小游戏,烧脑又有趣!苹果官方的「编程游戏」登陆Mac
  7. 李子柒14岁当服务员,如今火遍国内外,从月薪300到年赚1.6亿?
  8. 如何写出高质量的个人简历?
  9. CSS水平居中+垂直居中+水平/垂直居中的方法总结
  10. Moved之Nature:正能量传播之那些催人泪下的感动瞬间