哈哈  今天周末有时间,再整理一篇博文上来,虽然已经不做游戏老长时间了,但还是要把以前做过的东西总结一下,借此可以回顾以前的东西,也可以分享给大家。

今天说一下游戏中VIP会员模块的实现思路。每款游戏的消费体系中必不可缺少的一个模块就是VIP,VIP用户可以获得额外的奖励,比如每日登陆奖励,游戏中各个功能针对VIP和普通用户都有所差异,这样可以使游戏运作更加良好,如果一款商业游戏不赚钱,那么这款游戏的路肯定不好走。本文的VIP模块的类似于QQ会员的成长体系,大家可去QQ会员网站中看看。

接下来进入正题:

成长体系图

VIP经验等级成长方案

VIP经验等级成长方案配置表1

 

VIP经验等级成长方案配置表2

VIP等级

VIP经验

VIP经验区段

VIP等级

VIP经验

VIP经验区段

0

0

0

0

0

0

1

16

0-16

1

16

0-16

2

68

16-68

2

68

16-84

3

158

68-158

3

158

84-242

4

618

158-618

4

618

242-860

5

1236

618-1236

5

1236

860-2096

6

2472

1236-2472

6

2472

2096-4568

7

 

2472-

7

 

4568-

VIP会员成长值

会员成长值 = 每日成长值 + 购买赠送成长值 - 非会员成长值下降

l 每日成长值:VIP普通会员每日 +10点;VIP超级会员每日 +15点;

l 购买赠送成长点:既购买VIP产品赠送的成长点

l 非会员成长值下降:VIP会员过期之后每天下降 -10点

l 会员成长值超过VIP7上限之后将不会继续增加成长值

VIP会员类型

n VIP普通会员

n VIP超级会员

VIP普通会员(现有VIP普通会员时间大于0)

如何成为VIP普通会员:购买VIP产品(月卡、季卡、年卡)

延长VIP普通会员时间:= 现有VIP普通会员时间 + 购买VIP产品中配置的时间

VIP普通会员每天增加成长值 + 10点(配置)

VIP超级会员(现有VIP超级会员时间大于0)

如何成为VIP超级会员:现有VIP(普通)会员时间大于60天购买VIP产品(月卡、季卡、年卡),或直接购买VIP产品(季卡、年卡)

延长VIP超级会员时间:

如果现有VIP普通会员时间大于60,则 = 现有VIP普通会员时间 - 60 + 购买VIP产品中配置的时间

如果现有VIP普通会员时间等于0,购买了季卡或年卡,则 = 购买VIP产品中配置的时间 - 60

VIP超级会员每天增加成长值 + 15点(配置)

VIP经验成长的情况

用户上次登陆时间:lastLoginTime; 用户今天登陆时间:loginTime;

普通VIP结束时间:vipEndTime;    超级VIP结束时间:superVipEndTime;

第一种情况;VIP超级会员


第二种情况:VIP超级会员已过期,成为VIP普通会员

第三种情况:VIP超级会员、VIP普通会员都已过期

第四种情况:上次登陆前VIP超级会员过期

第五种情况:VIP普通会员已过期

第六种情况:上次登陆前VIP普通会员已过期

VIP经验等级计算

用户本次登陆与上次登陆时间之差:loginT = loginTime - lastLogin

VIP普通会员到期时间与登陆时间之差:vipEndTimeT = vipEndTime - loginTime;

VIP普通会员到期时间与上次登陆时间之差:lastVipEndTimeT = vipEndTime - lastLoginTime;

VIP超级会员到期时间与登陆时间之差:superVipEndTimeT = superVipEndTime - loginTime;

VIP超级会员到期时间与上次登陆时间之差:lastSuperVipEndTimeT = superVipEndTime - lastLoginTime;

VIP普通会员到期时间与VIP超级会员到期时间之差:vipBetweenSuperT = vipEndTime - superVipEndTime;

        public static final int COMMON_VIPEXP_DAY_ADD_VALUE = 10;
public static final int SUPER_VIPEXP_DAY_ADD_VALUE = 15;
public static final int VIPEXP_DAY_REMOVE_VALUE = 10;
        int loginTime = 0,//用户本次登陆时间
lastLoginTime = 0,//用户上次登陆时间
vipEndTime = 0,//普通VIP结束时间
superVipEndTime = 0;//超级VIP结束时间
int loginT,vipEndTimeT ,lastVipEndTimeT ,superVipEndTimeT ,lastSuperVipEndTimeT ,vipBteweenSuperT;
//用户本次登陆与上次登陆时间之差
loginT = loginTime - lastLoginTime;
//VIP普通会员到期时间与登陆时间之差
vipEndTimeT = vipEndTime - loginTime;
//VIP普通会员到期时间与上次登陆时间之差
lastVipEndTimeT = vipEndTime - lastLoginTime;
//VIP超级会员到期时间与登陆时间之差
superVipEndTimeT = superVipEndTime - loginTime;
//VIP超级会员到期时间与上次登陆时间之差
lastSuperVipEndTimeT = superVipEndTime - lastLoginTime;
//VIP普通会员到期时间与VIP超级会员到期时间之差
vipBteweenSuperT = vipEndTime - superVipEndTime;
//计算VIP经验点
long vipExp = 0l;
//上次登陆前VIP已过期
if(lastVipEndTimeT < 0){
vipExp = loginT*VIPEXP_DAY_REMOVE_VALUE*(-1);
//VIP已过期
}else if(vipEndTimeT < 0 && lastVipEndTimeT > 0 && lastSuperVipEndTimeT < 0){
vipExp = lastVipEndTimeT*COMMON_VIPEXP_DAY_ADD_VALUE + vipEndTimeT*VIPEXP_DAY_REMOVE_VALUE;
//VIP超级会员、VIP普通会员都已过期
}else if(vipEndTimeT < 0 && lastVipEndTimeT > 0 && superVipEndTimeT < 0 && lastSuperVipEndTimeT > 0){
vipExp = lastSuperVipEndTimeT*SUPER_VIPEXP_DAY_ADD_VALUE + vipBteweenSuperT*COMMON_VIPEXP_DAY_ADD_VALUE + vipEndTimeT*VIPEXP_DAY_REMOVE_VALUE;
//上次登陆前VIP超级会员过期
}else if(vipEndTimeT > 0 && lastSuperVipEndTimeT < 0){
vipExp = loginT*COMMON_VIPEXP_DAY_ADD_VALUE;
//VIP超级会员已过期,成为VIP普通会员
}else if(vipEndTimeT > 0 && superVipEndTimeT < 0 && lastSuperVipEndTimeT > 0){
vipExp = lastSuperVipEndTimeT*SUPER_VIPEXP_DAY_ADD_VALUE + superVipEndTimeT*COMMON_VIPEXP_DAY_ADD_VALUE*(-1);
//VIP超级会员
}else if(lastSuperVipEndTimeT > 0){
vipExp = loginT*SUPER_VIPEXP_DAY_ADD_VALUE;
}

VIP等级奖励

n 每日登陆奖励

n 特权奖励

随后补上源码

今天已经整理好了代码 贴上来供分享

demo目录图如下

package com.game.vip.data.user;

