教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang斗地主

golang斗地主

发布时间:2022-02-08   编辑:jiaochengji.com
教程集为您提供golang斗地主等资源,欢迎您收藏本站,我们将为您提供最新的golang斗地主资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg>

项目地址:

https://github.com/dwg255/landlord

说明:go modules管理依赖包,执行编译自动下载依赖;使用sqlite数据库,无需配置;自带无脑出牌AI;服务端经过压力测试,客户端代码来自https://github.com/mailgyc/doudizhu ,原版服务端用python tornado开发。golang开发的服务端编程简单,执行高效,有效利用多核资源,游戏server端为golang典型的应用场景之一。项目大量使用goroutine及channel,命名及注释清晰。

主要依赖包:

<ul><li>github.com/astaxie/beego 主要用到其logs包,监听http端口及处理请求使用golang自带的包 net/http</li><li>github.com/mattn/go-sqlite3 持久化数据使用了sqlite,省去配置mysql及见表的操作</li><li>github.com/gorilla/websocket websocket连接及收发消息</li></ul>

项目目录说明:

<ul><li>common 公共包,<code>*包含全局配置、生成全部牌型的方法、计算牌型以及客户端协议常量*</code> <ul><li>config .go 全局配置</li><li>generate.go 生成json格式所有牌型</li><li>model.go</li><li>poker.go</li><li>protocol.go</li><li>rule.go</li></ul></li><li>conf 配置文件目录 <code>*监听的端口、日志级别、日志路径、存储路径等*</code></li><li>controllers 控制器目录 <code>*处理http请求*</code> <ul><li>Index .go</li><li>LogiN.go</li><li>LogoUt.go</li><li>RegiSter.go</li></ul></li><li>db 数据目录 <code>*sqlite数据目录*</code></li><li>logs 日志文件目录</li><li>main 项目入口 <code>*初始化配置、启动服务*</code> <ul><li>config.go 初始化全局配置</li><li>init.go</li><li>main.go 启动服务,监听端口</li></ul></li><li>pid</li><li>roter 路由目录 <ul><li>router.go</li></ul></li><li>service 逻辑目录 <code>*处理开局、出牌、加入机器人、输赢判断等*</code> <ul><li>client.go 处理客户端请求,启动协程处理客户端请求</li><li>request.go</li><li>robot.go 机器人</li><li>room.go 房间</li><li>table.go</li></ul></li><li>static 静态文件目录</li><li>templates 模板文件目录</li><li>go.mod</li><li>go.sum</li><li>LICENSE</li><li>main.exe windows 64位系统下的可执行文件</li><li>README.MD</li><li>rule.json 生成的所有牌型文件</li></ul>

示例代码:

<pre><code class="lang-go hljs"><span class="token keyword">func</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//生成pid文件,保存pid</span> pidFileName <span class="token operator">:=</span> <span class="token string">"pid"</span> fileInfo<span class="token punctuation">,</span> err <span class="token operator">:=</span> os<span class="token punctuation">.</span><span class="token function">Stat</span><span class="token punctuation">(</span>pidFileName<span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> os<span class="token punctuation">.</span><span class="token function">IsNotExist</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span> <span class="token punctuation">{</span> err <span class="token operator">=</span> os<span class="token punctuation">.</span><span class="token function">Mkdir</span><span class="token punctuation">(</span>pidFileName<span class="token punctuation">,</span> os<span class="token punctuation">.</span>ModePerm<span class="token punctuation">)</span> fileInfo<span class="token punctuation">,</span> <span class="token boolean">_</span> <span class="token operator">=</span> os<span class="token punctuation">.</span><span class="token function">Stat</span><span class="token punctuation">(</span>pidFileName<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">if</span> fileInfo<span class="token punctuation">.</span><span class="token function">IsDir</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> pid <span class="token operator">:=</span> os<span class="token punctuation">.</span><span class="token function">Getpid</span><span class="token punctuation">(</span><span class="token punctuation">)</span> pidFile<span class="token punctuation">,</span> err <span class="token operator">:=</span> os<span class="token punctuation">.</span><span class="token function">OpenFile</span><span class="token punctuation">(</span>pidFileName<span class="token operator"> </span><span class="token string">"/landlord.pid"</span><span class="token punctuation">,</span> os<span class="token punctuation">.</span>O_RDWR<span class="token operator">|</span>os<span class="token punctuation">.</span>O_CREATE<span class="token punctuation">,</span> <span class="token number">0766</span><span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> logs<span class="token punctuation">.</span><span class="token function">Error</span><span class="token punctuation">(</span><span class="token string">"open pidFile [%s] error :%v"</span><span class="token punctuation">,</span> pidFileName<span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token punctuation">}</span> err <span class="token operator">=</span> pidFile<span class="token punctuation">.</span><span class="token function">Truncate</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span> <span class="token comment">//清空数据</span> <span class="token boolean">_</span><span class="token punctuation">,</span> err <span class="token operator">=</span> io<span class="token punctuation">.</span><span class="token function">WriteString</span><span class="token punctuation">(</span>pidFile<span class="token punctuation">,</span> strconv<span class="token punctuation">.</span><span class="token function">Itoa</span><span class="token punctuation">(</span>pid<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> logs<span class="token punctuation">.</span><span class="token function">Error</span><span class="token punctuation">(</span><span class="token string">"write pid error :%v"</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token punctuation">}</span> err <span class="token operator">=</span> pidFile<span class="token punctuation">.</span><span class="token function">Close</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> logs<span class="token punctuation">.</span><span class="token function">Error</span><span class="token punctuation">(</span><span class="token string">"close pid file err: %v"</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> logs<span class="token punctuation">.</span><span class="token function">Error</span><span class="token punctuation">(</span><span class="token string">"pidFile [%s] is exists and not dir"</span><span class="token punctuation">,</span> pidFileName<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre>

*更多代码详见 GitHub *
-service -room.go 文件内包含压测代码,压测5000个房间CPU平均占有率30%-50%,内存200M左右。

运行步骤:

1.下载源码:

<pre><code>git clone https://github.com/dwg255/landlord.git </code></pre>

2.编译:

<pre><code>cd landlord/main go build -o ../main.exe cd .. main.exe </code></pre>

3.启动:
浏览器访问 http://localhost

4.效果展示:
http://blzz.shop

5.运行截图:




License

This project is released under the terms of the MIT license. See LICENSE for more
information or see https://opensource.org/licenses/MIT.


到此这篇关于“golang斗地主”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang微服务框架对比_斗鱼开源首秀——基于 Go 的微服务框架 Jupiter
斗鱼tv很卡怎么办 斗鱼tv解决很卡方法
Golang 限流器的使用和实现
斗鱼直播伴侣如何设置 斗鱼直播伴侣设置教程
算命的也要懂代码了?这个开源项目从黄历到八字都算得清清楚楚
photoshop合成飞鹰战斗场景制作教程
jieba库的运用
golang斗地主
Html5斗地主棋牌架设Canvas实现斗地主游戏代码解析
Photoshop打造夏日个性T恤攻略

[关闭]
~ ~