游戏开发论坛

 找回密码
 立即注册
搜索
查看: 14457|回复: 21

[原创] 功能实现型策划案:以《天天挂机》主商城为例

[复制链接]

1

主题

12

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2015-8-29 23:28:24 | 显示全部楼层 |阅读模式
  因经历了一次只有一个策划的游戏开发项目,策划大多时候需要同时兼顾多职,且开发周期很短,方案完成后直接输出给程序,故在开发过程中对如何写一份“功能实现”的策划案有一些思考和实践,所以自己拟写了一份放置类游戏的主商城系统(以《天天挂机》的主商城为例),借此交流。

  方案以功能实现为主,分析类描述甚少。若方案中有错误或者不妥之处,望不吝指正。

  为了比较健全的展示,附件上方案、相关配置及测试用例。




主商城系统方案
版本:1.0.1       日期:2015-08-29
作者QQ:374308264
  版本修改内容修改时间
1.0.0创建文档2015.08.15
1.0.1优化配置字段及其算法2015.08.29

目录
商城系统方案... 1
一、综述... 2
1.1设计目的... 2
1.2名词解释... 2

二、主商城UI(客户端)... 3
2.1界面示意... 3
2.2UI结构与逻辑... 3

三、主商城功能实现(服务器)... 4
3.1配置释义(mainShop.txt)... 4
3.1.0配置表名与路径... 4
3.1.1商品序号:id(唯一)... 4
3.1.2商品栏类型:shopType. 4
3.1.3商品类型:propType. 4
3.1.4商品类型对应概率:propTypePr. 4
3.1.5品质id:grade. 4
3.1.6品质对应概率:gradePr. 5
3.1.7出售数量及概率:num.. 5
3.1.8货币类型及概率:moneyType. 5
3.1.9金币价格:price1. 5
3.1.10钻石价格:price2. 6
3.2商品栏和幸运值... 6
3.3商品判断算法:... 6
3.3.0共用定义... 6
3.3.1商品类型判断算法:... 6
3.3.2商品品质判断算法:... 7
3.3.3装备id判断算法... 8
3.3.4出售数量和出售价格判断... 8
4.4打折... 9
4.5购买金币... 9
4.6购买全部... 9
4.7刷新... 9


0. 文档前提描述
0.1文档前提配置
Ø  装备配置表(equip.txt)已完成
Ø  道具表(item.txt)已完成
Ø  装备品质表(equipQuality.txt)已完成


一、综述
1.1设计目的
Ø  相对优质的装备、道具产出途径
Ø  增加货币消耗途径,并能在一定程度上刺激消费
Ø  VIP差异体现,使VIP能获得更好的资源,同时刺激VIP消费、非VIP转化为VIP
1.2设计思路
Ø  出售的装备等级随着角色等级变化,出售装备的品质为橙色和紫色;投放部分道具在商场,且这些道具只在商场产出
Ø  装备出售的货币类型包括金币和钻石(概率),道具只有钻石;随机打折出售部分商品
Ø  VIP额外出售高品质商品,VIP等级控制钻石直接兑换金币次数
1.3名词解释
Ø  通用名词,详见“通用名词汇总1.0.3”

二、
主商城UI(客户端)
2.1界面示意
2.2UI结构与逻辑

挂机主商城UI

挂机主商城UI

具体查看连接:http://l277is.axshare.com
密码:123456
1:飘字显示,写成可重复调用的功能
2:钻石不足的弹窗,写成可重复调用的功能
3:金币不足的弹窗,写成可重复调用的功能