/**
* @author Administrator
* 用户
*/
public class User {
/**
* 用户Id
*/
private long userId; /**
* 用户名
*/
private String name; private UserVipInfo userVipInfo; private UserLoginLog userLoginLog; public long getUserId() {
return userId;
} public void setUserId(long userId) {
this.userId = userId;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public UserVipInfo getUserVipInfo() {
return userVipInfo;
} public void setUserVipInfo(UserVipInfo userVipInfo) {
this.userVipInfo = userVipInfo;
} public UserLoginLog getUserLoginLog() {
return userLoginLog;
} public void setUserLoginLog(UserLoginLog userLoginLog) {
this.userLoginLog = userLoginLog;
}
}
package com.game.vip.data.user;

/**
* @author Administrator
* 用户登陆日志
*/
public class UserLoginLog { /**
* 用户Id
*/
private long userId; /**
* 上次登陆时间
*/
private long lastLoginTime; public long getUserId() {
return userId;
} public void setUserId(long userId) {
this.userId = userId;
} public long getLastLoginTime() {
return lastLoginTime;
} public void setLastLoginTime(long lastLoginTime) {
this.lastLoginTime = lastLoginTime;
}
}
package com.game.vip.data.user;

import com.game.vip.strategy.VipLevelStrategy;

/**
* @author Administrator
* 用户Vip的信息
*/
public class UserVipInfo { public static final int VIP_STATUS_N = 0;
public static final int VIP_STATUS_Y = 1; /**
* 用户id
*/
private long userId; /**
* vip标志[0:普通用户;1:普通VIP会员;2:白金VIP会员]
*/
private int vipStatus; /**
* 当前VIP级别
*/
private int curVipLevel; /**
* 之前VIP级别
*/
private int preVipLevel; /**
* 当前VIP经验
*/
private long curVipExp; /**
* 升级到下一级所需的VIP经验
*/
private long nextLevelNeedExp; /**
* 普通VIP截止时间
*/
private long vipEndTime; /**
* 超级VIP截止时间
*/
private long superVipEndTime; /**
* VIP等级策略
*/
private VipLevelStrategy vipLevelStrategy; public void init(){
this.vipStatus = VIP_STATUS_N;
this.vipEndTime = 0;
this.superVipEndTime = 0;
this.curVipExp = 0;
this.curVipLevel = 0;
this.preVipLevel = 0;
this.nextLevelNeedExp = 0;
} public void toVipUser(){
this.vipStatus = VIP_STATUS_Y;
this.curVipExp = 0;
this.curVipLevel = this.vipLevelStrategy.getMinLevel();
this.preVipLevel = 0;
this.nextLevelNeedExp = this.vipLevelStrategy.getNextLevelNeedExp(this.curVipLevel, this.curVipExp);
} public long getUserId() {
return userId;
} public void setUserId(long userId) {
this.userId = userId;
} public int getVipStatus() {
return vipStatus;
} public void setVipStatus(int vipStatus) {
this.vipStatus = vipStatus;
} public int getCurVipLevel() {
return curVipLevel;
} public void setCurVipLevel(int curVipLevel) {
this.curVipLevel = curVipLevel;
} public int getPreVipLevel() {
return preVipLevel;
} public void setPreVipLevel(int preVipLevel) {
this.preVipLevel = preVipLevel;
} public long getCurVipExp() {
return curVipExp;
} public void setCurVipExp(long curVipExp) {
this.curVipExp = curVipExp;
} public long getNextLevelNeedExp() {
return nextLevelNeedExp;
} public void setNextLevelNeedExp(long nextLevelNeedExp) {
this.nextLevelNeedExp = nextLevelNeedExp;
} public VipLevelStrategy getVipLevelStrategy() {
return vipLevelStrategy;
} public void setVipLevelStrategy(VipLevelStrategy vipLevelStrategy) {
this.vipLevelStrategy = vipLevelStrategy;
} public long getVipEndTime() {
return vipEndTime;
} public void setVipEndTime(long vipEndTime) {
this.vipEndTime = vipEndTime;
} public long getSuperVipEndTime() {
return superVipEndTime;
} public void setSuperVipEndTime(long superVipEndTime) {
this.superVipEndTime = superVipEndTime;
}
}
package com.game.vip.data.vip.product;

/**
* @author Administrator
* VIP卡(月卡,季卡,年卡)
*/
public class VipProduct { /**
* 产品id
*/
private long id; /**
* 产品名称
*/
private String name; /**
* VIP时间
*/
private int vipTime; /**
* 赠送VIP经验点
*/
private long vipExpGift; public VipProduct(long id, String name, int vipTime, long vipExpGift) {
super();
this.id = id;
this.name = name;
this.vipTime = vipTime;
this.vipExpGift = vipExpGift;
} public long getId() {
return id;
} public void setId(long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getVipTime() {
return vipTime;
} public void setVipTime(int vipTime) {
this.vipTime = vipTime;
} public long getVipExpGift() {
return vipExpGift;
} public void setVipExpGift(long vipExpGift) {
this.vipExpGift = vipExpGift;
}
}
package com.game.vip.data.vip;

/**
* @author Administrator
* vip等级配置信息
*/
public class VipLevelInfo { /**
* vip等级
*/
private int vipLevel; /**
* 对应的vip的经验点
*/
private long vipExp; public VipLevelInfo(int vipLevel, long vipExp) {
super();
this.vipLevel = vipLevel;
this.vipExp = vipExp;
} public int getVipLevel() {
return vipLevel;
} public void setVipLevel(int vipLevel) {
this.vipLevel = vipLevel;
} public long getVipExp() {
return vipExp;
} public void setVipExp(long vipExp) {
this.vipExp = vipExp;
}
}
package com.game.vip.data.vip;

import java.util.List;

/**
* @author Administrator
* vip等级所对应的奖励
*/
public class VipLevelReward { /**
* 类型[1:数值;2:道具;3:真假(0:假;1:真)]
*/
private int rewardType; /**
* 编码(如vip升级礼包,登陆礼包,充值礼包)
*/
private int rewardCode; /**
* 对应VIP等级
*/
private int vipLevel; /**
* 奖励名称
*/
private String name; /**
* 描述
*/
private String desc; public VipLevelReward(int vipLevel, String name, String desc) {
super();
this.vipLevel = vipLevel;
this.name = name;
this.desc = desc;
} /**
* 具体了奖励物品
*/
private List<Object> rewardList; public int getRewardType() {
return rewardType;
} public void setRewardType(int rewardType) {
this.rewardType = rewardType;
} public int getRewardCode() {
return rewardCode;
} public void setRewardCode(int rewardCode) {
this.rewardCode = rewardCode;
} public int getVipLevel() {
return vipLevel;
} public void setVipLevel(int vipLevel) {
this.vipLevel = vipLevel;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getDesc() {
return desc;
} public void setDesc(String desc) {
this.desc = desc;
} public List<Object> getRewardList() {
return rewardList;
} public void setRewardList(List<Object> rewardList) {
this.rewardList = rewardList;
} public boolean isEnable(int vipLevel){
return this.getVipLevel() == vipLevel;
}
}
package com.game.vip.manager.impl;

import java.text.SimpleDateFormat;
import java.util.Date; import com.game.vip.data.user.User;
import com.game.vip.data.user.UserLoginLog;
import com.game.vip.data.user.UserVipInfo;
import com.game.vip.data.vip.VipLevelReward;
import com.game.vip.data.vip.product.VipProduct;
import com.game.vip.manager.VipManager;
import com.game.vip.strategy.VipLevelStrategy;
import com.game.vip.util.DateUtil; /**
* @author Administrator
* vip管理实现类1
*/
public class VipManagerImpl1 implements VipManager{ @Override
public void userToVipUser(User user) {
System.out.println("普通会员转成VIP会员");
UserVipInfo userVipInfo = user.getUserVipInfo();
//设置vipStatus
userVipInfo.toVipUser();
} @Override
public void userLogin(User user) {
System.out.println("------------------------用户登陆 Start----------------------------");
try{
if(user.getUserVipInfo().getVipStatus() == UserVipInfo.VIP_STATUS_N){
System.out.println("当前用户:" + user.getName());
System.out.println("当前用户不是VIP用户!");
return;
}
UserLoginLog loginLog = user.getUserLoginLog();
UserVipInfo userVipInfo = user.getUserVipInfo();
System.out.println("当前用户:" + user.getName());
System.out.println("当前VIP等级:" + userVipInfo.getCurVipLevel());
System.out.println("当前VIP经验:" + userVipInfo.getCurVipExp());
System.out.println("VIP普通会员到期时间:" + DateUtil.format(userVipInfo.getVipEndTime()));
System.out.println("VIP超级会员到期时间:" + DateUtil.format(userVipInfo.getSuperVipEndTime()));
System.out.println("当前升级到下一级所需要的VIP经验:" + userVipInfo.getNextLevelNeedExp());
System.out.println("上次登陆时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(loginLog.getLastLoginTime()));
long updateVipExp = getUpdateVipExp(loginLog, userVipInfo);
System.out.println("更新VIP信息");
System.out.println("VIP经验成长值:" + updateVipExp);
updateUserVipExp(updateVipExp, userVipInfo);
System.out.println("当前VIP等级:" + userVipInfo.getCurVipLevel());
System.out.println("当前VIP经验:" + userVipInfo.getCurVipExp());
System.out.println("当前升级到下一级所需要的VIP经验:" + userVipInfo.getNextLevelNeedExp());
loginLog.setLastLoginTime(new Date().getTime());
}catch(Exception e){
}finally{
System.out.println("------------------------用户登陆 End----------------------------");
} } @Override
public void rewardVipUser(User user) {
System.out.println("------------------------奖励VIP用户 Start----------------------------");
try{
if(user.getUserVipInfo().getVipStatus() == UserVipInfo.VIP_STATUS_N || user.getUserVipInfo().getVipEndTime() < DateUtil.getNowTime()){
System.out.println("当前用户不是VIP用户或VIP已过期!");
return;
}
UserVipInfo userVipInfo = user.getUserVipInfo();
VipLevelReward reward = userVipInfo.getVipLevelStrategy().getLevelReward(userVipInfo.getCurVipLevel());
if(reward != null){
System.out.println("当前用户:" + user.getName());
System.out.println("VIP等级:" + user.getUserVipInfo().getCurVipLevel());
System.out.println("获取VIP奖励:" + reward.getName() + "(" +reward.getDesc() + ")");
}else{
System.out.println("还没有设置VIP奖品");
}
}catch(Exception e){
}finally{
System.out.println("------------------------奖励VIP用户 End----------------------------");
} } @Override
public void buyVipProduct(User user, VipProduct vipProduct) {
System.out.println("------------------------购买VIP产品 Start----------------------------");
try{
//普通用户转为VIP会员
//第一步初始化会员信息
userToVipUser(user);
//第二步更新会员时间
long updateVipTime = DateUtil.getTimeByDays(vipProduct.getVipTime());
updateUserVipTime(updateVipTime, user.getUserVipInfo());
//第三步赠送相应的VIP经验
if(vipProduct.getVipExpGift() > 0){
System.out.println("赠送VIP经验点:" + vipProduct.getVipExpGift());
updateUserVipExp(vipProduct.getVipExpGift(), user.getUserVipInfo());
System.out.println("当前VIP等级:" + user.getUserVipInfo().getCurVipLevel());
System.out.println("当前VIP经验:" + user.getUserVipInfo().getCurVipExp());
System.out.println("当前升级到下一级所需要的VIP经验:" + user.getUserVipInfo().getNextLevelNeedExp());
}
}catch(Exception e){
}finally{
System.out.println("------------------------购买VIP产品 End----------------------------");
}
} /**
* 更新用户VIP的信息
* @param updateVipExp
* @param userVipInfo
*/
@Override
public void updateUserVipExp(long updateVipExp, UserVipInfo userVipInfo){
System.out.println("更新用户VIP经验信息");
VipLevelStrategy vipLevelStrategy = userVipInfo.getVipLevelStrategy();
System.out.println("用户所使用的VIP等级策略:" + vipLevelStrategy.getClass().getSimpleName());
long vipExp = vipLevelStrategy.getExpByLevel(userVipInfo.getCurVipLevel(), userVipInfo.getCurVipExp());
vipExp += updateVipExp;
long curExp = vipLevelStrategy.getCurExpByVipExp(vipExp);
int curLevel = vipLevelStrategy.getLevelByExp(vipExp);
long nextLevelNeedExp = vipLevelStrategy.getNextLevelNeedExp(curLevel, curExp);
System.out.println("更新前VIP经验:" + userVipInfo.getCurVipExp());
System.out.println("更新前VIP等级:" + userVipInfo.getCurVipLevel());
int curVipLevel = userVipInfo.getCurVipLevel();
int preVipLevel = userVipInfo.getPreVipLevel();
if(curLevel != curVipLevel){
preVipLevel = curVipLevel;
curVipLevel = curLevel;
}
curExp = (curExp < 0)? 0 : curExp;
nextLevelNeedExp = (nextLevelNeedExp < 0)? 0 : nextLevelNeedExp; System.out.println("更新后VIP经验:" + curExp);
System.out.println("更新后VIP等级:" + curLevel);
userVipInfo.setCurVipExp(curExp);
userVipInfo.setNextLevelNeedExp(nextLevelNeedExp);
userVipInfo.setCurVipLevel(curVipLevel);
userVipInfo.setPreVipLevel(preVipLevel); } /**
* 更新用户VIP的信息
* VIP普通会员(现有VIP普通会员时间大于0)
* 如何成为VIP普通会员:购买VIP产品(月卡、季卡、年卡)
* 延长VIP普通会员时间:= 现有VIP普通会员时间 + 购买VIP产品中配置的时间
* VIP超级会员(现有VIP超级会员时间大于0)
* 如何成为VIP超级会员:现有VIP(普通)会员时间大于60天购买VIP产品(月卡、季卡、年卡),或直接购买VIP产品(季卡、年卡)
* 延长VIP超级会员时间:
* 如果现有VIP普通会员时间大于60,则 = 现有VIP普通会员时间 - 60 + 购买VIP产品中配置的时间
* 如果现有VIP普通会员时间等于0,购买了季卡或年卡,则 = 购买VIP产品中配置的时间 - 60
* @param updateVipTime
* @param userVipInfo
*/
@Override
public void updateUserVipTime(long updateVipTime, UserVipInfo userVipInfo){
System.out.println("更新用户VIP时间信息");
long curVipEndTime = userVipInfo.getVipEndTime();
long curSuperVipEndTime = userVipInfo.getSuperVipEndTime();
long nowTime = DateUtil.getNowTime();
int updateDays = DateUtil.getDays(updateVipTime);
System.out.println("购买的VIP卡的天数:" + updateDays);
//初始化VIP到期时间为当前时间
if((curVipEndTime == 0 && curSuperVipEndTime == 0) || curVipEndTime < nowTime){
curVipEndTime = nowTime;
curSuperVipEndTime = nowTime;
}
System.out.println("更新前VIP普通会员时间:" + DateUtil.format(curVipEndTime));
System.out.println("更新前VIP超级会员时间:" + DateUtil.format(curSuperVipEndTime));
//VIP超级会员时间
//第一种情况VIP普通会员已过期再购卡的,如果买的是季卡或年卡则增加VIP超级会员时间
if(curVipEndTime == nowTime && updateDays > 60){
curSuperVipEndTime = DateUtil.getNDayTimeByNow(updateDays - 60);
//第二种情况VIP普通会员未过期再购卡,且VIP普通会员到期时间大于60天
}else if(DateUtil.getBetweenDays(curVipEndTime) > 60){
curSuperVipEndTime = curVipEndTime - DateUtil.getTimeByDays(60) + updateVipTime;
}
//VIP普通会员时间
curVipEndTime += updateVipTime; System.out.println("更新后VIP普通会员时间:" + DateUtil.format(curVipEndTime));
System.out.println("更新后VIP超级会员时间:" + DateUtil.format(curSuperVipEndTime)); userVipInfo.setVipEndTime(curVipEndTime);
userVipInfo.setSuperVipEndTime(curSuperVipEndTime);
} private long getUpdateVipExp(UserLoginLog loginLog, UserVipInfo userVipInfo){
long loginTime = new Date().getTime(),//用户本次登陆时间
lastLoginTime = loginLog.getLastLoginTime(),//用户上次登陆时间
vipEndTime = userVipInfo.getVipEndTime(),//普通VIP结束时间
superVipEndTime = userVipInfo.getSuperVipEndTime();//超级VIP结束时间 int loginT,vipEndTimeT ,lastVipEndTimeT ,superVipEndTimeT ,lastSuperVipEndTimeT ,vipBteweenSuperT;
//用户本次登陆与上次登陆时间之差
loginT = DateUtil.getBetweenDays(loginTime, lastLoginTime);
//VIP普通会员到期时间与登陆时间之差
vipEndTimeT = DateUtil.getBetweenDays(vipEndTime, loginTime);
//VIP普通会员到期时间与上次登陆时间之差
lastVipEndTimeT = DateUtil.getBetweenDays(vipEndTime, lastLoginTime);
//VIP超级会员到期时间与登陆时间之差
superVipEndTimeT = DateUtil.getBetweenDays(superVipEndTime, loginTime);
//VIP超级会员到期时间与上次登陆时间之差
lastSuperVipEndTimeT = DateUtil.getBetweenDays(superVipEndTime, lastLoginTime);
//VIP普通会员到期时间与VIP超级会员到期时间之差
vipBteweenSuperT = DateUtil.getBetweenDays(vipEndTime, superVipEndTime); //计算VIP经验点
long vipExp = 0l;
//上次登陆前VIP已过期
if(lastVipEndTimeT < 0){
vipExp = loginT*VIPEXP_DAY_REMOVE_VALUE*(-1);
//VIP已过期,上次登陆VIP超级会员已过期
}else if(vipEndTimeT < 0 && lastVipEndTimeT > 0 && lastSuperVipEndTimeT < 0){
vipExp = lastVipEndTimeT*COMMON_VIPEXP_DAY_ADD_VALUE + vipEndTimeT*VIPEXP_DAY_REMOVE_VALUE;
//VIP超级会员、VIP普通会员都已过期
}else if(vipEndTimeT < 0 && lastVipEndTimeT > 0 && superVipEndTimeT < 0 && lastSuperVipEndTimeT > 0){
vipExp = lastSuperVipEndTimeT*SUPER_VIPEXP_DAY_ADD_VALUE + vipBteweenSuperT*COMMON_VIPEXP_DAY_ADD_VALUE + vipEndTimeT*VIPEXP_DAY_REMOVE_VALUE;
//VIP普通会员未过期,上次登陆前VIP超级会员过期
}else if(vipEndTimeT > 0 && lastSuperVipEndTimeT < 0){
vipExp = loginT*COMMON_VIPEXP_DAY_ADD_VALUE;
//VIP超级会员已过期,成为VIP普通会员
}else if(vipEndTimeT > 0 && superVipEndTimeT < 0 && lastSuperVipEndTimeT > 0){
vipExp = lastSuperVipEndTimeT*SUPER_VIPEXP_DAY_ADD_VALUE + superVipEndTimeT*COMMON_VIPEXP_DAY_ADD_VALUE*(-1);
//VIP超级会员
}else if(lastSuperVipEndTimeT > 0){
vipExp = loginT*SUPER_VIPEXP_DAY_ADD_VALUE;
}
return vipExp;
} public static void main(String[] args) {
long lastLoginTime = DateUtil.getNDayTimeByNow(-13);
long vipEndTime = 0l;
long superVipEndTime = 0l; UserLoginLog loginLog = new UserLoginLog();
loginLog.setLastLoginTime(lastLoginTime); UserVipInfo userVipInfo = new UserVipInfo();
int type = 6;
switch(type){
case 1:
//上次登陆前VIP已过期
vipEndTime = DateUtil.getNDayTimeByNow(-14);
superVipEndTime = DateUtil.getNDayTimeByNow(-50);
break;
case 2:
//VIP已过期,上次登陆VIP超级会员已过期
vipEndTime = DateUtil.getNDayTimeByNow(-10);
superVipEndTime = DateUtil.getNDayTimeByNow(-50);
break;
case 3:
//VIP超级会员、VIP普通会员都已过期
vipEndTime = DateUtil.getNDayTimeByNow(-5);
superVipEndTime = DateUtil.getNDayTimeByNow(-10);
break;
case 4:
//VIP普通会员未过期,上次登陆前VIP超级会员过期
vipEndTime = DateUtil.getNDayTimeByNow(5);
superVipEndTime = DateUtil.getNDayTimeByNow(-20);
break;
case 5:
//VIP超级会员已过期,成为VIP普通会员
vipEndTime = DateUtil.getNDayTimeByNow(20);
superVipEndTime = DateUtil.getNDayTimeByNow(-5);
break;
case 6:
//VIP超级会员
vipEndTime = DateUtil.getNDayTimeByNow(10);
superVipEndTime = DateUtil.getNDayTimeByNow(40);
break;
} userVipInfo.setVipEndTime(vipEndTime);
userVipInfo.setSuperVipEndTime(superVipEndTime); VipManagerImpl1 vipManager = new VipManagerImpl1();
long updateVipExp = vipManager.getUpdateVipExp(loginLog, userVipInfo);
System.out.println(updateVipExp);
}
}
package com.game.vip.manager;

import com.game.vip.data.user.User;
import com.game.vip.data.user.UserVipInfo;
import com.game.vip.data.vip.product.VipProduct; /**
* @author Administrator
* vip管理接口
*/
public interface VipManager { public static final int COMMON_VIPEXP_DAY_ADD_VALUE = 10;
public static final int SUPER_VIPEXP_DAY_ADD_VALUE = 15;
public static final int VIPEXP_DAY_REMOVE_VALUE = 10; /**
* 普通用户转换成VIP用户(如充值)
* @param userVipInfo
*/
public void userToVipUser(User user); /**
* 购买了vip季卡或月卡
* @param userVipInfo
* @param vipProduct
*/
public void buyVipProduct(User user, VipProduct vipProduct); /**
* 用户VIP经验成长
* @param loginLog
* @param userVipInfo
*/
public void userLogin(User user); /**
* 奖励VIP用户
* @param userVipInfo
*/
public void rewardVipUser(User user); /**
* 更新用户VIP的信息
* @param updateVipExp
* @param userVipInfo
*/
public void updateUserVipExp(long updateVipExp, UserVipInfo userVipInfo); /**
* 更新用户VIP的信息
* @param updateVipTime
* @param userVipInfo
*/
public void updateUserVipTime(long updateVipTime, UserVipInfo userVipInfo);
}
package com.game.vip.strategy.impl;

import java.util.ArrayList;
import java.util.List; import com.game.vip.data.vip.VipLevelInfo;
import com.game.vip.strategy.VipLevelStrategy; /**
* @author Administrator
* VIP等级经验段级策略1
*/
public class VipLevelStrategyImpl1 extends VipLevelStrategy{ public VipLevelStrategyImpl1(List<VipLevelInfo> vipLevelList) {
super(vipLevelList);
} @Override
public List<LevelNeedVipExp> initLevelNeedVipExp(
List<VipLevelInfo> vipLevelList) {
List<LevelNeedVipExp> list = null;
long vipExpStart = 0l;
long vipExpEnd = 0l;
if(vipLevelList != null && vipLevelList.size()>0){
list = new ArrayList<LevelNeedVipExp>();
for(int i = 0, len = vipLevelList.size(); i < len; i++){
vipExpStart = vipLevelList.get(i).getVipExp();
vipExpEnd =(i == len-1)? vipLevelList.get(i).getVipExp() : vipLevelList.get(i+1).getVipExp();
list.add(new LevelNeedVipExp(i+1, vipExpStart, vipExpEnd));
}
}
return list;
} @Override
public long getExpByLevel(int vipLevel, long curVipExp) {
if(curVipExp>0)
return curVipExp;
long vipExp = 0l;
List<VipLevelInfo> vipLevelList = getVipLevelList();
if(vipLevelList != null && vipLevelList.size()>0){
for(int i = 0, len = vipLevelList.size(); i < len; i++){
if(vipLevel == vipLevelList.get(i).getVipLevel()){
vipExp = vipLevelList.get(i).getVipExp();
break;
}
}
}
return vipExp;
} @Override
public long getCurExpByVipExp(long vipExp) {
return vipExp;
} }
package com.game.vip.strategy.impl;

import java.util.ArrayList;
import java.util.List; import com.game.vip.data.vip.VipLevelInfo;
import com.game.vip.strategy.VipLevelStrategy; /**
* @author Administrator
* VIP等级经验段级策略2
*/
public class VipLevelStrategyImpl2 extends VipLevelStrategy{ public VipLevelStrategyImpl2(List<VipLevelInfo> vipLevelList) {
super(vipLevelList);
} @Override
public List<LevelNeedVipExp> initLevelNeedVipExp(
List<VipLevelInfo> vipLevelList) {
List<LevelNeedVipExp> list = null;
long vipExpStart = 0l;
long vipExpEnd = 0l;
if(vipLevelList != null && vipLevelList.size()>0){
list = new ArrayList<LevelNeedVipExp>();
for(int i = 0, len = vipLevelList.size(); i < len; i++){
vipExpStart = vipExpByLevel(i, vipLevelList);
vipExpEnd = (i == len-1)? vipExpByLevel(i, vipLevelList) : vipExpByLevel(i+1, vipLevelList);
list.add(new LevelNeedVipExp(i+1, vipExpStart, vipExpEnd));
}
} return list;
} @Override
public long getExpByLevel(int vipLevel, long curVipExp) {
long levelExp = vipExpByLevel(vipLevel, getVipLevelList());
return levelExp + curVipExp;
} private long vipExpByLevel(int level, List<VipLevelInfo> vipLevelList){
long vipExp = 0l;
if(vipLevelList != null && vipLevelList.size()>0){
for(int i = 0, len = vipLevelList.size(); i < len; i++){
if(level < (i+1)) break;
vipExp += vipLevelList.get(i).getVipExp();
}
}
return vipExp;
} @Override
public long getCurExpByVipExp(long vipExp) {
int level = getLevelByExp(vipExp);
LevelNeedVipExp levelNeedVipExp = getLevelNeedVipExpByLevel(level);
if(levelNeedVipExp != null && vipExp >= levelNeedVipExp.getVipExpStart()){
return vipExp - levelNeedVipExp.getVipExpStart();
}
return 0;
}
}
package com.game.vip.strategy;

import java.util.Collections;
import java.util.List; import com.game.vip.data.vip.VipLevelInfo;
import com.game.vip.data.vip.VipLevelReward; /**
* @author Administrator
* vip等级策略接口
*/
public abstract class VipLevelStrategy {
private List<VipLevelReward> rewardList;
private List<VipLevelInfo> vipLevelList;
private List<LevelNeedVipExp> levelNeedVipExpList; public VipLevelStrategy(List<VipLevelInfo> vipLevelList) {
super();
this.vipLevelList = vipLevelList;
this.levelNeedVipExpList = initLevelNeedVipExp(vipLevelList);
Collections.sort(this.levelNeedVipExpList);
} /**
* 通过VIP经验获取对应的等级
* @param vipExp
* @return
*/
public int getLevelByExp(long vipExp){
int level = getMinLevel();
List<LevelNeedVipExp> levelNeedVipExpList = getLevelNeedVipExpList();
LevelNeedVipExp levelNeedVipExp = null;
for (int i=0, len = levelNeedVipExpList.size(); i<len; i++) {
levelNeedVipExp = levelNeedVipExpList.get(i);
if(vipExp >= levelNeedVipExp.vipExpStart && vipExp < levelNeedVipExp.vipExpEnd){
level = levelNeedVipExp.level;
break;
}else if(i == len-1 && vipExp > levelNeedVipExp.vipExpEnd){
level = levelNeedVipExp.level;
}
}
return level;
} /**
* 获取VIP最大等级
* @return
*/
public int getMaxLevel(){
int len = 0;
List<LevelNeedVipExp> list = getLevelNeedVipExpList();
len = list.size();
return list.get(len-1).getLevel();
} /**
* 获取VIP最小等级
* @return
*/
public int getMinLevel(){
int len = 0;
List<LevelNeedVipExp> list = getLevelNeedVipExpList();
len = list.size();
return len > 0? list.get(0).getLevel() : 1;
} /**
* 是否升级
* @param curLevel
* @param curVipExp
* @return
*/
public boolean isGrowUp(int curLevel, long curVipExp){
long vipExp = getExpByLevel(curLevel, curVipExp);
int vipLevel = getLevelByExp(vipExp);
return vipLevel != curLevel;
} /**
* 升级到下一级所需的VIP经验
* @param curVipLevel
* @param curVipExp
* @return
*/
public long getNextLevelNeedExp(int curVipLevel, long curVipExp) {
long vipExp = getExpByLevel(curVipLevel, curVipExp);
long nextLevelExp = getExpByLevel(curVipLevel+1, 0l);
return nextLevelExp - vipExp;
} /**
* 通过VIP等级获取LevelNeedVipExp
* @param level
* @return
*/ public LevelNeedVipExp getLevelNeedVipExpByLevel(int level){
List<LevelNeedVipExp> list = getLevelNeedVipExpList();
for(LevelNeedVipExp item : list){
if(level == item.getLevel()){
return item;
}
}
return null;
} /**
* 根据VIP等级获取相应的奖励
* @param level
* @return
*/
public VipLevelReward getLevelReward(int level){
List<VipLevelReward> list = getRewardList();
if(list == null || list.size() == 0)
return null;
for(VipLevelReward reward : list){
if(reward.getVipLevel() == level){
return reward;
}
}
return null;
}
/**
* 通过总VIP经验获取当前等级所对应剩余经验
* @param vipExp
* @return
*/
public abstract long getCurExpByVipExp(long vipExp);
/**
* 通过VIP等级和当前VIP经验获取总VIP经验
* @param vipLevel
* @param curVipExp
* @return
*/
public abstract long getExpByLevel(int vipLevel, long curVipExp); /**
* @param vipLevelList
* @return
*/
public abstract List<LevelNeedVipExp> initLevelNeedVipExp(List<VipLevelInfo> vipLevelList); /**
* @author Administrator
* 每个等级所对应的vip经验区段
*/
public static class LevelNeedVipExp implements Comparable<LevelNeedVipExp>{
private int level;
private long vipExpStart;
private long vipExpEnd; public LevelNeedVipExp(int level, long vipExpStart, long vipExpEnd) {
super();
this.level = level;
this.vipExpStart = vipExpStart;
this.vipExpEnd = vipExpEnd;
} public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public long getVipExpStart() {
return vipExpStart;
}
public void setVipExpStart(long vipExpStart) {
this.vipExpStart = vipExpStart;
}
public long getVipExpEnd() {
return vipExpEnd;
}
public void setVipExpEnd(long vipExpEnd) {
this.vipExpEnd = vipExpEnd;
} @Override
public int compareTo(LevelNeedVipExp o) {
return this.level-o.level;
}
} public List<VipLevelInfo> getVipLevelList() {
return vipLevelList;
} public List<LevelNeedVipExp> getLevelNeedVipExpList() {
return levelNeedVipExpList;
} public List<VipLevelReward> getRewardList() {
return rewardList;
} public void setRewardList(List<VipLevelReward> rewardList) {
this.rewardList = rewardList;
}
}
package com.game.vip.test;

import java.util.ArrayList;
import java.util.Date;
import java.util.List; import com.game.vip.data.user.User;
import com.game.vip.data.user.UserLoginLog;
import com.game.vip.data.user.UserVipInfo;
import com.game.vip.data.vip.VipLevelInfo;
import com.game.vip.data.vip.VipLevelReward;
import com.game.vip.data.vip.product.VipProduct;
import com.game.vip.manager.VipManager;
import com.game.vip.manager.impl.VipManagerImpl1;
import com.game.vip.strategy.VipLevelStrategy;
import com.game.vip.strategy.impl.VipLevelStrategyImpl1;
import com.game.vip.util.DateUtil; /**
* @author Administrator
* 测试类
*/
public class VipTest { public static void main(String[] args) {
VipManager vipManager = new VipManagerImpl1(); User user = initUser(); List<VipProduct> productList = initVipProduct();
//购买VIP卡[i = 0:月卡;i = 1:季卡;i = 2:年卡]
vipManager.buyVipProduct(user, productList.get(1));
user.getUserLoginLog().setLastLoginTime(new Date().getTime()); //1: 上次登陆前VIP已过期
//2: VIP已过期,上次登陆VIP超级会员已过期
//3: VIP超级会员、VIP普通会员都已过期
//4: VIP普通会员未过期,上次登陆前VIP超级会员过期
//5: VIP超级会员已过期,成为VIP普通会员
//6: VIP超级会员
int type = 1;
updateUserVipInfo(user, type);
//登陆
vipManager.userLogin(user); //奖励
vipManager.rewardVipUser(user);
} public static List<VipLevelInfo> initVipLevelInfo(){
List<VipLevelInfo> list = new ArrayList<VipLevelInfo>();
list.add(new VipLevelInfo(1, 0));
list.add(new VipLevelInfo(2, 16));
list.add(new VipLevelInfo(3, 68));
list.add(new VipLevelInfo(4, 158));
list.add(new VipLevelInfo(5, 618));
list.add(new VipLevelInfo(6, 1236));
list.add(new VipLevelInfo(7, 2472));
return list;
} public static List<VipProduct> initVipProduct(){
List<VipProduct> list = new ArrayList<VipProduct>();
list.add(new VipProduct(1, "月卡", 30, 10));
list.add(new VipProduct(1, "季卡", 90, 30));
list.add(new VipProduct(1, "年卡", 360, 50));
return list;
} public static List<VipLevelReward> initVipLevelReward(){
List<VipLevelReward> list = new ArrayList<VipLevelReward>();
list.add(new VipLevelReward(1, "1级VIP等级奖励", "奖励"));
list.add(new VipLevelReward(2, "2级VIP等级奖励", "奖励"));
list.add(new VipLevelReward(3, "3级VIP等级奖励", "奖励"));
list.add(new VipLevelReward(4, "4级VIP等级奖励", "奖励"));
list.add(new VipLevelReward(5, "5级VIP等级奖励", "奖励"));
list.add(new VipLevelReward(6, "6级VIP等级奖励", "奖励"));
list.add(new VipLevelReward(7, "7级VIP等级奖励", "奖励"));
return list;
} public static User initUser(){
User user = new User();
user.setUserId(1l);
user.setName("小学生三号"); //登陆日志
UserLoginLog loginLog = new UserLoginLog();
loginLog.setUserId(user.getUserId());
//13天之前登陆了
loginLog.setLastLoginTime(DateUtil.getNDayTimeByNow(-13)); //用户VIP信息
UserVipInfo userVipInfo = new UserVipInfo();
userVipInfo.setUserId(user.getUserId());
List<VipLevelInfo> vipLevelList = initVipLevelInfo();
VipLevelStrategy vipLevelStrategy1 = new VipLevelStrategyImpl1(vipLevelList);
// VipLevelStrategy vipLevelStrategy2 = new VipLevelStrategyImpl2(vipLevelList); //设置VIP等级奖励
vipLevelStrategy1.setRewardList(initVipLevelReward());
//设置VIP等级策略
userVipInfo.setVipLevelStrategy(vipLevelStrategy1); user.setUserLoginLog(loginLog);
user.setUserVipInfo(userVipInfo); return user;
} public static void updateUserVipInfo(User user, int type){
System.out.println("=========================");
long lastLoginTime = DateUtil.getNDayTimeByNow(-13);
long vipEndTime = 0l;
long superVipEndTime = 0l; UserLoginLog loginLog = user.getUserLoginLog();
loginLog.setLastLoginTime(lastLoginTime); UserVipInfo userVipInfo = user.getUserVipInfo();
switch(type){
case 1:
//上次登陆前VIP已过期
System.out.println("更新类型:上次登陆前VIP已过期!");
vipEndTime = DateUtil.getNDayTimeByNow(-14);
superVipEndTime = DateUtil.getNDayTimeByNow(-50);
break;
case 2:
//VIP已过期,上次登陆VIP超级会员已过期
System.out.println("更新类型:VIP已过期,上次登陆VIP超级会员已过期!");
vipEndTime = DateUtil.getNDayTimeByNow(-10);
superVipEndTime = DateUtil.getNDayTimeByNow(-50);
break;
case 3:
//VIP超级会员、VIP普通会员都已过期
System.out.println("更新类型:VIP超级会员、VIP普通会员都已过期!");
vipEndTime = DateUtil.getNDayTimeByNow(-5);
superVipEndTime = DateUtil.getNDayTimeByNow(-10);
break;
case 4:
//VIP普通会员未过期,上次登陆前VIP超级会员过期
System.out.println("更新类型:VIP普通会员未过期,上次登陆前VIP超级会员过期!");
vipEndTime = DateUtil.getNDayTimeByNow(5);
superVipEndTime = DateUtil.getNDayTimeByNow(-20);
break;
case 5:
//VIP超级会员已过期,成为VIP普通会员
System.out.println("更新类型:VIP超级会员已过期,成为VIP普通会员!");
vipEndTime = DateUtil.getNDayTimeByNow(20);
superVipEndTime = DateUtil.getNDayTimeByNow(-5);
break;
case 6:
//VIP超级会员
System.out.println("更新类型:VIP超级会员!");
vipEndTime = DateUtil.getNDayTimeByNow(10);
superVipEndTime = DateUtil.getNDayTimeByNow(40);
break;
}
System.out.println("更新上次登陆时间为:" + DateUtil.format(lastLoginTime));
System.out.println("更新VIP普通会员到期时间为:" + DateUtil.format(vipEndTime));
System.out.println("更新VIP超级会员到期时间为:" + DateUtil.format(superVipEndTime));
userVipInfo.setVipEndTime(vipEndTime);
userVipInfo.setSuperVipEndTime(superVipEndTime);
System.out.println("=========================");
}
}
package com.game.vip.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar; public class DateUtil { public static final long ONE_DAY_TIME = 24*60*60*1000;
/**
* 获取指定日期凌晨的时间
* @param time
* @return
*/
public static long getZeroHourTimeOfDay(long time){
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
int y = calendar.get(Calendar.YEAR);
int m = calendar.get(Calendar.MONTH);
int d = calendar.get(Calendar.DATE);
calendar.clear();
calendar.set(y,m,d);
return calendar.getTimeInMillis();
} public static Date getWeekFristDay() {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.SUNDAY);
c.setTime(new Date());
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
return c.getTime();
} /**
* 过去下个星期几的时间
* 如获取下个星期一的9:30的时间:getTimeOfNextWeekByTime(1, 9,30,0)
* @param day 星期数【1:一;2:二;3:三;4:四;5:五;6:六;0:日】
* @param hour
* @param minute
* @param second
* @return
*/
public static Date getTimeOfWeekByTime(int day, int hour,int minute,int second){
Date curWeekFirstDay = getWeekFristDay();
Calendar c = Calendar.getInstance();
c.setTime(curWeekFirstDay);
//对应星期几就加几天
c.add(Calendar.DAY_OF_WEEK, day);
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, second);
return c.getTime();
} /**
* 过去下个星期几的时间
* 如获取下个星期一的9:30的时间:getTimeOfNextWeekByTime(1, 9,30,0)
* @param day 星期数【1:一;2:二;3:三;4:四;5:五;6:六;0:日】
* @param hour
* @param minute
* @param second
* @return
*/
public static Date getTimeOfNextWeekByTime(int day, int hour,int minute,int second){
Date curWeekFirstDay = getWeekFristDay();
Calendar c = Calendar.getInstance();
c.setTime(curWeekFirstDay);
//下一周加七天
c.add(Calendar.DAY_OF_WEEK, 7);
//对应星期几就加几天
c.add(Calendar.DAY_OF_WEEK, day);
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, second);
return c.getTime();
} public static Date getMonthFirstDay() {
Calendar c = new GregorianCalendar();
c.setTime(new Date());
c.set(Calendar.DAY_OF_MONTH, 1);
return c.getTime();
} public static Date getYearFirstDay() {
Calendar c = new GregorianCalendar();
c.setTime(new Date());
c.set(Calendar.DAY_OF_YEAR, 1);
return c.getTime();
} public static long getNowTime()
{
Calendar c = Calendar.getInstance();
int y = c.get(Calendar.YEAR);
int m = c.get(Calendar.MONTH);
int d = c.get(Calendar.DATE);
c.clear();
c.set(y, m, d);
return c.getTimeInMillis();
} public static long getDayTime(long time){
Calendar c = Calendar.getInstance();
c.setTimeInMillis(time);
int y = c.get(Calendar.YEAR);
int m = c.get(Calendar.MONTH);
int d = c.get(Calendar.DATE);
c.clear();
c.set(y, m, d);
return c.getTimeInMillis();
}
public static long getYesterdayTime()
{
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, -1);
int y = c.get(Calendar.YEAR);
int m = c.get(Calendar.MONTH);
int d = c.get(Calendar.DATE);
c.clear();
c.set(y, m, d);
return c.getTimeInMillis();
} public static long getNDayTimeByNow(int n)
{
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, n);
int y = c.get(Calendar.YEAR);
int m = c.get(Calendar.MONTH);
int d = c.get(Calendar.DATE);
c.clear();
c.set(y, m, d);
return c.getTimeInMillis();
} public static int getDateNumByNow(){
Calendar c = Calendar.getInstance();
int y = c.get(Calendar.YEAR);
int m = c.get(Calendar.MONTH)+1;
int d = c.get(Calendar.DATE);
String mStr = m+"";
String dStr = d+"";
if(m<10){
mStr = "0"+m;
}
if(d<10){
dStr = "0"+d;
}
String num = y+mStr+dStr;
return Integer.parseInt(num);
} /**
* 获取两个时间相差的天数
* @param time1
* @param time2
* @return
*/
public static int getBetweenDays(long time1, long time2){
// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long ztime1 = getZeroHourTimeOfDay(time1);
long ztime2 = getZeroHourTimeOfDay(time2);
// System.out.println(dateFormat.format(time1));
// System.out.println(dateFormat.format(ztime1));
// System.out.println(dateFormat.format(time2));
// System.out.println(dateFormat.format(ztime2));
return (int) ((ztime1 - ztime2)/ONE_DAY_TIME);
} /**
*
* @param time
* @return
*/
public static int getBetweenDays(long time){
return (int) ((getZeroHourTimeOfDay(time) - getZeroHourTimeOfDay(new Date().getTime()))/ONE_DAY_TIME);
} /**
* 根据时间段获取天数
* @param time
* @return
*/
public static int getDays(long time){
return (int) (time/ONE_DAY_TIME);
} /**
* 根据天数获取对应天数的时间
* @param days
* @return
*/
public static long getTimeByDays(int days){
return days*ONE_DAY_TIME;
} /**
* 格式化时间
* yyyy-MM-dd HH:mm:ss
* @param time
* @return
*/
public static String format(Object time){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return dateFormat.format(time);
}
public static void main(String[] args) {
// Date date = new Date();
//// long time = date.getTime();
// long time1 = 1375127200200l;
// long time2 = 1374029202000l;
//// System.out.println(ONE_DAY_TIME);
//// System.out.println(getZeroHourTimeOfDay(time));
//// System.out.println(new Date(getZeroHourTimeOfDay(time)));
// System.out.println("time1:" + new Date(time1));
// System.out.println("time2:" + new Date(time2));
// System.out.println(getBetweenDays(time1, time2));
// System.out.println(getBetweenDays(time1)); System.out.println(getDays(6*ONE_DAY_TIME));
}
}

