一、前言 在学习编程语言的过程中,实践是最好的老师。通过实际编写代码,我们可以更好地理解和掌握语言的特性和用法。本篇笔记将以一个简单的猜数字游戏为例,运用在上一节中学到的相关内容,制作这样一个猜数字游戏,并介绍如何使用Go语言进行编程。
二、游戏规则 这个猜数字游戏的规则非常简单:计算机生成一个随机数,用户尝试猜测这个数字。如果用户猜对了,程序会告诉用户他们猜对了;如果用户猜错了,程序会告诉用户他们猜错了。
三、代码实现
首先,我们需要导入几个必要的包:
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
然后,我们需要生成一个随机数,注意rand.Seed(time.Now().UnixNano())句不可删去,这是通过对于现在时间生成一个种子使得rand随机生成,使否则随机数会始终为一个数不会改变:
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretnum := rand.Intn(maxNum)
接下来,我们需要获取用户的输入,这里实际存在更简单的写法,不过这种写法在一般工程中更加常见,所以使用这样的写法,同时在用户输入不合规则的数据时也能及时反馈错误要求用户重新输入:
fmt.Print("Please enter your guess:")
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("the error occoured 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
}
}
我们通过选择结构比较用户的猜测和随机数,并给出相应的反馈:
if guess > secretnum {
fmt.Println("Big")
} else if guess < secretnum {
fmt.Println("Small")
} else {
fmt.Println("Yes,your're right")
break
}
最终通过一个大的for循环将以上程序嵌套在其中,在用户输入正确答案之前无限循环,至输入正确答案
四、最终代码成果
这是以上代码形成的总代码,可以复制到自己的环境中进行运行尝试。
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretnum := rand.Intn(maxNum)
for {
fmt.Print("Please enter your guess:")
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("the error occoured 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("your guess is ", guess)
if guess > secretnum {
fmt.Println("Big")
} else if guess < secretnum {
fmt.Println("Small")
} else {
fmt.Println("Yes,your're right")
break
}
}
fmt.Println("the secret number is", secretnum)
}