[GO]学习新语言之卡塔练习--猜数字

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

最近在看go语言,对语法稍做了些了解,写个简单的猜数字小游戏来加深一下语法之印象。


package main

//by kevin at 2014-04-15 01:30
//写我喜欢玩的猜数字游戏,初学go之第一个程序

import (
    "fmt"
    "time"
    "math/rand"
    /*"os"*/
)

func rndnum() []int{
    //使用string, 但是却因为其不可被修改,只好使用[]
    num_set := []int {0,1,2,3,4,5,6,7,8,9}
    sz := len(num_set)
    /*fmt.Println("sz:",sz)*/
    for i,_  := range num_set {
        r := rand.Intn(sz)
        /*fmt.Println("i:",i," v:",v," r:",r) */
        num_set[i], num_set[r] = num_set[r], num_set[i]
    }

    /*fmt.Println("num_set:", num_set) */
    return num_set[0:4]
}

func checknum(n int, target []int) (right_ , miss_ int) {
    //将数字拆分成4个int[]
    num := []int {n/1000, (n%1000)/100, (n%100)/10, (n%10)}
    /*fmt.Println("num:", num) */
    /*fmt.Println("target:", target) */
    right := 0 //数字对且位置对
    miss := 0 //数字对但是位置不对
    for i,m := range num {
        for j,t :=  range target{
            if m == t {
                if i == j {
                    right++
                } else{
                    miss++
                }
            }
        } 
    }

    return right, miss
}


func main() {
    //产生符合规则的数字
    rand.Seed(time.Now().UnixNano())
    num := rndnum()
    /*fmt.Println("num:", num) */

    //开始准备猜数字
    var right, miss int
    var guess_count int  = 1

    for right!=4 {

        fmt.Printf("%d Please input a number(0000-9999):", guess_count)
        var s int
        fmt.Scanf("%d\n", &s)
        //fmt.Println("you input is:", s)
        right, miss = checknum(s, num)
        /*fmt.Println("right:",right," miss:", miss)*/
        fmt.Println("\t",s,"\t->\t", right,"A", miss, "B")
        guess_count++
    }

    fmt.Println("Yes!!Number is ", num)




}

玩一把就睡觉:

[kevin@kevinlin:~/go]$ ./guess 
1 Please input a number(0000-9999):1234
1234 -> 0 A 1 B
2 Please input a number(0000-9999):5678
5678 -> 0 A 2 B
3 Please input a number(0000-9999):1208
1208 -> 0 A 2 B
4 Please input a number(0000-9999):3409
3409 -> 0 A 1 B
5 Please input a number(0000-9999):2067
2067 -> 0 A 2 B
6 Please input a number(0000-9999):6105
6105 -> 0 A 1 B
7 Please input a number(0000-9999):9826
9826 -> 2 A 2 B
8 Please input a number(0000-9999):8926
8926 -> 4 A 0 B
Yes!!Number is  [8 9 2 6]。


接下来要试试goroutine之功能,还有rpc等~


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

本文来自:CSDN博客

感谢作者:zimmermanlin

查看原文:[GO]学习新语言之卡塔练习--猜数字

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

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