[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ход шахматного "коня"
Страницы: 1, 2, 3
Jaguar556
Добрый день.
Решил интереса ради сделать свои шахматы на ПХП. Нашел, все варианты движения шахматных фигур, а как двигается конь одним алгоритмом ну или парой найти не получилось. Просто не хочется делать 8 проверок из за него.

И если не сложно, кто то может подсказать что мне искать, или почитать по поводу вычисления движения объекта в 2д. Хочу поизвращаться над ПХП и попробовать создать игру на 2д.
TranceIT
А что тут собственно вычислять? Есть сетка координат (х,у) 10 на 10.
Конь двигается с условиями:
1) 1 клетка в одной плоскости, 2 в другой.
2) 2 клетки в одной плоскости, 1 в другой.

Алгебра 9-го класса.

_____________
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
Jaguar556
Ну да, в таком случае придется делать 8 проверок(по 2 точки на каждую из 4х сторон) поэтому я и хотел узнать, может кто то знает более короткий вариант? Или более короткую запись такого условия? когда нужно просчитать как положительные так и отрицательные координаты(относительно положения фигуры).

"Алгебра 9-го класса." - blink.gif это ты про что? Про движения объекта в 2д?
TranceIT
Сейчас схему набросаю.

_____________
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
kaww
а почему бы и не перечислить варианты? Вот Конь:


class Chess
{

public function isEmptyLocation($x, $y)
{
return true;
}
}


class Horse
{
public $currentX, $currentY;
/**
*
@var Chess
*/

public $game;

public function __construct($x, $y, Chess $game)
{
$this->currentX = $x;
$this->currentY = $y;
$this->game = $game;
}

private function getSteps()
{
return array(
array(-1, -2),
array(1, -2),
array(2, -1),
array(2, 1),
array(1, 2),
array(-1, 2),
array(-2, 1),
array(-2, -1)
);

}

public function isAllow($x, $y = null)
{
if (is_array($x)) {

$y = $x[1];
$x = $x[0];
}
return $this->game->isEmptyLocation($this->currentX + $x, $this->currentY + $y);
}

public function getAllowedSteps()
{
$steps = array();
foreach ($this->getSteps() as $step) {

if ($this->isAllow($step)) {

$steps[] = $step;
}
}

return $steps;
}

public function move($x, $y = null)
{
if (is_array($x)) {

$y = $x[1];
$x = $x[0];
}
if (!$this->isAllow($x, $y)) {

return false;
}
$this->currentX += $x;
$this->currentY += $y;
return true;
}

/**
* Искусственный интеллект ))))
*/

public function randomMove()
{
$steps = $this->getAllowedSteps();
if ($steps) {

$i = rand(0, count($steps) - 1);
return $this->move($steps[$i]);

}
return false;
}
}


Использование, осторожно, искусственный интеллект
$horse = new Horse(2,0,$game);
$horse->randomMove();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.