我有一张10、10号的地图我用一个名为Map
的对象来表示它我有一个Monster
在上面,在位置(5,5)这个怪物必须在每个$turn
自动改变位置,并且依赖于$nbMove
。$nbMove
是类的属性,您可以在Monster
的构造函数中选择它。Monster
是他半圈前移动的次数
下面是我想要的一个例子,当游戏开始时:
游戏在循环中$nbMove
所以如果for($turn = 0; $turn<10; $turn++)
是2怪物进入箱子(5,6),下一个$nbMove
,他进入(5,7),下一个$turn
他回到(5,6),下一个$turn
(5,5)下一个$turn
(5,6),下一个$turn
(5,7),下一个$turn
(5,6)等等……
所以如果$turn
是3。怪物进入箱子(5,6),下一个$nbMove
,他进入(5,7),下一个$turn
,他进入(5,8),下一个$turn
(5,7),下一个$turn
(5,6),下一个$turn
(5,5)等等。。。
他只应该眩晕。
这就像一盘棋,但它是由电脑做的,而且总是做同样的事情。
这是我的代码:
<?php
class Monster {
public $horizontal;
public $vertical;
public $nbMove;
function __construct($horizontal, $vertical, $nbMove) {
$this->horizontal = $horizontal;
$this->vertical = $vertical;
$this->nbMove = $nbMove;
}
}
?>
<?php
class Map {
public $width;
public $height;
function __construct($width, $height) {
$this->width = $width;
$this->height = $height;
}
}
?>
<?php
function moveMonster($turn, $monster, $map) {
// The move
if(// I need a condition there but what condition ??) {
$orc->vertical = $orc->vertical + 1;
} else {
$orc->vertical = $orc->vertical - 1;
}
}
$map = new Map(10,10);
$firstMonster = new Monster(5,5,2);
for($turn = 0; $turn<10; $turn++){
moveMonster($turn, $firstMonster, $map);
}
?>
我寻找如何移动我的怪物,但我没有找到任何解决办法所以我问你我的问题的解决办法。我知道如何移动它,但它应该取决于
$turn
和$turn
的数量。 最佳答案
Monster
不仅需要能够跟踪它当前的位置,还需要能够跟踪它在任一方向上可以走多远,以及它当前正在移动的方向如果你没有办法保持这种状态,那么一旦你第一次移动它,你就失去了原来的Y位置,无法知道你是否在它的$nbMove
移动范围内,或者你是否正在向它移动或离开它。
如果我们在Monster
中添加一些属性来定义这些属性,并在构造函数中设置它们,那么它很容易在定义的边界内移动,并在到达边界边缘时更改方向。
class Monster {
public $horizontal;
public $vertical;
public $nbMove;
private $minY;
private $maxY;
private $direction;
function __construct($horizontal, $vertical, $nbMove) {
$this->horizontal = $horizontal;
$this->vertical = $vertical;
$this->nbMove = $nbMove;
$this->minY = $vertical;
$this->maxY = $vertical + $nbMove;
$this->direction = 1;
}
function move() {
// if at the top of the movement range, set the direction to down
if ($this->vertical == $this->maxY) {
$this->direction = -1;
}
// if at the bottom of the movement range, set the direction to up
if ($this->vertical == $this->minY) {
$this->direction = 1;
}
// then move
$this->vertical += $this->direction;
}
}
我在这里展示了
move()
作为Monster
的一种方法,因为我认为它似乎更合适,因为移动是Monster
所做的事情如果这样做,您将在循环中调用$firstMonster->move()
而不是全局moveMonster()
函数。如果需要使用
moveMonster()
,则可以将这些其他属性设置为public,并在该函数中使用相同的逻辑。关于php - 自动在 map 上移动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54119891/