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

下载本文档

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

文档简介

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

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

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

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

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

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

12、,如果是机器方的话给予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分,如果是人的话给予-N10分;11判断是否

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

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

15、i+); pBoard=CountList.GetNext(pos); pBoard->value=Search(pBoard,min,value,0);value=Select (Value,pBoard->value,max);for(i=0;i<CountList.GetNext();i+)pBoard=CountList.GETnext(pos);if ( value=pBoard->value) currentBoardSituation=pBoard;playerMode=min;Break;实际上核心的算法是一个剪枝过程,搜索过程中相关的4个参数为:当前棋

16、局情况、当前的下子方、父节点的值oldValue和当前的搜索深度depth。Double Search(CScoreTable& board,int mode,double oldvalue,int depth) CList<op,op> m_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(

17、);i+ if (mode=max&&value<oldvalue)|(mode=min&&value>oldvalue)=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 goal (board);Else return evl

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

19、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"#

20、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)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)NOTE - the ClassWizard will add and remove mapping macros here. DO

21、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 print setup commandON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp:OnFilePrintSetup)END_MESSAGE_MAP()/ CFiv

22、eChessApp constructionCFiveChessApp:CFiveChessApp()/ TODO: add construction code here,/ Place all significant initialization in InitInstance/ The one and only CFiveChessApp objectCFiveChessApp theApp;/ CFiveChessApp initializationBOOL CFiveChessApp:InitInstance()AfxEnableControlContainer();/ Standar

23、d 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 _AFXDLLEnable3dControls();/ Call this when using MFC in a shared DLL#elseEnable3dControlsStat

24、ic();/ 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 company or organization.SetRegistryKey(_T("Local AppWizard-Generated Applications")

25、;LoadStdProfileSettings(); / Load standard INI file options (including MRU)/ Register the application's document templates. Document templates/ serve as the connection between documents, frame windows and views.CSingleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,

26、RUNTIME_CLASS(CFiveChessDoc),RUNTIME_CLASS(CMainFrame), / main 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 li

27、neif (!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;/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX

28、_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_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/ No message handlers/AFX_MSGDECLARE_MESSAG

29、E_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_MAPBEGIN_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

提交评论