GOLang工程实践课后作业——实现猜谜游戏 | 青训营

92 阅读2分钟

猜谜游戏

计算机生成一个随机数,用户输入猜测的数字,根据数字的大小,提示“Your guess is bigger than the secret number. ”或“Your guess is smaller than the secret number.”,直到用户输入正确,退出游戏。

一、生成随机数

num := 100
n := rand.Intn(num)
fmt.Println(n)

重复运行会发现随机生成的数字一直是81。这时我们需要设置随机数种子。

num := 100
rand.Seed(time.Now().UnixNano())
n := rand.Intn(num)
fmt.Println(n)

注意:

  • 要使用随机数必需导入math/rand。
  • rand.Seed( time.Now().UnixNano() )要使用时间戳初始化随机数种子,加上这行代码,可以保证每次随机都是随机的。。

二、读取用户输入


 fmt.Println("请输入你猜测的数字:")
 reader := bufio.NewReader(os.Stdin)
 //读取一行输入
 input ,err := reader.ReadString('\n')
 if err != nil {
    fmt.Println("错误!",err)
    return
 }
 //去掉换行符
 input = strings.TrimSuffix(input,"\n")
 //转换成数字
 guess, err := strconv.Atoi(input)
 if err != nil {
    fmt.Println("错误!",err)
    return
 }
 fmt.Println("你的猜测是:",guess)

以一种曲折的方式获取用户输入:

  1. 每个程序执行的时候都会打开几个文件,stdin,stdout,stderr等,stdin文件可以用os.Stdin来得到文件。
  2. 然后用 bufio.NewReader把一个文件转换成一个只读变量。
  3. 然后用reader.ReadSting方法来读取一行。
  4. 返回的结果包含结尾的换行符,我们用strings.TrimSuffix方法把它去掉。
  5. 再用strconv.Atoi方法转换成数字。

三、实现逻辑判断

if guess < n {
    fmt.Println("Your guess is smaller than the secret number!")
}else if guess > n{
    fmt.Println("Your guess is bigger than the secret number!")
}else{
    fmt.Println("恭喜你,猜对了!")
}

判断用户猜测数字与随机数是否匹配:

  1. 如果用户猜测数字小于随机生成数,那提示用户“Your guess is smaller than the secret number!”。
  2. 如果用户猜测数字大于随机生成数,那提示用户“Your guess is bigger than the secret number!”。
  3. 如果用户猜测数字等于随机生成数,那提示用户猜对了。

四、猜谜游戏实现

package main

import (
    "bufio"
    "fmt"
    "math/rand"
    "os"
    "strconv"
    "strings"
    "time"
)

func main() {
    num := 100
    rand.Seed(time.Now().UnixNano())
    n := rand.Intn(num)
    for {
        fmt.Print("请输入你猜测的数字:")
        reader := bufio.NewReader(os.Stdin)
        //读取一行输入
        input ,err := reader.ReadString('\n')
        if err != nil {
            fmt.Println("错误!",err)
            continue
        }
        //去掉换行符
        input = strings.TrimSuffix(input,"\n")
        //转换成数字
        guess, err := strconv.Atoi(input)
        if err != nil {
            fmt.Println("错误!",err)
            continue
        }
        fmt.Println("你的猜测是:",guess)

        if guess < n {
            fmt.Println("小了!")
            continue
        }else if guess > n{
            fmt.Println("大了!")
            continue
        }else{
            fmt.Println("恭喜你,猜对了!")
            break
        }
    }
}

  1. 产生随机数用作用户猜测的数字。
  2. 读取用户输入信息并进行逻辑判断。
  3. 为实现用户不断猜测,需要加上循环,直到猜测成功,游戏结束。