最近在找实习嘛,所以就把y总Spring Boot课的项目复习了一下,想把贪吃蛇的项目写简历里,这里就分享一下我的写法吧,给acwing的小伙伴们一点参考(写得不好,轻点喷T_T)
网页游戏 - 回合制双人对战游戏(以贪吃蛇为载体)
技术栈:Spring Boot, Vue 3, Spring Cloud, WebSocket, MySQL, Redis, MyBatis-Plus, Java多线程, 锁机制
- 项目概述:一款基于Spring Boot和Vue 3的回合制双人对战游戏,玩家可以通过键盘(WASD)或Bot代码控制蛇的移
动,在规定时间内进行对战,游戏支持匹配系统与实时对战。 - 项目功能:登录注册,匹配系统,实时对战,人机对战,对局回放,对局记录,排行榜,添加和删除Bot代码
- 项目细节
- 登录验证采用JWT身份验证,用户登录成功会返回一个token,token会存入浏览器的Local storage中,令牌有效期
内无需重新登录;同时采用OAuth 2.0协议实现了acwing的第三方授权登录,请求获取的access_token存入redis中 - 项目使用spring cloud框架,实现了三个核心微服务:主服务,匹配服务和Bot代码执行服务
- 匹配功能由匹配服务实现,参与匹配的玩家会被加入到匹配服务中的 MatchingPool 统一维护,匹配成功后会为每
个对局开一个线程来维护当前对局,这里采用继承Thread类的方式实现多线程,对战时前后端采用WebSocket通信
以确保对局的实时性 - 人机对战是通过玩家添加Bot代码,后台编译并执行Bot代码返回结果控制蛇的移动来实现,Bot代码的执行使用了
消息队列,消息队列使用ReentrantLock锁,Java多线程和线程的睡眠与唤醒,while循环,队列queue手写实现;
Bot代码的动态编译和执行使用的是joor库 - 对局记录,玩家信息,Bot代码等都持久化到MySQL数据库中,对数据库的CRUD操作采用MyBatis-Plus框架实现
- 游戏的前端逻辑全部使用 js 实现,并用 js + requestAnimationFrame函数 + canvas标签实现了一个简易的游戏引擎
来实现游戏的动画渲染
- 登录验证采用JWT身份验证,用户登录成功会返回一个token,token会存入浏览器的Local storage中,令牌有效期
- 项目部署:服务器选择了阿里云 Linux 服务器,项目通过Docker容器化部署,使用Nginx作为反向代理服务器,托管于
https://app6882.acapp.acwing.com.cn/
最后,也浅浅记录一下个人对这个项目的一点点看法吧,我觉得y总这个贪吃蛇项目很适合新手拿来练手(打基础,练写代码的基本功),项目的业务逻辑挺复杂的,既可以练CRUD,还有复杂的前后端交互逻辑(匹配,对局中的通讯,前端动画渲染的逻辑对新手来说也挺复杂的),用到的基本技术栈也挺全的,但是,写到简历上的话,就是中间件太少了,特别是主流的中间件,很多功能都是手搓(OwO)在写到简历上时就感觉能写的东西太少了,亮点有点少,不是很好跟面试官吹(哈哈哈),总的来说,这个项目用来“修炼内功”还是很不错的,y总永远的神!