golang斗地主

项目地址:

https://github.com/dwg255/landlord

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

主要依赖包:

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

项目目录说明:

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

示例代码:

func init() {  	//生成pid文件,保存pid
	pidFileName := "pid"
	fileInfo, err := os.Stat(pidFileName)
	if err != nil {
		if os.IsNotExist(err) {
			err = os.Mkdir(pidFileName, os.ModePerm)
			fileInfo, _ = os.Stat(pidFileName)
		}
	}
	if fileInfo.IsDir() {
		pid := os.Getpid()
		pidFile, err := os.OpenFile(pidFileName+"/landlord.pid", os.O_RDWR|os.O_CREATE, 0766)
		if err != nil {
			logs.Error("open pidFile [%s] error :%v", pidFileName, err)
			return
		}
		err = pidFile.Truncate(0)  //清空数据

		_, err = io.WriteString(pidFile, strconv.Itoa(pid))
		if err != nil {
			logs.Error("write pid error :%v", err)
		}

		err = pidFile.Close()
		if err != nil {
			logs.Error("close pid file err: %v", err)
		}
	} else {
		logs.Error("pidFile [%s] is exists and not dir", pidFileName)
	}
}

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

运行步骤:

1.下载源码:

git clone https://github.com/dwg255/landlord.git

2.编译:

cd landlord/main
go build -o ../main.exe
cd ..
main.exe

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斗地主)