39. 对战胜负逻辑

本节目标

让用户从地图场景进入对战场景,然后对战胜利或失败之后收起卡牌

实现过程

让用户从地图场景进入对战场景

Persistent 场景隐藏 Player 和 Gameplay Panel

Hierarchy 窗口中移除对战场景,添加map场景

清除 MapLayoutSO 中的数据

然后启动游戏,将 Map 场景设置为激活

然后点击第一排图片的房间,因为它们上面绑定了 Room 脚本,所以会广播LoadRoomEvent事件

Persistent 场景中有两个地方监听了LoadRoomEvent事件,它们分别是SceneLoadManagerUIManager

SceneLoadManager.OnLoadRoomEvent方法中,会记下当前房间和房间的编号,卸载当前激活的场景,加载房间场景,产生afterRoomLoadedEvent事件

UIManager.OnLoadRoomEvent方法中,会将gameplayPanel显示出来

afterRoomLoadedEvent事件又会被两个对象监听,它们分别是TurnBaseManagerGameManager

TurnBaseManager.OnRoomLoadedEvent中,会根据房间的类型显示玩家,如果是对战房间还会调用GameStart方法

GameManager.OnRoomLoadedEvent方法会找到当前场景中所有的敌人,然后添加到aliveEnemyList

最后呈现出下图的样子

胜利之后的逻辑

玩家打败敌人之后,敌人就会广播CharacterDeadEvent事件

GameManager.OnCharacterDeadEvent监听了这个事件,然后判断是不是敌人,如果是敌人的话,就把它从aliveEnemyList中移除掉,当敌人数量为0之后,就产生游戏胜利的事件

有两个地方监听了游戏胜利的事件,分别是UIManagerCardDeck

UIManager在收到GameWinEvent事件之后,会调用UIManager.OnGameWinEvent,这个方法会隐藏gameplayPanel,并显示gameWinPanel

CardDeck在收到GameWinEvent事件之后,会调用CardDeck.ReleaseAllCards,这个方法会丢弃当前手上的所有卡牌,并初始化牌堆

失败之后的逻辑

Player 死亡的时候,也会广播characterDeadEvent

GameManager.OnCharacterDeadEvent监听了这个事件,然后判断是不是玩家,如果是玩家的话,就会广播gameOverEvent

GameWinEvent类似,GameOverEvent会被UIManagerCardDeck监听

UIManager.OnGameOverEvent会隐藏gameplayPanel,并显示gameOverPanel

CardDeck在收到GameOverEvent事件之后,会移除当前手上所有卡牌

项目相关代码

代码仓库:https://gitee.com/nbda1121440/DreamOfTheKingdom.git

标签:20240312_0844

posted @   hellozjf  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示