Go语言实践案例之猜谜游戏| 青训营

news/2024/5/18 14:00:12 标签: 游戏, golang, 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”。


http://www.niftyadmin.cn/n/5027069.html

相关文章

通过篡改cred结构体实现提权利用

前言 在之前的HeapOverflow文章中&#xff0c;作者还构造了任意地址读写的操作&#xff0c;使用了任意地址读写去进行提权&#xff0c;还挺有意思的&#xff0c;记录一下如何利用任意地址读写进行提权。 作者利用任意地址读写分别改写modprobe_path以及cred结构体去实现提权的…

Open Interpreter,一个让ChatGPT入驻你的电脑并获得联网能力成为贾维斯!

Open Interpreter&#xff0c;一个让ChatGPT入驻你的电脑并获得联网能力成为贾维斯&#xff01; 介绍安装使用 介绍 最近看了Github最近大火的程序员终端大升级&#xff0c;发现了open interpreter这个可以部署到本地命令行的对话AI&#xff0c;其依赖ChatGPT&#xff0c;可以…

什么是Jmeter?Jmeter使用的原理步骤是什么?

1.1 什么是 JMeter Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于 Web 应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源&#xff0c;例如静态文件、Java 小服务程序、CGI 脚…

vue2+openlayers6 项目实战示例详解【目录】

vue 和 openlayers是两个流行的前端即时&#xff0c;可以用于构建复杂的地图应用程序。本目录将介绍vue 和 openlayers的基本概念&#xff0c;以及如何在vue项目中使用openlayers进行地图展示和交互。 1. vue2 介绍 Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同…

YOLO物体检测-系列教程2:YOLOV2整体解读

&#x1f388;&#x1f388;&#x1f388;YOLO 系列教程 总目录 YOLOV1整体解读 YOLOV2整体解读 YOLOV2提出论文&#xff1a;YOLO9000: Better, Faster, Stronger 1、YOLOV1 优点&#xff1a;快速&#xff0c;简单&#xff01;问题1&#xff1a;每个Cell只预测一个类别&…

数据湖是什么?数据湖架构及应用(完)

数据湖架构 数据湖架构主要描述了各组件以及组件之间的关系&#xff0c;说明了数据的存储、处理和访问过程。数据湖架构研究最初主要涉及到数据的划分、管理和使用方式&#xff0c;随着研究的进展数据湖的架构包含了更深层次的关键技术和方案。 分区架构 在初始的数据湖设计中…

浙工大MBA常规批复试建议怎么准备?

如果你第一志愿报考浙江工业大学MBA项目不想被无故的淘汰&#xff0c;小编建议你还是认真对待考后的复试环节。因为从2023年的招生录取可以看到&#xff0c;浙工大MBA项目的提前批面试对于最终录取几乎是没什么作用的&#xff0c;在与普通考生同层次竞争的局面下&#xff0c;复…

开发者必看!NetMarvel 五大能力驱动【变现收益】增长飞轮

更多流量带来更多预算&#xff0c;再由更多预算驱动增长。这不仅是出海App增长变现的底层逻辑&#xff0c;也是程序化广告平台的运行法则。App出海之路走到今天&#xff0c;开发者已经意识到&#xff1a;应用内购是实现正向现金流的必要手段&#xff0c;接入广告平台获取广告收…