Go语言实现猜谜小游戏

目录
  • 前言
  • 技术点
    • 随机数
    • 随机数种子
    • 接收用户输入
      • Reader
      • Scanf
  • 完整代码
    • 使用Reader
    • 使用Scanf
  • 总结

前言

本文是介绍用Go实现一个猜谜小游戏,就是程序先生成一个随机数num,然后让用户来猜生成的数是多少,如果猜的数比num小就提示用户猜测的数据小于num,如果猜的数比num大就提示用户测试的数据大于num,如果猜测的数据刚好是num就提示用户猜对了。

技术点

在本文中将会使用到以下技术点:随机数、随机数种子、获取当前时间戳、两种读取终端输入方式等。

随机数

Go生成随机数需要引入math/rand包,Intn(n int)函数可以生成一个0~n的非负随机整数数,包含0不包含n也就是[0,n)

import (
    "fmt"
    "math/rand"
)
func main() {
    fmt.Println(rand.Intn(100))
}

经过多次运行,我们发现产生的数并不是随机的,每次都一样。

随机数种子

Go中的随机数是通过rand.Seed(种子值seedNum)设置种子值,在同一个种子下每次产生的随机数顺序是一样的。

为了保证种子值的随机性,一般采用系统时间的毫秒值作为种子值,因为系统时间的毫秒值是一直变动的。

time.Now().UnixMilli()可以系统当前的毫秒时间戳。

time.Now().Unix()可以系统当前的秒时间戳。

time.Now().UnixMicro()可以系统当前的微秒时间戳。

time.Now().UnixNano()可以系统当前的纳秒时间戳。

import (
    "fmt"
    "math/rand"
    "time"
)
func main() {
    rand.Seed(time.Now().UnixNano())
    fmt.Println(rand.Intn(100))
}

再次运行代码,可以发现每次运行的随机数都是不同的了。

接收用户输入

Reader

os.Stdin指向标准输入文件/dev/stdinos.Stdinos包的一个变量。它是os包的NewFile函数的返回值。

bufio包中都是IO操作的方法,创建Reader对象,就可以读取数据了。

reader := bufio.NewReader(os.Stdin)

设置按行读取:

input, err := reader.ReadString('\n')

按行读取得到的结果是包含换行符的,要把换行符给截取去掉:

input = strings.Trim(input, "\r\n")

再把得到的字符串转换为数字:

guess, err := strconv.Atoi(input)

Scanf

Scanf函数也可以从os.Stdin中读取数据。

var guess int
fmt.Scanf("%d", &guess)
fmt.Println(guess)

完整代码

因为用户不一定一次就猜中数据,我们可以使用for循环,当用户猜不中时,可以让用户再继续猜直到猜中。

下面来看下完整的代码。

使用Reader

func main() {
    maxNum := 100
    rand.Seed(time.Now().UnixNano())
    secretNumber := rand.Intn(maxNum)
    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
        }
    }
}

使用Scanf

func main() {
    maxNum := 100
    rand.Seed(time.Now().UnixNano())
    secretNumber := rand.Intn(maxNum)
    fmt.Println("Please input your guess")
    var guess int
    for {
        fmt.Scanf("%d", &guess)
        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
        }
    }
}

来运行一下代码看下最终效果:

总结

本文介绍了使用Go语言来实现类一个猜字小游戏,在文中介绍了随机数、随机数种子以及如何从终端读取数据的两种方法。

对比从终端获取用户输入的两种方法,我们可以看到使用Scanf比使用bufio中的Reader方便了很多,大大简化了代码。

刚刚接触Go难免有些错误与不足之处,如有发现欢迎指出。

以上就是Go语言实现猜谜小游戏的详细内容,更多关于Go实现猜谜小游戏的资料请关注我们其它相关文章!

(0)

