开发者

Go语言实现猜谜小游戏

开发者 https://www.devze.com 2023-01-29 10:56 出处:网络 作者: Java星辰
目录前言技术点随机数随机数种子接收用户输入ReaderScanf完整代码使用Reader使用Scanf总结前言
目录
  • 前言
  • 技术点
    • 随机数
    • 随机数种子
    • 接收用户输入
      • Reader
      • Scanf
  • 完整代码
    • 使用Reader
      • 使用Scanf
      • 总结

        前言

        本文是介绍用Go实现一个猜谜小游戏,就是程序先生成一个随机数num,然后让用户来猜生成的数是多少,如果猜的数比num小就提示用户猜测的数据小于num,如果猜的数比num大就提示用户测试的数据大于num,如果猜测的数据刚好是num就提示用户猜对了。

        技术点

        在本文中将会使用到以下技术点:随机数、随机数种子、获取当前时间戳、两种读取终端输入方式等。

        随机数

        Go生成随机数需要引入math/rand包,Intn(n int)函数可以生成一个0~n的非负随机整数数,包含0不包含n也就是[0,n)

        import (
            "fmt"
            "math/rand"
        )
        func main() {
            fmt.Println(rand.Intn(100))
        }
        

        经过多次运行,我们发现产生的数并不是随机的,每次都一样。

        Go语言实现猜谜小游戏

        随机数种子

        Go中的随机数是通过rand.Seed(种子值seedNum)设置种子值,在同一个种子下每次产生的随机数顺序是一样的。

        为了保证种子值的随机性,一般采用系统时间的毫秒值作为种子值,因为系统时间的毫秒值是一直变动的。

        time.Now().UnixMilli()可以系统当前的毫秒时间戳。

        time.Now().Unix()可以系统当前的秒时间戳。

        time.Now().UnixMicro()可以系统当前的微秒时间戳。

        time.Now().UnixNano()可以系统当前的纳秒时间戳。

        import (
            "fmt"
            "math/rand"
            "time"
        )
        func main() {
            rand.Seed(time.Now().UnixNano())
            fmt.Println(rand.Intn(100))
        }
        

        再次运行代码,可以发现每次运行的随机数都是不同的了。

        Go语言实现猜谜小游戏

        接收用户输入

        Reader

        os.Stdin指向标准输入文件/dev/stdinos.Stdinos包的一个变量。它是os包的NewFile函数的返回值。

        bufio包中都是IO操作的方法,创建Reader对象,就可以读取数据了。

        reader := bufio.NewReader(os.Stdin)
        

        设置按行读取:

        input, err := reader.ReadString('\n')
        

        按行读取得到的结果是包含换行符的,要把换行符给截取去掉:

        input = strings.Trim(injsput, "\r\n")
        

        再把得到的字符串转换为数字:

        guess, err := strconv.Atoi(input)
        

        Scanf

        Scanf函数也可以从os.Stdin中读取数据。WSDuOTHoLX

        var guess int
        fmt.Scanf("%d", &guess)
        fmt.Println(guess)
        

        完整代码

        因为用户不一定一次就猜中数据,我们可以使用for循环,当用户猜不中时,可以让用户再继续猜直到猜中。

        下面来看下完整的代码。

        使用Reader

        func main() {
            maxNum := 10开发者_C学习0
            rand.Seed(time.Now().UnixNano())
            secretNumber := rand.Intn(maxNum)
            fmt.Println("Please input your guess")
            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.Trim(input, "\r\n")
                guess, err := strconv.Atoi(input)
                if err != nil {
                    fmt.Println("Invalid input. Please enter an integer value")
                    continue
                }
                fmt.Println("You guess is", guess)
                if guess > secretNumber {
                    fmt.Println(编程"Your guess is bigger than the secret number. Please try again")
                } else if guess < secretNumber {
                    fmt.Println("Your guess is smaller than the secret number. Please try again")
                } else {
                    fmt.Println("Correct, you Legend!")
                    break
                }
            }
        }
        

        使用Scanf

        func main() {
            maxNum := 100
            rand.Seed(time.Now().UnixNano())
            secretNumber := rand.Intn(maxNum)
            fmt.Println("Please input your guess")
            var guess int
            for {
                fmt.Scanf("%d", &guess)
                fmt.Println("You guess is", guess)
                if guess > secretNumber {
                    fmt.Println("Your gupythoness is bigger than the secret number. Please try again")
                } else if guess < secretNumber {
                    fmt.Println("Your guess is smaller than the secret number. Please try again")
                } else {
                    fmt.Println("Correct, you Legend!")
                    break
                }
            }
        }
        

        来运行一下代码看下最终效果:

        Go语言实现猜谜小游戏

        总结

        本文介绍了使用Go语言来实现类一个猜字小游戏,在文中介绍了随机数、随机数种子以及如何从终端读取数据的两种方法。

        对比从终端获取用户输入的两种方法,我们可以看到使用Scanf比使用bufio中的Reader方便了很多,大大简化了代码。

        刚刚接触Go难免有些错误与不足之处,如有发现欢迎指javascript出。

        以上就是Go语言实现猜谜小游戏的详细内容,更多关于Go实现猜谜小游戏的资料请关注我们其它相关文章!

        0

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        关注公众号