收藏 分享(赏)

C++课程设计论文 五子棋.doc

上传人:HR专家 文档编号:11567030 上传时间:2020-06-28 格式:DOC 页数:15 大小:102KB
下载 相关 举报
C++课程设计论文 五子棋.doc_第1页
第1页 / 共15页
C++课程设计论文 五子棋.doc_第2页
第2页 / 共15页
C++课程设计论文 五子棋.doc_第3页
第3页 / 共15页
C++课程设计论文 五子棋.doc_第4页
第4页 / 共15页
C++课程设计论文 五子棋.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

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

2、述和定义,并设计测试程序来对类进行测试。5. 在计算机上编译程序,检验程序的可运行性。6. 规范完整地撰写出课程设计报告课程设计注重C+理论知识的理解与实际的动手编程能力,要求学生设计具有继承与派生以及多态性的类,理解C+的这些核心的概念,并且要求画出UML图,然后在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评分标准的算法32.2程序框图及流程图或UML类图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+语言应用程序开发软件。1.3

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

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

7、五个棋子的一方为胜。黑棋禁手判负,白棋无禁手。黑棋禁手包括“三三”,“四四”,“长连”。黑方只能“四三”胜。所谓禁手,是指黑方一子落下同时形成两个或两个以上的活三,冲四及长连禁手。长连禁手是指黑方形成六个或六个以上的连续棋子。双方均不能形成五连为和棋。对局中拔子,中途退场均判为负。五连与禁手同时形成,先五为胜。因黑方已形成五连,故禁手失效,黑方胜。黑方禁手形成时,白方应立即指出禁手点,黑方即负。若白方继续应子,则黑方禁手不成立。高段位职业比赛的特殊规定:“三手可交换”:黑下完第手,执白者可提出交换。即执白方变为执黑方。“五手两打法”:执黑下第五手时,必须下两手棋,执白者从这两手棋中任选一步。本

8、程序中涉及到的类的说明:网络控制部分:CServerSocket、CClientSocket和CMessg。CServerSocket类是一个专门用来监听客户端连接的Socket类,它继承于CSocket,相应OnAccept消息。在ServerSocket.cpp中,其中成员函数Init负责初始化ServerSocket,而OnAccept函数负责接收客户端连接。CClientSocket类是一个专门用做会话的类,它负责数据的发送和接收。它继承自CSocket,负责响应OnReceive和OnClose消息。另外,作为CSocket类的继承类,理所当然的采用了串行化的方式来处理网络数据。网络

9、数据是由CMessg的对象构成的。另外,在CClientSocket类中还定义了几个静态函数,它们用来得到本机的名字和本机的IP地址。CMessg类是一个数据类,它继承于CObject。在这个程序中,让CMessg类发挥串行化数据的作用。规则方面类:Match类每一种游戏都有一定的规则,Match类正是五子棋的规则处理类。在Match类中保存着一个当前的棋盘,它是一个二维的数组int chessboardLWLW。如果chessboardxy为0,则表示(X,Y)的位置上没有棋子;如果chessboardxy为1,表示该位子有黑子;如果chessboardxy为2,则表示该位子上有白子。试图方

10、面类 FiveChessView类:FiveChessView是程序的主视图类。它负责在主窗体中绘制棋盘和棋子,显示聊天的内容,负责对鼠标消息进行处理等。2.1.2 算法设计及程序设计中技术重点棋类游戏中人工智能设计的工作量和算法的复杂度是成正比,优秀的算法需要尽可能避免额外的计算时间开销并有效的使用内存资源。事实上,五子棋游戏水平的高低主要在于能够计算后步路数的多少,也就是常说的算了几步。如果电脑具有这种能力,就不会掉入玩家设下的陷阱,这也是初学者常犯的错误,目光短浅,只看到眼前一步。所以,棋类算法设计的任务就是既拥有高水平的算法,又能拥有最快的计算速度。从电脑的“思考”角度来看问题,如何让

11、电脑知道该落子在哪一点呢,在这方面,电脑要做得和人一样,判断棋盘上每一点的重要度,比如冲四比冲三强,冲三比冲二强,遇到四三如果是对方的,堵死,如果是自己的,优先落子。遇到双三,如果是黑棋,黑方输,如果是白棋,优先等级仅次于四三。五子棋的行走算法采用了博弈树的方法,它需要应用剪枝和最大最小树原理进行搜索,从而发现最好的下子位置。2. 1. 3评分标准的算法算法需要设计一个简单的规则来表示当前棋面的分数,基本的规则如下:1 判断是否能成5,如果是机器方面的话给予N1分,如果是人的话给予-N1分;2 判断是否能成活4或者是双死4或者是死4活3,如果是机器方的话给予N2分,如果是人的话给予-N2分。3

