go语言版的猜数字游戏
猜数字(Bulls and Cows)是一个经典的小游戏. 程序先产生4位各不相同的随机数,然后用户输入0-9四位各不相同的数字,程序将输入的数字与随机数进行对比,位置和数字对应相同者提示为xA,数字相同而位置不同者提示为xB,共15次机会.如随机数为1543,输入5134将提示0A4B,输入1534将提示2A2B,输入1543将提示4A0B(此时用户获胜). 这个游戏逻辑简单但代码实现富有挑战性,非常适合编程练手使用.最近学习go语言中,下面是go语言版的Bulls and Cows:
package main import ( "fmt" "time" "math/rand" "os" ) func gen_num(length int)[]int32{ a:=[]int32{ 1,2,3,4,5,6,7,8,9,0} b:=make([]int32,length,length) if length>10 || length<0{ fmt.Println("invalid length:",length) os.Exit(-1) } r:=rand.New(rand.NewSource(time.Now().UnixNano())) for i:=0;i<length;i++{ tmp:=r.Intn(len(a)-i) b[i]=a[tmp] a[tmp],a[len(a)-1-i]=a[len(a)-1-i],a[tmp] } return b } func check_num(a,b []int32)bool{ var aa,bb int if len(a)!=len(b){ return false } dict:=make(map[int32]int) for i:=0;i<len(a);i++{ dict[a[i]]=0 } for i:=0;i<len(a);i++{ if _,ok:=dict[b[i]];ok{ bb++ } } for i:=0;i<len(a);i++{ if a[i]==b[i]{ aa++ } } bb=bb-aa fmt.Printf("%dA%dB ",aa,bb) if aa==len(a){ fmt.Println("OK!") return true }else{ return false } } func main(){ var ipu int32 var i int status:=false length:=4 src:=gen_num(length) tmp:=make([]int32,length,length) for j:=0;j<15 && !status;j++{ fmt.Printf("Please input %d numbers ",length) fmt.Scanf("%d",&ipu) for i=0;ipu>0;i++{ tmp[i]=ipu%10 ipu=ipu/10 } if i<length{ tmp[i]=0 } dest:=make([]int32,length,length) for i:=0;i<len(tmp);i++{ dest[length-1-i]=tmp[i] } status=check_num(src,dest) } }
上一篇:
IDEA上Java项目控制台中文乱码