C++课程设计论文--五子棋_第1页
C++课程设计论文--五子棋_第2页
C++课程设计论文--五子棋_第3页
C++课程设计论文--五子棋_第4页
C++课程设计论文--五子棋_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、辽宁工学院C+吾言程序设计课程设计(论文)题目: 五子棋游戏院(系):专业班级:学 号:学生姓名:指导教师:教师职称:副教授起止时间:2007.12.17 2007.12.28课程设计(论文)任务及评语院(系):软件学院教研室:软件教研室学号学生姓名专业班级课程设计 (论文) 题目五子棋游戏课程设计1论文>任务1 .针对设计题目,提出解决的办法和思路。设计数据字典,描绘数 据流图、UMLH,运用向向对象程序设计的基本思路和方法编制 C+S用程序。2 .根据需求,设计系统功能模块,并设计相应的类和界面。3 .根据基本思路,确定输入和输出,设计程序的算法。4 .确定用到的类的描述和定义,并设

2、计测试程序来对类进行测试。5 .在计算机上编译程序,检验程序的可运行性。6 .规范完整地撰写出课程设计报告课程设计注重C+!论知识的理解与实际的动手编程能力,要求学生设计 具有继承与派生以及多态性的类,理解 C+勺这些核心的概念,并且要求画 出UMLH,然后在VC+(DEV C+冲设计界面,并调用设计的类。这样帮助 学生掌握如何设一个小型的软件产品,提高学生的设计能力。指导教师评语及成绩成绩: 指导教师签字: 年 月日第1章课程设计目的与要求 11.1 课程设计目的 11.2 课程设计的实验环境 11.3 课程设计的预备知识 11.4 课程设计要求 1第2章课程设计内容 22.1 C+语言程序

3、设计 22.1.1 功能分析 22.1.2 算法设计及程序设计中技术重点 32.1.3 1. 3 评分标准的算法 32.2 程序框图及流程图或UM类图 52.3 程序源代码 7第3章课程设计总结 11参考文献 12第 1章 课程设计目的与要求1.1 课程设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程C+邮言教程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。( 2) 全面

4、考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用C+邮言编写调试应用系统程序, 训练独立开发应用系统,进行数据处理的综合能力。( 4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。( 5)掌握面向对象程序设计的方法。(6)熟练掌握C+邮言的基本语法,灵活运用各种数据类型。( 7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。1.2 课程设计的实验环境硬件要求能运行 Windows操作系统的微机系统。C+邮言应用程序开发软件使用: VC+系统,或其他C+邮言

5、应用程序开发软件。1.3 课程设计的预备知识熟悉C+叫言程序设计白基本知识及VC+编辑器的使用方法。1.4 课程设计要求1. 运用面向对象程序设计思想与方法,分析设计题目,构造数据模型,描绘数据流图、UMLJS,编写程序代码。2. 积极上机调试源程序,增强编程技巧与调程能力。3. 认真书写课程设计预习报告, 课程设计说明书。4. 遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容第 2章课程设计内容2.1 C+语言程序设计五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳

6、易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。本程序就是一款简单的五子棋小游戏,方便在大家休闲的时候进行消遣。2.1.1 功能分析 五子棋游戏的规则(一)棋盘,棋子1 .棋盘为十五路,正中一点为“天元”,周围四点为小星。2 .棋子分黑白两色,黑子1 1 3枚,白子1 1 2枚,共2 2 5枚。(二)比赛规则1 .黑先白后,从天元开始落子。然后执白棋的一方在黑棋周围的交叉点上落子,白第 二着棋应布在自己河界的一侧。此后,执黑方在以天

7、元为中心的2 5个交叉点的范 围内布盘面的第三着棋。2 .最先在横向,竖向,斜向形成连续的相同色五个棋子的一方为胜。3 .黑棋禁手判负,白棋无禁手。黑棋禁手包括“三三”,“四四”,“长连”。黑方只能 “四三”胜。所谓禁手,是指黑方一子落下同时形成两个或两个以上的活三,冲四及长连禁手。长连禁手是指黑方形成六个或六个以上的连续棋子。4 .双方均不能形成五连为和棋。5 .对局中拔子,中途退场均判为负。6 .五连与禁手同时形成,先五为胜。因黑方已形成五连,故禁手失效,黑方胜。7 .黑方禁手形成时,白方应立即指出禁手点,黑方即负。若白方继续应子,则黑方禁 手不成立。8 .高段位职业比赛的特殊规定:”三手

8、可交换”:黑下完第2手,执白者可提出交换。即执白方变为执黑方。 “五手两打法”:执黑下第五手时,必须下两手棋,执白者从这两手棋中任选一步。本程序中涉及到的类的说明:网络控制部分:CServerSocket 、 CClientSocket 和 CMessg。CServerSocket 类是一个专门用来监听客户端连接的Socket 类, 它继承于CSocket,相应 OnAccept 消息。在ServerSocket.cpp 中,其中成员函数Init 负责初始化ServerSocket,而OnAccept函数负责接收客户端连接。CClientSocket 类是一个专门用做会话的类,它负责数据的发送

9、和接收。它继承自CSocket,负责响应OnReceive和OnClose消息。另外,作为 CSocket类的继承类,理所当然的采用了用行化的方式来处理网络数据。网络数据是由CMessg的对象构成的。另外,在CClientSocket 类中还定义了几个静态函数,它们用来得到本机的名字和本机的 IP 地址。CMess酸是一个数据类,它继承于CObject。在这个程序中,让CMess谈发挥串行 化数据的作用。规则方面类:Match类每一种游戏都有一定的规则,Match 类正是五子棋的规则处理类。在Match 类中保存 着 一 个 当 前 的 棋 盘 , 它 是 一 个 二 维 的 数 组 int

10、chessboardLWLW 。 如 果 chessboardxy 为 0, 则表示 ( X,Y) 的位置上没有棋子;如果 chessboardxy 为 1,表示该位子有黑子;如果chessboardxy 为 2,则表示该位子上有白子。试图方面类FiveChessView 类:FiveChessView 是程序的主视图类。它负责在主窗体中绘制棋盘和棋子,显示聊天的内容,负责对鼠标消息进行处理等。2.1.2 算法设计及程序设计中技术重点棋类游戏中人工智能设计的工作量和算法的复杂度是成正比,优秀的算法需要尽可 能避免额外的计算时间开销并有效的使用内存资源。事实上,五子棋游戏水平的高低主 要在于能够

11、计算后步路数的多少,也就是常说的算了几步。如果电脑具有这种能力,就 不会掉入玩家设下的陷阱,这也是初学者常犯的错误,目光短浅,只看到眼前一步。所 以,棋类算法设计的任务就是既拥有高水平的算法,又能拥有最快的计算速度。从电脑的“思考”角度来看问题,如何让电脑知道该落子在哪一点呢,在这方面,电脑要做得和人一样,判断棋盘上每一点的重要度,比如冲四比冲三强,冲三比冲二强,遇 到四三如果是对方的,堵死,如果是自己的,优先落子。遇到双三,如果是黑棋,黑方 输,如果是白棋,优先等级仅次于四三。五子棋的行走算法采用了博弈树的方法,它需要应用剪枝和最大最小树原理进行搜 索,从而发现最好的下子位置。2. 1. 3

12、 评分标准的算法算法需要设计一个简单的规则来表示当前棋面的分数,基本的规则如下:1 判断是否能成5,如果是机器方面的话给予N1 分,如果是人的话给予-N1 分;2 .判断是否能成活4或者是双死4或者是死4活3,如果是机器方的话给予 N2分, 如果是人的话给予-N2 分。3 .判断是否以成双活3,如果是机器方的话给予 N3分,如果是人的话给予-N3分;4 .判断是否成死3活3,如果是机器方的话给予 N4分,如果是人的话给予-N4分;5 .判断是否成死4,如果是机器方的话给予 N5分,如果是人的话给予-N5分;6 .判断是否成单活3,如果是机器方的话给予N6分,如果是人的话给予-N6分;7 .判断

13、是否成双活2,如果是机器方的话给予N7分,如果是人的话给予-N7分;8 .判断是否成死3,如果是机器方的话给予 N8分,如果是人的话给予-N8分;9 .判断是否成双活2,如果是机器方的话给予N9分,如果是人的话给予-N9分;10 .判断是否成活2,如果是机器方的话给予 N10分,如果是人的话给予-N10分;11 .判断是否成死2,如果是机器方的话给予 N11分,如果是人的话给予-N11分;通常N1=N2>N3>N4>N5>N6>N7>N8>N9>N10。 >N11有了具体分数的定义,就可以顺利地给当前的对局双方打分。在实际运行的时候,用户可

14、以调整规则和具体的评分标准。判断胜负:胜负是要根据当前最后一个落子的情况来判定的。实际上算法需要从8 个方向判断,用户可以调整规矩和具体的评分标准。搜索算法实现描述下面的核心算法中的变量currentBoardSituation 表示当前机器最新的盘面情况,CountList 表示第一层子节点可以选择的较好的盘面的集合。核心算法如下:Void MainDealFunction()value=-MAXINT;calSeveralGoodplace(currentBoardSituation,countList);该函数实根据当前的盘面情况来比较得到比较好的可以考虑的几个盘面的情况,可以根据实际的

15、得分情况选取分数比较高的几个盘面,也就是说在第一层节点选择的时候采用贪婪算法,直接找出相对分数比较高的几个点形成第一层节点,目的是为了提高搜索速度和防止堆栈溢出。pos=CountList.GetHeadPosition();CScoreTable* pBoard;For(i=0;i<CountList.Getcount();i+); pBoard=CountList.GetNext(pos);pBoard->value=Search(pBoard,min,value,0);value=Select (Value,pBoard->value,max);for(i=0;i<

16、;CountList.GetNext();i+)pBoard=CountList.GETnext(pos);if ( value=pBoard->value) currentBoardSituation=pBoard;playerMode=min;Break;实际上核心的算法是一个剪枝过程,搜索过程中相关的4 个参数为:当前棋局情况、当前的下子方、父节点的值oldValue 和当前的搜索深度depth。Double Search(CScoreTable& board,int mode,double oldvalue,int depth) CList<op,op> m_

17、DeepList;If (depth<MAX_DEPTH && goal (board)=0) if(mode=max)Value=-MAXINT;Else value=MAXINTGetSeveralGoodPlace(m_DeepList);For(i=0;i<m_Deeplist.GetCount();i+ if (mode=max&&value<oldvalue)|(mode=min&&value>oldvalue)=TRUE) Value=select(value,search(successorBoard,mi

18、n,value,depth+1),max);Else value=select(value,search(successorboard.max,value,depth+1) return value; else if (goal(board)<>0)Return goal (board);Else return evlation(board);2.2 程序框图及流程图或UM送图就攻击和防守都做出判断,而将可能走子后的盘面交由番局函数做出评估,评估后 的最佳走法传回给系统。对防守来说,防守的走子或是是否要防守都得考虑进去,当对 方有活3产生时,因为有两个方法可以阻挡,且自身一直是以死

19、 4的攻击是,说不定不 用对对方的活3做防守,因此我们也要对防守的走子步骤做番局评估,如下图。用来管理人机对弈/网络对弈两种游戏模式,类名为 CGameCGam鱼一个抽象类, 经由它派生出一人游戏类COneGamW网络游戏类CTwoGam&口下图。软件的总体架构图,如下图网络对弈流程图,如下图:UMLfe图(CMessgCMessg_M_strText:int _M_turn:int _m_x:int _m_y:int+Init () : void2.3 程序源代码#include "stdafx.h"#include "FiveChess.h"

20、#include "MainFrm.h"#include "FiveChessDoc.h"#include "FiveChessView.h"#include "afxsock.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE口 = _FILE_;#endifCFiveChessAppBEGIN_MESSAGE_MAP(CFiveChessApp, CWinApp)AFX_MSG_MAP(CFiveChessApp)

21、ON_COMMAND(ID_APP_ABOUAppAbout)NOTE -the ClassWizard will add and remove mapping macros here.DO NOT EDIT what you see in these blocks of generated code!AFX_MSG_MAPStandard file based document commandsON_COMMAND(ID_FILE_NEW, CWinApp:OnFileNew)ON_COMMAND(ID_FILE_OPEN, CWinApp:OnFileOpen)/ Standard pri

22、nt setup commandON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp:OnFilePrintSetup)END_MESSAGE_MAP()/ CFiveChessApp constructionCFiveChessApp:CFiveChessApp()/ TODO:add construction code here,/ Place all significant initialization inInitInstance/ The one and only CFiveChessApp objectCFiveChessApp theApp;/ CFiv

23、eChessApp initializationBOOL CFiveChessApp:InitInstance()AfxEnableControlContainer();/ Standard initialization/ If you are not using these features and wish to reduce the size/ of your final executable, you should remove from the following/ the specific initialization routines you do not need.#ifdef

24、 _AFXDLLEnable3dControls();/ Call this when using MFC in a shared DLL#elseEnable3dControlsStatic();/Call this when linking to MFC statically#endif/ Change the registry key under which our settings are stored./ TODO: You should modify this string to be something appropriate/ such as the name of your

25、company or organization.SetRegistryKey(_T("Local AppWizard-Generated Applications");LoadStdProfileSettings(); / Load standard INI file options (including MRU)/ Register the application's document templates. Document templates/ serve as the connection between documents, frame windows an

26、d views.CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CFiveChessDoc),RUNTIME_CLASS(CMainFrame), / main SDI frame windowRUNTIME_CLASS(CFiveChessView);AddDocTemplate(pDocTemplate);/ Parse command line for standard shell commands, DDE, file openCComm

27、andLineInfo cmdInfo;ParseCommandLine(cmdInfo);/ Dispatch commands specified on the command lineif (!ProcessShellCommand(cmdInfo)return FALSE;/ The one and only window has been initialized, so show and update it.m_pMainWnd->ShowWindow(SW_SHOW);m_pMainWnd->UpdateWindow();return TRUE ; / CAboutDl

28、g dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD =IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV support/AFX_VIR

29、TUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/ No message handlers/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAP

30、BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ App command to run the dialogvoid CFiveChessApp:OnAppAbout()CAboutDlg aboutDlg;aboutDlg.DoModal();/ CFiveChessApp message handlers第 3章 课程设计总结第一 , 网络五子棋的难点在于棋盘的描绘, 和判断胜负的算法.第二 , 网络游戏要求比较高的就是画面与游戏的可玩性, 由于五子棋有着悠久的历史, 深得大家的喜爱, 因此成功的突破点就在于

温馨提示

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

评论

0/150

提交评论