三、主商城功能实现(服务器)
3.1配置释义(mainShop.txt3.1.0配置表名与路径
Ø  配置表名为:mainShop.txt
Ø  路径:svn/ dev/config/
3.1.1商品序号:id(唯一)
Ø  商品对应的唯一标识
3.1.2商品栏类型:shopType
Ø  商品栏类型
n  1为普通商品栏
n  2为高级商品栏
3.1.3商品类型:propType
Ø  商城出售的商品类型:
Ø  1为装备
Ø  2为神器碎片
Ø  3为钥匙
3.1.4商品类型对应概率:propTypePr
Ø  商品类型对应的概率
Ø  商品类型判断算法详见商品类型判断算法
3.1.5品质idgrade
Ø  商品类型为1(装备),品质id有如下
n  1为白色品质
n  2为绿色品质
n  3为蓝色品质
n  4为紫色品质
n  5为橙色品质
n  6为单属性神器
n  7为双属性神器
Ø  商品类型为2、3(非1)时,品质id为为item.txt配置中对应的道具id
3.1.6品质对应概率:gradePr
Ø  品质对应的概率
Ø  品质判断算法详见品质判断算法
3.1.7出售数量及概率:num
Ø  出售的商品数量及其对应的概率
Ø  字段解析规则:
n  填写的字段示例:1_10000
n  以“_”作为分隔,前一个数值表示出售的数量,后一个数值表示对应的概率值
3.1.8货币类型及概率:moneyType
Ø  决定商品是以哪种货币出售,及其对应的概率
Ø  1为金币,2为钻石
Ø  字段解析规则:
n  填写的字段示例:1_7000;2_10000
n  以“;”作为不同类型的分隔,以“_”作为类型与概率的分隔。示例中表示金币出售(1)的概率值1为7000,钻石出售(2)的概率值为10000
3.1.9金币价格:price1
Ø  出售类型为1时,对应的具体价格
Ø  当商品类型为装备时,配置会填写-1表示:
n  金币出售价格=装备基价*装备品质系数
n  装备基价为equip.txt配置中buyPrice字段
n  装备品质系数为equipQuality.txt配置中ratio字段
Ø  其他类型时,所填的值即为出售价格
Ø  当出售数量有多个时,出售价格会一一对应
n  字段解析规则:以“,”作为出售价格的分隔
n  示例:出售数量及其概率(num字段)为1_3333,3_6666,10_10000,出售价格对应为10,10,10
3.1.10钻石价格:price2
Ø  出售类型为2时,对应的具体价格
Ø  所填的值即为出售价格
Ø  当出售数量有多个时,出售价格会一一对应
n  字段解析规则:以“,”作为出售价格的分隔
n  示例:出售数量及其概率(num字段)为1_3333,3_6666,10_10000,出售价格对应为24,70,220
3.2商品栏和幸运值
Ø  商品栏级别与数量:商品栏分普通和高级,普通有6个,高级最多有3个,高级栏数量依据vip等级对应增加,具体见配置vip.txt。2种类型的商品栏出售商品及概率皆不同,具体依据mainShop.txt配置
Ø  幸运值影响:商品类型的概率,商品品质的概率,装备等级。具体见3.3商品判断算法
Ø  幸运值增长公式:
n  times=购买商品件数
luck=幸运值
luck=100-----------幸运值默认为100
n  for(i=1;i++;times){
luck=luck+math.max(20-times,3)
}
3.3商品判断算法:
商品判断顺序:类型品质装备或道具id出售数量出售货币单位出售价格
3.3.0共用定义
float a=2.85--------幸运值系数
int luck=商城幸运值
int e.lv=装备等级
int u.lv=角色等级
int shop.pType=最终确定的商品类型
int shop.pQty=最终确定的商品品质
int n.PType=当前商品类型id
int e.id=最终确定的装备id
int s.num=最终确定的出售数量
int s.price=最终确定的出售价格
3.3.1商品类型判断算法:
int rate()=商城配置中相应商品的概率
int rate_x()=幸运值影响后的商品实际概率
int propType=商品配置中商品类型字段
rate_x(Math.Max(propType))=rate(Math.Max(propType))----------最大类型id的实际概率值为配置概率值(圆桌算法为10000)
if Math.Max(propType)==Math.min(propType)
then end----------不进行下面的循环计算
else
       {
              for(i=1,i=i++,Math.Max(propType)-Math.min(propType))
              {
                     rate_x(Math.Max(propType)-i)=rate(Math.Max(propType)-i)-(luck-100)*a*i
                     returnrate_x(Math.Max(propType)-i)
              }
   }
------判断商品类型--------
int random_2=Math.Random(1,rate(Math.Max(propType)))
int rate(Math.min(propType)-1)=0
-----循环判断------
for(r=0,r++,Math.Max(propType)-Math.min(propType))
{
       if rate_x(Math.Max(propType)-r-1)<random_2<=rate_x(Math.Max(propType)-r)
       then shop.pType=Math.Max(propType)-r
       return shop.pType
}
3.3.2商品品质判断算法:
int grade_id=商城配置中相应商品品质id
int n.grade_id=当前商品品质id
int rate(grade_id)=商城配置中相应商品品质的概率
int rate_x(grade_id)=幸运值影响后的商品品质实际概率
int n.PType=当前商品类型id
---------同类型商品品质实际概率---------------
type_prop(n.PType)={1,2,3,4,5,6,7,8,9,10}-------预留商品品质实际概率的存储空间,初始值为配置中的值

需要在配置表propType字段下找到n.PType,并读取对应grade字段下的所有品质id及其对应概率值

rate_x(Math.Max(grade_id))=rate(Math.Max(grade_id))----------最大的类型的实际概率值为配置概率值(圆桌算法为10000)
if Math.Max(grade_id)=Math.min(grade_id)
then end----------不进行下面的循环计算
else for(i=1,i++,Math.Max(grade_id)-Math.min(grade_id))
              {
                     rate_x(Math.Max(grade_id)-i)=rate(Math.Max(grade_id)-i)-(luck-100)*a*i
                 return  rate_x(Math.Max(grade_id)-i)
          }
else end
-----------判断确定类型的商品品质-------------
random_3=Math.Random(1,rate_x(Math.Max(grade_id)))
int rate(Math.min(propType)-1)=0
-----循环判断------
for(t=0,t++,Math.Max(grade_id)-Math.min(grade_id))
{
       if rate_x(Math.Max(grade_id)-t-1)<random_2<=rate_x(Math.Max(grade_id)-t)
       then shop.pQty=Math.Max(grade_id)-t
       return shop.pQty
}
3.3.3装备id判断算法
若商品类型为装备,还需确定装备的id
range_1=(Math.Floor(u.lv/5)*5,Math.Floor(u.lv/5+1)*5+4)
range_2=(Math.Floor(u.lv/5+2)*5,Math.Floor(u.lv/5+2)*5+4)
rate(range_1)=10000
rate(range_2)=(luck-100)*a
------判断装备等级--------
random_1=Math.Random(1,10000)
if random_1<=rate(range_2)
then e.lv=Math.Random(range_2)
elserate(range_2)<random_1<rate(range_1)
then e.lv=Math.Random(range_1)
------确定装备id--------
找出所有在装备配置表equip中level字段值等于e.lv的结果(id),在结果中随机一个赋值给e.id
3.3.4出售数量和出售价格判断
int num=配置中对应出售数量的序号(从1开始的自然数)
int numPr()=配置中对应出售数量的概率
------确定商品id后,确定出售数量--------
random_4=Math.Random(1,10000)
numPr(Math.Min(num)-1)=0
for(i=0,i++,Math.Max(num)-Math.Min(num))
{
       if numPr(Math.Max(num)-i-1)<random_2<=numPr(Math.Max(num)-i)
       then s.num=Math.Max(num)-i
       return s.num
}
------确定出售数量后,确定出售货币类型--------
int moneyType=配置中对应出售货币类型id1.金币;2.钻石)
int moneyType()=配置中对应出售数量的概率
random_5=Math.Random(1,10000)
moneyTypePr(math.min(moneyType)-1)=0
for(i=0,i++,math.max(moneyType)-math.min(moneyType))
{
       ifmoneyTypePr(math.max(moneyType)-i-1)<random_2<=moneyTypePr(math.max(moneyType)-i)
       then s.moneyType=math.max(moneyType)-i
       return s.moneyType
}
确定货币类型后,对应去取配置中price1(金币)和price2(钻石)下的值
上述算法中标蓝色的部分,便于理解所以写出那样。更为合理的是只写一遍算法,通过传不同的参数得到结果
注:当金币价格为-1时,金币售价遵循3.1.9
3.4打折
Ø  概率赋予商品打折状态,有打折状态的商品,商品价格=商品价格*折扣
Ø  打折数量及折扣额度,对应不同的概率,具体依据打折配置shopDaZe.txt
Ø  shopDaZe.txt路径:svn/gjxm/dev/config/
3.5购买金币
Ø  购买金币次数,依据配置vip.txt
Ø  购买金币的消耗和获得的金币数量依据配置bugCoin.txt
Ø  bugCoin.txt路径:svn/gjxm/dev/config/
3.6购买全部
Ø  购买全部成功后,会依据VIP等级立即刷新相应数量的商品。具体数量依据vip.txt
3.7刷新
Ø  刷新成功后,会依据VIP等级立即刷新相应数量的商品,具体数量依据vip.txt
                                 
