add proper game importing
This commit is contained in:
parent
0adeba4daa
commit
cdbe614e22
16
main.odin
16
main.odin
|
|
@ -40,26 +40,26 @@ main :: proc() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO don't just test this, actually read the fields into a game struct
|
|
||||||
if len(os.args) > 1 {
|
|
||||||
importGame(nil, os.args[1])
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
// Create game
|
||||||
|
game: Game
|
||||||
|
if len(os.args) > 1 {
|
||||||
|
importGame(&game, os.args[1])
|
||||||
|
} else {
|
||||||
// Prompt for names
|
// Prompt for names
|
||||||
buf: [2048]byte
|
buf: [2048]byte
|
||||||
names := getNames(buf[:])
|
names := getNames(buf[:])
|
||||||
defer delete(names)
|
defer delete(names)
|
||||||
|
|
||||||
// Create game
|
|
||||||
game: Game
|
|
||||||
for name in names {
|
for name in names {
|
||||||
addPlayer(&game, name)
|
addPlayer(&game, name)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
defer deleteGameData(&game) // Clean up game data
|
defer deleteGameData(&game) // Clean up game data
|
||||||
|
|
||||||
// Main game loop
|
// Main game loop
|
||||||
printGame(&game)
|
printGame(&game)
|
||||||
winner: int = -1
|
winner: int = checkWinner(&game)
|
||||||
for winner == -1 {
|
for winner == -1 {
|
||||||
addScores(&game)
|
addScores(&game)
|
||||||
updatePhasesByScores(&game)
|
updatePhasesByScores(&game)
|
||||||
|
|
|
||||||
30
phase10.odin
30
phase10.odin
|
|
@ -17,11 +17,14 @@ Game :: struct {
|
||||||
|
|
||||||
// Clean up memory allocated for a Game struct
|
// Clean up memory allocated for a Game struct
|
||||||
deleteGameData :: proc(game: ^Game) {
|
deleteGameData :: proc(game: ^Game) {
|
||||||
|
for name in game.names {
|
||||||
|
delete(name)
|
||||||
|
}
|
||||||
for scorelist in game.scores {
|
for scorelist in game.scores {
|
||||||
delete(scorelist)
|
delete(scorelist)
|
||||||
}
|
}
|
||||||
delete(game.scores)
|
|
||||||
delete(game.names)
|
delete(game.names)
|
||||||
|
delete(game.scores)
|
||||||
delete(game.phases)
|
delete(game.phases)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -61,9 +64,10 @@ updatePhasesByScores :: proc(game: ^Game) {
|
||||||
|
|
||||||
// Add a player to the game
|
// Add a player to the game
|
||||||
addPlayer :: proc(game: ^Game, name: string, score: int = 0, phase: int = 1) {
|
addPlayer :: proc(game: ^Game, name: string, score: int = 0, phase: int = 1) {
|
||||||
append(&game.names, name)
|
stringCopy: string = strings.clone(name)
|
||||||
|
append(&game.names, stringCopy)
|
||||||
append(&game.phases, phase)
|
append(&game.phases, phase)
|
||||||
// Calculate necesasry score sheet to result in score and phase
|
// Calculate necessary score sheet to result in score and phase
|
||||||
scores: [dynamic]int
|
scores: [dynamic]int
|
||||||
for i := 1; i < phase - 1; i += 1 {
|
for i := 1; i < phase - 1; i += 1 {
|
||||||
append(&scores, 0)
|
append(&scores, 0)
|
||||||
|
|
@ -114,8 +118,12 @@ printGame :: proc(game: ^Game) {
|
||||||
fmt.printf("Name\tScore\tPhase\n")
|
fmt.printf("Name\tScore\tPhase\n")
|
||||||
fmt.printf("----\t-----\t-----\n")
|
fmt.printf("----\t-----\t-----\n")
|
||||||
for name, index in game.names {
|
for name, index in game.names {
|
||||||
fmt.printf("%v\t%v\t%v\n", name, getScore(game, index),
|
fmt.printf(
|
||||||
game.phases[index])
|
"%v\t%v\t%v\n",
|
||||||
|
name,
|
||||||
|
getScore(game, index),
|
||||||
|
game.phases[index]
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -215,7 +223,17 @@ importGame :: proc(game: ^Game, filename: string) {
|
||||||
for r, i, err in csv.iterator_next(&r) {
|
for r, i, err in csv.iterator_next(&r) {
|
||||||
if err != nil { /* Do something with error */ }
|
if err != nil { /* Do something with error */ }
|
||||||
for f, j in r {
|
for f, j in r {
|
||||||
fmt.printfln("Record %v, field %v: %q", i, j, f)
|
if i == 0 {
|
||||||
|
nameClone := strings.clone(f)
|
||||||
|
scores: [dynamic]int
|
||||||
|
append(&game.names, nameClone)
|
||||||
|
append(&game.scores, scores)
|
||||||
|
append(&game.phases, 1)
|
||||||
|
} else {
|
||||||
|
score, _ := strconv.parse_int(f)
|
||||||
|
append(&game.scores[j], score)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
updatePhasesByScores(game)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue