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

2023-05-16

一、简介

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

开发环境: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 通信模式中性能最好的网络通信模型,没有之一,甚至连和它性能接近的通信模型模型都没有。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 软件评测-软件测试与软件质量

    软件测试与软件质量 软件测试 xff1a 经典的定义是在规定条件下对程序进行操作 xff0c 以发现错误 xff0c 对软件质量进行评估 因为软件是由文档 数据 及程序组成 xff0c 所以软件测试应该是对软件形成过程的文档 数据以及程序进
  • sobol敏感性分析 matlab代码

    sobol 参数敏感性分析 参考 xff1a csdn https blog csdn net xiaosebi1111 article details 46517409 wiki xff1a https en wikipedia org
  • 软件质量的8个特性

    功能性 功能完备性 功能正确性 功能适用性 性能效率 时间特性 资源利用率 容量 兼容性 共存性 互操作性 易用性 可辨识性 易学性 易操作性 用户差错 防止性 用户界面 舒适性 易访问性 可靠性 成熟性 可用性 容错性 可恢复性 信息安全
  • Bad configuration option: \302\240

    ssh 配置文件时奇奇怪怪的错 xff0c 我碰到的是 xff1a Bad configuration option 302 240 一直不清楚后面这个 302 240 是啥意思 xff0c 后来参考这个回答 xff1a https sta
  • CentsOS系统卡值mysql查询慢

    第一步查看系统是什么占资源 htop F1 h 查看htop使用说明 xff0c F2 s 设置选项 F3 搜索进程 F4 过滤器 xff0c 输入关键字搜索 F5 t 显示属性结构 F6 lt gt 选择排序方式 F7 减少进程的优先级
  • 精美多功能翻页时钟源码 灵感来源于fliqlo

    介绍 xff1a 一个翻页时钟的网页 xff0c 灵感来源于fliqlo 外表相似 xff0c 功能不同 功能 xff1a 看时间看秒表倒计时 说明 xff1a F11 全屏 ctrl 43 43 或 调整设置框大小 单击 或 空格 可以暂
  • vscode 报错ERROR: Unable to start debugging. Unexpected GDB output from command “-exec-run“

    1 报错信息 Unable to start debugging xff0c 如下截图所示 网上找了很多资料 xff0c 发现大部分解释都说是 xff0c 库的问题 xff0c 拷贝libstdc 43 43 6 dll 文件后 xff0c
  • 关于Ip首部最大长度(60)和最小长度(20)的计算

    第一次写博客 xff0c 可能语言组织的不是特别好 xff0c 因为是个人理解 xff0c 有不正确的地方清指出 关于ip首部长度最大值5字节和60字节的计算 首先声明几个单位 ip数据报中的单位是 位 xff08 代表 32bit xff
  • Dev-C++ 5.11 调试程序 查找程序错误

    相信大家看到我这篇博客的时候还不怎么会用dev c 43 43 调试程序吧 xff0c 那么我就给大家详解一下 xff08 切记 xff1a 要调试的程序一定要能够通过编译 xff0c 一定要通过 xff0c 一定要通过 xff0c 一定要
  • NVM安装与使用

    NVM安装与使用 介绍 nvm是nodejs的版本管理工具 xff0c 可以安装和切换不同的版本nodejs npm是依赖包的管理工具 1 下载NVM GITHUB https github com coreybutler nvm wind
  • maven

    http mvnrepository com 打开网面 xff0c 搜索要查询的jar包名 xff0c 直接复制配制文件到你自己的pom xml中即可 xff0c 如 xff1a lt dependency gt lt groupId gt
  • 密集脚集成块的手工焊接方法

    电子爱好者在进行电子设计制作时 xff0c 最头痛的是焊接密集脚贴片集成块 如 VS1003的焊接 xff0c 往往感到无从下手 下面根据我设计制作时的经验 xff0c 将具体的手工操作方法介绍给大家 xff0c 希望能助你一臂之力 所需辅
  • python批量新建文件、批量保存图片、批量创建文件夹

    python批量新建文件 批量保存图片 批量创建文件夹 新建文件 xff1a 假设我要新建10个txt文件 for i in range 10 这里的 指代的是当前文件夹 i表示文件的名称 f 61 open 39 s 39 i 43 39
  • 操作系统——实验一.进程管理

    include 34 conio h 34 include 34 stdio h 34 include 34 stdlib h 34 struct jincheng type int pid int youxian int daxiao i
  • 计算机中堆栈的概念

    这两天学习win32的API xff0c 了解到了计算机中堆栈的概念 xff0c 相信很多程序员有时候也弄不明白计算机中的堆栈的数据结构 再次为堆栈做一下详细解析 在英文中 xff0c 我们管栈称为stack xff0c 管堆称为heap
  • 使用sqlite3_exec回掉函数输出查询内容

    include lt stdlib h gt include lt stdio h gt include lt sqlite3 h gt int my callback void param int f num char f value c

随机推荐