update zum laptop

This commit is contained in:
silas 2018-11-11 12:34:21 +01:00
parent f2290a8ff2
commit 651f6c90ec
11 changed files with 401 additions and 185 deletions

33
orga/updateOrder.sql Normal file
View File

@ -0,0 +1,33 @@
UPDATE Level SET deleted = 0 WHERE renderer in (80,81,82,83);
UPDATE Level SET difficulty = 1000 WHERE deleted = 0 AND difficulty >= 80;
UPDATE Level SET difficulty = 80 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 80 AND difficulty = 1000 LIMIT 7) temp);
UPDATE Level SET difficulty = 80 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 81 AND difficulty = 1000 LIMIT 7) temp);
UPDATE Level SET difficulty = 80 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 82 AND difficulty = 1000 LIMIT 8) temp);
UPDATE Level SET difficulty = 80 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 83 AND difficulty = 1000 LIMIT 7) temp);
UPDATE Level SET difficulty = 90 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 83 AND difficulty = 1000 LIMIT 4) temp);
UPDATE Level SET difficulty = 90 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 82 AND difficulty = 1000 LIMIT 3) temp);
UPDATE Level SET difficulty = 90 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 81 AND difficulty = 1000 LIMIT 4) temp);
UPDATE Level SET difficulty = 90 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 80 AND difficulty = 1000 LIMIT 4) temp);
UPDATE Level SET difficulty = 90 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 100 AND difficulty = 1000 LIMIT 5) temp);
UPDATE Level SET difficulty = 100 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 80 AND difficulty = 1000 LIMIT 2) temp);
UPDATE Level SET difficulty = 100 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 81 AND difficulty = 1000 LIMIT 3) temp);
UPDATE Level SET difficulty = 100 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 82 AND difficulty = 1000 LIMIT 2) temp);
UPDATE Level SET difficulty = 100 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 83 AND difficulty = 1000 LIMIT 3) temp);
UPDATE Level SET difficulty = 100 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 100 AND difficulty = 1000 LIMIT 10) temp);
UPDATE Level SET difficulty = 110 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 80 AND difficulty = 1000 LIMIT 1) temp);
UPDATE Level SET difficulty = 110 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 81 AND difficulty = 1000 LIMIT 1) temp);
UPDATE Level SET difficulty = 110 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 82 AND difficulty = 1000 LIMIT 2) temp);
UPDATE Level SET difficulty = 110 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 83 AND difficulty = 1000 LIMIT 1) temp);
UPDATE Level SET difficulty = 110 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 100 AND difficulty = 1000 LIMIT 15) temp);
UPDATE Level SET difficulty = 120 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 80 AND difficulty = 1000 LIMIT 2) temp);
UPDATE Level SET difficulty = 120 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 81 AND difficulty = 1000 LIMIT 1) temp);
UPDATE Level SET difficulty = 120 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 82 AND difficulty = 1000 LIMIT 1) temp);
UPDATE Level SET difficulty = 120 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 83 AND difficulty = 1000 LIMIT 1) temp);
UPDATE Level SET difficulty = 120 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 100 AND difficulty = 1000 LIMIT 10) temp);
UPDATE Level SET difficulty = 120 WHERE id in ( SELECT * FROM (SELECT id FROM Level WHERE renderer = 110 AND difficulty = 1000 LIMIT 5) temp);

View File