12、 判断是否以成双活3,如果是机器方的话给予N3分,如果是人的话给予-N3分;4 判断是否成死3活3,如果是机器方的话给予N4分,如果是人的话给予-N4分;5 判断是否成死4,如果是机器方的话给予N5分,如果是人的话给予-N5分;6 判断是否成单活3,如果是机器方的话给予N6分,如果是人的话给予-N6分;7 判断是否成双活2,如果是机器方的话给予N7分,如果是人的话给予-N7分;8 判断是否成死3,如果是机器方的话给予N8分,如果是人的话给予-N8分;9 判断是否成双活2,如果是机器方的话给予N9分,如果是人的话给予-N9分;10判断是否成活2,如果是机器方的话给予N10分,如果是人的话给予-N

13、10分;11判断是否成死2,如果是机器方的话给予N11分,如果是人的话给予-N11分;通常N1=N2N3N4N5N6N7N8N9N10N11。有了具体分数的定义,就可以顺利地给当前的对局双方打分。在实际运行的时候,用户可以调整规则和具体的评分标准。判断胜负:胜负是要根据当前最后一个落子的情况来判定的。实际上算法需要从8个方向判断,用户可以调整规矩和具体的评分标准。搜索算法实现描述下面的核心算法中的变量currentBoardSituation表示当前机器最新的盘面情况,CountList表示第一层子节点可以选择的较好的盘面的集合。核心算法如下:Void MainDealFunction()va

14、lue=-MAXINT;calSeveralGoodplace(currentBoardSituation,countList);该函数实根据当前的盘面情况来比较得到比较好的可以考虑的几个盘面的情况,可以根据实际的得分情况选取分数比较高的几个盘面,也就是说在第一层节点选择的时候采用贪婪算法,直接找出相对分数比较高的几个点形成第一层节点,目的是为了提高搜索速度和防止堆栈溢出。pos=CountList.GetHeadPosition();CScoreTable* pBoard;For(i=0;ivalue=Search(pBoard,min,value,0);value=Select (Valu

15、e,pBoard-value,max);for(i=0;ivalue) currentBoardSituation=pBoard;playerMode=min;Break;实际上核心的算法是一个剪枝过程,搜索过程中相关的4个参数为:当前棋局情况、当前的下子方、父节点的值oldValue和当前的搜索深度depth。Double Search(CScoreTable& board,int mode,double oldvalue,int depth) CList m_DeepList;If (depthMAX_DEPTH & goal (board)=0) if(mode=max) Value=-

16、MAXINT;Else value=MAXINTGetSeveralGoodPlace(m_DeepList);For(i=0;im_Deeplist.GetCount();i+ if (mode=max&valueoldvalue)=TRUE) Value=select(value,search(successorBoard,min,value,depth+1),max);Else value=select(value,search(successorboard.max,value,depth+1) return value; else if (goal(board)0) Return go

17、al (board);Else return evlation(board);2.2程序框图及流程图或UML类图就攻击和防守都做出判断,而将可能走子后的盘面交由番局函数做出评估,评估后的最佳走法传回给系统。对防守来说,防守的走子或是是否要防守都得考虑进去,当对方有活3产生时,因为有两个方法可以阻挡,且自身一直是以死4的攻击是,说不定不用对对方的活3做防守,因此我们也要对防守的走子步骤做番局评估,如下图。目前的盘面是否需要防守是否找出走子步,并判断最佳的走法搜寻最佳的攻击方法经由番局函数做判定,将最佳结果返回给系统 用来管理人机对弈/网络对弈两种游戏模式,类名为CGame,CGame是一个抽象类

18、,经由它派生出一人游戏类COneGame和网络游戏类CTwoGame,如下图。抽象类COneGameCTwoGame软件的总体架构图,如下图网络对弈流程图,如下图:UML类图(CMessg)CMessg_M_strText:int_M_turn:int_m_x:int_m_y:int+Init():void2.3 程序源代码#include stdafx.h#include FiveChess.h#include MainFrm.h#include FiveChessDoc.h#include FiveChessView.h#include afxsock.h#ifdef _DEBUG#def

19、ine new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifCFiveChessAppBEGIN_MESSAGE_MAP(CFiveChessApp, CWinApp)/AFX_MSG_MAP(CFiveChessApp)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)NOTE - the ClassWizard will add and remove mapping macros here. DO NOT EDIT what you see in these blocks of gener

20、ated code!AFX_MSG_MAPStandard file based document commandsON_COMMAND(ID_FILE_NEW, CWinApp:OnFileNew)ON_COMMAND(ID_FILE_OPEN, CWinApp:OnFileOpen)/ Standard print setup commandON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp:OnFilePrintSetup)END_MESSAGE_MAP()/ CFiveChessApp constructionCFiveChessApp:CFiveChess

