ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:332.41KB ,
资源ID:7277546      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7277546.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++毕业课程设计报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++毕业课程设计报告.docx

1、C+毕业课程设计报告(此文档为word格式,下载后您可任意编辑修改!)青岛理工大学C+面向对象课程设计报告院(系): _ 专业: _ 学生姓名: _ 班级: 学号:题目: _ 起讫日期:_设计地点: _ 指导老师: _ 一.游戏概述.3 1.1.游戏介绍.3 1.2.游戏玩法.3 1.3.运行环境.32.具体步骤.3 2.1.棋盘设计.3 2.2.棋子设计.4 2.3.电脑算法.6 2.4.胜负判断.83.游戏运行图.114.总结.13 41.自我总结.13 4.2.程序的不足和需要改进的地方.14致谢.14附录一 参考文献.15附录二 程序源代码.151.游戏概述1.1.游戏介绍五子棋是一种

2、两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。1.2.游戏玩法 黑白双方依次落子,由黑先下,当棋盘上有三个子时,如果此时白方觉得开的局不利于自已可以提出交换,黑方无条件接受!也可以不交换,主动权在白方!然后继续下棋,任一方先在棋盘上形成横向、竖向、斜向的连续的相同颜色的五个棋子的一方为胜。1.3.运行环境Windows7 VC+6.02具体步骤2.1.棋盘设计 棋盘和棋子可以用GDI来实现,棋盘用GDI划线,基本上就是LineTo(x,y),Move

3、To(x,y),一个棋盘就出来了。具体代码如下在OnPaint()函数的else内加入如下代码 CPaintDC dc(this); dc.SelectStockObject(BLACK_PEN); int i,j; for(i=40;i=530;i=i+35) dc.MoveTo(i,40); dc.LineTo(i,530); for(j=40;j=530;j=j+35) dc.MoveTo(40,j); dc.LineTo(530,j); 2.2.棋子设计 至于如何画棋子,就用GDI来画圆,然后填充上不同的颜色,黑子、白子也就实现了。这里的棋子不应该是一个独立的量,它有自己的区域,应该能

4、判断鼠标是不是点击到了这个区域,当点击这个区域的时候是否应该显示,应该显示什么颜色的旗子 把这么多东西集合在一起,应该定义一个类,于是Cqiz 这个类就出现了。 Cqiz 有四个变量如下:int flag; CRect rect; int y; int x;x,y表示这个区域的中心,rect为以x,y为中心的边长为30的矩形,flag用来表示该对象的状态(0:空白 1:黑子 -1:白字)。然后又定义了5个成员函数 bool isWhite();/如果为白子,返回true CRect getRect();/获得该对象对应的CRect bool isBlack();/如果为黑子,返回true bo

5、ol isEmpty();/如果为空,返回true bool isOn(CPoint point);/如果该点出在该区域返回true,用来判断鼠标单击对应的区域。 定义了一个vector容器vector qz;在OnInitDialog()内对qy进行初始化 int i,j,k; Cqiz q; for(i=60,k=0;i=550;i=i+35,k+) for(j=60;j=550;j=j+35) q.x=i; q.y=j; qzk.push_back(q); 当鼠标单击的时候,判断单击的是哪一个区域,如果该区域为空则修改区域状态 void CWuZiQiDlg:OnLButtonDown(

6、UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default int i,j; for(i=0;i15;i+) for(j=0;j15;j+) if(qzij.isOn(point)&!over&qzij.isEmpty() qzij.flag=1; x=i;y=j; ison=true; Invalidate();/引发重绘 return; CDialog:OnLButtonDown(nFlags, point);2.3.电脑算法 在OnLButtonUp()中实现ai,电脑

7、走棋 void CWuziqidlgDlg:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default int i,j,m,n,score=0; for(i=0;i15;i+) for(j=0;j=score) score=getScore(); m=i;n=j; if(ison&!over) if(score=1&qz77.flag=0) qz77.flag=-1; x=7; y=7; else qzmn.flag=-1; x=m;y=n; ison

8、=false; Invalidate(); CDialog:OnLButtonUp(nFlags, point);OnPaint()函数中实现绘制,每次先把棋盘画好,然后遍历各区域,如果不为空就绘制相应的棋子。还要判断是否有一方获胜,如果有就结束游戏。这个程序主关键的是算分,对不同的走法进行算法,得分最高的为要真正要走的。判断是否能成5, 如果是机器方的话给予900000分,如果是人方的话给予400000分; 判断是否能成活4或者是双死4或者是死4活3,如果是机器方的话给予150000分,如果是人方的话给予70000分; 判断是否已成双活3,如果是机器方的话给予30000分,如果是人方的话给予

9、15000 分; 判断是否成死3活3,如果是机器方的话给予1000分,如果是人方的话给予1000 分; 判断是否能成死4,如果是机器方的话给予500分,如果是人方的话给予500分; 判断是否能成单活3,如果是机器方的话给予200分,如果是人方的话给予200分; 判断是否已成双活2,如果是机器方的话给予100分,如果是人方的话给予100分; 判断是否能成死3,如果是机器方的话给予50分,如果是人方的话给予50分; 判断是否能成双活2,如果是机器方的话给予10分,如果是人方的话给予10分; 判断是否能成活2,如果是机器方的话给予5分,如果是人方的话给予5分; 判断是否能成死2,如果是机器方的话给予

10、3分,如果是人方的话给予3分。下五子棋不光要进攻,还要防守,所以要先对假设那些空的格子下自己的棋子能得多少分,得出一个最高分,然后假设这些格子放上对方的棋子,得出一个最高分,如果进攻的最高分大于等于防守的最高分,则进攻,否则先进行防守。2.4.胜负判断根据上面的介绍,如果有一方的5个棋子连成一线,那么这方就胜利了。if(Win(x,y)&!over) if(qzxy.flag=1) MessageBox(你赢了!); else MessageBox(电脑赢!); over=true; first=false; ison=false; bool CWuZiQiDlg:Win(int x,int

11、y) if(qzxy.flag=0) return false; int count1=0,count2=0,i,j; for(i=0;i15;i+) if(qziy.flag=qzxy.flag) count1+; else count1=0; if(qzxi.flag=qzxy.flag) count2+; else count2=0; if(count1=5|count2=5) return true; count1=count2=1; i=x+1; j=y-1; while(i=0&qzij.flag=qzxy.flag) count1+; i+; j-; i=x-1; j=y+1;

12、while(i=0&j=0&j=0&qzij.flag=qzxy.flag) count2+; i-; j-; i=x+1; j=y+1; while(i15&jLoadIcon(IDR_MAINFRAME);void CWuZiQiDlg:DoDataExchange(CDataExchange* pDX)/AFX_DATA_MAP(CWuZiQiDlg) / NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CWuZiQiDlg, CDialog)/AFX_MSG_MAP(

13、CWuZiQiDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CWuZiQiDlg message handlersBOOL CWuZiQiDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. men

14、u item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);int i,j,k;Cqiz q;for(i=40,k=0;i=530;i=i+35,k+)for(j=40;j=530;j=j+35) q.x=i;q.

15、y=j;qzk.push_back(q);ison=false;over=false;first=false;x=0;y=0; / Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herere

16、turn TRUE; / return TRUE unless you set the focus to a controlvoid CWuZiQiDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/

17、 to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CWuZiQiDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the ico

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1