基于Go语言实现猜谜游戏

 更新时间:2023年09月13日 10:24:45   作者:fashia  
这篇文章主要为大家详细介绍了如何基于Go语言实现猜谜游戏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习

一、程序要实现效果:

1.程序首先生成一个0-100的随机整数。

2.提示玩家进行猜测。

3.每次玩家需要输入一个数字,程序将会告诉玩家输入的数字与生成的数字的大小关系,并且让玩家再次猜测。

4.如果猜对了,则会告诉玩家胜利并退出程序。

二、思路分析:

  1. 由于要产生0-100的随机整数(且每次运行程序产生的数字都不同),所以使用当前的时间(UnixNano)作为种子来初始化随机数生成器(rand)。
  2. 使用随机数生成器生成一个在0到maxNum之间的随机整数,作为要猜测的秘密数字(secretNumber)。
  3. 提示用户输入他们的猜测。

  4. 创建一个从标准输入(os.Stdin)读取的缓冲读取器(bufio.NewReader)。

  5. 进入一个无限循环,直到用户猜对秘密数字为止。

  6. 在每次循环中,首先尝试从缓冲读取器中读取一行输入,如果读取过程中发生错误,则打印错误信息并跳过本次循环。

  7. 去除输入字符串两端的回车和换行符。

  8. 尝试将输入字符串转换为整数,如果转换失败(即输入的不是整数),则打印错误信息并跳过本次循环。

  9. 如果转换成功,打印用户的猜测。

  10. 根据用户的猜测和秘密数字的大小关系,给出相应的提示。

  11. 如果用户猜对了秘密数字,打印恭喜信息并跳出循环。

三、具体代码

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猜谜游戏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang基础之字符串与int、int64类型互相转换

    golang基础之字符串与int、int64类型互相转换

    这篇文章主要给大家介绍了关于golang基础之字符串与int、int64类型互相转换的相关资料,在Go语言中string转int是一项常见的操作,需要的朋友可以参考下
    2023-07-07
  • go语言标准库fmt包的一键入门

    go语言标准库fmt包的一键入门

    这篇文章主要为大家介绍了go语言标准库fmt包的一键入门使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • go连接kafka的实现示例

    go连接kafka的实现示例

    本文主要介绍了go连接kafka的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Go语言select语句用法示例

    Go语言select语句用法示例

    这篇文章主要为大家介绍了Go语言select语句用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Golang中时间格式化的实现详解

    Golang中时间格式化的实现详解

    这篇文章主要为大家详细介绍了Go语言中进行时间进行格式化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-09-09
  • golang实现可中断的流式下载功能

    golang实现可中断的流式下载功能

    这篇文章主要给大家介绍了golang实现可中断的流式下载,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • Golang中的关键字(defer、:=、go func())详细解读

    Golang中的关键字(defer、:=、go func())详细解读

    这篇文章主要介绍了Golang中的关键字(defer、:=、go func())详细解读,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Go语言中循环语句使用的示例详解

    Go语言中循环语句使用的示例详解

    在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。本文将通过示例详细为大家讲讲Go语言中的循环语句,需要的可以参考一下
    2022-04-04
  • 浅谈GO中的Channel以及死锁的造成

    浅谈GO中的Channel以及死锁的造成

    本文主要介绍了浅谈GO中的Channel以及死锁的造成,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Kotlin编程基础语法编码规范

    Kotlin编程基础语法编码规范

    这篇文章主要为大家介绍了Kotlin编程条件控制示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论