go语言版的猜数字游戏

liutgnukernel · · 1797 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

猜数字(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\n",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\n",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)
    }
}

运行截图:
这里写图片描述


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:liutgnukernel

查看原文:go语言版的猜数字游戏

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1797 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传