Skip to content

Commit

Permalink
refactor: reorganize structure
Browse files Browse the repository at this point in the history
  • Loading branch information
kolotov committed Aug 27, 2023
1 parent bca9abc commit 97c4555
Show file tree
Hide file tree
Showing 7 changed files with 12 additions and 39 deletions.
2 changes: 1 addition & 1 deletion bin/brain-even
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env php
<?php

use function BrainGames\BrainGame\runBrainGame;
use function BrainGames\Engine\runBrainGame;

require_once __DIR__ . '/../src/bootstrap.php';

Expand Down
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
"BrainGames\\": "src/"
},
"files": [
"src/BrainGame.php",
"src/Engine.php",
"src/Cli.php",
"src/Modules/EvenGame/Module.php",
"src/Games/EvenGame/Module.php",
"src/Utils/ConfigUtils.php",
"src/Utils/ModuleUtils.php"
]
Expand Down
15 changes: 8 additions & 7 deletions src/BrainGame.php → src/Engine.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

namespace BrainGames\BrainGame;
namespace BrainGames\Engine;

use RuntimeException;

Expand All @@ -10,11 +10,12 @@
use function BrainGames\ModuleUtils\getRulesDescription;
use function BrainGames\ModuleUtils\getText;
use function BrainGames\ModuleUtils\getUserName;
use function BrainGames\ModuleUtils\getWinConditionHandler;
use function BrainGames\ModuleUtils\setUserName;
use function cli\line;
use function cli\prompt;

const ATTEMPT_NUMBER = 3;

function runBrainGame(string $moduleName): void
{
$module = loadGame($moduleName);
Expand All @@ -24,7 +25,7 @@ function runBrainGame(string $moduleName): void

function loadGame($moduleName): array
{
$moduleFile = __DIR__ . '/Modules/' . $moduleName . '/config.php';
$moduleFile = __DIR__ . '/Games/' . $moduleName . '/config.php';
if (!file_exists($moduleFile)) {
throw new RuntimeException("Module $moduleFile not found");
}
Expand All @@ -50,10 +51,10 @@ function greetUser(array $module): array
return $module;
}

function runGame(array $module, int $questionCounter = 0, int $correctAnswerCounter = 0): void
function runGame(array $module, int $correctAnswerCounter = 0): void
{
$userName = getUserName($module);
$questionCounter++;

[$question, $correctAnswer] = getQuestionAnswerPairHandler($module);
line(getText($module, 'prompts.question', ['[question]' => $question]));

Expand All @@ -76,11 +77,11 @@ function runGame(array $module, int $questionCounter = 0, int $correctAnswerCoun
line(getText($module, 'dialogs.correct_answer', ['[user_name]' => $userName]));

/** User Won! End game */
$isWin = getWinConditionHandler($module, $correctAnswerCounter, $questionCounter);
$isWin = ATTEMPT_NUMBER <= $correctAnswerCounter;
if ($isWin) {
line(getText($module, 'dialogs.congratulations', ['[user_name]' => $userName]));
return;
}

runGame($module, $questionCounter, $correctAnswerCounter);
runGame($module, $correctAnswerCounter);
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,4 @@ function questionHandler(): array
$question = random_int(1, 100);
$isEven = $question % 2 === 0;
return [$question, $isEven ? 'yes' : 'no'];
}

function winConditionHandler(int $correctAnswers, int $totalQuestions): bool
{
return
NUMBER_CORRECT_ANSWERS_FOR_WIN === $correctAnswers and
NUMBER_CORRECT_ANSWERS_FOR_WIN === $totalQuestions;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,11 @@
namespace BrainGames\Modules\EvenGame\config;

use function BrainGames\Modules\EvenGame\Module\questionHandler;
use function BrainGames\Modules\EvenGame\Module\winConditionHandler;
use function BrainGames\ModuleUtils\setQuestionAnswerPairHandler;
use function BrainGames\ModuleUtils\setRulesDescription;
use function BrainGames\ModuleUtils\setWinConditionHandler;

return static function ($module) {
$module = setRulesDescription($module, 'Answer "yes" if the number is even, otherwise answer "no".');
$module = setQuestionAnswerPairHandler($module, static fn() => questionHandler());
$module = setWinConditionHandler(
$module,
static fn($correctAnswers, $totalQuestions) => winConditionHandler($correctAnswers, $totalQuestions)
);
return $module;
};
12 changes: 0 additions & 12 deletions src/Utils/ModuleUtils.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

const DATA_USER_NAME = 3010;
const HANDLER_QUESTION = 100;
const HANDLER_WIN_CONDITION = 101;
const LOCATION_DATA = 'data';
const LOCATION_HANDLERS = 'handlers';
const LOCATION_SETTINGS = 'settings';
Expand Down Expand Up @@ -33,17 +32,6 @@ function setQuestionAnswerPairHandler($module, callable $handler): array
return $module;
}

function setWinConditionHandler($module, callable $handler): array
{
$module[LOCATION_HANDLERS][HANDLER_WIN_CONDITION] = $handler;
return $module;
}

function getWinConditionHandler(array $module, int $correctAnswers, int $totalQuestions): bool
{
return $module[LOCATION_HANDLERS][HANDLER_WIN_CONDITION]($correctAnswers, $totalQuestions);
}

function setRulesDescription($module, $rulesDescription): array
{
$module[LOCATION_SETTINGS][SETTING_RULES_DESCRIPTION] = $rulesDescription;
Expand Down
3 changes: 0 additions & 3 deletions src/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,5 @@
"ask_name": "May I have your name?",
"question": "Question: [question]"
}
},
"settings": {
"attempts": 0
}
}

0 comments on commit 97c4555

Please sign in to comment.