基于-Swoole-的对战游戏实践开课啦

25次阅读

共计 1750 个字符,预计需要花费 5 分钟才能阅读完成。

项目由来

在三月份的时候就开始编写这个项目,原本只是觉得自己对 Swoole 不太熟练,当作练手来写着玩的。写着写着发现还挺好玩的,代码量也不多,捉迷藏游戏的趣味性不错。

如果只写完代码就扔在 Github,感觉就好像做大学实践作业一样,自己也没什么提高。那就干脆写一个简略的教程吧,把一些开发时的思路写下来,可能会对其他学习 Swoole 的同学有一定的帮助。

原本只是一些零散的篇章,想着三章之内应该就写完的。写出来以后觉得和网上的教程好像又差不多,一点新意都没有。我就想着要不把一些开发思路改成题目,让读者自己去思考和完成,这样学习效果可能会更好。

小册其实在六月份(熬了好多个周末通宵)已经写完了,但是因为掘金的一些原因,现在才正式上架,下面这张就是小册的封面图。

(不要问为什么是粉红色,我也是被安排的那个,可能是我比较帅吧)

小册介绍

为什么要学习 Swoole

根据资料显示,全世界有 80% 以上的 Web 网站都是使用 PHP 进行开发,在编程语言排行榜上虽然不是名列前茅,但在 Web 领域 PHP 可以说是数一数二,网上最流行的段子“PHP 是世界上最好的语言 ”看来并不是空穴来风。PHP 的环境搭建方便,内置函数齐全,数组结构特别适合 Web 开发。但 PHP 也不是万能的,他的 动态加载 单进程特性 决定了他不适合做密集运算或长连接的项目。

Swoole的出现解决了 PHP 的诸多问题,常驻内存 Server避免了 PHP 重复加载造成的性能损耗,协程和异步 也使得 I / O 密集型场景并发处理能力大幅提升,WebSocket 应用 也较为容易开发。

游戏效果

本小册主要是带领大家完成一个联机小游戏,为了降低项目复杂度,降低初学者的学习成本,并没有使用到 Swoole协程 以及其他高级特性,尽可能地用最基础的功能来实现游戏逻辑。

话不多说,我们先上一个游戏的最终效果图给大家看看:

没错,就是紧张刺激的捉迷藏小游戏。

使用技术

  • PHP 7.2
  • Swoole 4.3.0
  • Swoole WebSocket Server
  • Swoole Task Worker
  • Swoole Static Handler
  • Swoole Timer After
  • Vuejs
  • HTML WebSocket
  • Redis String
  • Redis List
  • 少量算法逻辑

基础功能开发

  • 捉迷藏游戏逻辑(逻辑)★★
  • 匹配机制(缓存)★
  • 联机对战(网络编程、缓存)★★★★
  • 游戏结束判定(逻辑)★

可扩展功能

  • 当前在线人数:使用 Redis Set 保存在线人员(缓存)★
  • 排行榜:使用 Redis SortSet(缓存)★
  • 观战模式:在游戏管理者 Game 中增加 Watcher 数组,订阅游戏消息(逻辑)★★
  • 邀请对战:往被邀请人发一条消息确认开战(网络编程)★★
  • 多人模式:参与时不限制人数(网络编程)★★★
  • 随机地图生成:暂时只想到了多点随机路线拼接(算法)★★★
  • 优化地图展示:手机适配(前端)★★★
  • 游戏时间限制:使用定时器制定每局游戏时间(逻辑)★★★

小册的内容

本小册将会分为四个部分。

  • 第一部分占用三章的幅度,主要讲解游戏逻辑的编写,我们会先制作出一个单机版的服务端逻辑,让电脑随机行走进行测试。
  • 第二部分占用六章的幅度,这里将会分为两个主要部分,分别是:接入 Swoole 作为网络层和使用 Vue 写一个简单的前端页面,让游戏能够满足两个玩家联机对抗。当然,并不是直接就把服务端全部代码写完,然后再跑去写前端这么粗暴,两个部分的代码都是按照项目的开发流程一点一点往里填。
  • 第三部分占用七章的幅度,将会带领大家实现多个游戏的扩展功能,优化游戏体验,让游戏更有乐趣。
  • 第四部分是附录,为部分没有接触过 SwooleVue的童鞋介绍两种技术的入门知识。

作者介绍

赵童鞋,西山居后端工程师,专职于游戏专题开发,觉得写游戏是一件很好玩的事情。创造快乐,传递快乐。

  • 公众号「写程序的赵童鞋」作者

你会学到什么?

  • 游戏逻辑的开发思路
  • Swoole WebSocket Server 的使用
  • Swoole Task 机制的使用
  • Swoole 定时器的使用
  • Vue 的入门知识
  • WebSocket 的前后端通信
  • Redis 的各种使用方式
  • 少量算法逻辑

适宜人群

  • 厌倦了每天编写枯燥的增删改查接口的同学
  • 有 PHP 开发经验,但还没有接触过 Swoole 的同学
  • 看过 Swoole 文档但缺乏项目经验的同学
  • 想写一个游戏但又无从下手的同学

特别鸣谢

  • 架构师 龙哥

正文完
 0