猜谜游戏
猜谜游戏是一个简单的命令行游戏,玩家需要猜测计算机生成的秘密数字,直到猜对为止。
要点
- 游戏生成一个在 1 到 100 范围内的随机整数作为随机数字。
- 提示玩家输入猜测的数字,并将输入解析成整数。
- 比较玩家的猜测和秘密数字,根据比较结果给出相应的提示,让玩家继续猜测。
- 进入游戏循环,循环中玩家可以反复输入猜测的数字直到猜对为止。
- 当玩家猜对秘密数字时,打印胜利的提示,游戏结束。
语法
-
包管理和导入:在 Go 语言中使用
import来导入所需的包,比如fmt、math/rand、os等。 -
随机数生成:由于
rand.Seed()方法在go1.20已经弃用。所以使用math/rand包的rand.New(rand.NewSource())和rand.Intn()函数来生成随机整数。 -
时间处理:使用
time包获取当前时间的纳秒级表示,用于初始化随机数生成器的种子值。 -
用户输入输出:使用
fmt.Scanf("%d", &guess)。并使用fmt包的Println()函数来打印输出。 -
字符串处理:使用
strings包的Trim()函数来处理输入中的结尾换行符。 -
类型转换:使用
strconv包的Atoi()函数将字符串转换成整数。 -
循环:使用
for { }来创建一个无限循环,使得游戏可以持续进行,直到玩家猜对为止。 -
条件语句:使用
if和else 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 语言中实现基本的随机数生成、用户输入输出、字符串处理和循环等功能,这些是编程中常用的基础知识。同时,我们还了解了如何使用条件语句来实现游戏的逻辑判断。