猜谜游戏
1. 实现生成随机数
代码如下图:
首先,引入fmt、math/rand和time包,这样我们可以使用其中的函数和工具。注意要引入"time",后续我们需要用到启动的时间戳来初始化随机数种子。随后,在main函数中定义了一个变量maxNum,并将其初始化为100,我们用它表示生成随机数的最大范围。rand.Seed()函数用于设置随机数发生器的种子。通过调用time.Now().UnixNano()函数可以获取当前时间的纳秒级表示,从而保证每次运行生成的随机数不同。rand.Intn()函数根据指定的最大值生成一个0到该最大值(不包括最大值)之间的随机整数。这里将生成的随机数赋给变量secretNumber。最后fmt.Println()函数用于在控制台输出信息,这里将显示生成的随机数的值。
2. 读取用户输入
代码如下图:
maxNum := 100 定义一个变量maxNum并将其赋值为100,作用是将数字的范围规定在100以内。
secretNumber := rand.Intn(maxNum) 生成一个0到maxNum(不包括maxNum)之间的随机整数,并将其赋给变量secretNumber。
为了输入新的数字,使用函数reader := bufio.NewReader(os.Stdin) 创建一个用于从标准输入读取数据的bufio.Reader。
然后使用函数input, err := reader.ReadString('\n') 用于读取用户输入的字符串,直到遇到换行符,因此只会读取输入的一行内容。
随后的strings.TrimSuffix(input, "\n")函数用于去除输入字符串末尾的换行符。
guess, err := strconv.Atoi(input) 将输入的字符串转换为整数,并赋值给变量guess。
3. 实现逻辑判断
经过上述的代码,用户在输入后可以得到一个值,和一个生成的秘密值,我们来比较这两个值的大小。如果是用户输入的值比那个秘密的值要大的话,就告诉用户你猜的值太大了。如果是小了也同理,如果是相等的话,那么我们就告诉用户赢了。
分析逻辑判断代码:
字符串转换为整数,代码使用strconv.Atoi(input)将用户输入的字符串转换为整数。strconv.Atoi()函数是Go语言的标准库函数,用于将字符串转换为对应的整数类型。
条件语句:代码使用if-else if-else条件语句根据用户猜测的数字与秘密数字的大小关系给出相应的提示信息。条件语句是一种控制结构,根据条件的真假执行不同的代码块。
输出信息:代码使用fmt.Println()函数输出不同的提示信息到控制台。fmt.Println()是Go语言的标准库函数,用于向控制台输出文本。
变量操作:代码中使用变量guess保存用户猜测的数字,并通过比较操作符>和<与secretNumber进行比较。
4. 实现游戏循环
经过以上的代码,程序大致可以正常工作了,但是玩家只能输入一次猜测,无论猜测是否正确,程序都会退出。为了让游戏可以正常玩下去,我们需要加一个循环。我们把刚刚的代码挪到一个for循环里面,再把returm改成 continue以便于在出错的时候能够继续循环。在用户输入正确的时候break,这样才能够在用户胜利的时候退出游戏。