From 3a7849163dea439f56d432860d1d2728c61645c5 Mon Sep 17 00:00:00 2001 From: dyh <2825183872@qq.com> Date: Sun, 28 Aug 2022 01:35:06 +0800 Subject: [PATCH] =?UTF-8?q?version-2.5[=E5=AF=B9=E6=88=98=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=88=97=E8=A1=A8(+=E5=9B=9E=E6=94=BE)+=E6=8E=92?= =?UTF-8?q?=E5=90=8D=E5=88=97=E8=A1=A8+=E5=AE=9E=E7=8E=B0=E5=88=86?= =?UTF-8?q?=E9=A1=B5=E5=8A=9F=E8=83=BD]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/kob/backend/config/MybatisConfig.java | 17 ++ .../kob/backend/consumer/WebSocketServer.java | 2 +- .../com/kob/backend/consumer/utils/Game.java | 21 +- .../ranklist/RankListController.java | 22 +++ .../record/GetRecordListController.java | 22 +++ .../impl/ranklist/RankListServiceImpl.java | 35 ++++ .../impl/record/GetRecordListServiceImpl.java | 56 ++++++ .../service/impl/user/bot/AddServiceImpl.java | 8 +- .../service/ranklist/RankListService.java | 7 + .../service/record/GetRecordListService.java | 7 + .../service/impl/BotRunningServiceImpl.java | 2 +- .../service/impl/utils/MatchingPool.java | 2 +- web/src/assets/scripts/GameMap.js | 65 +++++-- web/src/components/MatchGround.vue | 3 +- web/src/components/NavBar.vue | 9 +- web/src/router/index.js | 9 + web/src/store/index.js | 2 + web/src/store/record.js | 28 +++ web/src/views/pk/PkIndexView.vue | 1 + web/src/views/ranklist/RanklistIndexView.vue | 122 +++++++++++- web/src/views/record/RecordContentView.vue | 22 +++ web/src/views/record/RecordIndexView.vue | 182 +++++++++++++++++- 22 files changed, 608 insertions(+), 36 deletions(-) create mode 100644 backendcloud/backend/src/main/java/com/kob/backend/config/MybatisConfig.java create mode 100644 backendcloud/backend/src/main/java/com/kob/backend/controller/ranklist/RankListController.java create mode 100644 backendcloud/backend/src/main/java/com/kob/backend/controller/record/GetRecordListController.java create mode 100644 backendcloud/backend/src/main/java/com/kob/backend/service/impl/ranklist/RankListServiceImpl.java create mode 100644 backendcloud/backend/src/main/java/com/kob/backend/service/impl/record/GetRecordListServiceImpl.java create mode 100644 backendcloud/backend/src/main/java/com/kob/backend/service/ranklist/RankListService.java create mode 100644 backendcloud/backend/src/main/java/com/kob/backend/service/record/GetRecordListService.java create mode 100644 web/src/store/record.js create mode 100644 web/src/views/record/RecordContentView.vue 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 @@