单机玩家比牌

  • 在单机玩家的脚本中下注的方法中,会根据牌型,来进行决定是比牌、跟注、弃牌的操作
  • 在左右玩家的脚本基类中,创建一个比牌抽象类,在左右两个玩家中实现
  • 在下注方法中的比牌操作中,调用比牌的方法
  • 修改:在第二十骗博客中,写道,在左右玩家的脚本基类中的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. 用户态与内核态的区别
  2. 两张神图介绍python3和 2.x与 3.x 的区别
  3. 几行代码实现谷歌百度搜索对比
  4. mysql mysqldump触发器备份_MySQL常用的备份工具之mysqldump
  5. 云原生被热捧,是炒作还是大势所趋?
  6. java 链表算法_数据结构算法Java版(一) 链表
  7. struts2中的值栈对象ValueStack
  8. android sdk更新后出现please update ADT to the latest ve
  9. git把当前修改提交合并到上一条提交如何操作
  10. ASPEN.HYSYS.V7.1,Thermoflow软件分享下载
  11. OpenCV 基础(二) 显示图片
  12. 电脑开启后,进入桌面黑屏,任务管理器可以用(排除是硬件问题)
  13. LDAP ObjectClass 详解
  14. 月薪两万的“土豪”师兄,加个微信吧!
  15. Mybatis—— 使用注解实现一对一复杂关系映射及延迟加载
  16. 渗透测试(面试)如何获取一个网站的真实ip
  17. html5火苗特效代码,视频添加火焰特效 视频画面中加动态的火苗效果
  18. 51单片机 播放青花瓷(源码)
  19. css应该写在html语言的哪个标记里,CSS布局的选择题
  20. 史上最完美的 Typora 教程

热门文章

  1. Cookie同名不覆盖问题
  2. 如何创建Git仓库并上传个人本地代码
  3. chomd 更改“***”的权限: 不允许的操作
  4. 我最喜爱的英文歌曲列表(没有整理,比较混乱)
  5. 东芝RC-18LMD
  6. Linux:15种 服务器简介
  7. matlab doc(),matlab指令大全(Matlab instruction Daquan).doc
  8. 奇瑞无界Pro 刮起性能机甲风
  9. 史上最详细最简单的冒泡排序,一学就会,一看就懂,一面试就懵!
  10. ARM7与Cortex-M的区别