1、 1 面向对象程序设计课程设计面向对象程序设计课程设计 五子棋 学号:学号: 学院:信息科学与工程学院学院:信息科学与工程学院 班级:网络工程班级:网络工程 2 2 班班 指导老师:指导老师: 学生姓名学生姓名: 日期:日期:2013 年年 06 月月 24 日日 1 C+C+课程设计课程设计五子棋五子棋 一、功能描述 设计一个五子棋游戏,实现双人对战,通过鼠标进行操作,具有 悔棋功能,可以多次进行游戏,界面美观,有音效。重要的是按键进 行弹窗提醒,由用户进行确认。 二、概要设计 窗口注册窗口注册:向系统注册窗口。 建立窗口建立窗口:初始化并建立窗口。 处理消息处理消息:等待消息传入,调用处理
2、函数。 POINT_POINT_类类: 记录一个点及其处理函数,包括点的位置规范化函数。 ChessChess 类:类:记录棋子相关信息及其处理函数,包括落子,起子函 数。 GameGolbalGameGolbal 类:类:记录一个五子棋游戏的整体信息及其处理函数, 包括定义了 POINT_类,Chess 类的成员,及一些游戏中 会用到的整体变量。主要函数包括如下: 窗口刷新函数窗口刷新函数:通过储存的数据重新绘制窗口。 新游戏函数新游戏函数:对游戏的变量进行初始化的处理。 悔棋函数悔棋函数:对储存数据修改,达到悔棋的目的,会调用 窗口刷新函数。 声音播放函数声音播放函数:播放效果声音。 2
3、结果判断函数结果判断函数:每次落子后判断结果。 结结果显示函数果显示函数:绘制游戏胜利的结果。 程序运行流程及函数调用关系如下:程序运行流程及函数调用关系如下: 建立窗口 绘制棋子 注册窗口 悔棋 ID_BACK 标 准 化 并 记录坐标 窗口刷新 判断并累加 操作的棋子 判断是否棋 子覆盖 修改数据 调 用 声 音 函数 关于 IDM_ABOUT 退出 IDM_EXIT 鼠标左单击 WM_LBUTTO 新的一局 ID_NEW 数 据 初 始 化 窗口菜单命令 WM_COMMAND 判断胜负 判断胜负 显示结果 等待信息 3 三、详细设计 窗口注册窗口注册:声明窗口结构与类别,对窗口的信息进行
4、描述 建立窗口建立窗口:通过窗口的描述,初始化窗口,显示窗口。 处理消息处理消息:等待消息传入,调用处理函数处理信息。 POINT_POINT_类类:储存棋子在棋盘上的位置,其中的void STAND(int X,int Y)函数负 责将输入的点规范为棋盘格上对应位置。 ChessChess 类:类:棋子类储存棋子信息,包括棋子颜色,阴线阳线上的棋子个数, 同时其中包含落子函数,起子函数来对相应的数据进行操作。落子函数 除了对数据进行记录之外,还负责棋子的绘制,绘制棋子时,主要是加 载棋子贴图,由于为了使棋子落在边缘时不会遮挡棋盘边缘的纹理,所 以对贴图边缘要进行透明化处理,应用的是简单的图形
5、运算,通过异或 处理,使图片与背景贴合。最后悔棋函数用棋子类建立一个二维矩阵, 其横纵坐标与棋盘上的位置对应。 GameGolbalGameGolbal 类:类:记录一个五子棋游戏的整体信息及其处理函数, 包括定义了 POINT_类,Chess 类的成员,及一些游戏中 会用到的整体变量。主要函数包括如下: 窗口刷新函数窗口刷新函数:通过储存的数据绘制窗口,屏幕刷新时调用, 或者主动调用,比如开始新的一局,悔棋时。 新游戏函数新游戏函数:对游戏的变量进行初始化的处理,之后调 用 窗口刷新函数。 悔棋函数悔棋函数:对储存数据修改,将棋盘矩阵的相应纵坐标减一, 同时调用棋子类二维数组中对应的元素起子
6、函数。 之后调用窗口 刷新函数,棋子会在棋盘上消失。 4 声音播放函数声音播放函数:主要是产生落子声音和胜利的声音,播放声 音函数将完成建立 DirectSound 对象,创建缓存区,设置文件格 式,读取文件,播放声音,清空缓存区等一系列操作,完成声 音的播放。 结果判断函数结果判断函数:每次落子后调用,通过判断相邻的阴线,阳 线上是否存在 5 个连续的同色棋子,判断是否一方已胜利,若存 在胜利的一方,返回的结果是胜利的一方的整形数据代号,否则 返回的是无关整形数据。 结果显示函数结果显示函数:绘制游戏胜利的结果,加载贴图。 弹窗弹窗:弹窗的目的主要是对让用户先前做出的行为进行确认, 通过调用系统的 int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTRlpCaption,UINT uType)函数,弹出一个窗口, 由用户对输入消息确认,通过返回值获取用户结果,进行相应的 操作。 四、效果及存在问题 效果图如下:效果图如下: 进入后界面 落子效果 5 悔棋后 结果显示