diff --git a/backendcloud/backend/src/main/java/com/kob/backend/config/MybatisConfig.java b/backendcloud/backend/src/main/java/com/kob/backend/config/MybatisConfig.java new file mode 100644 index 0000000..47c7ffa --- /dev/null +++ b/backendcloud/backend/src/main/java/com/kob/backend/config/MybatisConfig.java @@ -0,0 +1,17 @@ +package com.kob.backend.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MybatisConfig { + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } +} diff --git a/backendcloud/backend/src/main/java/com/kob/backend/consumer/WebSocketServer.java b/backendcloud/backend/src/main/java/com/kob/backend/consumer/WebSocketServer.java index 9b35f2b..f17ce60 100644 --- a/backendcloud/backend/src/main/java/com/kob/backend/consumer/WebSocketServer.java +++ b/backendcloud/backend/src/main/java/com/kob/backend/consumer/WebSocketServer.java @@ -35,7 +35,7 @@ public class WebSocketServer { //地图 public Game game ; //加入数据库 - private static UserMapper userMapper; + public static UserMapper userMapper; public static RecordMapper recordMapper; public static RestTemplate restTemplate; public static BotMapper botMapper; diff --git a/backendcloud/backend/src/main/java/com/kob/backend/consumer/utils/Game.java b/backendcloud/backend/src/main/java/com/kob/backend/consumer/utils/Game.java index d5544ac..15d43ce 100644 --- a/backendcloud/backend/src/main/java/com/kob/backend/consumer/utils/Game.java +++ b/backendcloud/backend/src/main/java/com/kob/backend/consumer/utils/Game.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.kob.backend.consumer.WebSocketServer; import com.kob.backend.pojo.Bot; import com.kob.backend.pojo.Record; +import com.kob.backend.pojo.User; import org.springframework.security.core.parameters.P; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; @@ -201,7 +202,7 @@ public class Game extends Thread { } - sendBotCode(playerA); + sendBotCode(playerA);//steps是一直动态增加的 sendBotCode(playerB); @@ -304,8 +305,26 @@ public class Game extends Thread { WebSocketServer.users.get(playerB.getId()).sendMessage(message); } + private void updateUserRating(Player player,Integer rating){ + User user = WebSocketServer.userMapper.selectById(player.getId());//查询用户 + user.setRating(rating); + WebSocketServer.userMapper.updateById(user); + } + private void saveToDatabase() { + Integer ratingA = WebSocketServer.userMapper.selectById(playerA.getId()).getRating();//获取rating + Integer ratingB = WebSocketServer.userMapper.selectById(playerB.getId()).getRating(); + if("A".equals(loser)){ + ratingA = ratingA - 2 ; + ratingB = ratingB + 5; + } else if("B".equals(loser)) { + ratingA = ratingA + 5 ; + ratingB = ratingB - 2; + } + updateUserRating(playerA,ratingA); + updateUserRating(playerB,ratingB); + Record record = new Record( null, playerA.getId(), diff --git a/backendcloud/backend/src/main/java/com/kob/backend/controller/ranklist/RankListController.java b/backendcloud/backend/src/main/java/com/kob/backend/controller/ranklist/RankListController.java new file mode 100644 index 0000000..2568bae --- /dev/null +++ b/backendcloud/backend/src/main/java/com/kob/backend/controller/ranklist/RankListController.java @@ -0,0 +1,22 @@ +package com.kob.backend.controller.ranklist; + +import com.alibaba.fastjson.JSONObject; +import com.kob.backend.service.ranklist.RankListService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +@RestController +public class RankListController { + @Autowired + private RankListService rankListService; + + @GetMapping("/ranklist/getlist") + public JSONObject getList(@RequestParam Map data){ + Integer page = Integer.parseInt(data.get("page")); + return rankListService.getList(page); + } +} diff --git a/backendcloud/backend/src/main/java/com/kob/backend/controller/record/GetRecordListController.java b/backendcloud/backend/src/main/java/com/kob/backend/controller/record/GetRecordListController.java new file mode 100644 index 0000000..9436691 --- /dev/null +++ b/backendcloud/backend/src/main/java/com/kob/backend/controller/record/GetRecordListController.java @@ -0,0 +1,22 @@ +package com.kob.backend.controller.record; + +import com.alibaba.fastjson.JSONObject; +import com.kob.backend.service.record.GetRecordListService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +@RestController +public class GetRecordListController { + @Autowired + private GetRecordListService getRecordListService; + + @GetMapping("/record/getlist/") + public JSONObject getList(@RequestParam Map data){ + Integer page = Integer.parseInt(data.get("page")); + return getRecordListService.getList(page); + } +} diff --git a/backendcloud/backend/src/main/java/com/kob/backend/service/impl/ranklist/RankListServiceImpl.java b/backendcloud/backend/src/main/java/com/kob/backend/service/impl/ranklist/RankListServiceImpl.java new file mode 100644 index 0000000..f781e46 --- /dev/null +++ b/backendcloud/backend/src/main/java/com/kob/backend/service/impl/ranklist/RankListServiceImpl.java @@ -0,0 +1,35 @@ +package com.kob.backend.service.impl.ranklist; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.kob.backend.mapper.UserMapper; +import com.kob.backend.pojo.User; +import com.kob.backend.service.ranklist.RankListService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class RankListServiceImpl implements RankListService { + @Autowired + private UserMapper userMapper; + + @Override + public JSONObject getList(Integer page) { + IPage userIPage = new Page<>(page,10); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("rating"); + List users = userMapper.selectPage(userIPage,queryWrapper).getRecords(); + JSONObject resp = new JSONObject(); + for(User user:users){ + user.setPassword(""); + } + resp.put("users",users); + resp.put("users_count",userMapper.selectCount(null)); + return resp; + } +} diff --git a/backendcloud/backend/src/main/java/com/kob/backend/service/impl/record/GetRecordListServiceImpl.java b/backendcloud/backend/src/main/java/com/kob/backend/service/impl/record/GetRecordListServiceImpl.java new file mode 100644 index 0000000..9c011ec --- /dev/null +++ b/backendcloud/backend/src/main/java/com/kob/backend/service/impl/record/GetRecordListServiceImpl.java @@ -0,0 +1,56 @@ +package com.kob.backend.service.impl.record; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.kob.backend.mapper.RecordMapper; +import com.kob.backend.mapper.UserMapper; +import com.kob.backend.pojo.Record; +import com.kob.backend.pojo.User; +import com.kob.backend.service.record.GetRecordListService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.security.SecurityProperties; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GetRecordListServiceImpl implements GetRecordListService { + @Autowired + private RecordMapper recordMapper ; + @Autowired + private UserMapper userMapper; + + @Override + public JSONObject getList(Integer page) { + IPage recordIPage = new Page<>(page,10);//API + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("id");//按照降序排列 + List records = recordMapper.selectPage(recordIPage,queryWrapper).getRecords();//一页 + JSONObject resp = new JSONObject(); + List items = new ArrayList<>(); + for(Record record:records){ + User userA = userMapper.selectById(record.getAId()); + User userB = userMapper.selectById(record.getBId()); + JSONObject item = new JSONObject(); + item.put("a_photo",userA.getPhoto()); + item.put("a_username",userA.getUsername()); + item.put("b_photo",userB.getPhoto()); + item.put("b_username",userB.getUsername()); + item.put("record",record); + String result = "平局" ; + if("A".equals(record.getLoser())){ + result = "B胜" ; + } else if ("B".equals(record.getLoser())){ + result = "A胜" ; + } + item.put("result",result); + items.add(item); + } + resp.put("records",items); + resp.put("records_count",recordMapper.selectCount(null)); + return resp; + } +} diff --git a/backendcloud/backend/src/main/java/com/kob/backend/service/impl/user/bot/AddServiceImpl.java b/backendcloud/backend/src/main/java/com/kob/backend/service/impl/user/bot/AddServiceImpl.java index bc637ef..fcafd57 100644 --- a/backendcloud/backend/src/main/java/com/kob/backend/service/impl/user/bot/AddServiceImpl.java +++ b/backendcloud/backend/src/main/java/com/kob/backend/service/impl/user/bot/AddServiceImpl.java @@ -1,5 +1,6 @@ package com.kob.backend.service.impl.user.bot; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.kob.backend.mapper.BotMapper; import com.kob.backend.pojo.Bot; import com.kob.backend.pojo.User; @@ -60,7 +61,12 @@ public class AddServiceImpl implements AddService { map.put("error_message","代码长度不能超过10000"); return map; } - + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("user_id",user.getId()); + if(botMapper.selectCount(queryWrapper)>=10){ + map.put("error_message","每个用户最多创建10个Bot!"); + return map; + } Date now = new Date(); Bot bot = new Bot(null,user.getId(),title,description,content,now,now); botMapper.insert(bot); diff --git a/backendcloud/backend/src/main/java/com/kob/backend/service/ranklist/RankListService.java b/backendcloud/backend/src/main/java/com/kob/backend/service/ranklist/RankListService.java new file mode 100644 index 0000000..8ab20f7 --- /dev/null +++ b/backendcloud/backend/src/main/java/com/kob/backend/service/ranklist/RankListService.java @@ -0,0 +1,7 @@ +package com.kob.backend.service.ranklist; + +import com.alibaba.fastjson.JSONObject; + +public interface RankListService { + public JSONObject getList(Integer page); +} diff --git a/backendcloud/backend/src/main/java/com/kob/backend/service/record/GetRecordListService.java b/backendcloud/backend/src/main/java/com/kob/backend/service/record/GetRecordListService.java new file mode 100644 index 0000000..f7af696 --- /dev/null +++ b/backendcloud/backend/src/main/java/com/kob/backend/service/record/GetRecordListService.java @@ -0,0 +1,7 @@ +package com.kob.backend.service.record; + +import com.alibaba.fastjson.JSONObject; + +public interface GetRecordListService { + public JSONObject getList(Integer page);//传入第几页,返回JSONObject +} diff --git a/backendcloud/botrunningsystem/src/main/java/com/kob/botrunningsystem/service/impl/BotRunningServiceImpl.java b/backendcloud/botrunningsystem/src/main/java/com/kob/botrunningsystem/service/impl/BotRunningServiceImpl.java index bfe3aef..163f775 100644 --- a/backendcloud/botrunningsystem/src/main/java/com/kob/botrunningsystem/service/impl/BotRunningServiceImpl.java +++ b/backendcloud/botrunningsystem/src/main/java/com/kob/botrunningsystem/service/impl/BotRunningServiceImpl.java @@ -11,7 +11,7 @@ public class BotRunningServiceImpl implements BotRunningService { @Override public String addBot(Integer userId, String botCode, String input) { -// System.out.println("add bot: " + userId + " " + botCode + " " + input); + System.out.println("add bot: " + userId + " " + botCode + " " + input); botPool.addBot(userId,botCode,input); return "add bot success"; } diff --git a/backendcloud/matchingsystem/src/main/java/com/kob/matchingsystem/service/impl/utils/MatchingPool.java b/backendcloud/matchingsystem/src/main/java/com/kob/matchingsystem/service/impl/utils/MatchingPool.java index 60793d0..fb7cb6c 100644 --- a/backendcloud/matchingsystem/src/main/java/com/kob/matchingsystem/service/impl/utils/MatchingPool.java +++ b/backendcloud/matchingsystem/src/main/java/com/kob/matchingsystem/service/impl/utils/MatchingPool.java @@ -55,7 +55,7 @@ public class MatchingPool extends Thread { } private void matchPlayers(){//匹配所有玩家 - System.out.println("match players: "+players.toString()); +// System.out.println("match players: "+players.toString()); boolean[] used = new boolean[players.size()]; for(int i = 0 ; i < players.size() ; i++){ if(used[i])continue; diff --git a/web/src/assets/scripts/GameMap.js b/web/src/assets/scripts/GameMap.js index a5c9052..3aadda5 100644 --- a/web/src/assets/scripts/GameMap.js +++ b/web/src/assets/scripts/GameMap.js @@ -94,25 +94,56 @@ export class GameMap extends AcGameObject return true; } + + //获取键盘输入 add_listening_events(){ - this.ctx.canvas.focus();//cts[DOM] canvas[画板] - - //为画板绑定keydown事件 - this.ctx.canvas.addEventListener("keydown",e => { - let d = -1; - if(e.key === "w") d = 0; - else if(e.key === "d") d = 1; - else if(e.key === 's') d = 2; - else if(e.key === 'a') d = 3; - - if(d >= 0){ - this.store.state.pk.socket.send(JSON.stringify({ - event:"move", - direction:d, - })) - } - }) + + if(this.store.state.record.is_record){//record + let k = 0 ;//第k步 + const [snake0, snake1] = this.snakes ; + const a_steps = this.store.state.record.a_steps ; + const b_steps = this.store.state.record.b_steps ; + const loser = this.store.state.record.record_loser ; + + const interval_id = setInterval(()=>{ + if(k >= a_steps.length - 1){ + if(loser === "all" || loser === "A"){ + snake0.status = "die"; + } + if(loser === "all" || loser === "B"){ + snake1.status = "die"; + } + clearInterval(interval_id); + } else { + snake0.set_direction(parseInt(a_steps[k])); + snake1.set_direction(parseInt(b_steps[k])); + } + k ++ ; + },300) + + } + else//PK + { + this.ctx.canvas.focus();//cts[DOM] canvas[画板] + //为画板绑定keydown事件 + this.ctx.canvas.addEventListener("keydown",e => { + let d = -1; + if(e.key === "w") d = 0; + else if(e.key === "d") d = 1; + else if(e.key === 's') d = 2; + else if(e.key === 'a') d = 3; + + if(d >= 0){ + this.store.state.pk.socket.send(JSON.stringify({ + event:"move", + direction:d, + })) + } + }) + } + + } // else if(e.key === 'ArrowUp' ) snake1.set_direction(0); // else if(e.key === 'ArrowRight') snake1.set_direction(1); diff --git a/web/src/components/MatchGround.vue b/web/src/components/MatchGround.vue index 1e16db6..3c7f036 100644 --- a/web/src/components/MatchGround.vue +++ b/web/src/components/MatchGround.vue @@ -33,7 +33,6 @@
- @@ -53,7 +52,7 @@ export default { const click_match_btn = ( )=>{ if(match_btn_info.value === "开始匹配"){ match_btn_info.value = "取消"; - console.log(select_bot.value); + // console.log(select_bot.value); //向后端发送信息 store.state.pk.socket.send(JSON.stringify({ event:"start-matching", diff --git a/web/src/components/NavBar.vue b/web/src/components/NavBar.vue index 79fa5c4..7ad4342 100644 --- a/web/src/components/NavBar.vue +++ b/web/src/components/NavBar.vue @@ -1,14 +1,17 @@