程序介绍
首先生成一个介于1~100之间的随机数,然后提示玩家输入数字,并告诉玩家是猜对了还是猜错了,如果对了程序就结束,如果错了就提醒玩家是大了还是小了,然后玩家继续输入。
设置随机数
maxNum := 100
rand.Seed(time.Now().UnixNano()) //修改随机数种子为当前时间戳
secretNumber := rand.Intn(maxNum)
-
rand.Seed(seed int64)
:播种seed
为随机数种子 -
func time.Now() time.Time
:获取当前时间 -
func (time.Time).UnixNano() int64
:将Time
转成时间戳返回 -
func rand.Intn(n int) int
:设置一个随机数,随机数的范围为[0, n)
读取用户输入
这里用的是高并发输入,可以用简单的Scan
进行输入。
fmt.Print("Guess a number between 1 and", maxNum, ": ")
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occurred while reading input. Try again", err)
return
input = strings.TrimSuffix(input, "\r\n") //去掉input末尾的回车换行符
guess, err := strconv.Atoi(input) //将input转换为整数
if err != nil {
fmt.Print("Invalid input. Try again: ")
return
fmt.Print("Your guess is ", guess, ". ")
-
func (b *Reader) ReadString(delim byte) (string, error)
:ReadString
一直在Reader* b
中读取,直到读到delim
,delim
也会被读进去 -
reader := bufio.NewReader(os.Stdin)
:将reader
与标准输入流Stdin
关联func NewReader(rd io.Reader) *Reader
:NewReader
返回一个具有默认缓冲区大小新的Reader
-
input, err := reader.ReadString('\n')
:从reader
中读取,遇到'\n'
就停止,把包括'\n'
在内的内容放到字符串input
中,错误信息返回到err
中func (b *Reader) ReadString(delim byte) (string, error)
:ReadString
读取直到输入中第一次出现分隔符delim
,返回一个字符串,其中包含delim
之前的数据并包括delim
。如果ReadString
在找到分隔符之前遇到错误,它将返回在错误之前读取的数据和错误本身(通常是io.EOF
)。 -
input = strings.TrimSuffix(input, "\n")
:因为读入的时候把回车符\r
和换行符\n
也读进来了,所以这一步是去掉换行符。只保留input
中换行符之前的内容,不包括换行符。当然也可以使用func TrimSuffix(s, suffix string) string
:TrimSuffix
返回s
,不包含所提供的后缀字符串。如果s
没有以后缀结尾,则返回不变的s
。 -
guess, err := strconv.Atoi(input)
:将字符串input
转成整型存给guess
func Atoi(s string) (int, error)
:Atoi
相当于转换为int
类型的ParseInt(s, 10,0)
文章来源:https://www.toymoban.com/news/detail-612466.html
实现判断逻辑
if guess > secretNumber {
fmt.Print("Too Big! Try again: ")
} else if guess < secretNumber {
fmt.Print("Too Small! Try again: ")
} else {
fmt.Println("You got it!")
break
}
一个简单的if
分支语句,没什么好说的。文章来源地址https://www.toymoban.com/news/detail-612466.html
实现游戏循环
fmt.Println("Guess a number between 1 and ", maxNum, ": ")
reader := bufio.NewReader(os.Stdin)
for {
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occurred while reading input. Try again", err)
continue
}
input = strings.TrimSuffix(input, "\r\n") //去掉input末尾的回车换行符
guess, err := strconv.Atoi(input) //将input转换为整数
if err != nil {
fmt.Print("Invalid input. Try again: ")
continue
}
fmt.Print("Your guess is ", guess, ". ")
if guess > secretNumber {
fmt.Print("Too Big! Try again: ")
} else if guess < secretNumber {
fmt.Print("Too Small! Try again: ")
} else {
fmt.Println("You got it!")
break
}
}
- 上面只完成了用户的一次猜测,用户输入往后的部分改成循环即可完成,猜对记得跳出循环。
- 当输入错误的时候不要直接返回了,可以改为
continue
继续循环
完整代码
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.Print("Guess a number between 1 and ", maxNum, ": ")
reader := bufio.NewReader(os.Stdin)
for {
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occurred while reading input. Try again", err)
continue
}
input = strings.Trim(input, "\r\n") //去掉input末尾的换行符
guess, err := strconv.Atoi(input) //将input转换为整数
if err != nil {
fmt.Print("Invalid input. Try again: ")
continue
}
fmt.Print("Your guess is ", guess, ". ")
if guess > secretNumber {
fmt.Print("Too Big! Try again: ")
} else if guess < secretNumber {
fmt.Print("Too Small! Try again: ")
} else {
fmt.Println("You got it!")
break
}
}
}
到了这里,关于【GO】go语言入门实战 —— 猜数字游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!