黄金点游戏

最近花了一段时间自学TCP/IP网络编程技术,掌握了基于TCP的C/S网络通信模型,熟悉了服务器和客户端软件程序的设计流程,并且利用多线程和互斥锁、条件变量等实现了并发机制。在这些知识和技术之上,写出纯C语言版的黄金点游戏。

过后又用了一段时间研究Qt网络编程,决定使用QTcpSocket重新开发黄金点游戏。于是出现了第二个版本,Qt版黄金点游戏。不仅继承第一版的分布式网络模型,还具有图形用户界面。

项目介绍

纯C语言版

开发环境:Visual Studio 2013
运行环境:Windows 7及以上版本
网络模型:使用基于TCP的C/S网络通信模型,实现黄金点游戏分布式框架。
语言技术:纯C语言开发,具有多线程,采用互斥锁和条件变量实现线程之间的同步和异步。

Qt版 

开发环境:Qt Creater 4.2.1 Community
运行环境:源代码可跨平台
网络模型:采用C/S网络通信的分布式结构。
语言技术:C++ Qt类库,采用面向对象的思想,运用QTcpSocket实现服务器和客户端的通信管理,具有图形用户界面。

程序功能 

纯C语言版

服务器:用户的连接和断开都有相应的提示。一有新用户连接,服务器自动创建新线程,用于游戏数据的通信。具有菜单,可以随时控制游戏的进行以及关闭服务器。
客户端:用户需使用服务器的 IP 地址和端口号,连接服务器,进行游戏。也具有菜单,可以随时选择数字、查看得分和退出游戏。
缺陷:服务器只有一部分功能添加了互斥锁和条件变量,因此当连接的客户端较多的时候,存在运行隐患,且此程序受域的限制。游戏的框架建立在多线程之上,随着连接数的增加, 一旦线程数量超过硬件设施支持的线程数上限,大量的线程导致大量的上下文切换,消耗大量的操作系统资源,从而降低程序的性能。
改善措施:放弃多线程为主的结构,改用select set的轮换结构,减少线程数量,增加服务器的承载。

Qt版

服务器:有当前在线人数的提示,一有新用户连接,服务器自动刷新提示。具有图形化用户界面,可以随时控制游戏的进行以及关闭服务器。
客户端:用户需使用服务器的 IP 地址和端口号,连接服务器,进行游戏。同样具有图形化用户界面,自动刷新得分,可以随时发送数字和退出游戏。
缺陷:只能创建一个游戏房间,参与游戏的用户发送数字后,进入队列等待开始游戏,并且不可重复发送数字。

运行效果

纯C语言版

Qt版

首先打开服务器,创建游戏房间。

分别打开两个客户端,并且输入服务器地址和端口号,点击进入游戏。

发送数字到服务器,并且服务器强制开始游戏,将结果得分发送至客户端。

设置游戏人数。

发送数字到服务器,然后服务器自动开始游戏,将结果得分发给客户端。

纯C语言版黄金点游戏的源代码和发行版本下载链接:https://github.com/xucongandxuchong/Gold-Point

Qt版黄金点游戏的源代码和发行版本下载链接:https://github.com/xucongandxuchong/Gold-Point/tree/Qt

注:此两种版本的黄金点游戏纯属原创,转载请注明出处。

posted @ 2017-09-27 13:46  独孤过  阅读(303)  评论(0编辑  收藏  举报