21、App()/ TODO: add construction code here,/ Place all significant initialization in InitInstance/ The one and only CFiveChessApp objectCFiveChessApp theApp;/ CFiveChessApp initializationBOOL CFiveChessApp:InitInstance()AfxEnableControlContainer();/ Standard initialization/ If you are not using these f

22、eatures 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 _AFXDLLEnable3dControls();/ Call this when using MFC in a shared DLL#elseEnable3dControlsStatic();/ Call this when linking to MFC staticall

23、y#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 company or organization.SetRegistryKey(_T(Local AppWizard-Generated Applications);LoadStdProfileSettings(); / Load standard INI file option

24、s (including MRU)/ Register the applications document templates. Document templates/ serve as the connection between documents, frame windows and views.CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CFiveChessDoc),RUNTIME_CLASS(CMainFrame), / main

25、SDI frame windowRUNTIME_CLASS(CFiveChessView);AddDocTemplate(pDocTemplate);/ Parse command line for standard shell commands, DDE, file openCCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);/ Dispatch commands specified on the command lineif (!ProcessShellCommand(cmdInfo)return FALSE;/ The one and o

26、nly window has been initialized, so show and update it.m_pMainWnd-ShowWindow(SW_SHOW);m_pMainWnd-UpdateWindow();return TRUE;/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generat

27、ed virtual function overrides /AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/ No message handlers/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CA

28、boutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ App command to run the dialogvoid CFiveChessApp:OnA

29、ppAbout()CAboutDlg aboutDlg;aboutDlg.DoModal();/ CFiveChessApp message handlers第3章 课程设计总结第一, 网络五子棋的难点在于棋盘的描绘,和判断胜负的算法.第二, 网络游戏要求比较高的就是画面与游戏的可玩性,由于五子棋有着悠久的历史,深得大家的喜爱,因此成功的突破点就在于画面.第三, 模块的划分和规划对一个程序的开发至关重要.第四, 程序结构:一个清晰的结构对日后的更新,改版和维护提供了方便.倘若程序组织混杂,不仅自己调试的时候麻烦,也给以后的改版带来诸多不便.写程序的时候都要有一个固定的格式.代码的缩进也有一个具

30、体的标准.不仅看上去美观,修改起来也方便,能够很快的定位到需要修改的地方.在以后工作中,这是非常重要的一点.第五, 个性化设计很重要,一个美观,大方又具有亲和力的友善界面十分重要.目前的五子棋版本多种多样.如果采用大众化样式,千篇一律,没有体现出个性,给人的印象则不是很深刻.除非你的程序具有十分吸引人的特色.否则在竞争中就不会有什么优势,也不是很容易让人记住.因此对程序界面的精心设计具有十分重要作用.经过两个礼拜的忙碌和工作,本次课程设计论文已经接近尾声,作为一个本科生的课程设计论文,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有老师的督促指导,以及同学的支持,想要完成这个设计是难以想象

31、的.在这次设计中,我收获了很多,不仅仅是学会了如何去编五子棋,而是学会了如何去开发一个程序.所以,对我来说,这次设计的本身所产生的影响,还远远没有结束,从本次课程设计中学到了许多课本上没有的知识.在此向老师以及在毕业设计当中帮助过我的所有同学致以衷心的感谢!参考文献1. 徐孝凯 编着 C+语言程序设计 北京:清华大学出版社2. 黄迪明 主编 C+语言程序设计基础 北京:电子工业出版社 3. 钱能 主编 C+程序设计教程 北京:清华大学出版社 4. 郑莉、董渊 编着 C+语言程序设计 北京:清华大学出版社5. 吴访升 编着 C+程序设计 北京: 机械工业出版社 6. Decoder 主编 C/C+程序设计 北京:中国铁道出版社7. 万跃华 主编Visual C+.NET网络编程.北京:科学出版社8. 侯俊杰 主编深入浅出 武汉:华中科技大学出版社9. 杨正华 主编Visual C+游戏编程导学 北京:清华大学出版社10. 文娟 主编Visual C+.NET网络编程与互联网应用开发北京:清华大学出版社11. 任哲 主编MFC Windows应用程序设计北京:清华大学出版社12. 易君 主编Visual C+.NET网络编程 北京:中国铁道出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报