Guest User

Untitled

a guest
Jan 21st, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "log"
  6. "math/rand"
  7. "time"
  8. )
  9.  
  10. type enumValue int32
  11.  
  12. const (
  13. setup enumValue = iota
  14. play
  15. wrongAnswer
  16. correctAnswer
  17. higherAnswer
  18. lowerAnswer
  19. highScore
  20. end
  21. )
  22.  
  23. type Game struct {
  24. state enumValue
  25. playerName string
  26. highscore int
  27. number int
  28. count int
  29. }
  30.  
  31. func New() *Game {
  32. machine := &Game{}
  33. return machine
  34. }
  35. func main() {
  36. game := New()
  37. game.Run()
  38. }
  39.  
  40. func setupGame(g *Game) enumValue {
  41. fmt.Print("Input your name: ")
  42. fmt.Scanf("%s\n", &g.playerName)
  43. rand.Seed(time.Now().UTC().UnixNano())
  44. g.number = rand.Intn(100)
  45. log.Println("Number to guess", g.number)
  46. return play
  47. }
  48. func playGame(g *Game) enumValue {
  49. fmt.Println("Guess the number? ")
  50. var number int
  51. fmt.Scanf("%d\n", &number)
  52. switch {
  53. case g.number == number:
  54. return correctAnswer
  55. case number < g.number:
  56. return higherAnswer
  57. case number > g.number:
  58. return lowerAnswer
  59. }
  60. if g.number == number {
  61. return correctAnswer
  62. }
  63. return wrongAnswer
  64. }
  65.  
  66. func wrong(g *Game) enumValue {
  67. fmt.Println("Wrong guess, please try again.")
  68. g.count++
  69. return play
  70. }
  71.  
  72. func correct(g *Game) enumValue {
  73. fmt.Println("Congratulations")
  74. fmt.Printf("You did it in %d tries.\n", g.count)
  75. return end
  76. }
  77.  
  78. func showHighscore(g *Game) enumValue {
  79. return end
  80. }
  81. func higher(g *Game) enumValue {
  82. return end
  83. }
  84.  
  85. func lower(g *Game) enumValue {
  86. return end
  87. }
  88.  
  89. // Run is the main routine to run and will execute all the states accordingly
  90. func (g *Game) Run() {
  91. for state := g.state; state != end; {
  92. switch state {
  93. case setup:
  94. state = setupGame(g)
  95. case play:
  96. state = playGame(g)
  97. case wrongAnswer:
  98. state = wrong(g)
  99. case higherAnswer:
  100. state = higher(g)
  101. case lowerAnswer:
  102. state = lower(g)
  103. case correctAnswer:
  104. state = correct(g)
  105. case highScore:
  106. state = showHighscore(g)
  107. }
  108. }
  109. }
Add Comment
Please, Sign In to add comment