测试输出

------------------------购买VIP产品 Start----------------------------
普通会员转成VIP会员
更新用户VIP时间信息
购买的VIP卡的天数:90
更新前VIP普通会员时间:2013-07-31 00:00:00
更新前VIP超级会员时间:2013-07-31 00:00:00
更新后VIP普通会员时间:2013-10-29 00:00:00
更新后VIP超级会员时间:2013-08-30 00:00:00
赠送VIP经验点:30
更新用户VIP经验信息
用户所使用的VIP等级策略:VipLevelStrategyImpl1
更新前VIP经验:0
更新前VIP等级:1
更新后VIP经验:30
更新后VIP等级:2
当前VIP等级:2
当前VIP经验:30
当前升级到下一级所需要的VIP经验:38
------------------------购买VIP产品 End----------------------------
=========================
更新类型:上次登陆前VIP已过期!
更新上次登陆时间为:2013-07-18 00:00:00
更新VIP普通会员到期时间为:2013-07-17 00:00:00
更新VIP超级会员到期时间为:2013-06-11 00:00:00
=========================
------------------------用户登陆 Start----------------------------
当前用户:小学生三号
当前VIP等级:2
当前VIP经验:30
VIP普通会员到期时间:2013-07-17 00:00:00
VIP超级会员到期时间:2013-06-11 00:00:00
当前升级到下一级所需要的VIP经验:38
上次登陆时间:2013-07-18 00:00:00
更新VIP信息
VIP经验成长值:-130
更新用户VIP经验信息
用户所使用的VIP等级策略:VipLevelStrategyImpl1
更新前VIP经验:30
更新前VIP等级:2
更新后VIP经验:0
更新后VIP等级:1
当前VIP等级:1
当前VIP经验:0
当前升级到下一级所需要的VIP经验:16
------------------------用户登陆 End----------------------------
------------------------奖励VIP用户 Start----------------------------
当前用户不是VIP用户或VIP已过期!
------------------------奖励VIP用户 End----------------------------
------------------------购买VIP产品 Start----------------------------
普通会员转成VIP会员
更新用户VIP时间信息
购买的VIP卡的天数:90
更新前VIP普通会员时间:2013-07-31 00:00:00
更新前VIP超级会员时间:2013-07-31 00:00:00
更新后VIP普通会员时间:2013-10-29 00:00:00
更新后VIP超级会员时间:2013-08-30 00:00:00
赠送VIP经验点:30
更新用户VIP经验信息
用户所使用的VIP等级策略:VipLevelStrategyImpl1
更新前VIP经验:0
更新前VIP等级:1
更新后VIP经验:30
更新后VIP等级:2
当前VIP等级:2
当前VIP经验:30
当前升级到下一级所需要的VIP经验:38
------------------------购买VIP产品 End----------------------------
=========================
更新类型:VIP已过期,上次登陆VIP超级会员已过期!
更新上次登陆时间为:2013-07-18 00:00:00
更新VIP普通会员到期时间为:2013-07-21 00:00:00
更新VIP超级会员到期时间为:2013-06-11 00:00:00
=========================
------------------------用户登陆 Start----------------------------
当前用户:小学生三号
当前VIP等级:2
当前VIP经验:30
VIP普通会员到期时间:2013-07-21 00:00:00
VIP超级会员到期时间:2013-06-11 00:00:00
当前升级到下一级所需要的VIP经验:38
上次登陆时间:2013-07-18 00:00:00
更新VIP信息
VIP经验成长值:-70
更新用户VIP经验信息
用户所使用的VIP等级策略:VipLevelStrategyImpl1
更新前VIP经验:30
更新前VIP等级:2
更新后VIP经验:0
更新后VIP等级:1
当前VIP等级:1
当前VIP经验:0
当前升级到下一级所需要的VIP经验:16
------------------------用户登陆 End----------------------------
------------------------奖励VIP用户 Start----------------------------
当前用户不是VIP用户或VIP已过期!
------------------------奖励VIP用户 End----------------------------
------------------------购买VIP产品 Start----------------------------
普通会员转成VIP会员
更新用户VIP时间信息
购买的VIP卡的天数:90
更新前VIP普通会员时间:2013-07-31 00:00:00
更新前VIP超级会员时间:2013-07-31 00:00:00
更新后VIP普通会员时间:2013-10-29 00:00:00
更新后VIP超级会员时间:2013-08-30 00:00:00
赠送VIP经验点:30
更新用户VIP经验信息
用户所使用的VIP等级策略:VipLevelStrategyImpl1
更新前VIP经验:0
更新前VIP等级:1
更新后VIP经验:30
更新后VIP等级:2
当前VIP等级:2
当前VIP经验:30
当前升级到下一级所需要的VIP经验:38
------------------------购买VIP产品 End----------------------------
=========================
更新类型:VIP超级会员、VIP普通会员都已过期!
更新上次登陆时间为:2013-07-18 00:00:00
更新VIP普通会员到期时间为:2013-07-26 00:00:00
更新VIP超级会员到期时间为:2013-07-21 00:00:00
=========================
------------------------用户登陆 Start----------------------------
当前用户:小学生三号
当前VIP等级:2
当前VIP经验:30
VIP普通会员到期时间:2013-07-26 00:00:00
VIP超级会员到期时间:2013-07-21 00:00:00
当前升级到下一级所需要的VIP经验:38
上次登陆时间:2013-07-18 00:00:00
更新VIP信息
VIP经验成长值:45
更新用户VIP经验信息
用户所使用的VIP等级策略:VipLevelStrategyImpl1
更新前VIP经验:30
更新前VIP等级:2
更新后VIP经验:75
更新后VIP等级:3
当前VIP等级:3
当前VIP经验:75
当前升级到下一级所需要的VIP经验:83
------------------------用户登陆 End----------------------------
------------------------奖励VIP用户 Start----------------------------
当前用户不是VIP用户或VIP已过期!
------------------------奖励VIP用户 End----------------------------
------------------------购买VIP产品 Start----------------------------
普通会员转成VIP会员
更新用户VIP时间信息
购买的VIP卡的天数:90
更新前VIP普通会员时间:2013-07-31 00:00:00
更新前VIP超级会员时间:2013-07-31 00:00:00
更新后VIP普通会员时间:2013-10-29 00:00:00
更新后VIP超级会员时间:2013-08-30 00:00:00
赠送VIP经验点:30
更新用户VIP经验信息
用户所使用的VIP等级策略:VipLevelStrategyImpl1
更新前VIP经验:0
更新前VIP等级:1
更新后VIP经验:30
更新后VIP等级:2
当前VIP等级:2
当前VIP经验:30
当前升级到下一级所需要的VIP经验:38
------------------------购买VIP产品 End----------------------------
=========================
更新类型:VIP普通会员未过期,上次登陆前VIP超级会员过期!
更新上次登陆时间为:2013-07-18 00:00:00
更新VIP普通会员到期时间为:2013-08-05 00:00:00
更新VIP超级会员到期时间为:2013-07-11 00:00:00
=========================
------------------------用户登陆 Start----------------------------
当前用户:小学生三号
当前VIP等级:2
当前VIP经验:30
VIP普通会员到期时间:2013-08-05 00:00:00
VIP超级会员到期时间:2013-07-11 00:00:00
当前升级到下一级所需要的VIP经验:38
上次登陆时间:2013-07-18 00:00:00
更新VIP信息
VIP经验成长值:130
更新用户VIP经验信息
用户所使用的VIP等级策略:VipLevelStrategyImpl1
更新前VIP经验:30
更新前VIP等级:2
更新后VIP经验:160
更新后VIP等级:4
当前VIP等级:4
当前VIP经验:160
当前升级到下一级所需要的VIP经验:458
------------------------用户登陆 End----------------------------
------------------------奖励VIP用户 Start----------------------------
当前用户:小学生三号
VIP等级:4
获取VIP奖励:4级VIP等级奖励(奖励)
------------------------奖励VIP用户 End----------------------------
------------------------购买VIP产品 Start----------------------------
普通会员转成VIP会员
更新用户VIP时间信息
购买的VIP卡的天数:90
更新前VIP普通会员时间:2013-07-31 00:00:00
更新前VIP超级会员时间:2013-07-31 00:00:00
更新后VIP普通会员时间:2013-10-29 00:00:00
更新后VIP超级会员时间:2013-08-30 00:00:00
赠送VIP经验点:30
更新用户VIP经验信息
用户所使用的VIP等级策略:VipLevelStrategyImpl1
更新前VIP经验:0
更新前VIP等级:1
更新后VIP经验:30
更新后VIP等级:2
当前VIP等级:2
当前VIP经验:30
当前升级到下一级所需要的VIP经验:38
------------------------购买VIP产品 End----------------------------
=========================
更新类型:VIP超级会员已过期,成为VIP普通会员!
更新上次登陆时间为:2013-07-18 00:00:00
更新VIP普通会员到期时间为:2013-08-20 00:00:00
更新VIP超级会员到期时间为:2013-07-26 00:00:00
=========================
------------------------用户登陆 Start----------------------------
当前用户:小学生三号
当前VIP等级:2
当前VIP经验:30
VIP普通会员到期时间:2013-08-20 00:00:00
VIP超级会员到期时间:2013-07-26 00:00:00
当前升级到下一级所需要的VIP经验:38
上次登陆时间:2013-07-18 00:00:00
更新VIP信息
VIP经验成长值:170
更新用户VIP经验信息
用户所使用的VIP等级策略:VipLevelStrategyImpl1
更新前VIP经验:30
更新前VIP等级:2
更新后VIP经验:200
更新后VIP等级:4
当前VIP等级:4
当前VIP经验:200
当前升级到下一级所需要的VIP经验:418
------------------------用户登陆 End----------------------------
------------------------奖励VIP用户 Start----------------------------
当前用户:小学生三号
VIP等级:4
获取VIP奖励:4级VIP等级奖励(奖励)
------------------------奖励VIP用户 End----------------------------
------------------------购买VIP产品 Start----------------------------
普通会员转成VIP会员
更新用户VIP时间信息
购买的VIP卡的天数:90
更新前VIP普通会员时间:2013-07-31 00:00:00
更新前VIP超级会员时间:2013-07-31 00:00:00
更新后VIP普通会员时间:2013-10-29 00:00:00
更新后VIP超级会员时间:2013-08-30 00:00:00
赠送VIP经验点:30
更新用户VIP经验信息
用户所使用的VIP等级策略:VipLevelStrategyImpl1
更新前VIP经验:0
更新前VIP等级:1
更新后VIP经验:30
更新后VIP等级:2
当前VIP等级:2
当前VIP经验:30
当前升级到下一级所需要的VIP经验:38
------------------------购买VIP产品 End----------------------------
=========================
更新类型:VIP超级会员!
更新上次登陆时间为:2013-07-18 00:00:00
更新VIP普通会员到期时间为:2013-08-10 00:00:00
更新VIP超级会员到期时间为:2013-09-09 00:00:00
=========================
------------------------用户登陆 Start----------------------------
当前用户:小学生三号
当前VIP等级:2
当前VIP经验:30
VIP普通会员到期时间:2013-08-10 00:00:00
VIP超级会员到期时间:2013-09-09 00:00:00
当前升级到下一级所需要的VIP经验:38
上次登陆时间:2013-07-18 00:00:00
更新VIP信息
VIP经验成长值:195
更新用户VIP经验信息
用户所使用的VIP等级策略:VipLevelStrategyImpl1
更新前VIP经验:30
更新前VIP等级:2
更新后VIP经验:225
更新后VIP等级:4
当前VIP等级:4
当前VIP经验:225
当前升级到下一级所需要的VIP经验:393
------------------------用户登陆 End----------------------------
------------------------奖励VIP用户 Start----------------------------
当前用户:小学生三号
VIP等级:4
获取VIP奖励:4级VIP等级奖励(奖励)
------------------------奖励VIP用户 End----------------------------

哈哈  求代码的童鞋 发个评论留个邮箱 我发代码到邮箱中

透露下 哈 下一期打算写 游戏中竞技场或爬塔的实现 哈哈 敬请期待哦

游戏中VIP会员模块的简单实现的更多相关文章

  1. Python中的Pexpect模块的简单使用

    Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块. Pexpect 可以用来和像 ssh.ftp.passwd.telnet 等命令行程序进行自动交互.以下所有代码都是在K ...

  2. frp源码剖析-frp中的log模块

    前言&引入 一个好的log模块可以帮助我们排错,分析,统计 一般来说log中需要有时间.栈信息(比如说文件名行号等),这些东西一般某些底层log模块已经帮我们做好了.但在业务中还有很多我们需要 ...

  3. 《MFC游戏开发》笔记九 游戏中的碰撞判定初步&怪物运动简单AI

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9374935 作者:七十一雾央 新浪微博:http:// ...

  4. 在unity3d游戏中添加中文语音控制

    最近打算尝试一下OLAMI在游戏中应用的可能性,这里做一下记录. unity官方教程中的几个项目很精简,但看起来很不错,里面有全套的资源.最后我选择了tanks-tutorial来做这个实验. 下载和 ...

  5. 网页游戏中PK系统的实现

    在游戏开发过程中,写过一个简单的PK系统面板,涉及到前端和后端的交互,我将自己制作的流程分享给大家,大概流程是这样:前端发送PK邀请给后端,后端受到请求后将信息返回给前端处理,先来看下整个流程图及思路 ...

  6. 玩Python小游戏猜数字,在游戏中掌握基础,你还能学不会?

    学python怎么离得开案例呢? 今天再继续给大家分享一个Python教程里的猜数字游戏     我最近也是在学python,从事编程工作几年了,但是python还是今年才开始玩的,不得不说,这真是一 ...

  7. Python Logging模块的简单使用

    前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...

  8. FPS中受伤UI在VR游戏中的实现思路

    FPS中受伤UI在VR游戏中的实现思路 希望实现的效果 这几天一直在尝试各种解决方案,现在算是不完美的解决啦,记录一下心路历程,思路有了算法都比较简单. V_1 玩家胶囊体指向的方向作为正方向,计算出 ...

  9. Android中NDK的搭建及简单使用 Android.mk相关介绍 JNI的使用

    Android中NDK的搭建及简单使用: 使用NDK,简述其重要步骤:.搭建NDK环境(作用:用于自动生成jni下的.c对应的so文件)---到Android NDK官网或Android官网下载ndk ...

