go语言——猜数字小游戏

🎃🎃🎃用go语言做一个小游戏——计算机生成一个随机数,用户输入猜测的数字,根据数字的大小,提示“Your guess is bigger than the secret number. ”或“Your guess is smaller than the secret number.”,直到用户输入正确,退出游戏。

一、生成随机数字

go语言中使用math.rand产生随机数,下面这条语句生成了一个小于maxNum的随机数secretNumber。

secretNumber := rand.Intn(maxNum)

重复运行会发现随机生成的数字一直是81。这是我们需要设置随机数种子,加上下面这行代码,可以保证每次随机都是随机的。

rand.Seed(time.Now().UnixNano())

二、得到用户输入的数字

>要考虑用户可以输入非数字

这里用到了一个包bufio—— bufio实现了缓冲I/O。包装了io.reader或writer对象,创建了另一个对象,该对象也是实现了接口,为文本io提供了缓冲……

NewReader——返回一个buffer为默认大小的reader。

stdin——Stdin、Stdout 和 Stderr 是指向标准输入、标准输出和标准错误文件描述符的打开文件。

ReadString——读取直到输入中第一次出现 delim,返回一个字符串,其中包含最多和包括分隔符的数据。如果 ReadString 在找到分隔符之前遇到错误,它将返回错误之前读取的数据和错误本身(通常是 io.EOF)。ReadString 返回 err != nil 当且仅当返回的数据不以 delim 结尾时。对于简单的用途,扫描仪可能更方便。

Trim——返回字符串 s 的切片,其中删除了切割集中包含的所有前面和尾部 Unicode 代码点。

strconv——包 strconv 实现了与基本数据类型的字符串表示之间的转换。
数值转换——最常见的数字转换是 Atoi(字符串到 int)和 Itoa(int 到字符串)。
i, err := strconv.Atoi(“-42”)
s := strconv.Itoa(-42)

	//将标准输入读到reader中reader := bufio.NewReader(os.Stdin)//将回车之前的值读入inputinput, err := reader.ReadString('\n')if err != nil {fmt.Println("An error occured while reading input. Please try again", err)return}//去掉input字符串后面的换行和回车input = strings.Trim(input, "\r\n")//将字符串转成int类型guess, err := strconv.Atoi(input)if err != nil {fmt.Println("Invalid input. Please enter an integer value")return}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!")
}

四、循环

go中的没有while循环,使用for循环代替了while循环。
对输入内容进行循环,当输入的数字等于生成的随机数,就break。
完整的代码如下:

package mainimport ("bufio""fmt""math/rand""os""strconv""strings""time"
)func main() {maxNum := 100rand.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}}
}

截图:
在这里插入图片描述
在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部