-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
110 lines (96 loc) · 2.07 KB
/
main.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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package main
import (
"bufio"
"encoding/csv"
"errors"
"fmt"
"os"
"strconv"
)
type Quest struct {
Text string
Options []string
Answer int
}
type GameState struct {
Name string
Points int
Quests []Quest
}
func (g *GameState) Init() {
fmt.Println("Esse é o quiz GoLang!")
fmt.Println("Digite seu nome para começarmos:")
reader := bufio.NewReader(os.Stdin)
name, err := reader.ReadString('\n')
if err != nil {
panic("Erro ao ler a string!!")
}
g.Name = name
fmt.Printf("Vamos ao game %s", g.Name)
}
func (g *GameState) ProcessCSV() {
file, err := os.Open("./quiz.csv")
if err != nil {
panic("Erro ao abrir arquivo CSV")
}
defer file.Close()
reader := csv.NewReader(file)
records, err := reader.ReadAll()
if err != nil {
panic("Erro na ler do arquivo CSV")
}
for index, record := range records {
if index > 0 {
corAnswer, _ := toInt(record[5])
question := Quest{
Text: record[0],
Options: record[1:5],
Answer: corAnswer,
}
g.Quests = append(g.Quests, question)
}
}
}
func (g *GameState) Run() {
for index, question := range g.Quests {
fmt.Printf("\033[33m %d. %s\033[m\n", index+1, question.Text)
for j, opt := range question.Options {
fmt.Printf("[%d] %s\n", j+1, opt)
}
fmt.Println("Digite a alternativa:")
var ent int
var err error
for {
reader := bufio.NewReader(os.Stdin)
read, _ := reader.ReadString('\n')
ent, err = toInt(read[:len(read)-1])
if err != nil {
fmt.Println(err.Error())
continue
}
break
}
if question.Answer == ent {
fmt.Println("Parabéns, você acertou!")
fmt.Println("----------------------------------")
g.Points += 10
} else {
fmt.Println("Opps! Você errou")
fmt.Println("----------------------------------")
}
}
}
func main() {
game := &GameState{}
go game.ProcessCSV()
game.Init()
game.Run()
fmt.Printf("Fim de jogo! Você fez %d de 40 pontos\n", game.Points)
}
func toInt(s string) (int, error) {
i, err := strconv.Atoi(s)
if err != nil {
return 0, errors.New("não é permitido caractere diferente de número")
}
return i, nil
}