随机推荐

  1. javascript-对象的创建(一)

    <!DOCTYPE html> <%@ page language="java" contentType="text/html; charset=UTF ...

  2. 利用mysqld_multi启动管理多实例

    利用mysqld_multi启动管理多实例 官方管理多实例的一个脚本peer #将之前的目录清空 [root@mysql01 mysql]# tree /data/mysql/ /data/mysql ...

  3. 网站如何做到完全不需要jQuery

    jQuery是现在最流行的JavaScript工具库. 据统计,目前全世界57.3%的网站使用它.也就是说,10个网站里面,有6个使用jQuery.如果只考察使用工具库的网站,这个比例就会上升到惊人的 ...

  4. js定义参数默认值

    javascript可以用arguments定义参数组.   一.简单的定义参数默认值 function test1(a,b){ //如果有参数一,则返回参数一,如果没有返回默认值"这是参数 ...

  5. linux之cat命令

    1. cat 接普通文件名,会把文件内容打印到屏幕:2. cat > file,这个可以向文件“file”写入内容,最后按 Ctrl + D 结束输入,会将你输入的数据保存到文件. cat主要有 ...

  6. PHP版3DES加解密类

    <?php /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author:蓝凤(ilanfeng.com) * * @versio ...

  7. 【Delphi】窗体阴影

    procedure TForm1.FormCreate(Sender: TObject); begin SetClassLong(Handle, GCL_STYLE, GetClassLong(Han ...

  8. 学习W3SCHOOL 表单验证

    //表单学习笔记 //建立一张表单的验证 <!DOCTYPE html> <html> <head> <meta http-equiv="Conte ...

  9. django1.6之template基础用法

    >>> settings.configure()>>> tem=template.Template("my template is {{name}}&qu ...

  10. phpstorm运行在浏览器中执行php文件报502错误

    原因是之前mac自带的php5.5版本被我升级到了5.6 通过phpinfo()查看到目前php5.6的安装目录 重新制定一些interpreter的路径 /usr/local/php5/bin 就可 ...