本文仅作为个人笔记使用,主要看源代码,按个人习惯来:
一个猜数小游戏
package main
import (
"fmt"
"math/rand"
)
func main() {
maxNum := 100
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
}
导入"math/rand"包作为随机数生成的包,使用rand.Intn()来生成一个随机数,但是会发现多次运行后生成的随机数是一样的。这时就需要初始化随机种子了,一般是使用当前的时间戳来初始化随机数种子:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
}
rand.Seed()来设置随机数种子
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)
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occured while reading input. Please try again", err)
return
}
input = strings.Trim(input, "\r\n")
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
return
}
fmt.Println("You guess is", guess)
}
使用os.Stdin来打开一个stdin文件,但直接操作这个文件非常复杂,因此使用reader = bufio.NewReader转换为只读流,然后reader.ReadString('\n')读取一行,随后input = strings.TrimSuffix(input,'\n')来去掉换行符。最后strconv.Atoi(input)来将字符串转换为数字。
package main
import (
"bufio"
"fmt" "math/rand" "os" "strconv" "strings" "time")
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNum := rand.Intn(maxNum) + 1
fmt.Println("I have chosen a random number between 1 and", maxNum)
fmt.Println("Can you guess it?")
fmt.Println("The secret number is", secretNum)
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.TrimSuffix(input, "\n")
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value", err)
continue
}
if guess > secretNum {
fmt.Println("Too high")
} else if guess < secretNum {
fmt.Println("Too low")
} else {
fmt.Println("Correct, you win!")
break
}
}
}
稍微完善一下逻辑,加一个for循环,以上就是这个小游戏的全部代码了。

Comments NOTHING