程序介紹
首先生成一個(gè)介于1~100之間的隨機(jī)數(shù),然后提示玩家輸入數(shù)字,并告訴玩家是猜對(duì)了還是猜錯(cuò)了,如果對(duì)了程序就結(jié)束,如果錯(cuò)了就提醒玩家是大了還是小了,然后玩家繼續(xù)輸入。
設(shè)置隨機(jī)數(shù)
maxNum := 100
rand.Seed(time.Now().UnixNano()) //修改隨機(jī)數(shù)種子為當(dāng)前時(shí)間戳
secretNumber := rand.Intn(maxNum)
-
rand.Seed(seed int64)
:播種seed
為隨機(jī)數(shù)種子 -
func time.Now() time.Time
:獲取當(dāng)前時(shí)間 -
func (time.Time).UnixNano() int64
:將Time
轉(zhuǎn)成時(shí)間戳返回 -
func rand.Intn(n int) int
:設(shè)置一個(gè)隨機(jī)數(shù),隨機(jī)數(shù)的范圍為[0, n)
讀取用戶輸入
這里用的是高并發(fā)輸入,可以用簡單的Scan
進(jìn)行輸入。
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轉(zhuǎn)換為整數(shù)
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
也會(huì)被讀進(jìn)去 -
reader := bufio.NewReader(os.Stdin)
:將reader
與標(biāo)準(zhǔn)輸入流Stdin
關(guān)聯(lián)func NewReader(rd io.Reader) *Reader
:NewReader
返回一個(gè)具有默認(rèn)緩沖區(qū)大小新的Reader
-
input, err := reader.ReadString('\n')
:從reader
中讀取,遇到'\n'
就停止,把包括'\n'
在內(nèi)的內(nèi)容放到字符串input
中,錯(cuò)誤信息返回到err
中func (b *Reader) ReadString(delim byte) (string, error)
:ReadString
讀取直到輸入中第一次出現(xiàn)分隔符delim
,返回一個(gè)字符串,其中包含delim
之前的數(shù)據(jù)并包括delim
。如果ReadString
在找到分隔符之前遇到錯(cuò)誤,它將返回在錯(cuò)誤之前讀取的數(shù)據(jù)和錯(cuò)誤本身(通常是io.EOF
)。 -
input = strings.TrimSuffix(input, "\n")
:因?yàn)樽x入的時(shí)候把回車符\r
和換行符\n
也讀進(jìn)來了,所以這一步是去掉換行符。只保留input
中換行符之前的內(nèi)容,不包括換行符。當(dāng)然也可以使用func TrimSuffix(s, suffix string) string
:TrimSuffix
返回s
,不包含所提供的后綴字符串。如果s
沒有以后綴結(jié)尾,則返回不變的s
。 -
guess, err := strconv.Atoi(input)
:將字符串input
轉(zhuǎn)成整型存給guess
func Atoi(s string) (int, error)
:Atoi
相當(dāng)于轉(zhuǎn)換為int
類型的ParseInt(s, 10,0)
文章來源:http://www.zghlxwxcb.cn/news/detail-612466.html
實(shí)現(xiàn)判斷邏輯
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
}
一個(gè)簡單的if
分支語句,沒什么好說的。文章來源地址http://www.zghlxwxcb.cn/news/detail-612466.html
實(shí)現(xiàn)游戲循環(huán)
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轉(zhuǎn)換為整數(shù)
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
}
}
- 上面只完成了用戶的一次猜測,用戶輸入往后的部分改成循環(huán)即可完成,猜對(duì)記得跳出循環(huán)。
- 當(dāng)輸入錯(cuò)誤的時(shí)候不要直接返回了,可以改為
continue
繼續(xù)循環(huán)
完整代碼
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
func main() {
// 設(shè)置隨機(jī)數(shù)
maxNum := 100
rand.Seed(time.Now().UnixNano()) //修改隨機(jī)數(shù)種子為當(dāng)前時(shí)間戳
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轉(zhuǎn)換為整數(shù)
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
}
}
}
到了這里,關(guān)于【GO】go語言入門實(shí)戰(zhàn) —— 猜數(shù)字游戲的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!