<?php
$allowedweapons = ['Scissors', 'Paper', 'Rock', 'Lizard', 'Spock'];
$rules = [
'scissorspaper' => 'cuts',
'paperrock' => 'covers',
'rocklizard' => 'crushes',
'lizardspock' => 'poisons',
'spockscissors' => 'smashes',
'scissorslizard' => 'decapitates',
'lizardpaper' => 'eats',
'paperspock' => 'disproves',
'spockrock' => 'vaporizes',
'rockscissors' => 'crushes'
];
class Game {
protected $rules;
public function __construct($rules)
{
$this->rules = $rules;
}
public function run($weaponP1, $weaponP2)
{
if ($weaponP1 === $weaponP2) {
echo "It is a tie";
return;
}
$result = $this->checkVerbs($weaponP1, $weaponP2);
$winner = 'Player 1';
if (!$result) {
$result = $this->checkVerbs($weaponP2, $weaponP1);
$winner = 'Player 2';
}
echo "The winner is: $winner\n";
echo "Because of: " . $result;
}
/**
* @param $weaponP1
* @param $weaponP2
* @return bool|string
*/
protected function checkVerbs($weaponP1, $weaponP2)
{
$key = strtolower($weaponP1 . $weaponP2);
if (!array_key_exists($key, $this->rules)) {
return false;
}
return $weaponP1 . ' ' . $this->rules[$key] . ' ' . $weaponP2;
}
}
(new Game($rules))->run('Scissors', 'Paper');
preferences:
42.11 ms | 402 KiB | 5 Q