Golang语言实战案例之猜数游戏 | 青训营

39 阅读2分钟

猜数游戏

在这个游戏里面,程序首先会生成一个介于 1 到 100 之间的随机整数,然后提示玩家进行猜测。玩家每次输入一个数字,程序会告诉玩家这个猜测的值是高于还是低于那个秘密的随机数,并且让玩家再次猜测。如果猜对了,就告诉玩家正确并且退出程序。

需要从以下信息思考:

  • 输入的获取
  • 官方库函数的使用
  • 循环与选择语句结合的控制流

主要分为以下几个部分:

1、设置最大随机数和种子:通过maxNum变量设置最大随机数值,并通过rand.Seed(time.Now().UnixNano())使用当前时间作为种子,确保每次运行都能生成不同的随机数。

maxNum :=100 
rand.Seed(time.Now().UnixNano()) 

来分析一下以上代码:

  • 第一行,设置最大随机数

  • 第二行,使用当前时间作为随机数生成器的种子

2、生成随机数:使用rand.Intn(maxNum)生成一个介于0和maxNum之间的随机数,并将其存储在secNumber变量中。

secNumber :=rand.Intn(maxNum) 
fmt.Println("随机数为:",secNumber) 
  • 第一行,生成一个0到maxNum之间的随机数

  • 第二行,打印随机数

3、提示用户输入:向用户显示提示信息。

fmt.Println("请输入1-100:") 

4、读取用户输入:通过创建bufio.NewReader(os.Stdin)对象来读取用户输入的字符串,使用reader.ReadString('\n')读取用户输入的字符串,直到遇到换行符,并将其存储在input变量中。

reader :=bufio.NewReader(os.Stdin) 
input,err :=reader.ReadString('\n')
if err !=nil { 
	fmt.Println("异常:",err) 
return 
	continue 
}
  • 第三到七行,如果读取过程中发生错误,则打印错误信息;否则继续下一次循环

5、处理用户输入:使用strings.TrimSuffix(input, "\n")去除输入字符串末尾的换行符,并使用strconv.Atoi(input)将输入字符串转换为整数,并将其存储在guess变量中。

input =strings.TrimSuffix(input,"\n") 
guess,err :=strconv.Atoi(input) 
if err !=nil{ 
	fmt.Println("输入错误") 
return 
	continue 
}
  • 第三到七行,如果转换过程中发生错误,则打印错误信息;否则继续下一次循环

6、比较用户猜测与随机数:根据用户猜测的数与随机数的关系,给出相应的提示信息。

if guess>secNumber{
	fmt.Println("过大") 
} else if guess<secNumber{ 
	fmt.Println("过小")
}else{ 
	fmt.Println("正确")
	break
}
  • 如果猜测的数大于随机数,则提示猜测过大;
  • 如果猜测的数小于随机数,则提示猜测过小;
  • 如果猜测的数等于随机数,则提示猜测正确;

7、重复操作直到猜中:使用循环结构,不断循环进行用户输入、处理和比较的操作,直到猜中随机数为止。

在这里插入图片描述