@ -6474,11 +6474,11 @@ class ColumnSegment extends RowSegment{
// }
}
class SimpleFourWordsLevel extends Level{
constructor(templateContainer, wordLength, bigSegmentPosition) {
class BigSegmentsLevels extends Level{
constructor(templateContainer, wordLength, bigSegmentPositions) {
super(templateContainer);
this.wordLength = wordLength;
this.bigSegmentPosition = bigSegmentPosition;
this.bigSegmentPositions = bigSegmentPositions;
}
createSegments() {
@ -6512,7 +6512,7 @@ class SimpleFourWordsLevel extends Level{
parents[1].addChild(leafsWords[3][2 * i + 1]);
let parentSegment =null;
if (i === this.bigSegmentPosition){
if (this.bigSegmentPositions.indexOf(i) !== -1){
parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());
parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());
@ -6546,6 +6546,77 @@ class SimpleFourWordsLevel extends Level{
}
}
class SimpleFourWordsLevel extends BigSegmentsLevels{
constructor(templateContainer, wordLength, bigSegmentPosition) {
console.log(bigSegmentPosition, "P");
super(templateContainer, wordLength, [bigSegmentPosition, 3]);
}
// createSegments() {
// if (this.words.length >= 4 &&
// this.words[0].length >= this.wordLength &&
// this.words[1].length >= this.wordLength &&
// this.words[2].length >= this.wordLength &&
// this.words[3].length >= this.wordLength &&
// this.wordLength >= 4
// ) {
// let leafsWords = [];
// leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());
// leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());
// leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());
// leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());
//
// let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());
// for (let i = 0; i < this.wordLength / 2; i++) {
// let parents = [];
// parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());
// parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());
//
// parents[0].addChild(leafsWords[0][2 * i]);
// parents[0].addChild(leafsWords[0][2 * i + 1]);
// parents[0].addChild(leafsWords[1][2 * i]);
// parents[0].addChild(leafsWords[1][2 * i + 1]);
//
// parents[1].addChild(leafsWords[2][2 * i]);
// parents[1].addChild(leafsWords[2][2 * i + 1]);
// parents[1].addChild(leafsWords[3][2 * i]);
// parents[1].addChild(leafsWords[3][2 * i + 1]);
//
// let parentSegment =null;
// if (i === this.bigSegmentPosition){
// parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());
// parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());
//
// parents[2].addChild(leafsWords[0][2 * i + 2]);
// parents[2].addChild(leafsWords[0][2 * i + 3]);
// parents[2].addChild(leafsWords[1][2 * i + 2]);
// parents[2].addChild(leafsWords[1][2 * i + 3]);
//
// parents[3].addChild(leafsWords[2][2 * i + 2]);
// parents[3].addChild(leafsWords[2][2 * i + 3]);
// parents[3].addChild(leafsWords[3][2 * i + 2]);
// parents[3].addChild(leafsWords[3][2 * i + 3]);
//
// parentSegment = new ParentSegment(this.templateContainer.copyParentTemplate());
// parentSegment.addChild(parents[0]);
// parentSegment.addChild(parents[2]);
// parentSegment.addChild(parents[1]);
// parentSegment.addChild(parents[3]);
// i++;
// }
// else{
// parentSegment = new ColumnSegment(this.templateContainer.copyColumnTemplate());
// parentSegment.addChild(parents[0]);
// parentSegment.addChild(parents[1]);
// }
//
// rootSegment.addChild(parentSegment);
// }
// this.setRootSegment(rootSegment)
// }
// }
}
class SimpleFourWordsLevel10_0 extends SimpleFourWordsLevel{
constructor(templateContainer) {
super(templateContainer, 10, 0);

View File

@ -148,7 +148,7 @@ export class LevelSite extends WordRotatorBaseSite {
return this.nextLevel();
}
startEndSite(){
startEndSite() {
this.startSite(EndSite);
this.finish();
}
@ -391,7 +391,7 @@ export class LevelSite extends WordRotatorBaseSite {
break;
}
default:{
default: {
this._siteContent.classList.remove("tutorial");
}
}
@ -421,7 +421,7 @@ export class LevelSite extends WordRotatorBaseSite {
scaleHelper.scaleToFull(textElem, textElem.parentElement, null, true, 1, 2);
break;
}
default:{
default: {
this._siteContent.classList.remove("tutorial");
}
}
@ -461,14 +461,15 @@ export class LevelSite extends WordRotatorBaseSite {
break;
}
default:{
default: {
this._siteContent.classList.remove("tutorial");
}
}
}
}
}
LevelSite.RENDERER_TYPES = [20, 40, 60, 80, 81, 82, 83, 100, 120, 140, 160];
LevelSite.RENDERER_TYPES = [20, 40, 60, 80, 81, 82, 83, 100, 110, 111, 112, 120, 140, 160];
LevelSite.TUTORIAL = {
FIRST_LEVEL: 67,
SECOND_LEVEL: 15,

View File

@ -0,0 +1,76 @@
import {Level} from "./Level";
import {RowSegment} from "../Segment/RowSegment";
import {ParentSegment} from "../Segment/ParentSegment";
import {ColumnSegment} from "../Segment/ColumnSegment";
export class BigSegmentsLevels extends Level{
constructor(templateContainer, wordLength, bigSegmentPositions) {
super(templateContainer);
this.wordLength = wordLength;
this.bigSegmentPositions = bigSegmentPositions;
}
createSegments() {
if (this.words.length >= 4 &&
this.words[0].length >= this.wordLength &&
this.words[1].length >= this.wordLength &&
this.words[2].length >= this.wordLength &&
this.words[3].length >= this.wordLength &&
this.wordLength >= 4
) {
let leafsWords = [];
leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());
leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());
leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());
leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());
let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());
for (let i = 0; i < this.wordLength / 2; i++) {
let parents = [];
parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());
parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());
parents[0].addChild(leafsWords[0][2 * i]);
parents[0].addChild(leafsWords[0][2 * i + 1]);
parents[0].addChild(leafsWords[1][2 * i]);
parents[0].addChild(leafsWords[1][2 * i + 1]);
parents[1].addChild(leafsWords[2][2 * i]);
parents[1].addChild(leafsWords[2][2 * i + 1]);
parents[1].addChild(leafsWords[3][2 * i]);
parents[1].addChild(leafsWords[3][2 * i + 1]);
let parentSegment =null;
if (this.bigSegmentPositions.indexOf(i) !== -1){
parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());
parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());
parents[2].addChild(leafsWords[0][2 * i + 2]);
parents[2].addChild(leafsWords[0][2 * i + 3]);
parents[2].addChild(leafsWords[1][2 * i + 2]);
parents[2].addChild(leafsWords[1][2 * i + 3]);
parents[3].addChild(leafsWords[2][2 * i + 2]);
parents[3].addChild(leafsWords[2][2 * i + 3]);
parents[3].addChild(leafsWords[3][2 * i + 2]);
parents[3].addChild(leafsWords[3][2 * i + 3]);
parentSegment = new ParentSegment(this.templateContainer.copyParentTemplate());
parentSegment.addChild(parents[0]);
parentSegment.addChild(parents[2]);
parentSegment.addChild(parents[1]);
parentSegment.addChild(parents[3]);
i++;
}
else{
parentSegment = new ColumnSegment(this.templateContainer.copyColumnTemplate());
parentSegment.addChild(parents[0]);
parentSegment.addChild(parents[1]);
}
rootSegment.addChild(parentSegment);
}
this.setRootSegment(rootSegment)
}
}
}

