C语言开发《扫雷》游戏,你从未体验过的联网对战版

Posted C语言编程俱乐部

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言开发《扫雷》游戏,你从未体验过的联网对战版相关的知识,希望对你有一定的参考价值。

一、简介

单机版扫雷总会有些枯燥,不妨试试联网对战版扫雷!

开发环境:VS2019 + EasyX_20210224。

游戏玩法:左键按下翻开方块,翻开雷判输,或翻开最后一个方块判赢;逃跑或超时会结束本轮连接,正常结束会自动重新开局,对手不变。

目的:一方面提供联网对战版扫雷供大家娱乐,另外也是重构曾经写过的扫雷单机版,最后也为了练习 Windows 网络编程。

二、网络

关于 Windows 网络编程书籍,推荐朱晨冰老师的《Visual C++ 2017 网络编程实战》,出版日期 2020 年。

个人感觉这本书讲解比较细致,内容也不会太老旧,有计网基础会更容易理解学习。

程序采用阻塞套接字编写,因此服务器免不了使用多线程,多线程部分由 C++11 提供。

想要让程序不限于局域网通信又不想购买服务器,这里推荐花生壳软件,操作简单,TCP 部分免费使用,相关内容自行搜索。

三、程序文件

1、服务器文件:

包含两个文件:WinsockTcp.h 和 main.cpp。

WinsockTcp.h 主要封装了 TCP 相关操作,可创建 TCP 服务器和客户端;main.cpp 为服务器代码。

2、客户端代码:

包含文件:WinsockTcp.h,Button.h,Datas.h,HomeScene.h,RunningScene.h,main.cpp。

    ☁ WinsockTcp.h 同服务器的 WinsockTcp.h;

    ☁ Button.h 封装简单按钮;

    ☁ Datas.h 包含一些数据和绘图图像;

    ☁ HomeScene.h 为开始场景,比较简单;

    ☁ RunningScene.h 核心代码,涉及客户端网络连接和程序控制;

    ☁ main.cpp 程序入口,主要控制程序走向。

3、如何测试运行该游戏:

    a)客户端 IP 地址为笔者服务器地址,可直接运行客户端进行联网匹配。

    b)局域网或本地测试:

运行服务器 -> 修改客户端源码 IP 地址为本地 IP -> 运行客户端,可运行多个实例。

客户端连接服务器成功后 30s 左右未匹配时将匹配失败,可重新尝试匹配。

    c)更新:修改服务器对于同一个 IP 地址的客户端,最多接受两个实例进行连接。

四、其他

界面截图:

五、服务器更新

在 Windows 下,套接字有两种 I/O 模式:阻塞模式和非阻塞模式,前面服务器在阻塞模式下借助多线程实现。

而对于非阻塞模式,微软提出五种 I/O 模型:选择模型(select 模型)、异步选择模型(WSAAsyncSelect 模型)、事件选择模型(WSAEventSelect 模型)、重叠 I/O 模型(Overlapped I/O 模型)、完成端口模型。不同的模型,程序架构是不同的,相对而言,难度依次递增。

完成端口会充分利用 Windows 内核来进行 I/O 的调度,是用于 C/S 通信模式中性能最好的网络通信模型,没有之一,甚至连和它性能接近的通信模型模型都没有。

因此完成端口被广泛的应用于各个高性能服务器程序上。这里使用完成端口模型更新扫雷服务器,功能不变,客户端也不需要改变。

代码较多,为了不影响观看就不贴出来了

需要的可以戳下方链接自行下载~

以上是关于C语言开发《扫雷》游戏,你从未体验过的联网对战版的主要内容,如果未能解决你的问题,请参考以下文章

井字棋(人机对战版)

C语言实现扫雷游戏(一步步教你如何写扫雷)

扫雷游戏 c语言

C语言实现小游戏篇我接触的第一款电脑游戏,你可以永远相信 “ 扫雷 ” 。[ C语言实现 ] [ 超详细,超清楚 ] [ 有代码 ]

c语言期中项目实战二—简易扫雷,思路分析加代码详细注释

带你快速实现C语言之扫雷(未优化版)