Go语言 实现匹配机制

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

package main

import (
    "LollipopGo/LollipopGo/util"
    "fmt"
    "net/http"
    "time"
)

// 匹配的结构
type Match_player struct {
    UID int
    Lev int
}

// 匹配的chan
var Match_Chan chan *Match_player
var Imax int = 0

// 初始化
func init() {

    data := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
    re := InitDSQ(data)
    fmt.Println(re)

    Match_Chan = make(chan *Match_player, 100)
    return
}

func InitDSQ(data1 []int) [4][4]int {

    data := data1
    erdata := [4][4]int{}
    j, k := 0, 0

    // 循环获取
    for i := 0; i < 8*2; i++ {
        // 删除第i个元素
        icount := util.RandInterval_LollipopGo(0, int32(len(data))-1)
        fmt.Println("随机数:", icount)
        //datatmp := data[icount]

        if len(data) == 1 {
            erdata[3][3] = data[0]

        } else {
            //------------------------------------------------------------------
            if int(icount) < len(data) {
                erdata[j][k] = data[icount]
                k++
                if k%4 == 0 {
                    j++
                    k = 0
                }

                data = append(data[:icount], data[icount+1:]...)
            } else {
                erdata[j][k] = data[icount]
                k++
                if k%4 == 0 {
                    j++
                    k = 0
                }
                data = data[:icount-1]
            }
            //------------------------------------------------------------------
        }
        fmt.Println("生成的数据", erdata)
    }

    return erdata
}

// 主函数
func main1() {

    // 第一个数据:
    idata := &Match_player{
        UID: 1,
        Lev: 6,
    }
    Putdata(idata)

    // 第二个数据:
    idata1 := &Match_player{
        UID: 2,
        Lev: 20,
    }
    Putdata(idata1)

    // 第三个数据:
    idata2 := &Match_player{
        UID: 3,
        Lev: 90,
    }
    Putdata(idata2)

    // 第四个数据:
    idata3 := &Match_player{
        UID: 3,
        Lev: 900,
    }
    Putdata(idata3)
    Putdata(idata3)
    Putdata(idata3)

    // defer close(Match_Chan)
    Imax = len(Match_Chan)
    // 取数据
    // DoingMatch()
    //go Sort_timer()

    strport := "8892" //  GM 系统操作 -- 修改金币等操作
    http.HandleFunc("/GolangLtdGM", IndexHandlerGM)
    http.ListenAndServe(":"+strport, nil)

    return
}

// 压入
func Putdata(data *Match_player) {
    // fmt.Print("put:", data, "\t")
    Match_Chan <- data
    // fmt.Print("len:", len(Match_Chan), "\t")
    return
}

// 获取
func DoingMatch() {

    Data := make(map[int]*Match_player)
    // 全部数据都拿出来
    // data := make(chan map[string]*Match_player, 100)
    // data <- Match_Chan
    for i := 0; i < Imax; i++ {
        if data, ok := <-Match_Chan; ok {
            fmt.Print(data, "\t")
            Data[i+1] = data
        } else {
            fmt.Print("woring", "\t")
            break
        }
    }
    // 打印数据保存
    fmt.Println(Data)
    return
}

func Sort_timer() {
    // 控制排队的速度
    timer := time.NewTimer(time.Millisecond * 400)
    for {
        select {
        case <-timer.C:
            {
                // 获取channel数据的函数。
                DoingMatch()
            }
        }
    }
}

// 排序算法  每8秒排序一次
func Sort_channel() {
    return
}

// 数据处理
func IndexHandlerGM(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "hello world")
    // 需要处理 get请求等
}

//------------------------------------------------------------------------------


社区交流群:221273219
Golang语言社区论坛 :
www.Golang.Ltd
LollipopGo游戏服务器地址:
https://github.com/Golangltd/LollipopGo
社区视频课程课件GIT地址:
https://github.com/Golangltd/codeclass


Golang语言社区

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

本文来自:简书

感谢作者:Golang语言社区

查看原文:Go语言 实现匹配机制

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

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