一、Go语言的实战案例
在经历了一天的Go语言基础语法学习后,是时候开始进入到实战环节。
今日重点:
- Go语言基础语法的融会贯通
- bufio, fmt, math/rand, time, os, strings, strconv包的使用
- 随机数的生成
- 输入输出的实现
- 可能出现的错误的处理
- 完成猜谜游戏
二、Go语言的首个工程实践——猜谜游戏
- 导入所需的包(类似C/C++中的头文件)
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
- 利用时间戳作为随机数种子生成一个0-100的随机数
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
- 读取用户输入部分(bufio包的使用以及字符串处理、错误处理)
fmt.Println("Please input your guess")
reader := bufio.NewReader(os.Stdin) //初始化reader
input, err := reader.ReadString('\n') //从标准输入中读取直至换行符
if err != nil { //读取错误处理
fmt.Println("An error occured while reading input. Please try again", err)
continue
}
input = strings.TrimSuffix(input, "\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)
- 逻辑判断(直至猜中再用break结束循环输入)
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!")
}
- 代码整合,利用循环不断读取输入直到猜中随机数生成的数字
- 游戏的结构很简洁,还有很大的拓展空间,例如限制用户猜数字的次数来增加难度,设计一个简单的游戏面板,添加一次游戏中每位玩家猜数字的机会,以剩余猜数字的次数来给予玩家积分,最终以一局游戏的总积分为依据添加一个猜数字游戏的积分榜。
三、实践小结
猜谜游戏是个简单的练手小游戏,适合第一天刚学完基础语法后拿来实践用。整个小游戏代码量小,逻辑简单,可以说是零难度上手,拿来巩固语法再适合不过。也能在写的过程中养成错误处理的习惯,形成适用于Go语言的肌肉记忆。类似的小游戏其实还有很多,类似点球游戏,五子棋,战船游戏等等,都很适合萌新入门实践,能够加深对于语言的理解,提高打代码的熟练度。