鱼C论坛

 找回密码
 立即注册
查看: 3176|回复: 1

[技术交流] 关于斗地主算法讨论(一)

[复制链接]
发表于 2017-12-14 17:38:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
首先 我们 需要 判断 手中拿到的牌型, 比如你有多少个9,多少个10 这时候 我们就需要对 手中的牌进行聚合
假设 A, B ,C ,D 分别代表四个花色,Q66代表 小王,K99 代表大王
你现在拿到的牌型如下 "B1", "C4", "A1", "B7", "C8", "C7", "C10", "K99", "B13", "D13", "A2", "B6", "D8", "A3", "D12", "D10"

go语言逻辑处理如下:
package main

import (
        "fmt"
        "strconv"
        "strings"
)

func Rm_duplicateString(list []string) []string {
        var x []string = []string{}
        for _, i := range list {
                if len(x) == 0 {
                        x = append(x, i)
                } else {
                        for k, v := range x {
                                if i == v {
                                        break
                                }
                                if k == len(x)-1 {
                                        x = append(x, i)
                                }
                        }
                }
        }
        return x
}

func Rm_duplicateInt(list []int) []int {
        var x []int = []int{}
        for _, i := range list {
                if len(x) == 0 {
                        x = append(x, i)
                } else {
                        for k, v := range x {
                                if i == v {
                                        break
                                }
                                if k == len(x)-1 {
                                        x = append(x, i)
                                }
                        }
                }
        }
        return x
}

func aggregationlist(e []string) (aggregation []map[int]int) {
        var cardstring []string = []string{}
        var cardintsort []int = []int{}
        var cardint []int = []int{}
        for _, v := range e {
                s := strings.Split(v, "")
                if len(s[1:]) == 1 {
                        cardstring = append(cardstring, s[1])
                } else if len(s[1:]) > 1 {
                        cardstring = append(cardstring, strings.Join(s[1:], ""))
                }
        }
        for _, k := range cardstring {
                l, _ := strconv.Atoi(k)
                cardint = append(cardint, l)
        }
        cardintsort = Rm_duplicateInt(cardint)
        for _, o := range cardintsort {
                count := 0
                for _, q := range cardint {
                        if q == o {
                                count = count + 1
                        }
                }
                //k := []int{o, count}
                k := make(map[int]int)
                k[o] = count
                aggregation = append(aggregation, k)
        }
        return aggregation
}

func main() {
        a := []string{"B1", "C4", "A1", "B7", "C8", "C7", "C10", "K99", "B13", "D13", "A2", "B6", "D8", "A3", "D12", "D10"}

        fmt.Println(aggregationlist(a))

}

*************************************************************************************************

GoSublime r17.11.14-1 9o: type `help` for help and command documentation

[ `go run 10.go` | done: 8.832s ]
        [map[1:2] map[4:1] map[7:2] map[8:2] map[10:2] map[99:1] map[13:2] map[2:1] map[6:1] map[3:1] map[12:1]]
[ F:/mygo/ ] #

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-14 21:21:46 | 显示全部楼层
斗地主是不是还需要积分板?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 14:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表