View File

@ -9,6 +9,9 @@ import {SimpleFourWordsLevel10_0} from "./SimpleFourWordsLevel10_0";
import {SimpleFourWordsLevel10_1} from "./SimpleFourWordsLevel10_1";
import {SimpleFourWordsLevel10_2} from "./SimpleFourWordsLevel10_2";
import {SimpleFourWordsLevel10_3} from "./SimpleFourWordsLevel10_3";
import {TwoSegmentFourWordsLevel10_0_3} from "./TwoSegmentFourWordsLevel10_0_3";
import {TwoSegmentFourWordsLevel10_1_3} from "./TwoSegmentFourWordsLevel10_1_3";
import {TwoSegmentFourWordsLevel10_0_2} from "./TwoSegmentFourWordsLevel10_0_2";
export class LevelHelper {
static setLevelType(typeId, level) {
@ -44,6 +47,9 @@ LevelHelper.types = {
82: SimpleFourWordsLevel10_2,
83: SimpleFourWordsLevel10_3,
100: SixWordsRowLevel8,
110: TwoSegmentFourWordsLevel10_0_3,
111: TwoSegmentFourWordsLevel10_1_3,
112: TwoSegmentFourWordsLevel10_0_2,
120: FourWordsLevel8,
140: SixWordsRowLevel12,
160: FourWordsLevel12,

View File

@ -1,76 +1,7 @@
import {Level} from "./Level";
import {RowSegment} from "../Segment/RowSegment";
import {ParentSegment} from "../Segment/ParentSegment";
import {ColumnSegment} from "../Segment/ColumnSegment";
import {BigSegmentsLevels} from "./BigSegmentsLevels";
export class SimpleFourWordsLevel extends Level{
export class SimpleFourWordsLevel extends BigSegmentsLevels{
constructor(templateContainer, wordLength, bigSegmentPosition) {
super(templateContainer);
this.wordLength = wordLength;
this.bigSegmentPosition = bigSegmentPosition;
}
createSegments() {
if (this.words.length >= 4 &&
this.words[0].length >= this.wordLength &&
this.words[1].length >= this.wordLength &&
this.words[2].length >= this.wordLength &&
this.words[3].length >= this.wordLength &&
this.wordLength >= 4
) {
let leafsWords = [];
leafsWords[0] = Level._createLeafsForWord(this.words[0], this.templateContainer.copyLeafTemplate());
leafsWords[1] = Level._createLeafsForWord(this.words[1], this.templateContainer.copyLeafTemplate());
leafsWords[2] = Level._createLeafsForWord(this.words[2], this.templateContainer.copyLeafTemplate());
leafsWords[3] = Level._createLeafsForWord(this.words[3], this.templateContainer.copyLeafTemplate());
let rootSegment = new RowSegment(this.templateContainer.copyRowTemplate());
for (let i = 0; i < this.wordLength / 2; i++) {
let parents = [];
parents[0] = new ParentSegment(this.templateContainer.copyParentTemplate());
parents[1] = new ParentSegment(this.templateContainer.copyParentTemplate());
parents[0].addChild(leafsWords[0][2 * i]);
parents[0].addChild(leafsWords[0][2 * i + 1]);
parents[0].addChild(leafsWords[1][2 * i]);
parents[0].addChild(leafsWords[1][2 * i + 1]);
parents[1].addChild(leafsWords[2][2 * i]);
parents[1].addChild(leafsWords[2][2 * i + 1]);
parents[1].addChild(leafsWords[3][2 * i]);
parents[1].addChild(leafsWords[3][2 * i + 1]);
let parentSegment =null;
if (i === this.bigSegmentPosition){
parents[2] = new ParentSegment(this.templateContainer.copyParentTemplate());
parents[3] = new ParentSegment(this.templateContainer.copyParentTemplate());
parents[2].addChild(leafsWords[0][2 * i + 2]);
parents[2].addChild(leafsWords[0][2 * i + 3]);
parents[2].addChild(leafsWords[1][2 * i + 2]);
parents[2].addChild(leafsWords[1][2 * i + 3]);
parents[3].addChild(leafsWords[2][2 * i + 2]);
parents[3].addChild(leafsWords[2][2 * i + 3]);
parents[3].addChild(leafsWords[3][2 * i + 2]);
parents[3].addChild(leafsWords[3][2 * i + 3]);
parentSegment = new ParentSegment(this.templateContainer.copyParentTemplate());
parentSegment.addChild(parents[0]);
parentSegment.addChild(parents[2]);
parentSegment.addChild(parents[1]);
parentSegment.addChild(parents[3]);
i++;
}
else{
parentSegment = new ColumnSegment(this.templateContainer.copyColumnTemplate());
parentSegment.addChild(parents[0]);
parentSegment.addChild(parents[1]);
}
rootSegment.addChild(parentSegment);
}
this.setRootSegment(rootSegment)
}
super(templateContainer, wordLength, [bigSegmentPosition]);
}
}

View File

@ -0,0 +1,8 @@
import {BigSegmentsLevels} from "./BigSegmentsLevels";
export class TwoSegmentFourWordsLevel10_0_2 extends BigSegmentsLevels{
constructor(templateContainer) {
super(templateContainer, 10, [0,2]);
}
}

View File

@ -0,0 +1,8 @@
import {BigSegmentsLevels} from "./BigSegmentsLevels";
export class TwoSegmentFourWordsLevel10_0_3 extends BigSegmentsLevels{
constructor(templateContainer) {
super(templateContainer, 10, [0,3]);
}
}

View File

@ -0,0 +1,8 @@
import {BigSegmentsLevels} from "./BigSegmentsLevels";
export class TwoSegmentFourWordsLevel10_1_3 extends BigSegmentsLevels{
constructor(templateContainer) {
super(templateContainer, 10, [1,3]);
}
}

View File

@ -79,6 +79,11 @@ class LevelManager extends StandardManager
return $returnArray;
}
public function countWhere($whereArray)
{
return $this->repository->countWhere($whereArray);
}
public function getDoubleUsedWords()
{
$words = [];
@ -113,151 +118,210 @@ class LevelManager extends StandardManager
public function generateLevels()
{
$levelsToGenerate = [
//(0) 80
[
"wordLength" => 12,
"wordLength" => 10,
"numWords" => 4,
"numPositions" => 15,
"renderer" => 160,
"numPositions" => 11,
"renderer" => 80,
"difficulty" => function () {
return 160;
return 1000;
},
],
//(1) 81
[
"wordLength" => 8,
"wordLength" => 10,
"numWords" => 4,
"numPositions" => 10,
"renderer" => 120,
"numPositions" => 11,
"renderer" => 81,
"difficulty" => function () {
$propabillity = rand(1, 100);
if ($propabillity <= 2){
return 160;
}
if ($propabillity <= 7){
return 140;
}
return 120;
return 1000;
},
],
//(2) 82
[
"wordLength" => 12,
"numWords" => 6,
"numPositions" => 21,
"renderer" => 140,
"wordLength" => 10,
"numWords" => 4,
"numPositions" => 11,
"renderer" => 82,
"difficulty" => function () {
return ((rand(1, 100) <= 5) ? 160 : 140);
return 1000;
},
],
//(3) 83
[
"wordLength" => 10,
"numWords" => 4,
"numPositions" => 11,
"renderer" => 83,
"difficulty" => function () {
return 1000;
},
],
//(4) 100
[
"wordLength" => 8,
"numWords" => 6,
"numPositions" => 14,
"renderer" => 100,
"difficulty" => function () {
$propabillity = rand(1, 100);
if ($propabillity <= 2){
return 140;
}
if ($propabillity <= 7){
return 120;
}
return 100;
return 1000;
},
],
//(5) 110
[
"wordLength" => 10,
"numWords" => 4,
"numPositions" => 11,
"renderer" => function(){
$renderers = [80,81,82,83];
return $renderers[rand(0, count($renderers) - 1)];
},
"numPositions" => 12,
"renderer" => 110,
"difficulty" => function () {
return ((rand(1, 100) <= 2) ? 100: 80);
return 1000;
},
],
//(6) 111
[
"wordLength" => 10,
"numWords" => 4,
"numPositions" => 12,
"renderer" => 111,
"difficulty" => function () {
return 1000;
},
],
//(7) 112
[
"wordLength" => 10,
"numWords" => 4,
"numPositions" => 12,
"renderer" => 112,
"difficulty" => function () {
return 1000;
},
],
//(8) 120
[
"wordLength" => 8,
"numWords" => 4,
"numPositions" => 10,
"renderer" => 120,
"difficulty" => function () {
return 1000;
},
],
//(9) 140
[
"wordLength" => 12,
"numWords" => 6,
"numPositions" => 21,
"renderer" => 140,
"difficulty" => function () {
return 1000;
},
],
//(10) 160
[
"wordLength" => 12,
"numWords" => 4,
"numPositions" => 15,
"renderer" => 160,
"difficulty" => function () {
return 1000;
},
],
// [
// "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];
$creationRation = [
0 => 1,
1 => 1,
2 => 1,
3 => 1,
4 => 16,
5 => 5.333333,
6 => 5.333333,
7 => 5.333333,
8 => 24,
9 => 28,
10 => 52
];
$currentNumbers = [];
for ($i = 0; $i < count($levelsToGenerate); $i++) {
$currentNumbers[$i] = $this->countWhere(["renderer" => $levelsToGenerate[$i]["renderer"], "difficulty" => 1000]);
}
$levelGenerated = 0;
$currentIndex = count($levelsToGenerate) - 1;
$words = [];
do {
// var_dump($levelsToGenerate);
$currentIndex = rand(0, count($levelsToGenerate) - 1);
if ($currentIndex === 0 || $currentNumbers[$currentIndex] >= $currentNumbers[0] * $creationRation[$currentIndex]) {
$currentIndex = ($currentIndex + 1) % count($levelsToGenerate);
}
$words[$levelsToGenerate[$currentIndex]["wordLength"]] = $words[$levelsToGenerate[$currentIndex]["wordLength"]] ?? $this->wordManager->findWordsForLength($levelsToGenerate[$currentIndex]["wordLength"]);
$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);
}
$level = $this->generateLevelWithData($levelsToGenerate[$currentIndex], $currentWords);
if ($level) {
$words[$levelsToGenerate[$currentIndex]["wordLength"]] = $currentWords;
$positions = [];
do {
for ($i = 0; $i < $levelsToGenerate[$currentIndex]["numPositions"]; $i++) {
$positions[] = rand(0, 3);
}
} while (count(array_filter($positions, function($position) {
return $position == 0;
}))/$levelsToGenerate[$currentIndex]["numPositions"] >= 0.67);
$level = new Level();
$level->setWords(json_encode($selectedWords));
$level->setPositions(json_encode($positions));
$level->setDifficulty($levelsToGenerate[$currentIndex]["difficulty"]());
$level->setLastUpdated(new \DateTime());
$level->setLang(1); //German
$level->setDeleted(false);
if (is_int($levelsToGenerate[$currentIndex]["renderer"])){
$level->setRenderer($levelsToGenerate[$currentIndex]["renderer"]);
}
else{
$level->setRenderer($levelsToGenerate[$currentIndex]["renderer"]());
}
$this->save($level, false);
$levelGenerated++;
$currentNumbers[$currentIndex]++;
} else {
array_splice($levelsToGenerate, $currentIndex, 1);
break;
}
} while (count($levelsToGenerate) > 0 && $levelGenerated < 100);
} while (count($levelsToGenerate) > 0 && $levelGenerated < 180);
$this->emFlush();
$this->wordManager->emFlush();
return $levelGenerated;
}
private function generateLevelWithData($levelData, &$words)
{
if (count($words) >= $levelData["numWords"]) {
$selectedWords = [];
for ($i = 0; $i < $levelData["numWords"]; $i++) {
$wordCount = count($words);
$currentWordIndex = rand(0, $wordCount - 1);
$selectedWords[] = strtoupper($words[$currentWordIndex]->getWord());
$words[$currentWordIndex]->setUsed(true);
$this->wordManager->save($words[$currentWordIndex], false);
array_splice($words, $currentWordIndex, 1);
}
$positions = [];
do {
for ($i = 0; $i < $levelData["numPositions"]; $i++) {
$positions[] = rand(0, 3);
}
} while (count(array_filter($positions, function ($position) {
return $position == 0;
})) / $levelData["numPositions"] >= 0.67);
$level = new Level();
$level->setWords(json_encode($selectedWords));
$level->setPositions(json_encode($positions));
$level->setDifficulty($levelData["difficulty"]());
$level->setLastUpdated(new \DateTime());
$level->setLang(1); //German
$level->setDeleted(false);
if (is_int($levelData["renderer"])) {
$level->setRenderer($levelData["renderer"]);
} else {
$level->setRenderer($levelData["renderer"]());
}
return $level;
} else {
return null;
}
}
}

View File

@ -18,8 +18,7 @@ class LevelRepository extends StandardRepository
$queryBuilder = $this->_em->createQueryBuilder();
$queryBuilder->select("l")->from(Level::class, "l");
if ($date != null)
{
if ($date != null) {
$queryBuilder->andWhere($queryBuilder->expr()->gte("l.lastUpdated", ":fromDate"));
$queryBuilder->setParameter("fromDate", $date->format("Y-m-d H:i:00"));
}
@ -34,8 +33,7 @@ class LevelRepository extends StandardRepository
$queryBuilder = $this->_em->createQueryBuilder();
$queryBuilder->select("COUNT(l.id) as number")->from(Level::class, "l");
if ($date != null)
{
if ($date != null) {
$queryBuilder->andWhere($queryBuilder->expr()->gte("l.lastUpdated", ":fromDate"));
$queryBuilder->setParameter("fromDate", $date->format("Y-m-d H:i:00"));
}
@ -50,12 +48,24 @@ class LevelRepository extends StandardRepository
public function endTransaction()
{
try{
try {
$this->_em->getConnection()->commit();
} catch (\Exception $e)
{
} catch (\Exception $e) {
$this->_em->getConnection()->rollBack();
throw $e;
}
}
public function countWhere($whereArray)
{
$queryBuilder = $this->_em->createQueryBuilder();
$queryBuilder->select("COUNT(l.id) as number")->from(Level::class, "l");
foreach ($whereArray as $field => $arg) {
$queryBuilder->andWhere($queryBuilder->expr()->eq("l.".$field, ":".$field));
$queryBuilder->setParameter("".$field, $arg);
}
return $queryBuilder->getQuery()->getSingleScalarResult();
}
}