Go语言实战案例 | 青训营

110 阅读3分钟

猜谜游戏

猜谜游戏是一个简单的命令行游戏,玩家需要猜测计算机生成的秘密数字,直到猜对为止。

要点

  1. 游戏生成一个在 1 到 100 范围内的随机整数作为随机数字。
  2. 提示玩家输入猜测的数字,并将输入解析成整数。
  3. 比较玩家的猜测和秘密数字,根据比较结果给出相应的提示,让玩家继续猜测。
  4. 进入游戏循环,循环中玩家可以反复输入猜测的数字直到猜对为止。
  5. 当玩家猜对秘密数字时,打印胜利的提示,游戏结束。

语法

  • 包管理和导入:在 Go 语言中使用 import 来导入所需的包,比如 fmtmath/randos 等。

  • 随机数生成:由于rand.Seed()方法在go1.20已经弃用。所以使用 math/rand 包的 rand.New(rand.NewSource()) rand.Intn() 函数来生成随机整数。

  • 时间处理:使用 time 包获取当前时间的纳秒级表示,用于初始化随机数生成器的种子值。

  • 用户输入输出:使用 fmt.Scanf("%d", &guess)。并使用 fmt 包的 Println() 函数来打印输出。

  • 字符串处理:使用 strings 包的 Trim() 函数来处理输入中的结尾换行符。

  • 类型转换:使用 strconv 包的 Atoi() 函数将字符串转换成整数。

  • 循环:使用 for { } 来创建一个无限循环,使得游戏可以持续进行,直到玩家猜对为止。

  • 条件语句:使用 ifelse if 来根据玩家猜测和秘密数字的比较结果给出相应的提示。

代码

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	maxNum := 100
 
    r := rand.New(rand.NewSource(time.Now().UnixNano()))
	secretNumber := r.Intn(maxNum)
    // 打印随机数字(方便查看随机数,实际游戏中不应该将这个数字展示给玩家)
	fmt.Println("your guess number is :")
	var guess int
	for {
		_, err := fmt.Scanf("%d", &guess)
		if err != nil {
			fmt.Println("Invalid input. Please enter an integer value")
			continue
		}

		fmt.Println("Your 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!")
			break
		}
	}
}
  • package main:包声明
  • maxNum := 100:声明了一个整数变量 maxNum,并将其初始化为 100,表示猜测的数字在 1 到 100 之间
  • rand.NewSource(time.Now().UnixNano()):创建一个随机数生成器,并以当前时间的纳秒数作为种子,确保每次运行程序时生成的随机数是不同的。
  • Intn(maxNum):使用随机数生成器的方法生成一个0到maxNum-1之间的随机整数作为秘密数字secretNumber
  • strconv.Atoi(input):将输入的字符串转换为整数类型的猜测数字guess。若输入的内容非数字,则提示玩家重新输入。

总结

通过这个简单的猜谜游戏,我学习了如何在 Go 语言中实现基本的随机数生成、用户输入输出、字符串处理和循环等功能,这些是编程中常用的基础知识。同时,我们还了解了如何使用条件语句来实现游戏的逻辑判断。