内容简介:游戏逻辑开发进度:■■■■■■■■□□□□本章结束开发进度:■■■■■■■■■■■■在我们的
游戏逻辑开发进度:■■■■■■■■□□□□
本章结束开发进度:■■■■■■■■■■■■
上一章的答案:
在我们的 $mapData
数组中, 0
就是墙, 1
就是路, canMoveToDirection()
方法主要就是获取方向,计算得出目标坐标,检测一下目标坐标能不能走,所以当数组中是 0
的时候就返回 false
,否则返回 true
。
Game
类:
private function canMoveToDirection($player, $direction) { $x = $player->getX(); $y = $player->getY(); $moveCoor = $this->getMoveCoor($x, $y, $direction); $mapData = $this->gameMap->getMapData(); if (!$mapData[$moveCoor[0]][$moveCoor[1]]) { return false; } return true; } private function getMoveCoor($x, $y, $direction) { switch ($direction) { case Player::UP: return [--$x, $y]; case Player::DOWN: return [++$x, $y]; case Player::LEFT: return [$x, --$y]; case Player::RIGHT: return [$x, ++$y]; } return [$x, $y]; }
增加 canMoveToDirection()
方法后再次运行 test.php
文件输出地图数据:
墙,墙,墙,墙,墙,墙,墙,墙,墙,墙,墙,墙, 墙, 墙, 墙, 墙, 墙,墙, 墙,墙,墙,墙, 墙, 墙, 墙,墙, 墙,追, 墙, 墙, 墙, 墙,墙,墙,墙, 墙, 墙, 躲,墙, 墙, 墙,墙, 墙, 墙, 墙, 墙, 墙, 墙,墙, 墙, 墙,墙, 墙, 墙, 墙, 墙, 墙, 墙,墙,墙,墙,墙,墙,墙,墙,墙,墙,墙,墙,
可以看到,即使经过了三次的 up
操作, 追捕者
都没有再跑到墙上面去。
游戏结束判断
我们的游戏逻辑开发已经接近尾声了,目前剩下的就是游戏结束时的判断,我们需要在 Game
类中增加 isGameOver()
方法,用来判断游戏是否结束。
-
Game
类中的$players
数组保存了玩家的数据。 - 两个玩家坐标叠一块就结束啦~
Game
类:
public function isGameOver() { $result = false; $x = -1; $y = -1; $players = array_values($this->players); /* @var Player $player */ foreach ($players as $key => $player) { if ($key == 0) { $x = $player->getX(); $y = $player->getY(); } elseif ($x == $player->getX() && $y == $player->getY()) { $result = true; } } return $result; }
到这里位置,我们的游戏主体逻辑已经开发完毕了,但不能我说开发完就开发完的嘛,我们必须要实践一下,测试一下整体逻辑有没有问题。这时候又到 test.php
文件登场了,请童鞋们在 test.php
文件中,新增代码逻辑让两个电脑对战一次。
- 让双方玩家随机行走。
- 实时打印游戏地图数据。
- 当游戏结束时停止游戏。
提示:每次打印完毕使用 usleep()
方法停止一下,否则运算过快可能看不到游戏过程哦。
为了方便随机选择位置,我们需要在 Player
类中新增一个常量 DIRECTION
。
Player
类:
const DIRECTION = [self::UP, self::DOWN, self::LEFT, self::RIGHT];
test.php
:
for ($i = 0; $i <= 300; $i++) { $direct = mt_rand(0, 3); $game->playerMove($redId, Player::DIRECTION[$direct]); if ($game->isGameOver()) { $game->printGameMap(); echo "game_over" . PHP_EOL; return; } $direct = mt_rand(0, 3); $game->playerMove($blueId, Player::DIRECTION[$direct]); if ($game->isGameOver()) { $game->printGameMap(); echo "game_over" . PHP_EOL; return; } //打印移动后战局 echo PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL . PHP_EOL; $game->printGameMap(); usleep(200000); }
运行 test.php
文件就会出现以下输出啦:
写了这么久代码,终于有一点点游戏效果了呢。
我们的游戏逻辑开发就到这里了,后面的章节开始就会接入 Swoole
和 Vue
,开始编写网络对战部分。
当前目录结构:
HideAndSeek ├── app │ ├── Manager │ │ └── Game.php │ └── Model │ ├── Map.php │ └── Player.php ├── composer.json ├── test.php └── vendor ├── autoload.php └── composer
以上所述就是小编给大家介绍的《用Swoole来写个联机对战游戏呀!(四)游戏结束判断》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 用Swoole来写个联机对战游戏呀!(五)联机初始化
- 用Swoole来写个联机对战游戏呀!(三)完善游戏功能
- 用Swoole来写个联机对战游戏呀!(六)游戏匹配机制
- 用Swoole来写个联机对战游戏呀!(八)创建游戏房间
- 从动物森友会聊主机游戏联机原理
- 用Swoole来写个联机对战游戏呀!(二)单机游戏架构
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
游戏编程中的人工智能技术
布克兰德 / 吴祖增 / 清华大学出版社 / 2006-5 / 39.0
《游戏编程中的人工智能技术》是人工智能游戏编程的一本指南性读物,介绍在游戏开发中怎样应用遗传算法和人工神经网络来创建电脑游戏中所需要的人工智能。书中包含了许多实用例子,所有例子的完整源码和可执行程序都能在随书附带的光盘上找到。光盘中还有不少其他方面的游戏开发资料和一个赛车游戏演示软件。 《游戏编程中的人工智能技术》适合遗传算法和人工神经网络等人工智能技术的各行业人员,特别是要实际动手做应用开......一起来看看 《游戏编程中的人工智能技术》 这本书的介绍吧!