golang 猜數字小遊戲
阿新 • • 發佈:2021-01-01
一、場景
隨機生成
2
個數,在這2
個數中隨機一
個結果數字
。然後我們鍵盤錄入,猜測這個結果數字
是幾。
二、分析
需要完成這些操作,我們需要知道的知識點:
- 1、隨機數獲取函式
- 2、鍵盤錄入函式
- 3、列印(格式化列印)函式
三、程式碼
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
//結果數值的取值範圍
guessArray := [2][2]int64{
{10, 20}, //最小值取值範圍為[10, 20)
{30, 80}, //最大值取值範圍為[30, 80)
}
guessResult := make([]int64, 0) //我們需要猜測的數字範圍
var i int64
for i = 0; i < 2; i++ { //迴圈取出最小、最大值
min := guessArray[i][0]
max := guessArray[i][1]
randNumber := genRangeNumber(min, max, i)
guessResult = append(guessResult, randNumber) //把隨機出來的結果追加到我們需要猜測的數字中
}
//生成結果資料
guessMin := guessResult[0]
guessMax := guessResult[1]
resultNumber := genRangeNumber(guessMin, guessMax, 999) //在[guessMin, guessMax)中隨機生成答案數字
//先提示一下猜測範圍
fmt.Printf("數字範圍在:[%d, %d) \n", guessMin, guessMax)
//編寫一個for死迴圈:一直猜測結果,直到猜對為止
var inputNumber int64
guessNumber := 0 //記錄猜測的次數
for {
//開始猜測了
fmt.Println("請輸入數字:")
fmt.Scanln(&inputNumber)
if inputNumber > resultNumber {
fmt.Printf("大了,數字範圍:(%d, %d)\n", guessMin, inputNumber)
guessMax = inputNumber //把猜測是最大值設定為輸入的值
guessNumber++
continue //跳出迴圈
}
if inputNumber < resultNumber {
fmt.Printf("小了,數字範圍:(%d, %d)\n", inputNumber, guessMax)
guessMin = inputNumber //把猜測是最小值設定為輸入的值
guessNumber++
continue //跳出迴圈
}
guessNumber++
break //跳出迴圈
}
fmt.Printf("恭喜您:猜測了 [ %d ] 次就成功猜到了,正確答案是:%d", guessNumber, resultNumber)
}
/**
* 生成兩個數字[min, max)之間的隨機數
* @param min 最小值
* @param max 最大值
* @param i 為了隨機,加上迴圈i,保證唯一
*/
func genRangeNumber(min, max, i int64) int64 {
//println(time.Now().Unix()) //列印:1609232986
//println(time.Now().UnixNano()) //列印:1609232986276977000
rand.Seed(time.Now().UnixNano() + i) //給一個時間戳的種子,否則每次生成都是一樣的值
randNum := rand.Int63n(max - min)
randNum = min + randNum
return randNum
}
四、執行結果
五、延伸
我們可以完善一下我們的程式碼:
- 1、輸入的數字
型別校驗
- 2、輸入的數字
範圍校驗
:不能小於
猜測的最小值,並且不能大於等於
猜測的最大值