我们模拟游戏中的一个角色,这个角色被动技能就是受到攻击的时候,会有十分之三的概率爆出金币,而在一个回合之中,爆出的金币个数有限制,限制为两个,假设攻击是按照一定的频率进行的,而一个回合的时长有限制,即一个回合的被攻击次数总是固定的。
前置配置: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 {@Resourceprivate RedisTemplate<String,Integer> redisTemplate;/*** 开启回合的接口* @param gameParam* @return*/@RequestMapping("/startRound")@ResponseBodypublic 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-9if(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
查看控制台日志: