-
Notifications
You must be signed in to change notification settings - Fork 0
/
fn.go
92 lines (80 loc) · 2.27 KB
/
fn.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package cmg
import (
"encoding/json"
"fmt"
"github.com/joostvdg/cmg/pkg/game"
"github.com/joostvdg/cmg/pkg/mapgen"
"github.com/joostvdg/cmg/pkg/webserver/model"
"log"
"net/http"
"strconv"
"go.opencensus.io/plugin/ochttp"
)
func extractIntParamOrDefault(request *http.Request, paramName string, defaultValue int) int {
paramValues := request.URL.Query().Get(paramName)
if len(paramValues) <= 0 {
return defaultValue
}
paramValue := fmt.Sprintf("%v", paramValues)
log.Println(fmt.Sprintf("Param check, name: %s, value: %v, values: %v", paramName, paramValue, paramValues))
intValue, err := strconv.Atoi(string(paramValue))
if err != nil {
return defaultValue
}
return intValue
}
func getMap(w http.ResponseWriter, r *http.Request) {
log.Println("Request params were:", r.URL.Query())
gameType := game.NormalGame
gameTypeValue := 0
gameTypeParam := r.URL.Query().Get("type")
gameTypeParamValue := fmt.Sprintf("%v",gameTypeParam)
if gameTypeParamValue == "large" {
gameTypeValue = 1
gameType = game.LargeGame
}
min := extractIntParamOrDefault(r, "min", 165)
max := extractIntParamOrDefault(r, "max", 361)
max300 := extractIntParamOrDefault(r, "max300", 14)
maxr := extractIntParamOrDefault(r, "maxr", 130)
minr := extractIntParamOrDefault(r, "minr", 30)
rules := game.GameRules{
GameType: gameTypeValue,
MinimumScore: min,
MaximumScore: max,
MaxOver300: max300,
MaximumResourceScore: maxr,
MinimumResourceScore: minr,
}
log.Println("Rules: ", rules)
verbose := false
numberOfLoops := 1
totalGenerations := 0
board := mapgen.MapGenerationAttempt(gameType, verbose)
for i := 0; i < numberOfLoops; i++ {
for !board.IsValid(rules, gameType, verbose) {
totalGenerations++
if totalGenerations > 1501 {
log.Fatal("Can not generate a map... (1000+ runs)")
}
board = mapgen.MapGenerationAttempt(gameType, verbose)
}
}
var content = model.Map{
GameType: gameType.Name,
Board: board.Board,
}
b, err := json.Marshal(content)
if err != nil {
log.Fatal(err)
return
}
w.Header().Set("Content-Type", "application/json")
fmt.Fprintln(w, string(b))
}
func Cmg(w http.ResponseWriter, r *http.Request) {
traced := &ochttp.Handler{
Handler: http.HandlerFunc(getMap),
}
traced.ServeHTTP(w, r)
}