Go语言实现简单猜谜游戏 | 伴学笔记

79 阅读3分钟

在Go语言基础的第二课实践案例中介绍了用Go语言写出一个简单的猜谜游戏,其主要由以下几个部分构成:

1、在0到100范围内生成一个随机数:

func main() {
	maxNum := 100
	rand.Seed(time.Now().UnixNano())
	secretNumber := rand.Intn(maxNum)

可见,程序生成一个0到maxNum之间的随机数作为秘密数字secretNumber

2、读取用户输入

fmt.Println("Please input your guess")
	reader := bufio.NewReader(os.Stdin)

提示用户输入数字,并使用bufio.NewReader创建一个读取器reader,用于从标准输入读取用户的输入。

3、修正输入信息

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
		}

如果转换失败,则提示用户重新输入。

4、根据输入进行输出

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

判断用户输入较之答案过大或过小并给予提示,直至输入正确。

5、完整代码

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("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
		}
	}
}

6、学习总结

经过这次深入的学习实践,我对使用Go语言进行编程有了更加全面和深入的理解。从编写一个简单的猜谜游戏开始,我逐步掌握了Go语言中的随机数生成、用户输入处理、逻辑判断以及代码结构构建等多个关键技能。

在随机数生成方面,我学会了如何利用`math/rand`包中的`rand.Intn`函数,在指定范围内生成一个随机数,并通过`rand.Seed`函数设置随机数种子,确保每次运行程序时生成的随机数都是不同的,这为游戏的随机性提供了保障。
在用户输入处理方面,我掌握了利用`bufio.NewReader`创建读取器,并通过`ReadString`方法读取用户输入的技巧。同时,我也学会了如何去除输入字符串末尾的回车和换行符,以及如何将字符串转换为整数,并对转换失败的情况进行错误处理,这提高了程序的健壮性和用户体验。
在逻辑判断方面,我通过`if-else`语句对用户输入的数字与生成的随机数进行了大小比较,并根据比较结果给出了相应的提示。此外,我还利用`for`循环实现了不断读取用户输入并进行判断的功能,直到用户猜中数字为止,这为游戏的互动性提供了支持。

总的来说,这次学习实践不仅让我掌握了编写简单猜谜游戏所需的技能,更让我对Go语言有了更加深入的认识和理解。