《球球大作战》源码解析——(1)运行起来

作者:罗培羽 2019-01-23




鉴于http://agar.io类型游戏的火爆场面,一些公司纷纷效仿,一时间出现各种《XX大作战》类型的游戏。出于学习的目的,亦是做些技术和方案储备,接下来会有大概10篇文章,分析下面这款使用nodejs编写的开源“球球大作战”。由于该游戏采用服务端运算、客户端显示的方式,服务端的逻辑处理是该源码的重点,故而系列文章主要针对服务端。通过这套源码,可以学习到“一种基于nodejs的简单服务器实现方法”“一种简单的服务端物理逻辑的实现方式”“一种基于redis pub/sub的跨服设计思想”“nodejs语法、框架及其使用方式”等内容。

系列文章将会分析huytd/agar.io-clone的源码,这是一套简约而不简单的Agar.IO实现。该项目使用NodeJS开发,使用socket.IO作为网络通信,使用HTML5实现客户端。

下图为游戏运行画面,游戏规则如下。

1、玩家可以移动鼠标控制小球

2、当小球吞食场景中的食物或其他玩家控制的小球时,玩家控制的小球会变大

3、小球越大,移动速度越慢

4、小球的质量代表它的大小,质量为它吞食的食物或其他玩家的质量之和

5、游戏目标是尽可能的吞食其他玩家,使小球变大

6、玩家刚出生时会有无敌属性,直到它吞食食物

7、每当有玩家进入游戏,场景中会生成3个食物

8、每当吞食食物时,场景中亦会生成一个新的食物


第一步便是要让游戏运行起来,只有运行起来了,才谈得上后续的源码分析。为了“从零开始”,笔者购买Ubuntu系统的腾讯云,新的系统几乎没有安装额外软件,一步一步安装所需的软件,然后将游戏运行起来吧。笔者选用了最低一档配置的服务器,花费近50大洋(此处是不是应该发个求赞助的链接?)配置如下图所示。


1、安装nodeJs

游戏使用nodejs开发,那就必须要安装nodejs,可以有两种方法安装。

方法1 :输入sudo apt install nodejs,这是最简单的安装方法了。不过使用该方式安装的程序名叫为nodejs,而不是普遍使用的node。可以使用sudo ln -s /usr/bin/nodejs /usr/bin/node建立名为node的连接,以解决这个问题。

方法2:下载源码、编译、安装。具体可以参考这篇文章在Ubuntu下安装Node.JS的不同方式-技术 ◆ 学习|Linux.中国-开源社区 (文章里使用的node-v6.9.5 要改为最新版的)

完成后,可以使用node -v查看nodejs版本号,以验证是否成功安装。

2、上传代码文件

从github上下载源码,然后上传到linux服务器上。如下图所示,笔者将源码上传到/home/ubuntu/agar.io-clone-master目录下


3、安装npm

npm(node package manager)是nodejs的包管理和分发工具,一般安装nodejs后都需要安装该软件,可以使用以下命令安装:sudo apt install npm

4、安装gulp

项目使用到了gulp,需要安装它。gulp是一个前端构建工具,开发者可以使用它在项目开发过程中自动执行常见任务,比如复制文件,比如替换文件中某些字符。进入源码目录,执行sudo npm install -g gulp 即可安装。

5、安装项目所需的包文件

进入源码目录,执行npm install即可安装项目所需包文件。npm install会检查当前目录下的package.json文件,文件包含了项目所需的模块,npm根据该文件的描述下载这些文件并把模块放到./node_modules目录下。关于package.json的格式可以参考这篇文章package.json for NPM 文件详解

6、运行服务器

在源码目录下执行gulp run,可以看到服务器启动的提示信息。

7、运行客户端

运行浏览器,输入地址即可,笔者的腾讯云ip为139.199.179.39,由于默认配置了3000端口,所以要输入http://139.199.179.39:3000/ ,即可看到如下的游戏界面。


在笔者的试验中,该页面报错,点击按钮没有反应。原因是src/client中的index.html最后面有这么一句,<script src="//code.jquery.com/jquery-2.2.0.min.js"></script>,该语句用于加载jquery的,而http://code.jquery.com/jquery-2.2.0.min.js无法访问(或国内网络访问速度慢),导致报错。只要换个文件地址即可,例如改成下面这样:

<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script >

运行游戏,服务端也会打印出相应的信息,如下图所示。


把游戏运行起来后,下一步就要分析下游戏的流程了。

还是放个广告吧,笔者出版的一本书《Unity3D网络游戏实战》充分的讲解怎样开发一款网络游戏,特别对网络框架设计、网络协议、数据处理等方面都有详细的描述,相信会是一本好书的。


系列文章
《球球大作战》源码解析——(1)运行起来
《球球大作战》源码解析:服务器与客户端架构
《球球大作战》源码解析:移动算法
《球球大作战》源码解析(6):碰撞处理

《球球大作战》源码解析(7):游戏循环
《球球大作战》源码解析(8):消息广播

专栏地址:https://zhuanlan.zhihu.com/p/26193373

最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多