基于Go语言实现猜谜游戏
作者:fashia
这篇文章主要为大家详细介绍了如何基于Go语言实现猜谜游戏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习
一、程序要实现效果:
1.程序首先生成一个0-100的随机整数。
2.提示玩家进行猜测。
3.每次玩家需要输入一个数字,程序将会告诉玩家输入的数字与生成的数字的大小关系,并且让玩家再次猜测。
4.如果猜对了,则会告诉玩家胜利并退出程序。
二、思路分析:
- 由于要产生0-100的随机整数(且每次运行程序产生的数字都不同),所以使用当前的时间(UnixNano)作为种子来初始化随机数生成器(rand)。
- 使用随机数生成器生成一个在0到maxNum之间的随机整数,作为要猜测的秘密数字(secretNumber)。
提示用户输入他们的猜测。
创建一个从标准输入(os.Stdin)读取的缓冲读取器(bufio.NewReader)。
进入一个无限循环,直到用户猜对秘密数字为止。
在每次循环中,首先尝试从缓冲读取器中读取一行输入,如果读取过程中发生错误,则打印错误信息并跳过本次循环。
去除输入字符串两端的回车和换行符。
尝试将输入字符串转换为整数,如果转换失败(即输入的不是整数),则打印错误信息并跳过本次循环。
如果转换成功,打印用户的猜测。
根据用户的猜测和秘密数字的大小关系,给出相应的提示。
如果用户猜对了秘密数字,打印恭喜信息并跳出循环。
三、具体代码
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) for { input, err := reader.ReadString('\n') if err != nil { fmt.Println("An error occured while reading input. Please try again", err) continue } input = strings.Trim(input, "\r\n") guess, err := strconv.Atoi(input) if err != nil { fmt.Println("Invalid input. Please enter an integer value") continue } fmt.Println("You guess is", guess) if guess > secretNumber { fmt.Println("Your guess is bigger than the secret number. Please try again") } else if guess < secretNumber { fmt.Println("Your guess is smaller than the secret number. Please try again") } else { fmt.Println("Correct, you Legend!") break } } }
四、可能存在的疑问
1.去除字符串两端回车和换行符是什么意思?
答:在读取用户输入时,通常需要去除字符串两端的回车和换行符。这是因为这些字符通常是由于用户在终端或命令行中按下Enter键而产生的,而不是用户实际输入的内容。因此,如果我们不去除它们,将导致程序无法正确解析用户的输入,并可能导致意外的行为或错误。
2.尝试将输入字符串转换为整数,如果转换失败(即输入的不是整数),则打印错误信息并跳过本次循环。这段思路是什么意思?
答:在Go语言中,对于输入的处理都是按照字符串进行的,比如我输入97,其实是输入数字字符“97”。
到此这篇关于基于Go语言实现猜谜游戏的文章就介绍到这了,更多相关Go猜谜游戏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!