如何判断某一个数组中是否包含指定选项(制作聊天系统的频道选择功能)

博客介绍了如何在游戏聊天系统中使用枚举类型和位运算优化频道判断功能。通过定义ChatChannel枚举,创建ChannelFilter数组,然后利用位运算判断传入频道与过滤器是否匹配,实现简洁且高效的代码,同时支持频道组合情况。

在游戏的聊天系统制作的过程中,由于要对应很多聊天频道,如综合、本地、队伍、公会。。。每一个频道对应的信息有很大的区别,那么我们怎样用更简便的方法来实现频道判别的功能呢,在最开始,我们可以用Swittch.case来判断是否是那个那个频道,今天接触了一种新的方法,记录下来

首先,定义一系列的枚举值,

 public enum ChatChannel
    {
        All = -1,//综合
        Local = 1,//本地
        Morld = 2,//世界
        System = 4,//系统
        Private = 8,//私聊
        Team = 16,//队伍
        Guild = 32//公会
    }

然后创建对应枚举值类型的数组

private ChatChannel[] ChannelFilter = new ChatChannel[6]
    {
        ChatChannel.Local|ChatChannel.Morld|ChatChannel.Team|ChatChannel.Private|ChatChannel.System,
        ChatChannel.Local,
        ChatChannel.Morld,
        ChatChannel.Team,
        ChatChannel.Guild,
        ChatChannel.Private,
    };

其中第一个代表综合频道(综合频道中包含了本地、世界、队伍、私聊等频道),依次向下为本地,世界,队伍,公会,私聊

然后在判别对应频道的时候

internal void AddMessages(ChatChannel channel,List<ChatMessage> messages)//添加消息
    {
        for(int ch = 0;ch < 6;ch++)
        {
            if((this.ChannelFilter[ch] & channel) == channel)
            {
                this.Messages[ch].AddRange(messages);
            }
        }
        if(this.OnChat !=null)
        {
            this.OnChat();
        }
    }

通过传进来的参数判断ChannelFilter[ch] 与channel是否有共同的,如果有共同的判断是否与channel相同,如果相同,添加到对应频道的列表信息中去。
这样做的话,就可以避免用if。。。或者是case。。。可以使代码看起来比较精简,而且还能处理组合的情况,在一些场景下比较实用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值