相关推荐

  • golang游戏等资源压缩包创建和操作方法

    游戏资源包的创建.修改.读取等操作. 注意:资源包为游戏等需要快速读取的场景使用,所以并未对文件进行分块操作,都是一整个读取压缩的,所以需要自行保证文件大小的合理或者自行更改代码进行分包压缩,再则不对重复文件做校验,不同路径的同一个文件将被认为是两个文件. 引入包: gpk "github.com/lsq51201314/go-pack" 创建资源包: gpk.Object.Create(创建空的资源包) gpk.Object.CreateFromFolder(从文件夹创建资源包) v

  • go语言实现猜数字小游戏的方法

    本文实例讲述了go语言实现猜数字小游戏的方法.分享给大家供大家参考.具体分析如下: 随机生成一个数字,输入一个数字看是否匹对,匹配则结速,反之提示是大了还是小了 复制代码 代码如下: package main import (     "bufio"     "fmt"     "math/rand"     "os"     "strconv"     "time" ) var (  

  • Go Java算法猜数字游戏示例详解

    目录 猜数字游戏 方法一:遍历(Java) 方法一:遍历(Go) 猜数字游戏 你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下: 写出一个秘密数字,并请朋友猜这个数字是多少.朋友每猜测一次,你就会给他一个包含下述信息的提示: 猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls",公牛), 有多少位属于数字猜对了但是位置不对(称为 "Cows",奶牛).也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字. 给

  • Go语言实现猜数字小游戏

    利用Go语言实现一个四位数字,而且不重复的猜数字游戏,解题思路是先利用rand随机函数产生一个四位数,然后通过切片进行引用传递,设定用户可以输入的数字,最后分别遍历切片四位数字与产生的四位数是否相同 package main import "fmt" import( "math/rand" "time" ) func CreateNum(p *int){ //设置种子 rand.Seed(time.Now().UnixNano()) var nu

  • Go语言实现猜谜小游戏

    目录 前言 技术点 随机数 随机数种子 接收用户输入 Reader Scanf 完整代码 使用Reader 使用Scanf 总结 前言 本文是介绍用Go实现一个猜谜小游戏,就是程序先生成一个随机数num,然后让用户来猜生成的数是多少,如果猜的数比num小就提示用户猜测的数据小于num,如果猜的数比num大就提示用户测试的数据大于num,如果猜测的数据刚好是num就提示用户猜对了. 技术点 在本文中将会使用到以下技术点:随机数.随机数种子.获取当前时间戳.两种读取终端输入方式等. 随机数 Go生成

  • C语言实现五子棋小游戏

    首先我们先来看一个稍微简单些的实现方式: #include <stdio.h> #include <stdlib.h> #define N 15 int chessboard[N + 1][N + 1] = { 0 }; int whoseTurn = 0; void initGame(void); void printChessboard(void); void playChess(void); int judge(int, int); int main(void) { init

  • C语言实现2048小游戏

    本文实例为大家分享了C语言实现2048小游戏的具体代码,供大家参考,具体内容如下 具有以下特点: 1.linux下完成 2.非堵塞键盘读取 3.随机生成2和4 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define TTY_PATH "/dev/tty" #define STTY_ON "stty raw -echo -F" #define STTY_O

  • C语言实现俄罗斯方块小游戏

    C语言实现俄罗斯方块小游戏的制作代码,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define TTY_PATH "/dev/tty" #define STTY_ON "stty raw -echo -F" #define STTY_OFF "stty -raw echo -F" int map[21][14]; char

  • 利用C语言编写“剪刀石头布”小游戏

    前言 大家好~ 我是一名C语言初学者,学了C语言基础后,我制作了一个小游戏:剪刀石头布. 希望大家能对我的思路和代码提出小Tips(eg.更简便的方法与程序) 我也会虚心接受大家的建议~ 一.游戏原理 "剪刀石头布"这个游戏,想必大家都很熟悉了. 两个人在玩游戏时,事先都不知道对方将要出什么,这中间存在着一种随机性. 而这种随机性相当于C语言里stdlib.h库中rand()函数,rand()函数用来产生随机数,因为rand是根据提供给srand()的种子值返回一个随机数,所以要使每次

  • C语言三子棋小游戏的实现代码

    本文实例为大家分享了C语言三子棋小游戏的具体代码,供大家参考,具体内容如下 一.介绍: 运用C语言的数组等相关知识:实现一个简易的三子棋小游戏: 三子棋小游戏的大概内容为 此游戏在设计时:总共设计了三个文件: game.h: 类型的声明和函数的声明 game.c:函数功能的具体实现 test.c: 测试文件 二.具体实现: (1).game.h模块: 代码实现如下: #define _CRT_SECURE_NO_WARNINGS 1 //头文件包含 #include <stdio.h> #in

  • C语言实现飞机小游戏

    本文实例为大家分享了C语言实现飞机小游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<windows.h> int zdj_x,zdj_y; int zd_x,zd_y; int dj_x,dj_y; int speed; int map[21][41]; int score; int H=20,C=40; //墙是1:飞机2:子弹3:敌机4: void start()//设置初始值 { zdj_x=15; zdj_y=20; zd_x

  • 利用C语言实现扫雷小游戏

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 说明:该游戏的实现需要建立三个文件 test2.c:整个游戏,开始游戏/退出游戏的大体执行流程 game2.c:具体实现扫雷游戏功能的函数定义 game.h:宏定义,函数声明,引用相关C库函数的头文件 test2.c 游戏的大体执行流程 #include"game2.h" //菜单函数 void menu() { printf("**************************\n")

  • C语言实现扫雷小游戏详解

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 一.实现功能 首先显示一个小菜单,选择是否玩游戏.当用户选择退出时,程序运行结束,当用户选择玩游戏时,将提示用户输入扫雷位置坐标.当用户输入坐标超出棋盘范围或者位置之前已经进行扫雷时,将提示用户重新输入.当用户输入正确坐标时,如果输入位置没雷将会显示当前位置周边有几个雷,直到将所有雷找出后,重新显示菜单.当输入位置有雷时,游戏结束,重新显示菜单. 二.分析与介绍 首先编写程序开始前,我们要清楚知道棋盘时二维的,所以这里

  • C语言实现扫雷小游戏的全过程记录

    第一步思考要实现的功能 想必大家都知道扫雷这个小游戏,今天我们来用C语言实现一下,首先要扫雷,我们首先就需要有一个布置了雷的棋盘,然后开始扫雷,玩过扫雷的小伙伴都知道,如果选中的格子旁边没有雷,那么旁边的格子就会自动清空,大概的思路有了,现在我们开始实现. 第二步实现 初级版扫雷 首先创建棋盘的作用是用来存储雷的信息,这时我们思考一下,一个棋盘到底够不够用?棋盘多大才合适?我们打印出来的棋盘肯定是不能出现雷的信息的,不然游戏就无法正常进行了,但是我们雷的信息又需要棋盘存储,这样一想,一个棋盘似乎

随机推荐