Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

设计程序的数据结构 #20

Open
CuriosityLxn opened this issue Nov 22, 2017 · 0 comments
Open

设计程序的数据结构 #20

CuriosityLxn opened this issue Nov 22, 2017 · 0 comments

Comments

@CuriosityLxn
Copy link

题目:你打算把我们现在的这套游戏做成一个程序,但是从哪里开始呢?就先从数据结构开始吧!据说只要数据结构定义的好,程序就会很简单,如果数据结构不好,就要写很多算法来弥补,balabala总之大牛都是怎么说的。那么,怎么定义一个任务的数据结构呢?一个任务结构(对象)应该有哪些属性呢?这些属性应该是什么类型的呢?

尝试定义一下任务的数据结构。

任务
定义任务的数据结构

技能加成
编程原理+1

任务难度
I

本次任务的实现:

一、需求分析:

游戏流程:

image

根据游戏流程设计一个评分系统,来完成成员每周的分数计算、周排名和总排名的功能。
问题描述:有一评分系统,需记录每周每位成员完成任务的情况,即记录每位成员的花名与各项得分(任务领取时间、任务提交时间、任务难度、用户等级、完成分数、连击数和基础分数),
并计算成员的每周排名和总排名。
设计该评分系统的数据结构。

二、概要设计

根据问题描述,首先要计算每位成员的任务得分,才能记录各位的排名。
计算成员得分需要输入成员花名和任务各项的分,即输入数据为 成员花名 和 任务各项评分 。
计算得分后还需输出排名,故输出数据为 成员得分 和 成员排名。

评分流程:

image

所以用两个结构分别存储输入输入数据:

image

由于不论是否排名,每次提交任务后一定会计算当次得分,可认为得分与评分同时发生,可将计算得分的方法和评分放在同一模块。
故结构变为:

image

若发生 统计多次得分再排名 的情况(如将周排名改为月排名),以上两个结构将每次单独的评分和累积n次后的排名分隔开,清晰明了,易于操作,可被日后可能发生的的改动所复用。

具体到当前的需求,需要记录成员单次排名和总排名,所以也可将排名和得分也放在一个模块中,方便计算,与其他属性关联性也更强。
故也可只用一个结构来记录所有数据和方法:

image

三、详细设计

输入数据中,任务各项的分可细化为:任务难度得分(props)、用户等级(level)、完成分数(score)、连击数得分(combo)、基础分数(basic),所以可得输入数据的具体数据类型。

输入数据的类型:

image

输出数据中,成员得分大致可分为 任务各项得分 、本周个人得分 和 个人总得分 ,任务各项得分即为输入数据终端任务各项评分,数据状态没有发生变化。成员排名分为 周排名 和 总排名,故输出数据的具体数据类型如下。

输出数据的类型:

image

两个结构存储数据:

image

单个结构存储数据:

image

四、数据变动

 综上,可观察到每项数据在流程中每个步骤中的变动:

image

总结:

如何设计一个任务的数据结构呢:

首先,要对任务进行 需求分析 ,对任务作出明确的描述,才能明确任务要达成什么目标(输出),达成目标需要哪些步骤(数据如何变动),需要从哪些数据出发(输入),限制条件是什么,数据的范围是什么等。

其次,根据分析出的需求,考虑任务综合性描述,为使系统流程和结构清晰合理,可先定义大致的数据结构。

最后,流程清楚了之后,根据每个步骤的具体处理方法,将大致的数据结构细化为具体的数据结构。

至此,一个任务的数据结构就定义完了,接下来就是设计数据处理的方法咯。

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant