「自制卡牌游戏DIY」战斗抽卡系统(2)
前天 23:1220 浏览主题教程
在上期内容中,我们从卡牌状态的切换打开思路,将从卡池中刷新场上卡牌逻辑用触发器一步步实现,并通过洗牌的方法确保玩家从入场卡池中刷出的卡牌具有随机性。但在此之后系统还需要将抽取的卡牌替换为新卡,并为抽到的法术卡添加法术,方可将刷出卡牌的信息完备地打包给客户端以呈现给玩家,而这正是今天要做的。话不多说,来吧。
接着上期,在对卡池中未抽取的卡牌进行洗牌后,我们将新建的卡牌数组赋值给场上卡牌的数组以清空场上卡牌。接下来,需要用一个for循环依次为4个卡牌格替换上不同卡牌。这里最好做个判断以确保抽出的卡状态均为“未抽取”,若“未抽取”的卡不够,则将池子中“已抽取”卡牌置为“未抽取”并抽出。通过索引随机数,我们每次抽取都会从前面洗牌过的未抽取卡池中随机抽一张卡,存入“抽取的卡牌”数组。根据上期设计的逻辑,“抽取的卡牌”状态要置为“已打出”以避免刷走的卡立即又被抽出影响玩家体验(P2)
由于抽到法术卡后需要给玩家一个手动施放技能的功能,而主动技能需要主控施放,因此要加一个为主控添加法术的方法,将刚刚抽到的卡牌法术作为参数添加给主控。因为我们的游戏并没有需要玩家操控的单位,但需要主控来施法,因此可以在数编中将其配置为无敌无碰撞不可移动不可攻击的隐形空气小精灵,附着在我方首领身上,以起到类似我方首领施放法术的视觉效果(P3&P4)
在本方法的最后,遍历我们刚刚得到的玩家新的“场上的卡”数组,将其转换为简单表,作为自定义事件参数发送给玩家客户端。这样刷新场上卡牌相关逻辑的服务端部分就告一段落了(P5)
来到客户端,同样建立一个标准卡牌的类,和服务端不同的是,这个类里的成员主要为UI控件。为了将服务端传到客户端的卡牌信息体现在卡牌上呈现给玩家,可以在这个类内添加一个修改牌面UI的成员函数(P6)
将卡牌面板所需的信息(名称、费用等)添加在参数,然后将这些参数赋值给"this"里对应的内容(P7)
/*科普-this指针:类中非静态成员函数中自动生成的私有指针,指向当前方法的对象实例。通俗讲,谁调用这方法谁就是"this"*/
最后分情况对不同等级的卡牌给予不同星级UI和背景UI,并赋值部队数量信息。
希望我的分享让你有所收获,我们下期见。