- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
已经有很多关于编写类似于 SO 的徽章系统的问题,我的问题是不同的。假设我有一个网页系统、徽章/成就,与成就键 (id)、用户 ID 和任何其他数据一起存储在数据库中。
我的简单问题是,我应该在哪里存储徽章 ID?我为每个成就开设一个类,其中包含用于测试是否已获得的所有数据和方法。我想在某个时候我可能有几十个或数百个。我希望 ID 仅在一个简洁的地方以硬编码方式使用一次,这样我就不会意外更改或混淆它们。
我可以在类里面对它们进行硬编码,比如
public int Key { get { return 15; } } // I'm calling it Key, not ID
但是如果我将我的成就分散到多个文件中,我不想在添加新文件时四处寻找最高的 Key 而冒犯错的风险。
我可以将它们放入另一个类(class)的字典中...
public class AchievementSet
{
private Dictionary<int, Achievement> _achievements;
public AchievementSet()
{
_achievements = new Dictionary<int, Achievement>()
{
{ 1, new SomethingAchievement() }
};
}
}
但现在类本身并不知道自己的 key ,它需要(或者知道吗?)如果我现在将它传递给构造函数,我就有可能不匹配数字。
有什么建议吗?
最佳答案
在 Stack Overflow 的上下文中,我想每个徽章都具有以下属性:Id、名称、类别(青铜、白银或黄金)和描述等。
您提到您目前为每个徽章/成就设置了一个类别,每个徽章/成就都对授予它的条件进行了适当的检查。
我建议您放弃现在正在查看的模型(每个成就一个等级)的原因是,当您浏览 200 个不同的模型时,您将继续面临巨大的问题查找您不记得的那个 ID 的类。
通过将您的徽章存储在表中,您的数据将全部放在一个合乎逻辑的位置,而不是分散在您的应用程序中。
在回答问题时:那么您是否不同意已接受的答案:stackoverflow.com/questions/3162446/
不一定,我更喜欢这个想法,而不是我之前提出的一个单一类的提议,该类将根据徽章的 ID 检查所有徽章。
尽管名称如此,但我相信 RexM 并未在该文件中定义 CommenterBadge
本身,应该将其命名为 CommenterBadgeJob
。 (您会注意到它没有我在答案中定义的任何特征,而是继承自 BadgeJob
)。显而易见的问题是“每个徽章作业如何知道它对应于哪个 BadgeId?”
我的 Badge
中会有一个名为 BadgeJob
的额外唯一字段,您可以通过它查找徽章。
enum BadgeClass {Bronze, Silver, Gold}
//This class would be inherited from the database.
public class Badge
{
public int Key {get;set;}
public string Name {get;set;}
public BadgeClass Class {get;set;}
public string BadgeJob {get;set;}
public string Description {get;set}
}
我会修改他的代码如下:
public class CommenterBadgeJob : BadgeJob
{
public Badge commenter_badge {get;set;}
public CommenterBadgeJob() : base()
{
//Lookup badge
string badge_job_name = this.GetType().Name;
commenter_badge = db.Badges.Where(n=>n.BadgeJob == badge_job_name).Single();
}
protected override void AwardBadges()
{
//select all users who have more than x comments
//and dont have the commenter badge
//add badges
}
//run every 10 minutes
protected override TimeSpan Interval
{
get { return new TimeSpan(0,10,0); }
}
}
关于c# - 成就/徽章架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13926291/
我是 Android 中成就的新手,正在尝试查找是否有类似于 iOS 中“可多次实现”属性的内容。在 Android 中创建 Achievement 时没有类似的属性。 一项成就可以多次获得(比如连续
关闭。这个问题需要更多 focused 。它目前不接受答案。 想要改进这个问题?更新问题,使其只关注 editing this post 的一个问题。 关闭 8 年前。 Improve this q
已经有很多关于编写类似于 SO 的徽章系统的问题,我的问题是不同的。假设我有一个网页系统、徽章/成就,与成就键 (id)、用户 ID 和任何其他数据一起存储在数据库中。 我的简单问题是,我应该在哪里存
我一直在浏览这个网站寻找答案,但我仍然有点不确定如何在其数据库结构和实现中规划一个类似的系统。 在 PHP 和 MySQL 中,很明显会立即获得一些成就(当采取专门的操作时,在 SO 情况下:填写所有
是否可以在 Steam Achievements API 中获得成就解锁日期?我已经阅读了一堆文档,但没有提到这一点。 最佳答案 答案是肯定的,这是可能的,但您必须使用旧的 XML API,而不是较新
我最近一直在使用游戏中心(成就),我只知道如何做基于分数的成就。我怎样才能做这样的事情? -(IBAction) { //Unlock Achievement } 除此之外,我了解有关游戏中心的所有其
我正在使用http://developer.apple.com/library/ios/#samplecode/GKTapper/Listings/Classes_GameCenterManager_
我正在开发一款目前使用成就的游戏。 让我们想象以下情况:用户第一次启动应用程序,没有登录 GameCenter 并获得了一些成就。但现在他决定使用 GameCenter 并在一段时间后登录。获得的成就
尝试找出在离线模式(例如飞行模式打开)的情况下使用 Game Center 中的成就的最佳方式。 据我了解,iOS 5+ 中的 Game Center 负责处理离线提交的成就和分数。它就像一个代理缓存
我正准备将我的 Android 游戏与 GP 游戏服务集成,想知道是否有任何工具可以将测试期间生成的数据与实际玩家的数据分开。例如,我不希望属于我的测试帐户的成就/排行榜分数完全显示在生产环境中。 这
我在 App Store 上有一个现有的 iOS 应用程序,其中包含 Game Center 成就。由于它还有一个有效的 Facebook Connect 实现,我想在我的应用中利用通过新 Achie
我有一个“无尽”游戏,用户必须在其中获得尽可能高的分数。我取得了一些成就,当他们达到 30、60、90 分等时。但是,当用户达到这些分数时,没有横幅显示他们已完成成就,也没有在 Game Center
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
尝试推出一些东西,但想确保如果 GameCenter 是 V2 功能,我们可以在游戏已经发布并进入 App Store 后添加它。是否可以在不强制人们发现和下载全新应用的情况下,将其作为游戏应用的更新
我知道这可能看起来像是一个一般性问题,但要找到有关该主题的信息似乎异常困难,因此如果某处存在完整示例\指南\源代码链接,我将不胜感激。 我正在开发一款 Android 游戏,想要集成 Facebook
新错误 有应用程序工作(加载但声明谷歌播放服务设置不正确)。看着显示器,上面写着 E/ViewRootImpl: sendUserActionEvent() mView == null 并在尝试授予成
我会取得这样的成就 获得1000分 登录20次 在 24 小时内完成 2 个任务 等等 最好的编程方式是什么? (例如,它背后的逻辑。在每个页面加载时检查所有可能的成就将是浪费资源) 最佳答案 这是一
我正在尝试为我的游戏添加一个新成就,每当我尝试在 Graph API Explorer 上测试它时,我都会收到以下错误: (#3502) 成就 URL 中的对象不是 game.achievement
我这里有一个 100% 可重现的崩溃。 如果在 iOS7 中后台运行 cocos2d 2.1 应用程序同时观看 Game Center 屏幕(排行榜、成就)会崩溃。按下主页按钮时它会立即崩溃。 在 C
我是一名优秀的程序员,十分优秀!