|
|
@@ -0,0 +1,132 @@ |
|
|
|
package main |
|
|
|
|
|
|
|
import ( |
|
|
|
"botg/models" |
|
|
|
"botg/strategies" |
|
|
|
"bufio" |
|
|
|
"fmt" |
|
|
|
"math/rand" |
|
|
|
"os" |
|
|
|
"strconv" |
|
|
|
"strings" |
|
|
|
"time" |
|
|
|
) |
|
|
|
|
|
|
|
var stars[] models.Star |
|
|
|
var flights[] models.Flight |
|
|
|
var links[] models.Link |
|
|
|
|
|
|
|
func main() { |
|
|
|
// Write to logfile |
|
|
|
s1 := rand.NewSource(time.Now().UnixNano()) |
|
|
|
r1 := rand.New(s1) |
|
|
|
rand.Seed(10000) |
|
|
|
filename := fmt.Sprintf("logs/%d.txt", r1.Intn(10000)) |
|
|
|
f, err := os.Create(filename) |
|
|
|
if err != nil{ |
|
|
|
panic(err) |
|
|
|
} |
|
|
|
defer f.Close() |
|
|
|
|
|
|
|
// Open stdin for reading |
|
|
|
reader := bufio.NewReader(os.Stdin) |
|
|
|
|
|
|
|
var gameComplete bool =false |
|
|
|
var roundComplete bool =false |
|
|
|
|
|
|
|
// Run strategy |
|
|
|
strategy := strategies.SimpleStrategy {} |
|
|
|
//strategy := strategies.NoneStrategy {} |
|
|
|
|
|
|
|
for gameComplete == false { |
|
|
|
roundComplete = false |
|
|
|
|
|
|
|
// Empty flights |
|
|
|
flights = [] models.Flight{} |
|
|
|
links = [] models.Link{} |
|
|
|
for roundComplete == false { |
|
|
|
text, err := reader.ReadString('\n') |
|
|
|
if err != nil { |
|
|
|
gameComplete = true |
|
|
|
break |
|
|
|
} |
|
|
|
|
|
|
|
//Write to log |
|
|
|
w := bufio.NewWriter(f) |
|
|
|
w.WriteString(text) |
|
|
|
w.Flush() |
|
|
|
|
|
|
|
roundComplete = parseLine(text) |
|
|
|
} |
|
|
|
|
|
|
|
strategy.Execute(stars, flights, links) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func parseLine(text string) bool { |
|
|
|
parts := strings.Split(text, " ") |
|
|
|
command := strings.Trim(parts[0], "\n") |
|
|
|
|
|
|
|
switch command { |
|
|
|
case "stars": |
|
|
|
// Process stars |
|
|
|
for i := 1; i < len(parts)-1; i++ { |
|
|
|
var x, y int |
|
|
|
x, _ = strconv.Atoi(parts[i]) |
|
|
|
y, _ = strconv.Atoi(parts[i+1]) |
|
|
|
star := models.Star { |
|
|
|
X: x, |
|
|
|
Y: y, |
|
|
|
Richness: 0, |
|
|
|
Owner: -2, |
|
|
|
Ships: -2, |
|
|
|
Turns: -2, |
|
|
|
} |
|
|
|
stars = append(stars, star) |
|
|
|
} |
|
|
|
break |
|
|
|
case "star": |
|
|
|
var idx, _ = strconv.Atoi(parts[1]) |
|
|
|
var richness, _ = strconv.Atoi(parts[2]) |
|
|
|
var owner, _ = strconv.Atoi(parts[3]) |
|
|
|
var ships, _ = strconv.Atoi(parts[4]) |
|
|
|
var turns, _ = strconv.Atoi(parts[5]) |
|
|
|
star := &stars[idx] |
|
|
|
star.Richness = richness |
|
|
|
star.Owner = owner |
|
|
|
star.Ships = ships |
|
|
|
star.Turns = turns |
|
|
|
break |
|
|
|
case "link": |
|
|
|
var source_idx, _ = strconv.Atoi(parts[1]) |
|
|
|
var target_idx, _ = strconv.Atoi(parts[2]) |
|
|
|
|
|
|
|
link := models.Link { |
|
|
|
SourceStar: source_idx, |
|
|
|
TargetStar: target_idx, |
|
|
|
} |
|
|
|
|
|
|
|
links = append(links, link) |
|
|
|
break |
|
|
|
case "flight": |
|
|
|
var source_idx, _ = strconv.Atoi(parts[1]) |
|
|
|
var target_idx, _ = strconv.Atoi(parts[2]) |
|
|
|
var ship_count, _ = strconv.Atoi(parts[3]) |
|
|
|
var owner, _ = strconv.Atoi(parts[4]) |
|
|
|
var turns, _ = strconv.Atoi(parts[5]) |
|
|
|
|
|
|
|
flight := models.Flight { |
|
|
|
SourceStar: source_idx, |
|
|
|
TargetStar: target_idx, |
|
|
|
Ships: ship_count, |
|
|
|
Owner: owner, |
|
|
|
Turns: turns, |
|
|
|
} |
|
|
|
flights = append(flights, flight) |
|
|
|
break |
|
|
|
case "done": |
|
|
|
return true |
|
|
|
} |
|
|
|
|
|
|
|
return false |
|
|
|
} |