猜谜游戏
计算机生成一个随机数,用户输入猜测的数字,根据数字的大小,提示“Your guess is bigger than the secret number. ”或“Your guess is smaller than the secret number.”,直到用户输入正确,退出游戏。
一、生成随机数
num := 100
n := rand.Intn(num)
fmt.Println(n)
重复运行会发现随机生成的数字一直是81。这时我们需要设置随机数种子。
num := 100
rand.Seed(time.Now().UnixNano())
n := rand.Intn(num)
fmt.Println(n)
注意:
- 要使用随机数必需导入math/rand。
- rand.Seed( time.Now().UnixNano() )要使用时间戳初始化随机数种子,加上这行代码,可以保证每次随机都是随机的。。
二、读取用户输入
fmt.Println("请输入你猜测的数字:")
reader := bufio.NewReader(os.Stdin)
//读取一行输入
input ,err := reader.ReadString('\n')
if err != nil {
fmt.Println("错误!",err)
return
}
//去掉换行符
input = strings.TrimSuffix(input,"\n")
//转换成数字
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("错误!",err)
return
}
fmt.Println("你的猜测是:",guess)
以一种曲折的方式获取用户输入:
- 每个程序执行的时候都会打开几个文件,stdin,stdout,stderr等,stdin文件可以用os.Stdin来得到文件。
- 然后用 bufio.NewReader把一个文件转换成一个只读变量。
- 然后用reader.ReadSting方法来读取一行。
- 返回的结果包含结尾的换行符,我们用strings.TrimSuffix方法把它去掉。
- 再用strconv.Atoi方法转换成数字。
三、实现逻辑判断
if guess < n {
fmt.Println("Your guess is smaller than the secret number!")
}else if guess > n{
fmt.Println("Your guess is bigger than the secret number!")
}else{
fmt.Println("恭喜你,猜对了!")
}
判断用户猜测数字与随机数是否匹配:
- 如果用户猜测数字小于随机生成数,那提示用户“Your guess is smaller than the secret number!”。
- 如果用户猜测数字大于随机生成数,那提示用户“Your guess is bigger than the secret number!”。
- 如果用户猜测数字等于随机生成数,那提示用户猜对了。
四、猜谜游戏实现
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
func main() {
num := 100
rand.Seed(time.Now().UnixNano())
n := rand.Intn(num)
for {
fmt.Print("请输入你猜测的数字:")
reader := bufio.NewReader(os.Stdin)
//读取一行输入
input ,err := reader.ReadString('\n')
if err != nil {
fmt.Println("错误!",err)
continue
}
//去掉换行符
input = strings.TrimSuffix(input,"\n")
//转换成数字
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("错误!",err)
continue
}
fmt.Println("你的猜测是:",guess)
if guess < n {
fmt.Println("小了!")
continue
}else if guess > n{
fmt.Println("大了!")
continue
}else{
fmt.Println("恭喜你,猜对了!")
break
}
}
}
- 产生随机数用作用户猜测的数字。
- 读取用户输入信息并进行逻辑判断。
- 为实现用户不断猜测,需要加上循环,直到猜测成功,游戏结束。