Ø  刷新消耗依据配置refreshShop.txt



主商城配置.xlsx

656.64 KB, 下载次数: 617

主商城测试用例.xlsx

20.29 KB, 下载次数: 525

主商城系统方案1.0.1.docx

156.33 KB, 下载次数: 706

0

主题

17

帖子

131

积分

注册会员

Rank: 2

积分
131
发表于 2015-9-1 14:15:41 | 显示全部楼层
好想看评论啊!怎么还没有评论!
这应该是一篇宣传软文吧!

1

主题

12

帖子

56

积分

注册会员

Rank: 2

积分
56
 楼主| 发表于 2015-9-1 16:54:04 | 显示全部楼层
布童 发表于 2015-9-1 15:07
楼主还是转职做无脑程序吧,别在策划圈里混了

呵呵,不想交流烦也请您不用怎么说话。若写的东西太差污了您的眼睛,我给您道歉!

0

主题

371

帖子

1243

积分

金牌会员

Rank: 6Rank: 6

积分
1243
发表于 2015-9-1 19:16:18 | 显示全部楼层
皇天厚土 发表于 2015-9-1 16:54
呵呵,不想交流烦也请您不用怎么说话。若写的东西太差污了您的眼睛,我给您道歉! ...

你不是道歉的问题,
你是否能分清到底策划需要负责什么东西?
你把程序的工作都做了,那你有多少时间去把系统想明白?
游戏策划,不是房屋设计,千篇一律,游戏需要创意,你的策划案的方式在我看来完全不是一个创意行业的策划案,更像是一个百年不变的老旧行业。
爱听听,不爱听算。你有权发帖,我就有权回帖,不是么?

