这部分的代码实现均在 backend 端。
天梯积分更新随着对战的结束,要相应的更新用户的天梯积分
更新代码如下:
对局列表后端 API首先实现一个 API,从后端返回一个对局列表的 List。实现 API,需要依次编写 service, service.impl, controller。
由于对局列表可能很长,需要添加分页功能。
在config.MybatisConfig中添加分页配置:
123456789@Configurationpublic class MybatisConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interc ...
springboot
未读流程设计
接下来要实现的是,Bot 代码执行的微服务部分。
初始化相应的,首先要创建该服务的后端。
然后将matchingsystem模块的依赖直接复制过来
1234567891011121314151617181920212223242526272829303132<dependencies> <!--Spring Security--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> <version>2.7.1</version> </dependency> <dependency> <groupId>org.spring ...
springboot
未读流程分析
整个匹配的过程是异步过程,也就是在 Matching system 中执行匹配的过程,会执行一个未知的时间,当出现符合条件的匹配结果时,才会立即将结果返回给前端。这种流程很难用之前的 Http 来达到预期效果(http 为请求一次返回一次,且一般立即响应)。对于匹配系统,请求一次,返回的时间位置,而且可能多次返回。
用 websocket 协议,不仅客户端可以向服务器主动发送请求,服务器也可以主动向客户端发送请求,是一种对称的通信方式。
之前的地图生成方式,是在用户本地(浏览器中)随机生成,如果两名玩家都在本地实现地图,地图就会产生冲突。因此,需要将生成地图的整个过程,由服务器统一完成。此外,判断游戏是否失败的逻辑(蛇撞击),如果在用户本地(浏览器)中实现,就可能会导致用户作弊。所以,不仅是生成地图,而是整个游戏的过程(蛇的移动、判定),都要做服务器端统一完成,服务器端的相关参数、判定结果返回给前端,前端只用来渲染画面,不做任何判定逻辑。
websocket 原理将前端建立的每个 websocket 连接在后端维护起来
添加consumer.WebSocketServer ...
springboot
未读数据库在数据库中创建表bot表中包含的列:
id: int:非空、自动增加、唯一、主键
user_id: int:非空,用于表示bot的作者
注意:在 pojo 中需要定义成userId,也就是驼峰命名;在queryWrapper中的名称仍然为user_id
title: varchar(100)
description: varchar(300)
content:varchar(10000),对应的bot的代码
rating: int:默认值为 1500
createtime: datetime
pojo中定义日期格式的注解:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
modifytime: datetime
pojo中定义日期格式的注解:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
Pojobackend/pojo中.java 创建对应的Bot.java,将表中的内容映射成class
12345678910111213141516@Dat ...
springboot
未读MysQL配置环境变量将C:\Program Files\MySQL\MySQL Server 8.0\bin(如果安装到了其他目录,填写相应目录的地址即可)添加到环境变量PATH中,这样就可以在任意目录的终端中执行mysql命令了。
MySQL 服务(默认开机自动启动,如果想手动操作,可以参考如下命令)
关闭:net stop mysql80
启动:net start mysql80
MySQL 常用操作连接用户名为root,密码为123456的数据库服务:mysql -uroot -p123456
show databases;:列出所有数据库
create database kob;:创建数据库
drop database kob;:删除数据库
use kob;:使用数据库 kob
show tables;:列出当前数据库的所有表
create table user(id int, username varchar(100)):创建名称为 user 的表,表中包含 id 和 username 两个属性。
drop table user;:删除表
insert into us ...
springboot
未读导航栏安装插件
新建NavBar.vue组件,使用vueinit自动提示命令初始化一个 vue 页面。scoped 的意思是在当前组件中的样式是独立的。
12345678910111213<template> <div> </div></template><script>export default { }</script><style scoped> </style>
Bootstrap 使用https://v5.bootcss.com/
快速入门https://v5.bootcss.com/docs/getting-started/introduction/
寻找合适的导航栏
创建 NavBar通常把关于具体页面的组件,创建在src\views文件夹下,把涉及到的公共组件,放入src\components中
对于导航栏,创建src\components\NavBar.vue
将 Bootstrap 找到的代码粘贴到<template&g ...
springboot
未读项目功能
配置 git 环境
安装 Git Bash(使用 Mac 和 Linux 的可以跳过这一步):https://gitforwindows.org/
全部默认即可
输入cd回车进入家目录,执行命令ssh-keygen生成秘钥
我们使用 Gitee(Github、Acgit)的时候,通信的方式通过 ssh
由于 Gitee 不支持用户名密码,因此需要借助秘钥来操作上
然后进入.ssh文件夹,id_rsa和id_rsa.pub分别代表私钥和公钥文件,我们将公钥取出。
将 id_rsa.pub 的内容复制到 Gitee 上
使用 SSH 公钥可以让你在你的电脑和 Gitee 通讯的时候使用安全连接(Git 的 Remote 要使用 SSH 地址)
创建项目后端
注意,Thymeleaf 是通过前后端不分离的方式写页面,由于我们的最终的项目是前后端分离,因此只是借助这个依赖演示一下前后端不分离的场景。最终是不使用这个依赖的。
Spring 后端主要作用是负责实现一些函数,其中每一个 url 对应一个函数,负责给用户返回一些页面。
一般而言,我们建 ...
1. 获取 Json Web Token(JWT)
地址:https://app165.acapp.acwing.com.cn/api/token/
方法:POST
是否验证 jwt:否
输入参数:
username: 用户名
password: 密码
返回结果:
access: 访问令牌,有效期 5 分钟
refresh: 刷新令牌,有效期 14 天
2. 刷新 JWT 令牌
地址:https://app165.acapp.acwing.com.cn/api/token/refresh/
方法:POST
是否验证 jwt:否
输入参数:
refresh: 刷新令牌
返回结果:
access: 访问令牌,有效期 5 分钟
3. 获取用户列表
地址:https://app165.acapp.acwing.com.cn/myspace/userlist/
方法:GET
是否验证 jwt:否
输入参数:无
返回结果:返回 10 个用户的信息
4. 获取某个用户的信息
地址:https://app165.acapp.acwing.com.cn/myspace/getinf ...
script 部分export default对象的属性:
name:组件的名称
components:存储<template>中用到的所有组件
props:存储父组件传递给子组件的数据
watch():当某个数据发生变化时触发
computed:动态计算某个数据
setup(props, context):初始化变量、函数
ref定义变量,可以用.value属性重新赋值
reactive定义对象,不可重新赋值
props存储父组件传递过来的数据
context.emit():触发父组件绑定的函数
template 部分
<slot></slot>:存放父组件传过来的children。
v-on:click或@click属性:绑定事件
v-if、v-else、v-else-if属性:判断
v-for属性:循环,:key循环的每个元素需要有唯一的key
v-bind:或::绑定属性
style 部分
<style>标签添加`属性后,不同组件间的 css 不会相互影响。
第三方组件
view-router包:实现路由功能。 ...
Vue 官网
终端Linux和Mac上可以用自带的终端。
Windows上推荐用powershell或者cmd。Git Bash有些指令不兼容。
安装Nodejs安装地址
安装@vue/cli打开Git Bash,执行:
1npm i -g @vue/cli
如果执行后面的操作有 bug,可能是最新版有问题,可以尝试安装早期版本,比如:npm i -g @vue/cli@4
启动vue自带的图形化项目管理界面1vue ui
常见问题 1:Windows 上运行vue,提示无法加载文件,表示用户权限不足。
解决方案:用管理员身份打开终端,输入set-ExecutionPolicy RemoteSigned,然后输入y