开发一款网络棋牌游戏(一)

来源:互联网 发布:unity3d布料系统 编辑:程序博客网 时间:2024/04/28 16:13

简介

        使用Unity开发客户端,使用MySQL存储用户数据,使用Go语言开发游戏服务器,实现类似QQ斗地主的棋牌游戏。本系列文章将分享自己的学习、开发过程,作为本系列的第一篇文章,本文将进行功能分析,设计大体框架,并分析技术选择的原因。

功能分析

       斗地主是大家喜闻乐见的棋牌游戏,都知晓其游戏规则,本文不再论述游戏规则。鉴于斗地主的游戏特性,很容易验证网络游戏服务器的功能。这也是本人决定实现网络斗地主的原因,来学习网络平台游戏的设计。

        网络斗地主的核心功能之一便是支持多人在线竞技,三人一组形成一个游戏房间。在网络端的游戏服务程序便相当于游戏大厅,开放门户等待客户端的链接。一个服务端线程管理三个客户端,即一个服务端线程便相当于一个房间。游戏的核心逻辑计算放在服务端进行,客户端仅仅接受玩家的输入,并展示当前的游戏状态。游戏的核心逻辑计算以及游戏状态的核心数据结构均放在服务端,由服务端向客户端同步当前游戏状态,这样可以在一定程度上防止玩家作弊。

        既然开发一个游戏平台,游戏玩家的注册账号是登录游戏并进行游戏的凭证,所以服务器程序还少不了玩家账户的管理。用户首先需要注册,使用数据库来保存用户的注册信息。登录游戏之后,玩家可以查看自己的游戏战绩,玩家之间可以添加好友即简单的社交功能,这些信息均需要保存在数据库中。

        开发游戏的最大动力肯定是为了盈利,所以玩家进行游戏需要消耗游戏币。游戏平台还应该支持充值功能,玩家每进行一局游戏就要消耗一定数量的游戏币。除了充值玩家,游戏平台还应该支持给不充值玩家娱乐的机会,所以游戏还应该每天给玩家发放一定数量的游戏币,这也是很多游戏中的签到功能。在本平台的设计中将区分两种游戏币,去分两种玩家:充值用户和不充值用户,充值用户与充值用户竞技,不充值用户之间进行竞技。在本平台中将允许玩家之间赠送游戏币,玩家只能赠送购买的游戏币,而不能赠送系统发放以及靠系统发放赢来的游戏币。这也是区分两种玩家的原因。

技术选择

        使用Unity开发游戏客户端:Landlords。Unity作为一款成熟的游戏引擎,可以极大提高游戏开发效率,但是在本游戏中,将主要使用其2D功能,在后续的文章中将重点介绍Untiy客户端游戏与服务端的通信功能,而不对Unity做过多介绍。

        使用Go语言实现游戏服务器程序:Sargeras。Go拥有强大的并发程序升级功能,上文中提到的一个游戏房间(为三个客户端提供服务)线程,完全可以使用Go中的协程概念。协程是轻量级线程,一个线程内可以创建成千上万(甚至更多)的协程,Go语言内部完全实现了轻量级线程的管理。使用协程特别适合开发棋牌类的网络游戏服务器程序,这也是选择使用Go来开发游戏服务端的原因。

        使用MySQL建立数据库:abyss,存储用户数据、游戏数据。

        备注:上述段落中出现了三个英语单词:Landlords是客户端的名称,就是斗地主;Sargeras(萨格拉斯)是服务端程序的名称;abyss(深渊之意,意指扭曲虚空)是在MySQL中建立的数据库的名字。关于服务器和数据库名称的来源,在魔兽世界中,萨格拉斯是扭曲虚空(abyss)的主宰者,扭曲虚空是天灾军团的发源地,驻扎着大量恶魔。如此解释相信读者理解我取名称的意义了吧。

结尾

        本系列文章记录的是自己学习、思考的过程,Unity、Go、MySQL对于我来说都比较陌生,选择这三种技术工具来实现这个程序也算是一个挑战。下一篇文章将介绍数据库的设计。

1 0