1

主题

12

帖子

56

积分

注册会员

Rank: 2

积分
56
 楼主| 发表于 2015-9-1 20:33:45 | 显示全部楼层
布童 发表于 2015-9-1 19:16
你不是道歉的问题,
你是否能分清到底策划需要负责什么东西?
你把程序的工作都做了,那你有多少时间去把 ...

关于你所说的我把程序的工作做了,没有思考“策划的事”,没有创新。我想这可能是我们思考的出发点和角度不同,对此我也无法回复。
不管如何,谢谢你会回帖,表达了你的意见

1

主题

12

帖子

56

积分

注册会员

Rank: 2

积分
56
 楼主| 发表于 2015-9-1 20:47:15 | 显示全部楼层
我思考的出发点:当功能系统目标确定后,如何去写一份能快速实现的策划案,重在策划案书写思路和框架

0

主题

14

帖子

128

积分

注册会员

Rank: 2

积分
128
发表于 2015-9-2 16:28:41 | 显示全部楼层
这个文档···
我是写不到这个地步了

至于好不好,每个项目组情况不同,没必要强求

8

主题

1801

帖子

3450

积分

论坛元老

Rank: 8Rank: 8

积分
3450
发表于 2015-9-2 17:15:31 | 显示全部楼层
不错不错,唯一觉得啰嗦的是伪代码部分。
没有必要越俎代庖,把数据和流程写明白就ok

18

主题

1581

帖子

1991

积分

金牌会员

Rank: 6Rank: 6

积分
1991
发表于 2015-9-2 19:12:57 | 显示全部楼层
这样的文档,我策划干了十年写不出来

但是,我会用宝贵的十年,去做很多策划更应该做的事。。。

有时间想着如何去做一些程序的事,不如更多心思在游戏机制上。。。

点评

是啊  发表于 2016-1-8 11:48
楼主文档写的很牛逼,我就担心是否是做了很多不必要的事。减轻程序的工作量是从逻辑角度,而不是让你去做他们的本职工作!!!  发表于 2015-9-2 19:14

1

主题

12

帖子

56

积分

注册会员

Rank: 2

积分
56
 楼主| 发表于 2015-9-2 19:17:39 | 显示全部楼层
ab_946 发表于 2015-9-2 17:15
不错不错,唯一觉得啰嗦的是伪代码部分。
没有必要越俎代庖,把数据和流程写明白就ok ...

是的,最主要的目的就是把数据和流程写明白。
那些伪代码也是为了说明配置表中字段如何使用,完全可以用流程图和文字描述清楚。
表述方式因人、因项目而定。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-23 04:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表