feature/avoid-repeating-places-in-game #38
@ -60,11 +60,11 @@ class PlaceRepository
 | 
				
			|||||||
        return $places;
 | 
					        return $places;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private function getRandomForMapWithValidPano($numberOfPlaces, $select, array &$exclude, $randomSelection = null): ?Place
 | 
					    private function getRandomForMapWithValidPano($numberOfPlaces, $select, array &$exclude, $pickRandomInt = null): ?Place
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        do {
 | 
					        do {
 | 
				
			||||||
            $numberOfPlacesLeft = $numberOfPlaces - count($exclude);
 | 
					            $numberOfPlacesLeft = $numberOfPlaces - count($exclude);
 | 
				
			||||||
            $place = $this->selectRandomFromDbForMap($numberOfPlacesLeft, $select, $exclude, $randomSelection);
 | 
					            $place = $this->selectRandomFromDbForMap($numberOfPlacesLeft, $select, $exclude, $pickRandomInt);
 | 
				
			||||||
            if($place === null) {
 | 
					            if($place === null) {
 | 
				
			||||||
                // there is no more never visited place left
 | 
					                // there is no more never visited place left
 | 
				
			||||||
                return null;
 | 
					                return null;
 | 
				
			||||||
@ -79,15 +79,15 @@ class PlaceRepository
 | 
				
			|||||||
        return $place;
 | 
					        return $place;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private function selectRandomFromDbForMap($numberOfPlacesLeft, $select, array $exclude, $randomSelection): ?Place
 | 
					    private function selectRandomFromDbForMap($numberOfPlacesLeft, $select, array $exclude, $pickRandomInt): ?Place
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if($numberOfPlacesLeft <= 0)
 | 
					        if($numberOfPlacesLeft <= 0)
 | 
				
			||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(!isset($randomSelection)) {
 | 
					        if(!isset($pickRandomInt)) {
 | 
				
			||||||
            $randomOffset = random_int(0, $numberOfPlacesLeft - 1);
 | 
					            $randomOffset = random_int(0, $numberOfPlacesLeft - 1);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            $randomOffset = $randomSelection($numberOfPlacesLeft);
 | 
					            $randomOffset = $pickRandomInt($numberOfPlacesLeft);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // $select_unvisited->orderBy('last_time');
 | 
					        // $select_unvisited->orderBy('last_time');
 | 
				
			||||||
@ -150,7 +150,7 @@ class PlaceRepository
 | 
				
			|||||||
        $selectOldPlaces->orderBy('last_time');
 | 
					        $selectOldPlaces->orderBy('last_time');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // selection algorithm with preference (weighting) for older places
 | 
					        // selection algorithm with preference (weighting) for older places
 | 
				
			||||||
        $gaussianRandomSelection = function($numberOfPlaces) {
 | 
					        $pickGaussianRandomInt = function($numberOfPlaces) {
 | 
				
			||||||
            $stdev = 0.2;
 | 
					            $stdev = 0.2;
 | 
				
			||||||
            $avg = 0.0;
 | 
					            $avg = 0.0;
 | 
				
			||||||
            $x = mt_rand() / mt_getrandmax();
 | 
					            $x = mt_rand() / mt_getrandmax();
 | 
				
			||||||
@ -162,7 +162,7 @@ class PlaceRepository
 | 
				
			|||||||
        // look for n - numberOfUnvisitedPlaces places
 | 
					        // look for n - numberOfUnvisitedPlaces places
 | 
				
			||||||
        while(count($places) < $n)
 | 
					        while(count($places) < $n)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            $place = $this->getRandomForMapWithValidPano($numberOfOldPlaces, $selectOldPlaces, $exclude, $gaussianRandomSelection);
 | 
					            $place = $this->getRandomForMapWithValidPano($numberOfOldPlaces, $selectOldPlaces, $exclude, $pickGaussianRandomInt);
 | 
				
			||||||
            if(isset($place))
 | 
					            if(isset($place))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                $places[] = $place;
 | 
					                $places[] = $place;
 | 
				
			||||||
@ -173,5 +173,4 @@ class PlaceRepository
 | 
				
			|||||||
        return $places;
 | 
					        return $places;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user