Go语言原理与实践-实战小案例1-猜数小游戏

犀利的毛毛虫 发布于 2025-01-30 225 次阅读


本文仅作为个人笔记使用,主要看源代码,按个人习惯来:

一个猜数小游戏

package main
import (
    "fmt"
    "math/rand"
)
func main() {
    maxNum := 100
    secretNumber := rand.Intn(maxNum)
    fmt.Println("The secret number is ", secretNumber)
}

导入"math/rand"包作为随机数生成的包,使用rand.Intn()来生成一个随机数,但是会发现多次运行后生成的随机数是一样的。这时就需要初始化随机种子了,一般是使用当前的时间戳来初始化随机数种子:

package main
import (
    "fmt"
    "math/rand"
    "time"
)
func main() {
    maxNum := 100
    rand.Seed(time.Now().UnixNano())
    secretNumber := rand.Intn(maxNum)
    fmt.Println("The secret number is ", secretNumber)
}

rand.Seed()来设置随机数种子

package main
import (
    "bufio"
    "fmt"
    "math/rand"
    "os"
    "strconv"
    "strings"
    "time"
)
func main() {
    maxNum := 100
    rand.Seed(time.Now().UnixNano())
    secretNumber := rand.Intn(maxNum)
    fmt.Println("The secret number is ", secretNumber)
    fmt.Println("Please input your guess")
    reader := bufio.NewReader(os.Stdin)
    input, err := reader.ReadString('\n')
    if err != nil {
        fmt.Println("An error occured while reading input. Please try again", err)
        return
    }
    input = strings.Trim(input, "\r\n")
    guess, err := strconv.Atoi(input)
    if err != nil {
        fmt.Println("Invalid input. Please enter an integer value")
        return
    }
    fmt.Println("You guess is", guess)
}

使用os.Stdin来打开一个stdin文件,但直接操作这个文件非常复杂,因此使用reader = bufio.NewReader转换为只读流,然后reader.ReadString('\n')读取一行,随后input = strings.TrimSuffix(input,'\n')来去掉换行符。最后strconv.Atoi(input)来将字符串转换为数字。

package main  
  
import (  
    "bufio"  
    "fmt"    "math/rand"    "os"    "strconv"    "strings"    "time")  
  
func main() {  
    maxNum := 100  
    rand.Seed(time.Now().UnixNano())  
    secretNum := rand.Intn(maxNum) + 1  
    fmt.Println("I have chosen a random number between 1 and", maxNum)  
    fmt.Println("Can you guess it?")  
    fmt.Println("The secret number is", secretNum)  
    reader := bufio.NewReader(os.Stdin)  
    for {  
       input, err := reader.ReadString('\n')  
       if err != nil {  
          fmt.Println("An error occured while reading input. Please try again", err)  
          continue  
       }  
       input = strings.TrimSuffix(input, "\n")  
       guess, err := strconv.Atoi(input)  
       if err != nil {  
          fmt.Println("Invalid input. Please enter an integer value", err)  
          continue  
       }  
       if guess > secretNum {  
          fmt.Println("Too high")  
       } else if guess < secretNum {  
          fmt.Println("Too low")  
       } else {  
          fmt.Println("Correct, you win!")  
          break  
       }  
    }  
  
}

稍微完善一下逻辑,加一个for循环,以上就是这个小游戏的全部代码了。