网上点对点对弈系统毕业论文.doc_第1页
网上点对点对弈系统毕业论文.doc_第2页
网上点对点对弈系统毕业论文.doc_第3页
网上点对点对弈系统毕业论文.doc_第4页
网上点对点对弈系统毕业论文.doc_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

潍 坊 学 院 本 科 毕 业 设 计 网上点对点对弈系统毕业论文网上点对点对弈系统毕业论文 目录 1 前言 1 1 1 课题目的和意义 1 1 2 网络连接问题 2 1 3 文件操作问题 3 2 方案论证 4 2 1 VC 技术 4 2 2 VISUAL C 基本概念 5 2 3 开发点对点对弈系统概述 6 3 网上点对点对弈系统功能需求 7 3 1 网上点对点对弈系统功能需求简介 7 3 2 开发系统目标 8 3 3 网上点对点对弈系统设计功能需求 8 4 网上点对点对弈系统分析与设计思路 10 4 1 功能设计图 10 4 2 对弈界面设计 11 4 3 对弈设计思路 17 4 4 网络连接 19 5 系统运行与调试 23 5 1 系统登陆 23 5 2 开始对弈 23 5 3 程序调试 25 结束语 26 参考文献 27 附录 28 致 谢 54 潍 坊 学 院 本 科 毕 业 设 计 1 1 前言前言 近来随着计算机的快速发展 各种棋类游戏被纷纷请进了电脑 我的点对点对 弈游戏是在 VC 开发环境下编制的 是基于对话框方式的软件模式 主要介绍了 VC 理论知识和它的复用及可移植性 也对 VC 的代码复用 面向对象的程序开发系统 的阐述 对弈是每个人生活中不可缺少的一部分 它对于工作的人甚至生活中的每一个人 来说都是非常重要的 由于他方式简单 所以人们常采用这种方式来休闲 但一直以来人们只能面对面来对弈 这种方式存在着许多缺点 如 必须双方 在同一个地方 还要有对弈的工具 有没有地方等诸多因素 另外在很长时间后 人 会变累甚至产生反感 所以要开发一个可以随时随意娱乐的系统来满足人们的要求 随着科学技术的不断提高 计算机科学日渐成熟 其强大的功能已为人们深刻认 识 它已进入人类社会的各个领域并发挥着越来越重要的作用 作为计算机应用的一部分 使用计算机来进行点对点对弈 具有与传统对弈无法 比拟的优点 例如 速度快 方便 按照不同需求寻找对弈方 保密好 不限制时 间地点 可随时进行 不需要对弈工具等 这些优点能够极大地提高人们生活的乐 趣 也是公民娱乐的方式之一 因此 针对以上所阐述的问题 开发网上点对点对弈系统会方便许多人 也会 提高他们的娱乐心情 在下面的各章中我们将以开发此对弈系统为例 谈谈其开发 过程和所涉及到的问题及解决方法 1 11 1 课题目的和意义课题目的和意义 2003 年我国已将网络游戏纳入 863 计划 目前中国的网络游戏开发人才奇缺 完成此课题的设计是我们学以致用 总结学习成果 拓展就业渠道的一个理想过程 信息时代的来临 令人新奇而又陌生 兴奋而又不安 它充满了竞争 每一个 中国人都必须面临挑战 新世纪里 拥有新观念 新知识 新经验 意味着机遇 否则意味着淘汰 从现在起 浓度远虑 从心态到技能 从观念到知识 主动出击 长远计划 充实自己 不断掌握的专业知识和职业技能 提高自己的综合素质和竞 争能力 残酷的竞争摆在我们的面前 在这能力本位的社会转弄期 我们不能不掌 握一技之长 潍 坊 学 院 本 科 毕 业 设 计 1 21 2 网络连接问题网络连接问题 熟悉 winsock 控件属性和方法的使用 达到使之能连接和传送数据 Winsock 控件是 VC 新增功能 它解决了以往应用 VC 时网络中应用程序之间无法实 现点对点通信的难题 Winsock 使用的 TCP 协议和 UDP 协议允许建立并保持一个 到远程计算机上的连接 且可以在连接结束之前实时地进行数据交换 用户仅通过设 置属性并借助事件处理就能连接到一个远程的计算机上 而且只用两个命令就可以实 现数据交换 使用 TCP 协议时 如果需要创建一个客户应用程序 就必须识别服务器的名称或 IP 地址 应用程序的通信端口随时都将仔细监测对方发出的消息 这是系统进行可靠 连接的保证 一旦连接发生 任何一方都可以通过 SendData 发送和接收数据 并借助 GetData 把自己的数据分离出来 传送数据时先设定客户机的 LocalPort 属性 服务器则只需要把 RemoteHost 属性 设定为客户机以太网的地址 并设定与客户机 LocalPort 属性相同的端口地址 借助 SendData 方法发送消息 客户机在 GetData 事件中通过 DataArrival 事件分离出发送 信息 一个 Winsock 控件可以让本地计算机连接到远程的计算机上 同时使用 UDP 或 TCP 协议 两个协议都能创建客户机和服务器应用 使用 Winsock 控件时 通信的双方需要选定相同的协议 TCP 协议适用于传送大 容量 需要安全性保证的数据文件 而 UDP 协议适用于需要分别与很多下属通信 或 者建立的连接比较多且为时变的情况 特别是在数据量很小的时候 设定时可以使用 Winsock1 Protocol sckTCPProtocol 方法 首先要找到你的计算机的名称 并把它添入 Winsock 的 LocalHost 属性中 服务器程序的实现过程是 1 服务器程序必须设置好 LocalPort 属性 作为侦听端口 该值为一个整数 只 要是一个其它 TCP IP 应用程序没有使用过的值即可 2 使用 Listen 方法进入侦听状态 等待客户机程序的连接请求 3 客户机程序发出连接请求 使服务器程序产生 ConnectionRequest 事件 该事 件得到一个参数 requestID 4 服务器程序用 Accept 方法接受客户机程序的 requestID 请求 这样 服务器 程序就可以用 SendData 方法发送数据了 Accept 方法必须用上一步得到的 requestID 作为其参数 当服务器程序接收到数据时 产生 DataArrival 事件 参数 BytesTotal 包含接收到的数据字节数 在该事件中 可以用 GetData 方 法接收数据 5 如果接受到 Close 事件 则用 Close 方法关闭 TCP IP 连接 客户机程序的实 潍 坊 学 院 本 科 毕 业 设 计 现过程是 客户程序设置 Remotehost 属性 以便指定运行服务器程序的主机 名 该字符串 可在 控制面板 网络 标识 计算机名 中查到 6 设置 RemotePort 属性 以便指定服务器程序的侦听端口 使用 Connect 方法 向服务器提出连接请求 服务器接受客户机程序的请求 客户机程序产生 Connect 事件 就可以用 SendData 方法发送数据了 当客户机程序接收到数据时 产生 DataArrival 事件 参数 BytesTotal 包含接收到的数据字节数 在该事件中 可以用 GetData 方法接收数据 1 Winsock 属性知识点 BytesReceived 返回接收到的数据数量 Index 返回或设置 是唯一集合中的对象 LocalHostName 返回本地机器名 LocalIP 返回本地机器 IP LocalPort 返回或设置本地端口 Protocol 返回或设置 Winsock 所用协议 RemoteHost 返回或设置远程计算机 RemoteHostIP 返回远程计算机 IP SocketHandle 返回一个与套接字句柄对应的值 控件用套接字句柄同 Winsock 层通 信 2 Winsock 协议 控件 Winsock 支持两种连接方式 TCP IP 连接 UDP 连接 需要一方 为服务器 连接在一起才能相互通信 UDP 是一个无连接协议 计算机之间不需服 务器 只需知道对方的 和使用端口 即可通信 1 31 3 文件操作问题文件操作问题 熟悉 VC 文件操作方法 用以记录所需数据 Open 打开一个文件 当文件不存在时新建文件 Put 对打开的文件写入一个字符串 Get 从打开的文件中读取一个字符串 Close 关闭一个已经打开的文件 熟悉 VC 多媒体操作 用以游戏提示和显示 增加游戏趣味性 以上 WIN32 API 函数可以用于图像剪截 合成以及播放 WAV 声音文件 是本游戏 多媒体运用的重点 潍 坊 学 院 本 科 毕 业 设 计 2 2 方案论证方案论证 2 12 1 SocketSocket 技术技术 Windows Sockets 规范以 U CBerkeley 大学 BSD UNIX 中流行的 Socket 接口为 范例定义了一套 Micosoft Windows 下网络编程接口 它不公包含了人们所熟悉的确 良 Berkeley Socket 风格的库函数 也包含了一组针对联 Windows 的扩展库函数 以 使程序员能充分地利用职权 Windows 消息驱动机制进行编程 2 1 12 1 1 SocketSocket 概述概述 Socket 在计算机中提供了一个通信的端口 通过这个端口与任何一个具有 Socket 接口的计算机进行通信 应程序在网络上传输 接收的住处都通过这个 Socket 接口来实现的 在应用开发中就像使用文件的句柄一样 可以对 Socket 句柄 进行读 写操作 为 TCP IP 开发的 API 应用程序接口 称为 Socket 接口 套接字 Socket 接 口是 TCP IP 网络最通用的 API 也是在 Internet 上进行应用开发最为通用的 API 2 1 22 1 2 SocketSocket 与应用层与应用层 一个数据流往往被分解成数据包的 被送到另一台计算机 并且按原样合起来 然而要实现任何有用的事情就必须做更多的事情 必须有一种方法让你对指定的计 算机打开连接 登录上去 告诉它你需要什么文件 并且控制文件的传输 这是由 应用层协议 完成的 软件工程是指导计算机软件开发和维护的工程科学 采用工程的概念 原理 技术和方法来开发和维护软件 把经过时间考验而证明正确的管理技术和当前能够 得到的最好技术方法结合起来 软件工程强调使用生存周期方法学和各种结构分析及结构设计方法 软件工程 采用的生存周期方法学是从时间角度对软件开发和维护的复杂问题进行分解 把软 件生存的漫长周期依次划分为若干阶段 每个阶段有相对独立的任务 然后逐步完 成每个阶段的任务 采用软件工程方法论开发软件的时候 从对任务的抽象逻辑分析开始 一个阶 段 一个阶段的进行开发 应用层协议位于 TCP IP 协议的顶部 也就是说 当他们需要发送一个消息 他 们会把那个消息交给 TCP 层 潍 坊 学 院 本 科 毕 业 设 计 TCP 层确保它输送到另一端 因为 TCP 层和 IP 层处理了所有的网络方面的细节 应用层协议可以认为一个 网络连接是一个简单的字节流 就像一个终端或一个条电话线 用户程序通常使用或多或少的随机产生的端口号 然而特定的端口号被指派给 等待请求的程序 例如 如果要传送一个文件 你要启动一个称为 ftp 的程序 它 将使用某个随机数来打开一个连接 这个随机数就是它这端的端口号 然而它将指定期 21 作为另一端的端口号 这是 FTP 服务器的正式端口号 注 意 有两个不同的程序与此有关 你运行 FTP 在你这边 这个程序被设计成用来接受从你的终端发出的命令并把他们传递到另一端 服 务器必须有熟知端口号 这样子才能让人们对它们打开连接并且开始向它们传送命 令 每个程序的正式端口号都取之于 已分配号码 一个连接实际上由一组 4 个数来描述 各端的 Internet 地址和各端口的 TCP 层 端口号 每个数据包都包含所有 4 个数里边 为了互相区别 任意两个连接都不能 拥有相同的一组数字 但是只要其中的任何一个数字不同就足够啦 既然有关相同的机器 Internet 地址就是一样的 因为它们都进行文件传输 所 以连接的一端涉及 FTP 的熟知端口号 惟一不同的东西是用户运行程序的端口号 连接的一端要求网络软件给它分配确保惟一的端口号 通常这个由用户端做 因为 服务器必须使用熟知端口号 2 22 2 VisualVisual C C 基本概念基本概念 为了理解应用程序开发过程 先要理解 Visual C 赖以创建的一些关键概念 因为 Visual C 是 Windows 开发语言 所以有必要与 Windows 环境保持一定的相似 性 如果不熟悉 Windows 编程 就需要明白在 Windows 环境下编程和在其它环境下 编程的一些根本性的差别 1 交互式开发 传统的应用程序开发过程可以分为三个明显的步骤 编码 编译和测试代码 但是 Visual C 与传统的语言不同 它使用交互式方法开发应用程序 使三个 步骤之间不再有明显的界限 此时必须查找并改正该错误 然后再次进行编译 对每一个发现的错误都要重复这样的过程 2 Visual C 在编程者输入代码时便进行解释 即时捕获并突出显示大多数语法 或拼写错误 看起来就像一位专家在监视代码的输入 除即时捕获错误以外 Visual C 也在输入代码时部分地编译该代码 3 当准备运行和测试应用程序时 只需极短时间即可完成编译 如果编译器发现 了错误 则将错误突出显示于代码中 这时可以更正错误并继续编译 而不需 潍 坊 学 院 本 科 毕 业 设 计 从头开始 4 事件可以通过诸如单击鼠标或按下按键的操作而产生 也可以通过程序的控制 而产生 也可以由另一窗口的操作而产生 5 每发生一次事件 将引发信息的产生 收集 输入 处理到最后输出这一连串 过程单元所组成 它从管理系统中集成有关的数据做成记录 加以处理 并对 处理后的数据进行解释 最后作为信息返回管理系统 2 32 3 开发开发点对点对弈系统概述点对点对弈系统概述 应用程序的最终目标就是为用户提供满足其长期需要的产品 成功地开发一个 数据库应用程序的关键之一是要详细地定义用户的需求 然后再围绕用户的需求进 行开发 控制部件页上的部件 主要用于设计用户界面 对数据库中的数据进行浏 览 编辑 插入 删除等操作 下表列出了数据控制页上的数据控制部件及它们的主要用途 表2 1 数据控制部件 部件名称部件名称主主 要要 用用 途途 TDBText 它是显示数据的文本框 它只能显示数据当前记录的字段值 用户不能对其 中的数据进行修改 TDBEdit 它是显示和编辑数据中的数据的编辑框 它既可以显示又可以编辑数据中当 前记录的字段值 TDBListBox 它是浏览数中的数据的列表框 它可以用一个列表框来显示数据中一个字段 的值 TDBComboBox 它是浏览数据中的数据的组合框 它可以用一个组合框来显示数据中一个字 段的值 TDBMemo 它主要用于浏览数据中备注型的字段 它可以用来显示数据中当前记录中的 BLOB 型字段 TDBImage它是浏览数据中的数据的图像框 它可以用于显示 拷贝 粘贴数据中图 像类型的字段 潍 坊 学 院 本 科 毕 业 设 计 3 3 网上点对点对弈系统网上点对点对弈系统功能需求功能需求 3 13 1 网上点对点对弈系统功能需求简介网上点对点对弈系统功能需求简介 信息社会的高科技 商品经济化的高效益 使计算机的应用已普及到经济和社 会生活的各个领域 计算机虽然与人类的关系愈来愈密切 还有人由于计算机操作 不方便继续用手工劳动 为了适应现代社会人们高度强烈的时间观念 小区物业管 理系统软件将为物业管理部门带来了极大的方便 通过本书的介绍 使用者可以了解本软件的基本工作原理 操作人员只需输入 一些简单的汉字 数字 即可达到自己的目标 3 1 13 1 1 系统开发所需的软硬件配置系统开发所需的软硬件配置 1 硬件配置 塞扬 800 处理器 2 1G 硬盘 64M 内存 2 软件配置 以 Windows2000 操作系统 Visual C 3 1 23 1 2 项目概述项目概述 该点对点对弈系统软件应具有比较完善的功能 并且是针对公民的实际情况和 基本需求所开发的 开发点对点对弈系统软件是为了满足公民对生活的基本需求和 对娱乐的必要 以现代化的创新思维模式去工作 因为在现今的社会是一个讲究娱乐的社会 人们有很强的娱乐观念 如果想对 弈的时候找不到合适的人 既浪费了人力 又浪费了物力 效率无法提高 为此开 发此点对点对弈系统软件 能够适应现今社会并提高生产效率 该系统软件非常容易被接受 它具有简单易学性 便于使用等功能 它是公民 娱乐的一种简单有效的软件 应用程序的最终目标就是为用户提供一个满足其长期需要的软件产品 因此 成功地开发一个数据库应用程序的关键之一是要详细地定义用户的需求 然后再围 绕用户的需求进行开发 一个应用系统性能的优劣 效率的高低始终应当由用户来做出判决 应用程序 在运行过程中 用户会提出一些新的需求和建议 根据用户需求的变化 应当对应 用程序做一定的修改 使其进一步地得到完善和提高 以求达到用户的要求 如果 有需要的话 还应使程序的可括充性更为强大 来保证今后的应用性更为好 更为 潍 坊 学 院 本 科 毕 业 设 计 有效 3 23 2 开发开发系统目标系统目标 3 2 13 2 1 开发意图开发意图 为了使人们对对弈系统有一个全面的了解 为了对公民的娱乐更简单方便 为了增强公民对弈的实用性 增加对 VC 语言的认识 3 2 23 2 2 应用目标应用目标 点对点对弈系统是为了更好的配合人们的娱乐情况 以减小各种对弈所耗费的 时间以及耗时的强度 以便于节约大量的人力 物力来更快捷 准确的提供各种娱 乐服务 达到使每位客户满意的目的 对弈对每一个人来说都是不可缺少的一部分 它的作用对人们来说都是非常重 要的 让每个人都可以轻松的实现网上的对弈 可以在忙碌的工作或者学习过程中放 松一下 该系统简单方面 易于操作 满足广大人们的需求 3 33 3 网上点对点对弈系统设计功能需求网上点对点对弈系统设计功能需求 3 3 13 3 1 系统设计需求分析系统设计需求分析 在采用此系统后应根据网络情况 该系统在实施后 应能够满足人们的对弈 需求 能够满足双方的要求 根据各自的喜好来进行对弈 减少了对弈的地理 限制和时间限制 数据需求 数据准确 详细 用户界面简明 易懂 操作方便 环境需求 软件运行在奔腾处理器以上配置的机器 在 Windows2000 及 Windows XP 操作系统上运行 可靠性需求 此管理系统在未来的工作运行中 保证运行的稳定性 娱乐性需求 人们可以随时进入系统来进行对弈 与服务器上的人选择进行 对弈 以满足自己的需求 此系统在开发过程中和运行过程中对资源的占用应尽可能少 潍 坊 学 院 本 科 毕 业 设 计 3 3 23 3 2 软件设计基本要求软件设计基本要求 基本资料录入 主要对对弈的各个项目进行核对 如 双方棋子位置录入 双方输赢录入 游戏管理 管理与人们相关的详细信息和对弈的分数信息 同时对对弈双方 进行必要的提示信息 统计 主要是统计对弈双方的分数 和按条件进行双方的盘数记录 如果对 方强行退出的处理情况 系统管理 在此栏中系统将提供 对方的实力 以及难易程度 提示 在玩家需要提示的时候进行相关提示 帮助 它包括对方的名称 及所用的语言 其中还包括对弈的帮助系统 可 供刚使用此软件的用户能够很轻松的使用本软件 3 3 33 3 3 软件设计功能软件设计功能要求要求 功能图如图 3 1 所示 使人们可以实现网上的对弈可分为外部和内部的功能 内部和外部的功能相结 合才能完成一个完整的对弈系统 外部功能 点对点对弈软件是使对弈更简单有效的进行 并记录双方的对弈情况 当点击鼠标左键的时候可以完成放子 悔棋功能 内部功能 该软件集选择对方 难易程度于一体 由电脑进行打分 评判 完全 自动化进行 简单完成对弈 用户输入 数据交换数据交换 数据库 录入模块 选择模块 图 3 1 潍 坊 学 院 本 科 毕 业 设 计 4 4 网上点对点对弈系网上点对点对弈系统分析与设计思路统分析与设计思路 4 14 1 功能设计图功能设计图 4 1 14 1 1 系统流程图系统流程图 对弈系统流程图 它主要是对系统的整个数据流向或个别流向 做一个有效的 快捷的 可视的描述 根据对弈系统的特点 由客户双方对网上的对弈系统进行一系列的相应操作 从而达到在网上就可以实现的对弈目的 对方 数据 返 回 用户选择 开 始 对 弈 提 示 意见 反馈 修 复 己方 数据 双方 数据 对弈系统 选择下 一个对 弈用户 对弈 规则 对弈系 统修复 系统意 见投诉 图 4 1 对弈系统流程图 潍 坊 学 院 本 科 毕 业 设 计 4 1 24 1 2 基本功能的设计结构基本功能的设计结构 主要有四个基本功能分别为 用户情况 自己的信息 选择用户 选择对方的地点和分数情况 包括对方用户名 地点以及分数 记录分数 记录双方的分数信息 提示 在双方走错的时候有相关的提示 在这里需要由数据库控制控件分别连接几个表 其中己方用户型表名为 USER1 己方分数表名为 SCORE1 对方用户名为 USER2 对方分数表名为 SCORE2 四张表的具体结构如下所示 表 4 1 功能表结构 列名列名数据类型数据类型长度长度 己方用户名nvarchar10 对方用户名nvarchar10 己方分数float5 对方分数float5 备注nvarchar10 说明 在对弈时 会自动记录双方的分数以达到对弈目的 操作简单 不会浪 费时间 更简单方便的进行操作 4 24 2 对弈界面设计对弈界面设计 对弈游戏 五子棋 是一款十分简单耐玩的经典游戏 游戏规则也很简单 在 棋盘上将自己所持的棋子抢在对手前不论横 竖 还是斜连成五子连珠就胜利 虽然规则简单但是棋盘纵横 错一步失之千里 所以在棋盘上变数无穷 到底 是攻还是防都是很有讲究的 伴随着计算机技术和网络技术的发展 世界第一款图形化网络游戏问世 挟计算机与网络技术之高精尖 融传统视听与数码娱乐之精华 集娱乐性 竞 技性 仿真性 互动性于一体 这种网上的游戏系统迅速风靡全球 备受青睐 自此拉开了网上娱乐游戏的序幕 所以五子棋成为了一款老少偕宜的益智游戏 如图 4 2 潍 坊 学 院 本 科 毕 业 设 计 图 4 2 对弈系统截图 4 2 14 2 1 界面设计界面设计 游戏界面设计以简单为主 设计简便易懂 符合广大人们的要求 游戏主要是以贴位图为界面 界面的简单可以让人更快的了解系统的用法 方 便了对弈的娱乐性 设计快捷键的时候要考虑到不要和系统的常用快捷键冲突 比如 ctrl A ctrl C 等等 在开发的时候就犯过错误 结果本意是要用 ctrl A 复制全部 内容 结果却成了弹出对话框 快捷键的设计也要考虑到和具体功能的含义相符 clear 操作就可以设计为 ctrl l 设计成系统快截键就不好了 棋盘以一张Photoshop做的 10 10 的位图为棋盘 如图 4 3 以绿 红两色的圆 形图片为棋子 如图 4 4 潍 坊 学 院 本 科 毕 业 设 计 图 4 3 棋盘 用Photoshop做的棋子 粉色棋子和绿色棋子 图 4 4 棋子 因为是以贴图为游戏界面所以要将棋盘划分为 10 10 的方格 比如棋盘是 400 400 像素的那么每个期格就是 40 40 大小 然后在设计鼠标捕获函数 将鼠 标所在棋格所捕获 鼠标点击事件就是判断鼠标所在的棋格里是否有已有棋子 如有则不做出反映 当然也可以用 MessageBox 函数设计报错信息 若无棋子 这可以在该棋格里填上玩家所持的棋子 4 2 24 2 2 策略设计策略设计 在对弈游戏中 计算机必须要知道有哪些获胜的组合 这样才能快速的判断出 一场游戏的胜负 我们可以设计一个数组来实现这点 首先我们先要确定在 10 10 的棋盘里有多少获胜的组合 1 先判断水平方向上的获胜组合总数如图 4 5 每一行一共有 6 个获胜可能 那 么水平方向一共有 6 10 60 个获胜可能 潍 坊 学 院 本 科 毕 业 设 计 图 4 5 水平方向的获胜可能 2 判断垂直方向获胜总数 同理锤子方向一共有 6 10 60 个获胜可能 3 正对角线上的获胜可能总数 原理同判断水平锤子一样 一共有 6 5 4 3 2 1 2 36 4 反对角线的获胜可能和正对角线是相同的一共 36 个 所以在 10 10 的棋盘上 一共有 60 2 36 2 192 种获胜可能 只要连成 5 个即胜利 电脑宣布对弈结果 所以我们设计出 2 个 BOOL 型的 3 维数组 BOOL ptable 10 10 192 玩家的每个棋子是否在各个获胜组合中 BOOL ctable 10 10 192 电脑的每个棋子是否在各个获胜组合中 int win 2 192 玩家与对方在各个获胜组合中各填入了几个棋子 BOOL 型数组 ptable 和 ctable 中元素都是用来代表某一个位置上的棋子是否 在某一个获胜组合中 在每个获胜组合中 都有五颗棋子 如图 4 6 假设图 4 6 中的的排列是 192 中组合中的第 7 种 那么初始化数组值因该是 潍 坊 学 院 本 科 毕 业 设 计 图 4 6 一个胜利组合 ptable 1 1 7 false ptable 2 1 7 ture ptable 3 1 7 ture ptable 4 1 7 ture ptable 5 1 7 ture ptable 6 1 7 ture ptable 8 1 7 false 同理 ctable 数组也如此设定 如果玩家的棋子占据了 3 1 位置那么 ctable 3 1 false 第 7 种获胜可能对电脑是不可能了 相反也依然 win 2 192 用来记录玩家 和电脑在各个获胜组合中添入的棋子数 我们设定玩家的下标为 0 电脑的下标为 1 如果数组 win 2 192 中有元素为 5 那么游戏结束 并宣布谁获胜 例如上图就是 win 0 7 5 意思就是玩家获胜 4 2 34 2 3 对弈双方得分设计对弈双方得分设计 如何让对弈有挑战性 如何决定下一步最佳走法 这就涉及到了难易程度 这 里我们可以设计以分数的形式 先将棋盘的各个能落子的点都分析并给出一定的分 数 最后电脑根据某点的得分最高而落子 如何设定各个落子点的得分呢 首先将得分分为 2 部分组成一是进攻得分二是 潍 坊 学 院 本 科 毕 业 设 计 防守得分 首先计算进攻得分 如图 4 7 中计算得分 右边棋子 2 已经完全阻隔了左边棋子 1 的右边的胜利的连线 因此右边的空格 对左边的棋子 1 来说是没有意义的 所以给 0 分处理 而在我们棋子 1 和他上面的 空格所同处的胜利组合有 4 个故上面的空格有 4 分的值 同理分析其他的空格可得 出其位置的进攻得分 图 4 7 各个空格的进攻得分 接下来分析各个点的防守得分这时就要以对方的旗子为参照物了 先扫描棋盘中在各个获胜组合中最大值即扫描在 win 0 XXX 中的最大值 再 计算最佳进攻得分那样计算出最佳防守得分 获得 2 者得分后相比较决定是防守还是进攻 如果防守和进攻的分值一样 优 先选择防御 电脑再选择最高得分落子 当有空格分数相同时由随机函数决定落子何处 这 样更有随机性 让游戏更有乐趣 由于游戏界面是以贴图为主 所以使用内存 DC 完成简单的位图操作 鼠标左键点击事件就是判断鼠标所在的棋格里是否有已有棋子 如有则不做出 反映 若无棋子这可以在该棋格里填上玩家所持的棋子 玩家获胜画面如图 4 8 潍 坊 学 院 本 科 毕 业 设 计 图 4 8 玩家胜利 4 34 3 对弈设计思路对弈设计思路 近来随着计算机的快速发展 各种棋类游戏被纷纷请进了电脑 使得那些喜爱 下棋 又常常苦于没有对手的棋迷们能随时过足棋瘾 而且这类软件个个水平颇高 大有与人脑分庭抗礼之势 其中战胜过国际象棋世界冠军 卡斯帕罗夫的 深蓝 便是最具说服力的代表 其 它像围棋的 手淡 象棋的 将族 等也以其优秀的人工智能深受棋迷喜爱 而我们 今天将向大家介绍的是五子棋的算法 熟悉五子棋的基本规则 要让电脑知道该在哪一点下子 就要根据盘面的形势 为每一可能落子的点计算其重要程度 也就是当这子落下后会形成什么棋型 如 冲四 活三 等 然后通览全 盘选出最重要的一点 这便是最基本的算法 当然 仅靠当前盘面进行判断是远远不够的 这样下棋很容易掉进玩家设下的 陷阱 因为它没有考虑以后的变化 所以在此基础上我们加入递归调用 即 在电脑中预测出今后几步的各种走法 潍 坊 学 院 本 科 毕 业 设 计 以便作出最佳选择 这也是我们下棋时常说的 想了几步 如此一来程序便具有一 定的合理性了 4 3 14 3 1 对弈数据结构对弈数据结构分析分析 先来看看数据结构 我们需要哪些变量 首先得为整个棋盘建立一张表格用以记录棋子信息 我们使用一个 10 10 的二 维数组 Table 10 10 10 10 是五子棋棋盘的大小 数组的每一个元素对应棋盘 上的一个交叉点 用 0 表示空位 1 代表己方的子 2 代表对方的子 这张 表也是今后分析的基础 在此之后还要为对方和玩家双方各建立一张棋型表 Computer 15 15 4 和 Player 15 15 4 用来存放棋型数据 就是刚才所说的重要程度 比如用 10 代表 冲四 的点 用 5 代表 活三 的点 那么在计算重要性时 就可以根据 10 5 得出前者比后者重要 下子时电脑便会自动选择 冲四 的点 那为什么棋型 表要使用三维数组呢 因为棋盘上的每一个点都可以与横 竖 左斜 右斜四个方 向的棋子构成不同的棋型 所以一个点总共有 4 个记录 这样做的另一个好处是可 以轻易判断出复合棋型 例如 如果同一点上有 2 个 5 就是双三 有一个 5 和一个 10 就是四三 4 3 24 3 2 程序流程程序流程 程序由六个基本功能模块构成 各模块的详细分析如下 1 初始化 首先 建立盘面数组 Table 10 10 对战双方的棋型表 Computer 10 10 4 和 Player 10 10 4 并将它们清零以备使用 然后初始化显示器 键盘 鼠等 输入输出设备并在屏幕上画出棋盘 2 主循环控制模块 控制下棋顺序 当轮到某方下子时 负责将程序转到相应 的模块中去 主要担当一个调度者的角色 3 玩家下子 当轮到玩家下时 您通过键盘或鼠标在棋盘上落子 程序会根据 该点的位置 在 Table 10 10 数组的相应地方记录 2 以表明该子是玩家下的 4 盘面分析填写棋型表 本程序核心模块之一 人工智能算法的根本依据 其 具体实现方法如下 您在下五子棋时 一定会先根据棋盘上的情况 找出当前最重要的一些点位 如 活三 冲四 等 然后再在其中选择落子点 但是 电脑不会像人一样分析问题 要让它知道哪是 活三 哪是 冲四 就 得在棋盘上逐点计算 一步一步的教它 先来分析己方的棋型 我们从棋盘左上角出发 向右逐行搜索 当遇到一个空 潍 坊 学 院 本 科 毕 业 设 计 白点时 以它为中心向左挨个查找 如果遇到己方的子则记录然后继续 如果遇到 对方的子 空白点或边界就停止查找 左边完成后再向右进行同样的操作 最后把左右两边的记录合并起来 得到的 数据就是该点横向上的棋型 然后把棋型的编号填入到 Computer x y n 中就行了 x y 代表坐标 n 0 1 2 3 分别代表横 竖 左斜 右斜四个方向 而其他三个方向的棋型也可用同样的方法得到 当搜索完整张棋盘后 己方棋 型表也就填写完毕了 然后再用同样的方法填写对方棋型表 5 对方下子 有了上面填写的两张棋型表 现在要作的就是让电脑知道在哪 一点下子了 其中最简单的计算方法 就是遍历棋型表 Computer 15 15 4 和 Player 15 15 4 找出其中数值最大的一点 在该点下子即可 要解决这个问题 我们引入 今后几步预测法 具体方法是这样的 首先 让电脑分析一个可能的点 如果在这儿下子将会形成对手不得不防守的棋型 例如 冲四 活三 那么下一步对手就会照您的思路下子来防守您 如此一来便完成 了第一步的预测 这时再调用模块 4 对预测后的棋进行盘面分析 如果出现了 四三 双三 或 双四 等制胜点 那么己方就可以获胜了 当然对黑棋而言 双三 双四 是禁手 另当别论 否则照同样的方法向下分析 就可预测出第二步 第三步 6 胜负判断 务须多言 某方形成五子连即获胜 若黑棋走出 双三 双 四 或长连即以禁手判负 4 44 4 网络连接网络连接 4 4 14 4 1 通信方式通信方式 在 VC 中有两种方法可以进行通讯 一种是利用 Microsoft 公司提供的 ActiveX 控件 Microsoft Communications Control 另一种是直接用 VC 访问串口 采用的是可靠的有连接的流式套接字 并且采 用了多线程和异步通知机制能有效避免一些函数如 accept 等的阻塞会引起整个 程序的阻塞 由于套接字编程方面的书籍资料非常丰富 对其进行网络编程做了很详细的描 述 故本文在此只针对一些关键部分做简要说明 有关套接字网络编程的详细内容 请参阅相关资料 采用流式套接字的服务器端的主要设计流程可以归结为以下几步 1 创建套接字 该函数的第一个参数用于指定地址族 在 Windows 下仅支持 AF INET TCP IP 潍 坊 学 院 本 科 毕 业 设 计 地址 第二个参数用于描述套接字的类型 对于流式套接字提供有 SOCK STREAM 最后一个参数指定套接字使用的协议 一般为 0 该函数的返回值保存了新套接字的句柄 在程序退出前可以用 close 函数来将 其释放 2 绑定套接字 服务器方一旦获取了一个新的套接字后应通过 bind 将该套接字与本机上的一 个端口相关联 此时需要预先对一个指向包含有本机 IP 地址和端口信息的 so 填充 一些必要的信息 如本地端口号和本地主机地址等 然后就可经过 bind 将服务器进程在网络上标识出来 需要注意的是由于 1024 以内的埠号都是保留的端口号因此如无特别需要一般不能将 port 的端口号设置为 1024 以内的值 3 侦听套接字 侦听套接字来实现功能 4 等待客户机的连接 这里需要通过 accept 调用等待接收客户端的连接以完成连接的建立 由于该函 数在没有客户端进行申请连接之前会处于阻塞状态 因此如果采取通常的单线程模 式会导致整个程序一直处于阻塞状态而不能响应其他的外界消息 因此为该部分代 码单独开辟一个线程 这样阻塞将被限制在该线程内而不会影响到程序整体 这里在 accept 后使用了 Select 异步选择函数 对于网络事件的响应最好采取 异步选择机制 只有采取这种方式才可以在由网络对方所引起的不可预知的网络事 件发生时能马上在进程中做出及时的响应处理 而在没有网络事件到达时则可以处 理其他事件 这种效率是很高的 而且完全符合 Windows 所标榜的消息触发原则 Select 函数便是实现网络事件异步选择的核心函数 通过第四个参数 FD CLOSE 注册了应用程序感兴取的网络事件是网络断开 当 客户方端开连接时该事件会被检测到 同时会发出由第三个参数指定的自定义消息 WM SOCKET MSG 5 发送 接收 当客户机同服务器建立好连接后就可以通过 send re 函数进行发送和接收数据 了 对于本程序只需在监测到有拨号连接事件发生时向客户机发送通知消息即可 下面将简述这两种方法 1 Microsoft Communications Control Microsoft 公司在 WINDOWS 中提供了一个串口通讯控件 用它 我们可以很 简单的利用串口进行通讯 在使用它之前 应将控件加在应用程序的对话框上 然 后再用 Class 生成相应的对象 现在我们可以使用它了 该控件有很多自己的属性 你可以通过它的属性窗口来设置 也可以用程序设 潍 坊 学 院 本 科 毕 业 设 计 置 我推荐用程序设置 这样更灵活 一般而言 使用上述函数和属性就可以进行串口通讯了 用该控件传输的数据是 UNICODE 格式 关于 UNICODE 和 ANSI 的关系和转 换请参看 MSDN 关于该控件的其他详细资料请查看 MSDN 关于 COMM CONTROL 部分 2 直接用 VC 访问串口 在 VC 中 串口和磁盘文件可以统一的方式来简单读写 这两者几乎没有什么 不同 只是在 WINDOWS 9X 下磁盘文件只能做同步访问 而串口只能做异步访问 Create File 用指定的方式打开指定的串口 通常的方式为 Com Great COM1 GENERIC READ GENERIC WRITE 0 NULL OPEN EXISTING FILE ATTRIBUTE NORMAL FILE FLAG OVERLAPPED NULL 为文件句柄 GENERIC READ GENERIC WRITE 指定可以对串口进行读写操 作 第三个参数 0 表示串口为独占打开 OPEN EXISTING 表示当指定串口不存在时 程序将返回失败 OVERLAPPED 则表示文件属性 当打开串口时 必须指定 OVERLAPPED 它表示文件或设备不会维护访问指 针 则在读写时 必须使用 OVERLAPPED 结构指定访问的文件偏移量 两字符之间最大的延时 当读取串口数据时 一旦两个字符传输的时间差超过 该时间 读取函数将返回现有的数据 设置为 0 表示该参数不起作用 写入每字符间的超时 一次写入串口数据的固定超时 所以在一次写入串口的操作中 其超时为乘以 写入的字节数再加上 Write Sets 函数可以设置某设备句柄的超时参数 要得到某设备句柄的超时参数可以 用 Get 函数 DCB DCB 结构主要用于串口参数设置 该结构太庞大 这里就不一一讲述了 有兴趣者可查看 MSDN 关于 DCB 的描述 其中下面两个是比较重要的属性 串口的通讯速度 一般设置为 9600 字节位 数 一般设置为 8 DCB 结构可以用 Set 函数来设置 并可以用 Get 来得到现有串口的属性 Setup 设置串口输入 输出缓冲区 Internal Inter 是保留给系统使用的 用户不需要设置 Offset Offse 是读写串口的偏移量 一般设置 Offset 为 NULL 可以支持 2GB 数据 潍 坊 学 院 本 科 毕 业 设 计 Event 读写事件 因为串口是异步通讯 操作可能被其他进程堵塞 程序可以通 过检查该时间来得知是否读写完毕 事件将在读写完成后 自动设置为有效 4 4 24 4 2 客户机端的程序设计客户机端的程序设计 客户机的编程要相对简单许多 全部通讯过程只需以下四步 创建套接字 建立连接 发送 接收 关闭套接字 最初的时候 从没想到过排序也有什么文章 但实际开发却发现排序也要考虑 各个方面 是按字母排序还是按数字排序呢 即使是按字母排序 也要考虑是否区分 大小写 例如咱们的站点排序就要求不区分大小写 便于归类 在一些 Box 控件中 考虑到用户使用方便 尽量自动按字母排序 便于用户通 过字母检索 否则让用户在上百个未按字母排序的数据中找到一行数据还真是很费劲 对于服务 客户模式的网络通讯程序普遍要求服务端要先于客户端运行 而本系 统的客户 服务端均为自启动 不能保证服务器先于客户机启动 而且本系统要求 只要客户机和服务器连接在网络上就要不间断保持连接 因此需要使客户和服务端 都要具备自动续联的功能 对于服务器端 当客户端断开时 需要关闭当前的套接字 并重新启动一个新 的套接字以等待客户机的再次连接 而对于客户端 如果先于服务器而启动 则 connect 函数将返回失败 因此可以在程序启动时用 Timer 设置一个定时器 每隔 一段时间 10 秒 就试图连接服务器一次 当 connect 函数返回成功即服务器已启动 并与之连接上之后可以用 Timer 函数将定时器关闭 另外当服务器关闭时需要再次开启定时器 以确保当服务器再次运行时能与之 建立连接 可以通过响应 FD CLOSE 事件来捕获该事件的发生 潍 坊 学 院 本 科 毕 业 设 计 5 5 系统运行与调试系统运行与调试 5 15 1 系统登陆系统登陆 运行对弈系统 确定网络连接好以后 连接到网络 界面简单易懂 符合人们 的要求 填写对方 IP 地址或主机名即可进行对弈 网络连接界面如图 5 1 所示 图 5 1 网络连接界面 5 25 2 开始对弈开始对弈 登陆系统连接到网络后即可进行对弈 按照提示进行对弈 可以选择对奕的对 方 对弈结果在对弈结束后电脑将给出 对弈窗口如图 5 2 所示 此界面中包括己方棋子 对方棋子 发送 接受信息 分别对双方的下弈进行相关记录 以实现双方的网上对弈 想在哪里下子 将鼠标放在那个地方然后点击鼠标左键即可 电脑将自动记录 下对奕双方的对战情况 主要控件 ADOQuery DataSource DBEdit DBMemo BitBtn DBGrid Label Panel ToolBar Image SpeedButton 主要事件 OnClick 潍 坊 学 院 本 科 毕 业 设 计 图 5 2 双方对弈窗口 可以设置声音提示 如图 5 3 所示 图 5 3 使用声音提示 潍 坊 学 院 本 科 毕 业 设 计 5 35 3 程序调试程序调试 在程序编写完毕后 由于在程序编写过程中有些地方考虑的不够周到 我对程 序进行了大量的调试工作 首先 由于开发过程中 因为对系统所要完成的任务不清楚即开始设计程序 以致有些功能没有考虑到 在调试时进行了补充工作 所以我体会到 在开发一个 项目之前 一定要对所要完成的任务及系统的流程有一个充分透彻的理解 做到心 中有数 然后再着手开发软件 至少可以少走弯路 节省时间 其次 就是考虑到操作员由于一些手工操作时的习惯和会产生的误操作 对无 效数据的及时清除 和误操作的及时提醒对程序进行了进一步的补充 通过这作这 些工作我体会到一定要对所自已的课题有个充分的了解 对实际工作的调研也十分 重要 经常问问实际的管理人员 操作人员 对开发过程中的思路的调整问题的解 决会有很大的帮助 最后 就是反复运行程序 尽量发现尽可能多的程序的漏洞 使程序更加完善 也便于操作员今后的操作 在写的过程中也遇到过问题 通过反复的调试与改正 终于调试成功 回顾起 此次设计 至今我仍感慨颇多 的确 从选题到定稿 从理论到实践 在几个月的 日子里 可以说学到了很多的东西 不仅巩固了以前所学过的知识 而且学到了很 多在书本上所没有学到过的知识 通过这次设计使我懂得了理论与实际相结合是很 重要的 只有理论知识是远远不够的 只有把所学的理论知识与实践相结合起来 从理论中得出结论 才能真正为社会服务 从而提高自己的实际动手能力和独立思 考的能力 这次实验脱离了老师写出步骤由我们验证的学习方式 我们必须得自己查资料 上机逐步探索 调试 找出解决的方案 总之一切都得靠自己 通过这种学习模式 我学到了很多 也成长了很多 通过各个方面的努力 及老师和同学的帮助 终于将程序调试成功并成功运行 在此中也学到了很多东西 对 VC 有了更深刻的认识 以后将会更加努力 做出更 好的系统来 潍 坊 学 院 本 科 毕 业 设 计 结束语结束语 近三个月的毕业设计匆匆而过 我过的很充实 收益匪浅 思想上有了一定的 升华 我也真正的了解到 VC 其强大的数据库处理功能 可以将传统的应用开发和数 据应用开发完美地结合在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论