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

1

项目由来

在三月份的时候就开始编写这个项目,原本只是觉得自己对 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文档但缺乏项目经验的同学
  • 想写一个游戏但又无从下手的同学

特别鸣谢

  • 架构师 龙哥

分享图

你可能感兴趣的

载入中...