我们模拟游戏中的一个角色,这个角色被动技能就是受到攻击的时候,会有十分之三的概率爆出金币,而在一个回合之中,爆出的金币个数有限制,限制为两个,假设攻击是按照一定的频率进行的,而一个回合的时长有限制,即一个回合的被攻击次数总是固定的。
前置配置:Redis小例子
只要在此基础上加一个接口,实现我们的思路:
package com.qcby.springbootdata.controller;
import com.qcby.springbootdata.param.GameParam;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.statement.select.KSQLWindow;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Random;
import java.util.concurrent.TimeUnit;
@RestController
@Slf4j
public class GameController {
@Resource
private RedisTemplate<String,Integer> redisTemplate;
/**
* 开启回合的接口
* @param gameParam
* @return
*/
@RequestMapping("/startRound")
@ResponseBody
public String startRound(GameParam gameParam) throws InterruptedException {
if(redisTemplate.opsForValue().get(gameParam.getRoundId())!=null){
log.info("***************************");
log.info("=========回合未结束=========");
}else{
redisTemplate.opsForValue().set(gameParam.getRoundId(),1,15, TimeUnit.SECONDS);
redisTemplate.opsForValue().set("coinCount",0,15, TimeUnit.SECONDS);
log.info("*************************");
log.info("=========回合开始=========");
}
while (redisTemplate.opsForValue().get(gameParam.getRoundId())!=null){
log.info("=========受到攻击=========");
Random random=new Random();
int i = random.nextInt(10);//0-9
if(i<3){
if(redisTemplate.opsForValue().get("coinCount").intValue()>=2){
log.info("=========硬币数量达到上限=========");
}else{
log.info("=========获得金币=========");
Integer o =redisTemplate.opsForValue().get("coinCount");
redisTemplate.opsForValue().set("coinCount",o.intValue()+1);
// redisTemplate.opsForValue().increment("coinCount");
}
}
Thread.sleep(1500);//攻击间隔时间
}
log.info("=========回合结束=========");
log.info("*************************");
return "";
}
}
发送请求:localhost:8080/startRound?roundId=1001
查看控制台日志: