added LevelGeneration
This commit is contained in:
parent
56d17ca07d
commit
d12df3252d
@ -1,3 +1,5 @@
|
||||
USE silas_wordRotator;
|
||||
|
||||
CREATE TABLE silas_wordRotator.Cronjob (id INT AUTO_INCREMENT NOT NULL, intervalInMinutes INT NOT NULL, lastRun DATETIME NOT NULL, className LONGTEXT NOT NULL, lastSuccess DATETIME NOT NULL, errorMessage LONGTEXT NOT NULL, active TINYINT(1) NOT NULL, version INT DEFAULT 1 NOT NULL, discr VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||
CREATE TABLE silas_wordRotator.Code (id INT AUTO_INCREMENT NOT NULL, code VARCHAR(255) NOT NULL, creationDate DATETIME NOT NULL, isCacheable TINYINT(1) NOT NULL, version INT DEFAULT 1 NOT NULL, discriminator VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_817996E977153098 (code), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||
CREATE TABLE silas_wordRotator.UserCode (id INT NOT NULL, userId INT DEFAULT NULL, INDEX IDX_E2BA727E64B64DCC (userId), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
|
||||
@ -51,7 +53,6 @@ INSERT INTO RoleAccess(RoleId, AccessId) VALUES (2,2); -- user - online
|
||||
INSERT INTO RoleAccess(RoleId, AccessId) VALUES (2,3); -- user - default
|
||||
INSERT INTO `RoleAccess` (`RoleId`, `AccessId`) VALUES (3, 4); -- admin - admin
|
||||
|
||||
ALTER TABLE Word ADD used TINYINT(1) NOT NULL;
|
||||
|
||||
--------------
|
||||
|
||||
ALTER TABLE Word ADD used TINYINT(1) NOT NULL;
|
||||
-- #####################################
|
||||
|
||||
@ -1 +1 @@
|
||||
UPDATE Word SET Word.used = 1 WHERE (SELECT count(*) FROM Level WHERE words LIKE CONCAT("%", Word.word, "%") AND deleted = 0) > 0
|
||||
UPDATE Word SET Word.used = 1 WHERE deleted = 0 AND (SELECT count(*) FROM Level WHERE words LIKE CONCAT("%\"", Word.word, "\"%") AND deleted = 0) > 0
|
||||
File diff suppressed because one or more lines are too long
@ -7139,7 +7139,7 @@ Matomo.SIDE_ID = "2";
|
||||
|
||||
applyPolyfills();
|
||||
|
||||
ThemeManager.addTheme(new Theme('red', ''));
|
||||
ThemeManager.addTheme(new Theme('red', 'red'));
|
||||
ThemeManager.addTheme(new Theme("blue", "blue"));
|
||||
ThemeManager.addTheme(new Theme("black", "black"));
|
||||
ThemeManager.addTheme(new Theme("green", "green"));
|
||||
|
||||
@ -33,7 +33,7 @@ applyPolyfills();
|
||||
|
||||
import './settings'
|
||||
|
||||
ThemeManager.addTheme(new Theme('red', ''));
|
||||
ThemeManager.addTheme(new Theme('red', 'red'));
|
||||
ThemeManager.addTheme(new Theme("blue", "blue"));
|
||||
ThemeManager.addTheme(new Theme("black", "black"));
|
||||
ThemeManager.addTheme(new Theme("green", "green"));
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
namespace Application;
|
||||
|
||||
use Ainias\Core\Factory\Model\Manager\DefaultManagerFactory;
|
||||
use Application\Factory\Model\Manager\LevelManagerFactory;
|
||||
use Application\Model\Manager\AuthTokenManager;
|
||||
use Application\Model\Manager\LevelManager;
|
||||
use Application\Model\Manager\RatingManager;
|
||||
@ -16,7 +17,7 @@ return array(
|
||||
),
|
||||
'factories' => array(
|
||||
AuthTokenManager::class => DefaultManagerFactory::class,
|
||||
LevelManager::class => DefaultManagerFactory::class,
|
||||
LevelManager::class => LevelManagerFactory::class,
|
||||
RatingManager::class => DefaultManagerFactory::class,
|
||||
WordManager::class => DefaultManagerFactory::class,
|
||||
),
|
||||
|
||||
@ -54,6 +54,17 @@ return array(
|
||||
],
|
||||
],
|
||||
],
|
||||
'generateLevels' => [
|
||||
'type' => Segment::class,
|
||||
'options' => [
|
||||
'route' => '/generateLevels',
|
||||
'defaults' => [
|
||||
'controller' => IndexController::class,
|
||||
'action' => 'generateLevels',
|
||||
'resource' => 'admin',
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
@ -106,6 +106,7 @@ class IndexController extends OnlineController
|
||||
public function generateLevelsAction(){
|
||||
/** @var LevelManager $levelManager */
|
||||
$levelManager = $this->get(LevelManager::class);
|
||||
$levelManager->generateLevels();
|
||||
return ["levelsGenerated" => $levelManager->generateLevels()];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -93,8 +93,8 @@ class LevelManager extends StandardManager
|
||||
$wordLength = count($words[$i]);
|
||||
for ($j = $i + 1; $j < $levelNumber; $j++) {
|
||||
$words[$j] = $words[$j] ?? json_decode($level[$j]->getWords());
|
||||
for ($k = 0; $k < $wordLength; $k++){
|
||||
if (in_array($words[$i][$k], $words[$j])){
|
||||
for ($k = 0; $k < $wordLength; $k++) {
|
||||
if (in_array($words[$i][$k], $words[$j])) {
|
||||
|
||||
$sameWords[$words[$i][$k]] = ($sameWords[$words[$i][$k]] ?? []);
|
||||
$sameWords[$words[$i][$k]][] = $level[$i];
|
||||
@ -103,7 +103,7 @@ class LevelManager extends StandardManager
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ($sameWords as $key => &$levels){
|
||||
foreach ($sameWords as $key => &$levels) {
|
||||
$sameWords[$key] = array_unique(LevelManager::levelsToArray($levels), SORT_REGULAR);
|
||||
}
|
||||
|
||||
@ -115,22 +115,112 @@ class LevelManager extends StandardManager
|
||||
$levelsToGenerate = [
|
||||
[
|
||||
"wordLength" => 12,
|
||||
"numWords" => 6,
|
||||
"numPositions" => 21
|
||||
"numWords" => 4,
|
||||
"numPositions" => 15,
|
||||
"renderer" => 160,
|
||||
"difficulty" => function(){
|
||||
return 160;
|
||||
},
|
||||
],
|
||||
[
|
||||
"wordLength" => 8,
|
||||
"numWords" => 4,
|
||||
"numPositions" => 10,
|
||||
"renderer" => 120,
|
||||
"difficulty" => function () {
|
||||
return ((rand(1,100) <= 5)?140:120);
|
||||
},
|
||||
],
|
||||
[
|
||||
"wordLength" => 12,
|
||||
"numWords" => 4,
|
||||
"numPositions" => 15
|
||||
"numWords" => 6,
|
||||
"numPositions" => 21,
|
||||
"renderer" => 140,
|
||||
"difficulty" => function () {
|
||||
return ((rand(1,100) <= 5)?160:140);
|
||||
},
|
||||
],
|
||||
[
|
||||
"wordLength" => 8,
|
||||
"numWords" => 6,
|
||||
"numPositions" => 14,
|
||||
"renderer" => 100,
|
||||
"difficulty" => function () {
|
||||
return ((rand(1,100) <= 5)?120:100);
|
||||
},
|
||||
],
|
||||
[
|
||||
"wordLength" => 10,
|
||||
"numWords" => 2,
|
||||
"numPositions" => 5,
|
||||
"renderer" => 60,
|
||||
"difficulty" => function () {
|
||||
return ((rand(1,100) <= 5)?100:60);
|
||||
},
|
||||
],
|
||||
// [
|
||||
// "wordLength" => 8,
|
||||
// "numWords" => 2,
|
||||
// "numPositions" => 4,
|
||||
// "renderer" => 40,
|
||||
// "difficulty" => function () {
|
||||
// return ((rand(1,100) <= 5)?120:100);
|
||||
// },
|
||||
// ],
|
||||
|
||||
];
|
||||
|
||||
//Für höhere Wahrscheinlichkeiten
|
||||
$levelsToGenerate[] = $levelsToGenerate[0];
|
||||
$levelsToGenerate[] = $levelsToGenerate[1];
|
||||
|
||||
$levelGenerated = 0;
|
||||
|
||||
$words = [];
|
||||
do {
|
||||
$currentIndex = rand(0, count($levelsToGenerate) -1);
|
||||
$words[$levelsToGenerate[$currentIndex]] = $words[$levelsToGenerate[$currentIndex]] ?? $this->wordManager->findWordsForLength($levelsToGenerate[$currentIndex]["wordLength"]);
|
||||
// var_dump($levelsToGenerate);
|
||||
$currentIndex = rand(0, count($levelsToGenerate) - 1);
|
||||
$words[$levelsToGenerate[$currentIndex]["wordLength"]] = $words[$levelsToGenerate[$currentIndex]["wordLength"]] ?? $this->wordManager->findWordsForLength($levelsToGenerate[$currentIndex]["wordLength"]);
|
||||
|
||||
}while(1 == 2);
|
||||
$currentWords = $words[$levelsToGenerate[$currentIndex]["wordLength"]];
|
||||
|
||||
// var_dump(count($currentWords), $levelsToGenerate[$currentIndex]["numWords"]);
|
||||
|
||||
if (count($currentWords) >= $levelsToGenerate[$currentIndex]["numWords"]) {
|
||||
$selectedWords = [];
|
||||
for ($i = 0; $i < $levelsToGenerate[$currentIndex]["numWords"]; $i++) {
|
||||
$wordCount = count($currentWords);
|
||||
$currentWordIndex = rand(0, $wordCount - 1);
|
||||
$selectedWords[] = strtoupper($currentWords[$currentWordIndex]->getWord());
|
||||
$currentWords[$currentWordIndex]->setUsed(true);
|
||||
$this->wordManager->save($currentWords[$currentWordIndex], false);
|
||||
array_splice($currentWords, $currentWordIndex, 1);
|
||||
}
|
||||
$words[$levelsToGenerate[$currentIndex]["wordLength"]] = $currentWords;
|
||||
$positions = [];
|
||||
for ($i = 0; $i < $levelsToGenerate[$currentIndex]["numPositions"]; $i++) {
|
||||
$positions[] = rand(0, 3);
|
||||
}
|
||||
|
||||
$level = new Level();
|
||||
$level->setWords(json_encode($selectedWords));
|
||||
$level->setPositions(json_encode($positions));
|
||||
$level->setRenderer($levelsToGenerate[$currentIndex]["renderer"]);
|
||||
$level->setDifficulty($levelsToGenerate[$currentIndex]["difficulty"]());
|
||||
$level->setLastUpdated(new \DateTime());
|
||||
$level->setLang(1); //German
|
||||
$level->setDeleted(false);
|
||||
$this->save($level, false);
|
||||
|
||||
$levelGenerated++;
|
||||
} else {
|
||||
array_splice($levelsToGenerate, $currentIndex, 1);
|
||||
}
|
||||
|
||||
} while (count($levelsToGenerate) > 0 );
|
||||
|
||||
$this->emFlush();
|
||||
$this->wordManager->emFlush();
|
||||
return $levelGenerated;
|
||||
}
|
||||
}
|
||||
@ -126,8 +126,12 @@ class WordManager extends StandardManager
|
||||
return $this->repository->countUnsure($minLength, $maxLength);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $length
|
||||
* @return Word[]
|
||||
*/
|
||||
public function findWordsForLength($length)
|
||||
{
|
||||
$this->repository->findWordsForLength($length);
|
||||
return $this->repository->findWordsForLength($length);
|
||||
}
|
||||
}
|
||||
@ -136,6 +136,7 @@ class WordRepository extends StandardRepository
|
||||
|
||||
$queryBuilder->andWhere($queryBuilder->expr()->eq("w.checked", "1"));
|
||||
$queryBuilder->andWhere($queryBuilder->expr()->eq("w.deleted", "0"));
|
||||
$queryBuilder->andWhere($queryBuilder->expr()->eq("w.used", "0"));
|
||||
$queryBuilder->andWhere($queryBuilder->expr()->eq($queryBuilder->expr()->length("w.word"), ":length"));
|
||||
$queryBuilder->setParameter("length", $length);
|
||||
return $queryBuilder->getQuery()->getResult();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user