内容简介:游戏逻辑开发进度:□□□□□□□□□□□□本章结束开发进度:■■■■□□□□□□□□教程需要
游戏逻辑开发进度:□□□□□□□□□□□□
本章结束开发进度:■■■■□□□□□□□□
开发环境
教程需要 PHP-7.x
版本支持,由于不是面向基础小白, PHP
环境需要童鞋们自行安装配置,以下是一些有可能有帮助的资料:
- Windows: https://www.apachefriends.org...
- Linux: https://lnmp.org/install.html
- Mac:不存在的。。赵童鞋没玩过
引入Composer
在合适的位置新建一个文件夹 HideAndSeek
作为我们的项目根目录。
为了后续开发的方便,我们需要为我们的项目引入 composer
的自动加载机制,并在项目根目录运行以下命令:
composer init
- 小提示:没有安装
composer
的童鞋需要自行安装喔: https://pkg.phpcomposer.com/#... - 启用国内镜像地址,下载速度更快。
- 国内镜像一:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
- 国内镜像二:
composer config -g repo.packagist composer https://packagist.laravel-china.org
经过几次回车之后, composer
就会为我们生成一个 composer.json
文件,需要在这个文件中增加以下代码:
"autoload": { "psr-4": { "App\\": "app" } },
再运行一次 composer
命令:
composer install
composer
就会为我们创建 vendor
文件夹,里面会有一个 autoload.php
文件,这个文件就是用来实现类自动加载机制。
建立项目结构
下一步就是编写游戏的逻辑,实现一个单机版的捉迷藏。
在上面创建的文件夹 HideAndSeek
中新建一个 test.php
文件
HideAndSeek └─test.php
为什么要新建这个 test.php
呢?因为我们现在对整个项目的架构毫无头绪,所以需要将这个游戏逻辑拆分成几个步骤,并且将逻辑预先写在 test.php
文件中。
赵童鞋设想的游戏逻辑是这样的:
- 每个玩家要有一个ID,用来区别玩家。
- 要有一个游戏控制器,用来创建玩家、执行移动逻辑、判断游戏是否结束。
- 使用游戏控制器创建玩家,游戏开始。
- 使用游戏控制器控制某个玩家进行移动。
test.php
文件:
$redId = "red_player"; $blueId = "blue_player"; //创建游戏控制器 $game = new Game(); //添加玩家 $game->createPlayer($redId, 6, 1); //添加玩家 $game->createPlayer($blueId, 6, 10); //移动坐标 $game->playerMove($redId, 'up');
现在就很明显了,我们首要任务就是先实现这样一个游戏控制器。
在 HideAndSeek
文件夹中创建 app
文件夹, app
文件夹用来存放我们项目的各种类文件。并在 app
文件夹中创建 Manager
文件夹用来存放所有管理者类的类文件,在 Manager
文件夹中创建 Game
游戏控制器类。
为了 composer
能够自动加载类文件,需要在 Game
类编写命名空间代码: namespace App\Manager
,细心的童鞋已经发现了,我们上面在 composer.json
文件中新增代码时,就有提到 App
这个词,不了解自动加载机制的童鞋可以自行搜索一下 composer psr-4
。
<?php namespace App\Manager; class Game { }
我们现在要思考一下游戏还需要哪些实体类,我们捉迷藏游戏有玩家,有地图,所以游戏还需要两个实体类:一个是 玩家类
,另一个是 地图类
,没错,这就是面向对象编程,而不是面向运气编程。
在 app
文件夹下新建 Model
文件夹,用来存放各种游戏实体类,并在其中新建 Player
类和 Map
类:
<?php namespace App\Model; class Player { }
<?php namespace App\Model; class Map { }
完善各类代码
现在我们需要思考一下,这三个类各自的属性和方法需要有哪些。
Map类
我们先从最简单的 Map
类开始:
Map Map Map
由于生成一个地图的算法有点复杂,我们现在的重点只在于编写游戏逻辑,所以地图数据可以先写死。
<?php namespace App\Model; class Map { private $width; private $height; private $map = [ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0], [0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0], [0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0], [0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ]; public function __construct($width, $height) { $this->width = $width; $this->height = $height; } public function getMapData() { return $this->map; } }
Player类
第二个轮到我们的 Player
类:
-
Player
对象应该有一个自己的唯一ID。 -
Player
对象需要有自己的坐标,用来标识他在地图的位置。 -
Player
对象需要有自己的类型,分为寻找者
和躲藏者
。 -
Player
类中需要有四个方向常量用来控制当前坐标,分别是上
下
左
右。
<?php namespace App\Model; class Player { const UP = 'up'; const DOWN = 'down'; const LEFT = 'left'; const RIGHT = 'right'; const PLAYER_TYPE_SEEK = 1; const PLAYER_TYPE_HIDE = 2; private $id; private $type = self::PLAYER_TYPE_SEEK; private $x; private $y; public function __construct($id, $x, $y) { $this->id = $id; $this->x = $x; $this->y = $y; } public function setType($type) { $this->type = $type; } public function getId() { return $this->id; } }
Game类
最后轮到我们的游戏控制器 Game
类啦~
- 新建一个
Game
对象时需要生成一个地图并且保存地图数据。 -
Game
中需要一个数组保存两个玩家数据。 -
Game
中需要实现createPlayer()
方法用来添加玩家。 -
Game中
需要实现playerMove()
方法操作玩家移动。
<?php namespace App\Manager; use App\Model\Map; class Game { private $gameMap = []; private $players = []; public function __construct() { $this->gameMap = new Map(12, 12); } public function createPlayer($playerId, $x, $y) { } public function playerMove($playerId, $direction) { } }
童鞋们先尝试实现一下 createPlayer()
方法和 playerMove()
方法应该怎么实现,我们下一章再来揭秘。
当前目录结构:
HideAndSeek ├── app │ ├── Manager │ │ └── Game.php │ └── Model │ ├── Map.php │ └── Player.php ├── composer.json ├── test.php └── vendor ├── autoload.php └── composer
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 用Swoole来写个联机对战游戏呀!(五)联机初始化
- 用Swoole来写个联机对战游戏呀!(三)完善游戏功能
- 用Swoole来写个联机对战游戏呀!(四)游戏结束判断
- 用Swoole来写个联机对战游戏呀!(六)游戏匹配机制
- 用Swoole来写个联机对战游戏呀!(八)创建游戏房间
- 从动物森友会聊主机游戏联机原理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java数据结构和算法
拉佛 / 计晓云 / 中国电力出版社 / 2004-02-01 / 55.00元
《Java数据结构和算法》(第2版)以一种易懂的方式教授如何安排和操纵数据的问题,其中不乏一些难题:了解这些知识以期使计算机的应用获得最好的表现。不管使用何种语言或平台,掌握了数据结构和算法将改进程序的质量和性能。 《Java数据结构和算法》(第2版)提供了一套独创的可视讨论专题用以阐明主要的论题:它使用Java语言说明重要的概念,而避免了C/C++语言的复杂性,以便集中精力论述数据结构和算法。经......一起来看看 《Java数据结构和算法》 这本书的介绍吧!
URL 编码/解码
URL 编码/解码
HEX HSV 转换工具
HEX HSV 互换工具