程序需求:
程序运行后会在0-9之间随机生成4位不重复的数字 程序启动,4位随机数已经产生,但用户看不到。 用户需要输入四位不重复的数字
按下回车会给出判断情况如
A代表用户手动输入的数字和位置与程序随机生成的数字和位置都一样。例如(程序随机生成:8765而用户输入数字为:8765显示判断情况为AAAA)B代表用户输入的数字是程序随机生成的四位数字中的一个,但用户输入的数字位置与程序随机生成的数字位置不一样。例如(程序随机生成:8765而用户输入数字为:5678显示判断情况为BBBB)
C 代表用户输入的数字和位置与程序随机生成的数字和位置都不一样。例如(程序随机生成
8765而用户输入数字为:2341显示判断情况为:CCCC)
需求分析:这是一款经典的入门程序小游戏,看似复杂,其实并不难,只需要用很多个if/else语句理清其中逻辑即可,打出此游戏有利于go入门者理解if语句的运用
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
fmt.Println("请输入四个不同的数字")
rand.Seed(time.Now().UnixNano())
No_1:=rand.Intn(10)
No_2:=rand.Intn(10)
No_3:=rand.Intn(10)
No_4:=rand.Intn(10)
for ;No_1==No_2||No_1==No_3||No_1==No_4||No_2==No_3||No_2==No_4||No_3==No_4 ; {
No_1=rand.Intn(10)
No_2=rand.Intn(10)
No_3=rand.Intn(10)
No_4=rand.Intn(10)
}
var count int=0
var mark1,mark2,mark3,mark4 byte
//记录猜测次数
var number,no_1,no_2,no_3,no_4 int
for count=1; ;count++ {
fmt.Printf("\n")
fmt.Scanf("%d",&number)
no_1=number/1000
no_2=number/100%10
no_3=number/10%10
no_4=number%10
if (no_1==No_1) {
fmt.Printf("A")
mark1='A'
}else if (no_1==No_2||no_1==No_3||no_1==No_4) {
fmt.Printf("B")
mark1='B'
}else{
fmt.Printf("C")
mark1='C'
}
if (no_2==No_2) {
fmt.Printf("A")
mark2='A'
} else if (no_2==No_1||no_2==No_3||no_2==No_4) {
fmt.Printf("B")
mark2='B'
}else {
fmt.Printf("C")
mark3='c'
}
if (no_3==No_3) {
fmt.Printf("A")
mark3='A'
} else if (no_3==No_2||no_3==No_1||no_3==No_4) {
fmt.Printf("B")
mark3='B'
} else {
fmt.Printf("C")
mark3='C'
}
if (no_4==No_4) {
fmt.Printf("A")
mark4='A'
}else if (no_4==No_2||no_4==No_1||no_4==No_3) {
fmt.Printf("B")
mark4='B'
}else {
fmt.Printf("C")
mark4='C'
}
if(mark1=='A'&&mark2=='A'&&mark3=='A'&&mark4=='A') {
break
}
}
fmt.Printf("\n恭喜全部猜对,共猜了%d次",count)
}