Zjh游戏(二十二)单机玩家比牌
单机玩家比牌
- 在单机玩家的脚本中下注的方法中,会根据牌型,来进行决定是比牌、跟注、弃牌的操作
- 在左右玩家的脚本基类中,创建一个比牌抽象类,在左右两个玩家中实现
- 在下注方法中的比牌操作中,调用比牌的方法
- 修改:在第二十骗博客中,写道,在左右玩家的脚本基类中的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游戏(二十二)单机玩家比牌相关推荐
- Zjh游戏(十二)登陆功能的实现
制作单线程 在所有涉及到数据库的操作,全部使用单线程 防止多个线程同时访问,从而造成数据错乱 using System; using System.Collections.Generic; using ...
- Python编写微信打飞机小游戏(十二)
如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢. Python编写微信打飞机小游戏(一) Python编写微信打飞机小游戏(二) Python编写微信打飞机小游戏(三 ...
- libGDX游戏开发之打包游戏(十二)
libGDX游戏开发之打包游戏(十二) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和goog ...
- 【Visual C++】游戏开发五十五 浅墨DirectX教程二十二 水乳交融的美学:alpha混合技术
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/15026917 作者:毛星 ...
- JAVA基础知识总结:一到二十二全部总结
>一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...
- 总结二十二:如何在公司建立成功的技术文化(3)
接上一篇:总结二十二:如何在公司建立成功的技术文化(2) 前言 不管你是继承一个积极的技术文化,还是自己创建,都要促进他发展并且保持他的积极性.这些都需要你不断做出准确的决策. 互相尊重 尊重是基础, ...
- 美国大兵的二十二条军规
美国大兵的二十二条军规 第一条,你不是超人; 第二条,如果一个愚蠢的方法有效,那它就不是愚蠢的方法; 第三条,不要太显眼,因为那样会引人攻击; 第四条,别和比你勇敢的家伙待在一个掩体里; 第五条,别忘 ...
- 程序员编程艺术第一 二十二章集锦与总结(教你如何编程)
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 程序员编 ...
- 程序员编程艺术第一~二十二章集锦与总结(教你如何编程)
程序员编程艺术第一~二十二章集锦与总结(教你如何编程) 作者:July.编程艺术室. 出处:http://blog.csdn.net/v_JULY_v . 题记 好久没更新博客了,虽只有一个月,但对我 ...
最新文章
- 用户态与内核态的区别
- 两张神图介绍python3和 2.x与 3.x 的区别
- 几行代码实现谷歌百度搜索对比
- mysql mysqldump触发器备份_MySQL常用的备份工具之mysqldump
- 云原生被热捧,是炒作还是大势所趋?
- java 链表算法_数据结构算法Java版(一) 链表
- struts2中的值栈对象ValueStack
- android sdk更新后出现please update ADT to the latest ve
- git把当前修改提交合并到上一条提交如何操作
- ASPEN.HYSYS.V7.1,Thermoflow软件分享下载
- OpenCV 基础(二) 显示图片
- 电脑开启后,进入桌面黑屏,任务管理器可以用(排除是硬件问题)
- LDAP ObjectClass 详解
- 月薪两万的“土豪”师兄,加个微信吧!
- Mybatis—— 使用注解实现一对一复杂关系映射及延迟加载
- 渗透测试(面试)如何获取一个网站的真实ip
- html5火苗特效代码,视频添加火焰特效 视频画面中加动态的火苗效果
- 51单片机 播放青花瓷(源码)
- css应该写在html语言的哪个标记里,CSS布局的选择题
- 史上最完美的 Typora 教程