golang 猜数字小游戏

一、场景

随机生成 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、输入的数字范围校验不能小于猜测的最小值,并且不能大于等于猜测的最大值

猜你喜欢

转载自blog.csdn.net/qq_36025814/article/details/111942349