这是我参与「第五届青训营 」伴学笔记创作活动的第3天
游戏简介
在这个游戏中,首先会生成一个1到100之间的随机数,然后提示玩家进行猜测,玩家每输入一个数字,程序会告诉玩家这个猜测的值是高于随机值还是低于随机值,并让玩家再次猜测,直到玩家猜对,玩家胜利并退出程序。
实现思路
生成随机数
调用go官方提供的随机函数生成包,生成一个0-100的随机数,函数返回值secretNumber就是生成的随机数
# 定义随机数最大值
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
用户输入
bufio包
使用bufio包中的NewReader方法读取系统标准输入流中的数据,在使用strings包中Trim方法去除换行符制表符(\n\t),若此过程发生错误,则提示用户输入错误,并让其重试。
reader := bufio.NewReader(os.Stdin)
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")
fmt包
使用fmt包中的Scanf方法,此方法使用与C语言中的scanf方法十分相似,可以按规定的格式获取系统输入流,我们调用Scanf方法读取一个字符串,在使用strings包中Trim方法去除换行符制表符(\n\t),若此过程发生错误,则提示用户输入错误,并让其重试。
fmt.Println("Please input your guess:")
_, err := fmt.Scanf("%s", &userInput)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
continue
}
userInput = strings.Trim(userInput, "\r\n")
用户输入的逻辑判断
具体判断逻辑:如用户输入的值相比生成的随机数小,则提示用户猜的小了;若输入的值相比生成的随机数大,则提示用户猜的大了;若用户输入的值恰好等于生成的随机数,则提示用户猜对了并退出程序。
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!")
return
}
代码
使用bufio包的版本
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("The secret number is ", secretNumber)
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
}
}
}
使用fmt包的版本
package main
import (
"fmt"
"math/rand"
"strconv"
"strings"
"time"
)
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
//fmt.Println("The secret number is ", secretNumber)
//用户的输入
var userInput string
for {
fmt.Println("Please input your guess:")
_, err := fmt.Scanf("%s", &userInput)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
continue
}
userInput = strings.Trim(userInput, "\r\n")
guess, err := strconv.Atoi(userInput)
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!")
return
}
}
}
总结
通过猜谜游戏的练习,让自己更加熟练的了解并掌握go的各种语法使用!