Go语言入门(猜数小游戏)| 豆包MarsCode AI刷题

110 阅读3分钟

根据我们前面学习的一些Go语言基础,我们可以完成一个简单的猜数小游戏。

我们将通过随机函数生成一个整数答案,用户通过键盘输入数字,控制台将打印提示用户猜测的数字比答案大了还是小了,直到用户输入的数字与我们设定的值相等。

编写过程

  1. 导入必要的包

    • bufio:用于读取标准输入。
    • fmt:用于格式化I/O。
    • math/rand:用于生成随机数。
    • os:用于与操作系统交互,这里主要用于获取标准输入。
    • strconv:用于基本数据类型和字符串之间的转换。
    • strings:用于处理字符串。
    • time:用于获取当前时间,作为随机数生成的种子。
  2. 定义main函数

    • 设置最大数字maxNum为100,这意味着随机生成的目标数字将在0到99之间。
    • 使用time.Now().UnixNano()作为种子初始化随机数生成器,确保每次运行程序时生成的随机数都不同。
    • 通过rand.Intn(maxNum)生成一个0到maxNum-1(即99)之间的随机整数作为秘密数字。
  3. 游戏循环

    • 提示用户输入他们的猜测。

    • 使用bufio.NewReader(os.Stdin)创建一个读取器,用于从标准输入读取数据。

    • 在一个无限循环中,使用reader.ReadString('\n')读取用户的输入,直到遇到换行符。

    • 检查读取过程中是否发生错误,如果发生错误,打印错误信息并继续循环。

    • 使用strings.Trim(input, "\r\n")去除输入字符串两端的空白字符(包括换行符)。

    • 尝试将用户输入的字符串转换为整数guess,如果转换失败(例如,输入的不是数字),则打印错误信息并继续循环。

    • 打印用户的猜测。

    • 通过一系列的if语句比较用户的猜测与秘密数字:

      • 如果猜测大于秘密数字,提示用户猜测的数字太大。
      • 如果猜测小于秘密数字,提示用户猜测的数字太小。
      • 如果猜测等于秘密数字,打印胜利信息并退出循环。
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
		}
	}
}

这段代码通过不断读取用户的输入,生成随机数,并根据用户的猜测给出相应的提示,直到用户猜对为止。这是一个简单的游戏逻辑,通过这段代码,我们可以学习到如何使用 Go 语言进行基本的输入输出操作、错误处理、字符串处理和循环控制等。