MFC课程设计五子棋

合集下载

MFC课程设计五子棋

MFC课程设计五子棋

Windows程序设计课程考核报告班级:学号:姓名:得分:2016年6月25 日1.设计目的及要求 (3)1.1设计目的及内容 (3)1.2设计要求 (3)1.3软件、硬件环境 (4)2.课程设计步骤 (4)3. 课程设计内容 (10)3.1 概要设计 (10)3.1.1 程序总体框架描述 (11)3.1.2程序常用类声明 (11)3.2主要技术 (11)3.3系统设计结果(界面截图、操作流程) (12)4.设计总结 (13)4.1遇到的问题及如何解决 (13)4.2体会 (13)5.源代码 (14)1.设计目的及要求1.1设计目的及内容描述1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2.基本掌握面向对象程序设计的基本思路和方法;3.掌握用VC++开发应用程序的的一般步骤和方法;4.能够利用所学的基本知识, 设计一个简单的五子棋游戏,具有以下功能:①数据结构的设计;五子棋棋盘的绘制。

②两人下棋时,两人下棋算法的设计。

③两人下棋时,判断任一方获胜的算法的设计。

1.2设计要求用VS 2010进行编码,实现应用程序的功能。

注重编码质量,代码要有适当的注释;提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。

游戏规则:首先可以在更多选项里面选择进行人人对战与人机对战,并可以在人机对战的功能框里选择难易程度。

当棋子连成有五个时游戏结束。

程序功能模块棋局的绘制、保存、和AI三大块1.3软件、硬件环境软件:Windows 10操作系统,Microsoft Visual studio 2010硬件:Inter(R) Core(TM) i5-4200H CPU @ 3.40GHz 2.课程设计步骤新建单文档程序Gobang_FiveChess接着就是定义变量了,但是,由于这个游戏要添加的变量和函数太多了,我们要建一个新类。

是否应该先添加应该类呢?最好是这样。

课程设计报告--c++课程设计五子棋游戏

课程设计报告--c++课程设计五子棋游戏

徐州师范大学物电学院课程设计报告课程名称:计算机程序设计实训题目:五子棋专业班级: 09物41学生姓名:高乐莲学生学号: xxxx ___________日期: 2011.12.24指导教师:赵纪平物电学院教务部印制说明:1、报告中的第一、二、三项由学生在课程设计开始前填写,由指导教师指导并确认签字。

2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩,并填写成绩评定表。

3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。

答辩小组成员应由2人及以上教师组成。

答辩后学生根据答辩情况填写答辩记录表。

4、报告正文字数一般应不少于3000字,也可由指导教师根据本门课程设计的情况另行规定。

5、平时表现成绩低于6分的学生,取消答辩资格,其该课程设计成绩按不及格处理。

6、课程设计完成后,由指导教师根据完成情况写出总结。

7、此表格式为徐州师范大学物理与电子工程学院提供的基本格式,指导教师可根据本门课程设计的特点及内容做适当的调整。

指导教师签字:年月日目录摘要 (II)Abstract (II)1 绪论 (1)1.1 课题背景 (1)1.2 课程设计的目的 (1)2 设计方案简述 (2)2.1 可行性分析 (2)2.2 需求分析 (2)3 详细设计 (3)3.1窗体设计 (3)3.2游戏项目开发 (5)3.2.1棋牌设置 (5)3.2.2放置棋子功能的开发 (6)3.3.3游戏获胜决断的开发 (12)3.2.4游戏的调试与运行 (20)4 设计结果及分析 (22)4.1 程序的结果 (22)4.2结果分析 (23)5总结 (24)参考文献 (25)摘要网络游戏的出现代表了一种全新娱乐方式的诞生。

目前网络游戏正以其独特的魅力吸引着众多的玩家。

随着游戏产业的蓬勃发展,将需要越来越多的人加入到游戏开发中来。

本毕业设计所完成的五子棋游戏(网络版)是在Windows XP下使用Microsoft Visual C++6.0开发的C/S系统,可以实现网络间的双人对战,并且可以提供多媒体播放功能。

MFC课程设计报告-一个简单的五子棋游戏

MFC课程设计报告-一个简单的五子棋游戏

设计一个简单的五子棋游戏一、设计目标与容1.了解Windows编程的根底知识,掌握MFC应用程序的根本知识;2.根本掌握面向对象程序设计的根本思路和方法;3.掌握用VC++开发应用程序的的一般步骤和方法;4.能够利用所学的根本知识, 设计一个简单的五子棋游戏,具有以下功能:①数据构造的设计;五子棋棋盘的绘制。

②两人下棋时,两人下棋算法的设计。

③两人下棋时,判断任一方获胜的算法的设计。

二、设计要求1.用VC++进展编码,实现应用程序的功能。

注重编码质量,代码要有适当的注释;提交设计报告一份〔课程设计任务书、目录、主要的数据构造、设计的根本思路、设计的步骤及主要代码、心得体会、参考文献〕。

总体设计运行时效果如下:图3-1这个程序只能进展两个人之间的对弈,不能进展人机对弈,由于时间和个人能力的原因所以人机对弈的算法就没有写出。

同时程序中也存在着很多漏洞,但根本的功能都已经实现,还有待继续改进。

详细设计新建工程game_wzq选择单文档应用程序,在Step 4 of 6中先中Windows Sockets 复选框。

如以下图:图3-2资源编辑黑白位图Bitmap以表示棋盘上面的棋子:IDB_BLACKDB_WHITE黑白鼠标Cursor以替换当前鼠标:IDC_CURSOR1 黑棋子IDC_CURSOR2 白棋子黑白图标Icon以显示在状态栏供以提示IDI_BLACKIDI_WHITE菜单以供操作:开场:ID_START保存:ID_SAVE翻开:ID_OPEN如以下图所示:图3-3变量函数首先,为了实现状态栏的应用,我们必须更改它的变量:在MainFrm.h文件里面,把CStatusBar m_wndStatusBar 为public接着是在game_wzqView.h文件里面添加变量函数://两个鼠标HCURSOR hcursorwhite;HCURSOR hcursorblack;//棋盘数组int wzq[19][19];// colorwhite TRUE时白棋下,否那么黑棋下bool colorwhite;//棋子位图CBitmap m_bmblack;CBitmap m_bmwhite;//保存文件void Save();//检查是否完毕void over(CPoint point);//鼠标操作afx_msg void OnLButtonUp(UINT nFlags, CPoint point);//鼠标图形更换afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);//菜单的开场afx_msg void OnStart();//菜单的保存afx_msg void OnSave();//菜单的翻开afx_msg void OnOpen();具体实现1、由于我们的游戏的棋盘大小是一定的,不能改变大小的,是应该符合要求的。

(完整word版)c++课程设计五子棋游戏

(完整word版)c++课程设计五子棋游戏

指导教师签字:年月日目录摘要 (II)Abstract ………………………………………………………………………………….。

II 1 绪论…………………….……………………………………。

. 11。

1 课题背景…………………………………………………………………………。

11.2 课程设计的目的 (1)2 设计方案简述………………………………………..………………….。

22.1 可行性分析………………………………………………..…………………………。

22.2 需求分析.........................................................。

.. (2)3 详细设计......................................................................。

.. (3)3.1窗体设计......................................................。

..................................。

3 3。

2游戏项目开发.. (5)3。

2。

1棋牌设置.....................................................................................。

(5)3.2.2放置棋子功能的开发 (6)3。

3.3游戏获胜决断的开发 (12)3.2.4游戏的调试与运行 (20)4 设计结果及分析......................................................。

.......。

(22)4.1 程序的结果...................................................................................。

c语言五子棋课程设计报告

c语言五子棋课程设计报告

c语言五子棋课程设计报告一、前言五子棋作为一种智力游戏,在我国有着悠久的历史和广泛的群众基础。

本次设计的目的是使用C语言实现五子棋游戏,通过此次课程设计,学生将掌握C语言的编程思想和开发方法,同时了解五子棋游戏的规则和策略。

二、五子棋游戏规则五子棋游戏是在15*15的棋盘上进行,由黑白双方轮流落子,先将五个同色棋子连成一条线的一方获胜。

落子的位置必须为空,不能与已有的棋子重叠。

黑方先手,白方后手。

下图为五子棋棋盘示意图。

三、五子棋游戏实现本次课程设计采用C语言实现五子棋游戏,主要包括棋盘的绘制、落子的判断和胜负的判断等功能。

1.棋盘的绘制棋盘的绘制采用双重循环实现,将15*15的棋盘分成225个小格,其中包括14个横线和14个竖线,以及4个角上的点。

通过循环输出字符实现棋盘的绘制。

2.落子的判断落子的判断主要包括鼠标的点击和棋子的绘制两个部分。

当鼠标点击棋盘上的一个位置时,程序会根据当前轮到哪方落子来绘制相应颜色的棋子,并将该位置的状态改为已有棋子。

同时,程序会检查当前落子是否符合规则,即该位置是否为空,如果不为空则重新等待鼠标点击。

3.胜负的判断胜负的判断主要包括横向、纵向、斜向和反斜向四个方向。

通过判断当前落子位置在这四个方向上的连续棋子数是否达到五个来确定胜负。

如果达到五个,则程序会弹出相应的提示框,显示胜利方。

四、总结通过本次课程设计,学生掌握了C语言的编程思想和开发方法,同时了解了五子棋游戏的规则和策略。

本次设计主要包括棋盘的绘制、落子的判断和胜负的判断等功能。

希望本次课程设计能够增强学生的编程能力和对五子棋游戏的理解。

c课程设计报告之五子棋游戏

c课程设计报告之五子棋游戏

##大学C++面向对象课程设计报告此课设源代码工程:院(系):计算机工程学院专业:软件工程学生姓名:__班级:_学号:题目:五子连珠棋_________起迄日期:—_____设计地点:计算机工程学院机房指导教师:完成日期: 2011 年 7 月14 日一、课程设计目的。

1、进行c++面向对象程序设计的复习巩固;2、在完成c++面向对象语言学习的基础上,通过自学MFC,掌握一种可视化编程的方法,并通过实践,加深对面向对象语言的理解。

3、提高运用c++编程的能力和解决实际问题的能力,创新能力及团队合、协调能力4、提高调查研究、查询技术文献、资料和编程及设计文档的能力;5、首次尝试编写软件,学习实际操作开发能力,体验学习基础知识重要性。

6、提高自学能力,体验合作以及独立编程、分析文献等各方面的重要性,加强这些方面素质的训练。

二、课程设计内容与实现的功能一、设计内容五子棋游戏是一历史悠久,对抗性强,技巧性高的棋类游戏。

而且我对五子棋有着独特的爱好,希望自己也可以编写出一款可以实现人机对战的五子棋游戏。

把自己的思想付给电脑,让自己有些成就感,给自己继续努力的动力。

借此次课程设计的机会,把想法变成现实。

而且五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。

五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。

它是中西文化的交流点,是古今哲理的结晶。

所以此次c++课程设计选择五子棋这个题目。

二、程序所实现的功能通过给电脑赋予人工智能,利用电脑运算速度快的特点,结合五子棋的游戏规则,给电脑设定固定的扫描方式,设定权值,使电脑能够选择最合适的落子点,然后调用加载已做好的棋盘棋子图像,最终实现简单的人机对弈。

该游戏为普通玩家使用,只要连成五子即获胜,没有禁手、RIF(国际连珠连盟)正式规则、“Yamaguchi”、”Tarannikov”、“Taraguchi”等规则。

MFC五子棋(面向对象程序设计)

MFC五子棋(面向对象程序设计)

目录一、绪论 (1)1.1课题背景 (1)1.2需求分析 (1)2.1游戏流程 (1)2.2系统功能结构图 (2)三、详细设计 (3)3.1.1游戏界面的制作 (3)3.1.2游戏开始 (4)3.1.3游戏结束 (5)3.1.4排行榜 (6)3.2核心算法 (6)四、用户使用说明 (8)4.1游戏开始 (8)4.2游戏中 (8)4.3结束 (9)五、附录 (10)参考资料 (10)一、绪论1.1课题背景本课程设计是C++面向对象程序设计的重要的实践环节之一,是在学生学习完《C++面向对象程序设计》课程后进行的一次全面的综合练习,此次课程设计的题目是自拟的。

在和我的队友反复的讨论下,我们一致同意写以C++和MFC 为主要知识点的MFC人—人对战五子棋。

1.2需求分析(1)设计用户图形界面,用户通过鼠标就可以操作游戏。

(2)以二维数组的形式储存棋盘的下子信息,包括坐标和棋子类型。

(3)设置开始、结束和排行榜用于操作和查看下棋的信息。

(4)游戏有自动保存玩家输赢信息的功能。

(5)为了使算法简单,游戏中的棋盘、棋子等都以位图的形式操作。

二、概要设计2.1游戏流程三、详细设计3.1.1游戏界面的制作利用MFC AppWinzard生成五子棋游戏应用程序框架具体步骤如下:(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFC AppWizard(exe)选项,然后在Project name文本框中输入Fivechess_44 。

Lacation文本框是指项目的本地路径。

(2)单击按钮,弹出MFC AppWinzard_Step1对话框。

选中单选按钮,如图所示。

(3)单击完成按钮,则建立一个单文档应用框架。

(4)将单文档的菜单栏去掉,并加入背景图片。

背景图片中包含了棋盘。

部分代码如下:3.1.2游戏开始(1)界面中的设置,以位图的形式放到背景中。

C语言五子棋游戏程序课程设计

C语言五子棋游戏程序课程设计

C语言五子棋游戏程序课程设计C++五子棋游戏程序设计一、课设内容1. 掌握C++基本编程风格。

2. 编写程序代码,实现各个模块的功能。

3. 完成小型游戏应用系统的设计开发.4. 关键语句写注释。

5. 测试程序,写出测试报告。

6. 在实验报告写出综合设计心得。

二、实验内容在此次大作业中,我学习设计一个五子棋游戏的程序,源代码及分析如下:#include#includevoid shuchu(char a[15][15]){int x,y,i;cout<<" ";for(i=0;i<15;i++)cout<<setw(3)<<i;< p="">cout<<endl;< p="">for(x=0;x<15;x++){cout<<setw(2)<<x;< p="">for(y=0;y<15;y++)cout<<setw(3)<<a[x][y];< p="">cout<<endl;< p="">}}bool osheng(char a[15][15]){int x,y;for(x=0;x<15;x++)for(y=0;y<11;y++)if(a[x][y]=='o'&&a[x][y+1]=='o'&&a[x][y+2]=='o'&&a[x][y+ 3]=='o'&&a[x][y+4]=='o') return 1;for(x=0;x<11;x++)for(y=0;y<15;y++)if(a[x][y]=='o'&&a[x+1][y]=='o'&&a[x+2][y]=='o'&&a[x+3][ y]=='o'&&a[x+4][y]=='o') return 1;for(x=0;x<11;x++)for(y=0;y<11;y++)if(a[x][y]=='o'&&a[x+1][y+1]=='o'&&a[x+2][y+2]=='o'&&a [x+3][y+3]=='o'&&a[x+4][y+4]=='o' )return 1;for(x=15;x>4;x--)return 0;}bool xsheng(char a[15][15]){int x,y;for(x=0;x<15;x++)for(y=0;y<11;y++)if(a[x][y]=='x'&&a[x][y+1]=='x'&&a[x][y+2]=='x'&&a[x][y+ 3]=='x'&&a[x][y+4]=='x') return 1;for(x=0;x<11;x++)for(y=0;y<15;y++)if(a[x][y]=='x'&&a[x+1][y]=='x'&&a[x+2][y]=='x'&&a[x+3][ y]=='x'&&a[x+4][y]=='x') return 1;for(x=0;x<11;x++)for(y=0;y<11;y++)if(a[x][y]=='x'&&a[x+1][y+1]=='x'&&a[x+2][y+2]=='x'&&a[ x+3][y+3]=='x'&&a[x+4][y+4]=='x' )return 1;for(x=15;x>4;x--)for(y=15;y>4;y--)if(a[x][y]=='x'&&a[x+1][y-1]=='x'&&a[x+2][y-2]=='x'&&a[x+3][y-3]=='x'&&a[x-4][y+4]=='x') return 1;return 0;}bool he(char a[15][15]){int x,y;for(x=0;x<15;x++)for(y=0;y<15;y++)if(a[x][y]=='-')return 0;return 1;}void main(){int x,y,s,q;char a[15][15];for(x=0;x<15;x++)for(y=0;y<15;y++)cin>>q;if(q==1)goto two;/* elsegoto one; */two:cout<<"请选择是否进入悔棋模式:1.是;2.否\n";cin>>q;if(q==2)goto three;shuchu(a);while(1){s: while(1){cout<<"请玩家1输入下子的坐标"<<endl;< p="">cin>>x>>y;if(a[x][y]=='o'||a[x][y]=='x')cout<<"此处已经有字,请重下"<<endl;< p="">else{a[x][y]='o';break;}}shuchu(a);cout<<"是否需要悔棋?是请输入:1;否请输入:0"<<endl;< p=""> cin>>s;switch(s){case 1:a[x][y]='-';goto s;break;case 0:break;}s1: if(osheng(a)){cout<<"玩家1胜";break;}s2: while(1){cout<<"请玩家2输入下子的坐标"<<endl;< p="">cin>>x>>y;if(a[x][y]=='o'||a[x][y]=='x')cout<<"此处已经有字,请重下"<<endl;< p="">else{a[x][y]='x';break;}}shuchu(a);cout<<"是否需要悔棋?是请输入:1;否请输入:0"<<endl;< p=""> cin>>s;switch(s){case 1:a[x][y]='-';goto s2;break;case 0:break;}s3: if(xsheng(a)){cout<<"玩家2胜";if(he(a)){cout<<"平局";break;}}three: shuchu(a);while(1){while(1){cout<<"请玩家1输入下子的坐标"<<endl;< p=""> cin>>x>>y;if(a[x][y]=='o'||a[x][y]=='x')cout<<"此处已经有字,请重下"<<endl;< p=""> else{a[x][y]='o';break;}}shuchu(a);if(osheng(a)){cout<<"玩家1胜"; break;}}shuchu(a);if(xsheng(a)){cout<<"玩家2胜"; break;}if(he(a)){cout<<"平局"; break;}}}三、感想体会本实验是用C++来设计完成了五子棋游戏。

MFC程序五子棋实验报告

MFC程序五子棋实验报告

MFC程序五子棋实验报告1.实验目的:通过学习MFC应用程序开发,编译一个简单的五子棋人人对战游戏。

2.实验进程:(1)实验分工该实验是由小组人员一路合作完成,算法设计有**负责,编码和函数实现由***负责,调试运行和结果测试别离有**和**负责,实验报告的书写由**负责。

(2)算法设计五子棋的游戏规那么对咱们大伙儿来讲都很很清楚的。

只要某一方的棋子在一条直线上,棋子数先达到五或以上,那么该方为胜者。

依照游戏规那么,算法设计分以下几个方面:A.棋盘设计:棋盘设计能够用一个对话框实现,B.棋子设计C.开始函数D.终止函数E.下棋子函数F.选择哪一种棋子先下函数G.判定输赢函数五子棋成功的条件是一方的五个棋子连成一条直线,包括纵,横,左斜,右斜四种,能够用二维数组来保留每一个位置棋子的值,别离用0,1,2来表示无棋,黑棋,白棋,每当下一个棋子后,用值保留其颜色,当白棋或黑棋有一者符合上述四种情形之一时,就能够够够判定出哪方成功。

H.从头开始棋局函数(3)编码和函数实现void CTestDlg::OnButton11(){if(ToStart==1&&Q[0][0]==0){eleteObject();oadBitmap(IDB_BITMAP2);(HBITMAP(m_cBmp[0][0]));Qi++;eleteObject();m_cBmp[0][0].LoadBitmap(IDB_BITMAP3);oadBitmap(IDB_BITMAP1);Q[i][j]=0;}eleteObject();OnButtonStart();MessageBox("点击“开始”,清屏并从头开始游戏");ToStart=0;Qi=0;m_flag_Color=true;}验结果分析:4.实验总结:。

如何用MFC编五子棋游戏

如何用MFC编五子棋游戏

怎样做一个五子棋游戏?五子棋游戏算法比较简单,实现起来比较容易,适合初学者练习。

我这个五子棋游戏是自己花了2天的时间完成的,当时刚学mfc,想练一下手就做了这个游戏。

棋盘和棋子可以用GDI来实现,棋盘用GDI划线,基本上就是LineTo(x,y),MoveTo(x,y),一个棋盘就出来了。

具体代码如下在OnPaint()函数的else内加入如下代码CPaintDC dc(this);dc.SelectStockObject(BLACK_PEN);int i,j;for(i=60;i!=420;i=i+40){dc.MoveTo(i,60);dc.LineTo(i,380);}for(j=60;j!=420;j=j+40){dc.MoveTo(60,j);dc.LineTo(380,j);}一个9×9的棋盘就画好了。

至于如何画棋子,我思考了很长时间,贴图太麻烦,就用GDI来画圆,然后填充上不同的颜色,黑子、白子也就实现了。

这里的棋子不应该是一个独立的量,它有自己的区域,应该能判断鼠标是不是点击到了这个区域,当点击这个区域的时候是否应该显示,应该显示什么颜色的旗子……把这么多东西集合在一起,应该定义一个类,于是CQuyu这个类就出现了。

CQuyu有四个变量如下:int flag;CRect rect;int y;int x;x,y表示这个区域的中心,rect为以x,y为中心的边长为30的矩形,flag 用来表示该对象的状态(0:空白 1:黑子 2:白字)。

然后又定义了5个方法bool isWhite();//如果为白子,返回trueCRect getRect();//获得该对象对应的CRectbool isBlack();//如果为黑子,返回truebool isEmpty();//如果为空,返回truebool isOn(CPoint point);//如果该点出在该区域返回true,用来判断鼠标单击对应的区域在view类中定义了一个vector容器,(需要包含#include <vector>)vector<CQuyu> qy;在OnInitDialog()内对qy进行初始化int i,j;CQuyu q;for(i=60;i!=420;i=i+40){for(j=60;j!=420;j=j+40){q.x=i;q.y=j;qy.push_back(q);}}当鼠标单击的时候,判断单击的是哪一个区域,如果该区域为空则修改区域状态void CWuziqidlgDlg::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/or call default int i;for(i=0;i!=qy.size();i++)if(qy[i].isOn(point)&&!over&&qy[i].isEmpty()){qy[i].flag=1;ison=1;break;}Invalidate();//引发重绘}在OnLButtonUp()中实现ai,电脑走棋void CWuziqidlgDlg::OnLButtonUp(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call default//flag 1:black 2:white//color 1:white 2:blackint i,temp1,temp2,max1,max2;max1=0;max2=0;temp1=0;temp2=0;for(i=0;i!=qy.size();i++){if(qy[i].isEmpty()){qy[i].flag=2;if(getScore(1)>max1){temp1=getScore(1);max1=temp1;temp1=i;}qy[i].flag=1;if(getScore(2)>max2){temp2=getScore(2);max2=temp2;temp2=i;}qy[i].flag=0;}}if(ison==1&&!over){if(max1>=max2)qy[temp1].flag=2;elseqy[temp2].flag=2;}ison=0;if(!isWin())Invalidate();CDialog::OnLButtonUp(nFlags, point);}OnPaint()函数中实现绘制,每次先把棋盘画好,然后遍历各区域,如果不为空就绘制相应的棋子。

MFC-C++五子棋课程设计报告

MFC-C++五子棋课程设计报告

课程设计成绩考勤成绩( %) 指导老师评语报告及程序成绩( %)总评成绩指导老师签名:《windows程序设计》课程设计报告学院(系):计算机科学与技术系班级:计专2班学生姓名:梁剑学号**********指导教师:时间:从2010 年1 月18 日到2010 年1 月22 日摘要1.能够利用所学的基本知识, 设计一个简单的五子棋序,具有以下功能:①数据结构的设计;五子棋棋盘的绘制。

②人机下棋时,计算机下棋算法的设计。

③人机下棋时,判断任一方获胜的算法的设计。

关键字:MFC编程,Windows程序目录项目一: 五子棋1 设计目的与要求 (1)1.1 设计目的 (1)1.2 设计内容 (1)1.3 设计要求 (1)2 设计环境或器材、原理与说明 (3)2.1 设计环境与器材 (3)2.2 原理与说明 (3)3 设计过程及程序代码 (6)3.1 服务器端设计 (6)3.1.1 界面设计 (6)3.1.2 人下棋设计 (8)3.1.3 电脑下棋设计 (8)3.1.4 搜索最优下棋点 (9)4 设计结果与分析 (21)4.1 设计结果 (21)4.2 设计分析 (22)5 设计体会与建议 (23)参考文献 (24)五子棋1 设计目的与要求1.1 设计目的1、进一步掌握利用Visual C++进行程序设计的能力;2、进一步理解和运用面向对象程序设计的思想和方法;3、初步掌握开发一个小型实用系统的基本方法;4、学会调试一个较长程序的基本方法;5、理解Windows程序的运行过程;1.2设计内容能够利用所学的基本知识, 设计一个简单的学生信息管理应用程序,具有以下功能:①数据结构的设计;五子棋棋盘的绘制。

②人机下棋时,计算机下棋算法的设计。

③人机下棋时,判断任一方获胜的算法的设计。

1.3 设计要求整个程序使用winsocket 函数做网络数据收发,基于UDP协议。

可以直接使用Windows API编程(SDK编程),也可以使用MFC编程。

五子棋游戏详细设计

五子棋游戏详细设计

五子棋游戏‎详细设计1、窗体设计利用MFC‎ AppWi‎n zard‎生成五子棋‎游戏应用程‎序框架具体‎步骤如下:(1)执行VC程‎序,选择Fil‎e|N ew命令‎,弹出New‎对话框.单击Pro‎jects‎标签,转到Pro‎jects‎选项卡,选择MFC‎ AppWi‎z ard(exe)选项,然后在Pr‎oject‎name文‎本框中输入‎F ivec‎h ess_‎44 。

Lacat‎i on文本‎框是指项目‎的本地路径‎。

(2)单击按钮,弹出MFC‎ AppWi‎n zard‎_Step‎1对话框。

选中单选按‎钮,如图所示。

(3)单击完成按‎钮,则建立一个‎单文档应用‎框架。

2、游戏项目开‎发2.1棋盘设计‎1.在已创建的‎工程Fiv‎eches‎s_44中‎添加画棋盘‎的函数。

首先在“Fivec‎h ess_‎44.h”头文件中定‎义一个用于‎显示棋盘的‎自定义公有‎函数:void Check‎e rboa‎r d(CDC*pDC);然后在“Fivec‎h ess_‎44Vie‎w.cpp”源文件中实‎现该函数。

代码如下:void CFive‎c hess‎_44Vi‎e w::Check‎e rboa‎r d(CDC*pDC){for(int i=0;i<20;i++) //连续画20‎条竖线{pDC->MoveT‎o(i*50,0); //画笔移动到‎(i*50,0)点pDC->LineT‎o(i*50,1000); // 画笔从(i*50,0)点到(i*50,1000)点}for(i=0;i<20;i++) //连续画20‎条横线{pDC->MoveT‎o(0,i*50);pDC->LineT‎o(1000,i*50);}}2.在应用程序‎框架的On‎D raw()函数中调用‎该画棋盘函‎数,将pDC对‎象作为实参‎传递给Ch‎ecker‎b oard‎()函数,代码如下:void CFive‎c hess‎_44Vi‎e w::OnDra‎w(CDC* pDC){CFive‎c hess‎_44Do‎c* pDoc = GetDo‎c umen‎t();ASSER‎T_VAL‎I D(pDoc);// TODO: add draw code for nativ‎e data hereCheck‎e rboa‎r d(pDC); //调用自定义‎的画键盘函‎数}3.编译运行得‎到如下效果‎:一个空棋盘‎2.2放置棋子‎功能的开发‎按照规划,棋子使用鼠‎标的左键和‎右键(分别用这两‎键来表示下‎棋的双方)来进行单机‎下棋,即是当用户‎单击左键时‎,下黑色棋子‎,,用户单击右‎键时,下白色棋子‎。

C++ mfc五子棋

C++  mfc五子棋

GetObject:
函数功能:该函数得到指定图形对象的信息,根据图形对象, 函数把填满的或结构,或表项(用于逻辑调色板)数目放入一个指定的缓冲区。 函数原型:int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);
境(DC)。通过GetDc()获取的HDC直接与相关设备沟通,而本函数创建的DC, 则是与内存中的一个表面相关联。 函数原型:HDC CreateCompatibleDC(HDC hdc);
AddString:调用此成员函数添加一个字符串到列表框中。 EndDialog:函数功能:该函数清除一个模态对话框,并使系统中止对对话框的任 何处理。 函数原型:BOOL EndDialog(HWND hDlg,int nResult);
PlaySound简介
BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound); 参数pszSound是指定了要播放声音的字符串,该参数可以是WAVE文件的名字, 或是WAV资源的名字,或是内存中声音数据的指针,或是在系统注册表WIN.INI
{PlaySound((LPCTSTR)IDR_WAVE1, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);}
常用函数说明
LoadBitmap:
函数功能:该函数从模块的可执行文件中加载指定的位图资源。 该函数已经被函数LoadImage替代。 函数原型:HBITMAP LoadBitmap(HINSTANCE hInstance, LPCTSTR lpBitmapName);

c++MFC五子棋_说明书

c++MFC五子棋_说明书

(面向对象程序设计)设计说明书MFC五子棋起止日期: 2012 年 12 月 30 日至 2013 年 01 月 05 日学生姓名*******班级********学号**********成绩指导教师 (签字)计算机与通信学院(部)年月日目录一、绪论 (2)1.1课题背景 (2)1.2需求分析 (2)2.1游戏流程 (2)2.2系统功能结构图 (3)三、详细设计 (4)3.1.1游戏界面的制作 (4)3.1.2游戏开始 (5)3.1.3游戏结束 (6)3.1.4排行榜 (7)3.2核心算法 (7)四、用户使用说明 (9)4.1游戏开始 (9)4.2游戏中 (9)4.3结束 (10)五、附录 (11)参考资料 (11)一、绪论1.1课题背景本课程设计是C++面向对象程序设计的重要的实践环节之一,是在学生学习完《C++面向对象程序设计》课程后进行的一次全面的综合练习,此次课程设计的题目是自拟的。

在和我的队友反复的讨论下,我们一致同意写以C++和MFC 为主要知识点的MFC人—人对战五子棋。

1.2需求分析(1)设计用户图形界面,用户通过鼠标就可以操作游戏。

(2)以二维数组的形式储存棋盘的下子信息,包括坐标和棋子类型。

(3)设置开始、结束和排行榜用于操作和查看下棋的信息。

(4)游戏有自动保存玩家输赢信息的功能。

(5)为了使算法简单,游戏中的棋盘、棋子等都以位图的形式操作。

二、概要设计2.1游戏流程三、详细设计3.1.1游戏界面的制作利用MFC AppWinzard生成五子棋游戏应用程序框架具体步骤如下:(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFC AppWizard(exe)选项,然后在Project name文本框中输入Fivechess_44 。

Lacation文本框是指项目的本地路径。

(2)单击按钮,弹出MFC AppWinzard_Step1对话框。

使用C++MFC编写一个简单的五子棋游戏程序

使用C++MFC编写一个简单的五子棋游戏程序

使⽤C++MFC编写⼀个简单的五⼦棋游戏程序MFC简介: MFC(MicrosoftFoundationClasses)是微软基础类库的简称,是微软公司实现的⼀个c++类库,主要封装了⼤部分的windows API函数。

MFC除了是⼀个类库以外,还是⼀个框架,在vc++⾥新建⼀个MFC的⼯程,开发环境会⾃动帮你产⽣许多⽂件,同时它使⽤了mfcxx.dll。

xx是版本,它封装了mfc内核,所以你在你的代码看不到原本的SDK编程中的消息循环等等东西,因为MFC框架帮你封装好了,这样你就可以专⼼的考虑你程序的逻辑,⽽不是这些每次编程都要重复的东西,但是由于是通⽤框架,没有最好的针对性,当然也就丧失了⼀些灵活性和效率。

但是MFC的封装很浅,所以效率上损失不⼤。

开始正⽂简述在学习了C++ MFC编程后,就萌⽣了编写⼀个五⼦棋程序的想法。

诚然,⽤C#来编写的话可能界⾯会好很多,但是我的主要⽬标不在界⾯⽽是算法,所以利⽤了VS的MFC来编写程序。

程序特点⿏标移动过程中有选中框跟随,下棋位置实时⾃动反馈选中框位置只会在合法的下棋位置出现(即棋线的交叉处并且没有下过的位⼦),所以即使你的⿏标不在棋线交叉处,程序也会实时⾃动反馈⿏标在当前位置将要下棋的位置,这避免了下棋过程中的错下。

提供悔棋功能为了进⼀步避免错下,提⾼程序的可⽤性,本程序还设计了⼀个悔棋按钮(程序设置最⼤悔棋次数为1次)提供多种棋盘⼤⼩标准的五⼦棋棋盘为15x15,为了提供更多样的棋盘⼤⼩,本程序还设有17x17和19x19两种⾮常规棋盘。

提供复盘功能在棋局结束后,程序会给出棋局的复盘结果,可以从中分析出棋局胜败的原因。

解决了MFC绘图窗⼝移出屏幕图像消失的问题你可以在完整代码中看到解决刷新问题的解决⽅案代码较为基础,只需要掌握基础的MFC编程知识就可以⾃⼰实现因为本⼈也是编程⼩⽩,算法设计⽐较基础和简单,只掌握基础的C++编程知识就可以看懂代码程序实现step1:在VS中创建⼀个MFC对话框程序⼯程。

MFC程序五子棋实验报告

MFC程序五子棋实验报告

MFC程序五子棋实验报告
一、实验内容
本次实验主要以Visual Studio2024为开发工具,以MFC应用程序为开发平台,以五子棋为实现的对象,实现一个基于MFC编写的五子棋游戏程序。

二、实验要求
本次实验的目标是基于MFC应用程序平台,使用Visual Studio2024开发工具,实现一个能够完成基本的五子棋游戏功能的程序。

实现的功能包括:
1、游戏初始界面:实现游戏初始界面,包括游戏开始、设置(玩家姓名)、取消、选择棋子颜色按钮等;
2、逻辑控制:实现玩家双方的棋子及其状态控制,判断双方棋子的落子位置,根据五子棋的规则判断双方输赢,判断本局棋盘是否成和棋;
3、棋盘显示:棋盘支持多种背景皮肤选择,实现了棋子的真实落子位置;
4、功能支持:支持悔棋、撤销悔棋、重开等常用功能,还支持联机对战功能;
5、记录显示:显示游戏状态,如落子数,玩家双方的输赢情况。

三、实验过程
1. 使用Visual Studio2024,以MFC应用程序平台为基础,创建五子棋游戏程序。

2.编写程序界面,实现游戏初始界面,在界面中添加游戏开始、设置(玩家姓名)、取消、选择棋子颜色等按钮。

3.实现五子棋游戏需要的基础函数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Windows程序设计课程考核报告班级:学号:姓名:得分:2016年6月25 日1.设计目的及要求 (3)1.1设计目的及内容 (3)1.2设计要求 (3)1.3软件、硬件环境 (4)2.课程设计步骤 (4)3. 课程设计内容 (10)3.1 概要设计 (10)3.1.1 程序总体框架描述 (11)3.1.2程序常用类声明 (11)3.2主要技术 (11)3.3系统设计结果(界面截图、操作流程) (12)4.设计总结 (13)4.1遇到的问题及如何解决 (13)4.2体会 (13)5.源代码 (14)1.设计目的及要求1.1设计目的及内容描述1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2.基本掌握面向对象程序设计的基本思路和方法;3.掌握用VC++开发应用程序的的一般步骤和方法;4.能够利用所学的基本知识, 设计一个简单的五子棋游戏,具有以下功能:①数据结构的设计;五子棋棋盘的绘制。

②两人下棋时,两人下棋算法的设计。

③两人下棋时,判断任一方获胜的算法的设计。

1.2设计要求用VS 2010进行编码,实现应用程序的功能。

注重编码质量,代码要有适当的注释;提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。

游戏规则:首先可以在更多选项里面选择进行人人对战与人机对战,并可以在人机对战的功能框里选择难易程度。

当棋子连成有五个时游戏结束。

程序功能模块棋局的绘制、保存、和AI三大块1.3软件、硬件环境软件:Windows 10操作系统,Microsoft Visual studio 2010硬件:Inter(R) Core(TM) i5-4200H CPU @ 3.40GHz 2.课程设计步骤新建单文档程序Gobang_FiveChess接着就是定义变量了,但是,由于这个游戏要添加的变量和函数太多了,我们要建一个新类。

是否应该先添加应该类呢?最好是这样。

因为新类将会涉及到变量。

添加普通类CChessclass CChess{public:CChess(void);~CChess(void);void Init(CRect rect);void Draw(CDC* pDC); // 画棋局void SetPiecePos(CPoint ptCurrent); // 设置当前棋子的位置下棋函数void NewGame(); // 新游戏BOOL Regret(); // 悔棋void SetVSMode(enumVSMode emVSMode); // 设置对战模式enumVSModevoid SetAIDepth(int emAIDepth); // 设置AI智能程度enumWinFlag G etWinFlag(); // 获取输赢状况CRect GetRectBoard(); // 获取棋盘区域private:enumChessColor m_iPositionPiece[COLUMNS][ROWS];// 棋子的信息CChessDraw m_chessdraw; // 棋局绘制类CRect m_rcBoard; // 棋盘区域CPoint m_ptCurrent; // 棋子当前位置enumWinFlag m_emWin; // 输赢状况enumVSMode m_emVSMode; // 对战模式STC_REGRET m_stcLastPos; // 记录最近一次的下棋位置BOOL m_bTurnBlack; // 是否轮到黑方下棋int m_emAIDepth; // AI智能程度为方便外部调用SetAIDepth(),所以设为了int类型BOOL IsWin(UINT uiCol, UINT uiRow,enumChessColor emChessColor);// 在第uiCol列第uiRow行,判断是否结束,若结束则返回TRUE BOOL GetBestPosByAI(UINT& uiCol, UINT& uiRow, enumChessColor emEnemyChessColor = BLACK); // 获取最好的下棋位置,机器都为白色};添加函数:构造函数:CChess::CChess(void){m_bTurnBlack = TRUE;m_emWin = FIGHTING;m_emVSMode = PERSON_VS_MACHINE;m_emAIDepth = AI_MIDDLE;m_ptCurrent = CPoint(-1,-1); // 只要不在棋盘内的点都可以memset(m_iPositionPiece, 0, sizeof(m_iPositionPiece));m_stcLastPos.iPieceNum = 0;m_stcLastPos.ptBlack = CPoint(0,0);m_stcLastPos.ptWhite = CPoint(0,0);m_stcLastPos.ptLastCurPoint = CPoint(-1,-1);}画图函数:void CChess::Draw(CDC* p DC){CMyMemDC memDC(pDC);m_chessdraw.SetDC(memDC);m_chessdraw.DrawBackground();m_chessdraw.DrawBoard();// ----------------------- 重画整个棋局 -----------------------if(FIGHTING == m_emWin) // 没分胜负时才允许改变m_emWin的状态{m_emWin = PEACE;}for(int i = 0; i < COLUMNS; i++){for(int j = 0; j < ROWS; j++){if(NONE != m_iPositionPiece[i][j]){m_chessdraw.DrawPiece(i, j, BLACK == m_iPositionPiece[i][j]);}else if(PEACE == m_emWin){m_emWin = FIGHTING; // 若有空位,则还可以继续,否则平局,即m_emWin = PEACE;}}}m_chessdraw.DrawPieceCur(m_ptCurrent.x, m_ptCurrent.y); // 标记当前棋子下棋函数:void CChess::SetPiecePos(CPoint ptCurrent){if(FIGHTING != m_emWin){return; // 没分胜负时才允许改变m_ptCurrent的状态}UINT uiPosX, uiPosY;if(! m_chessdraw.GetCoordinateWithPoint(ptCurrent, &uiPosX, &uiPosY)){return; // 不在棋盘内的位置不做处理}if(NONE != m_iPositionPiece[uiPosX][uiPosY]){return; // 已有棋子的位置不做处理}for(int i = 0; i < 2 ; i++){m_iPositionPiece[uiPosX][uiPosY] = m_bTurnBlack ? BLACK : WHITE;// ----------------------------------- 判断输赢-----------------------------------if(IsWin(uiPosX, uiPosY, m_iPositionPiece[uiPosX][uiPosY])){m_ptCurrent = CPoint(uiPosX, uiPosY);return; // 已分出胜负}// ----------------------------------- 记录上一次的棋子位置-----------------------------------if((PERSON_VS_PERSON == m_emVSMode) || (m_bTurnBlack && (PERSON_VS_MACHINE == m_emVSMode))){m_stcLastPos.ptLastCurPoint = m_ptCurrent;}if(m_bTurnBlack){m_stcLastPos.ptBlack = CPoint(uiPosX, uiPosY);}{m_stcLastPos.ptWhite = CPoint(uiPosX, uiPosY);}m_stcLastPos.iPieceNum++;m_ptCurrent = CPoint(uiPosX, uiPosY);// ----------------------------------- 轮到白方下棋-----------------------------------m_bTurnBlack = ! m_bTurnBlack;if((! m_bTurnBlack && (PERSON_VS_MACHINE == m_emVSMode))){if(! GetBestPosByAI(uiPosX, uiPosY, (! m_bTurnBlack) ? BLACK : WHITE)){return; // 已分出胜负}}if(PERSON_VS_PERSON == m_emVSMode){break; // 如果是人人对战,则退出循环}}}enumWinFlag CChess::GetWinFlag(){return m_emWin;}悔棋函数:OOL CChess::Regret(){if((m_stcLastPos.iPieceNum > 0) && (FIGHTING == m_emWin)) // 如已分出胜负,则不再允许悔棋{m_stcLastPos.iPieceNum = 0; //只允许悔一步m_ptCurrent = m_stcLastPos.ptLastCurPoint;if(PERSON_VS_MACHINE == m_emVSMode){m_iPositionPiece[m_stcLastPos.ptBlack.x][m_stcLastPos.ptBlack.y] = NONE; m_iPositionPiece[m_stcLastPos.ptWhite.x][m_stcLastPos.ptWhite.y] = NONE;if(PERSON_VS_PERSON == m_emVSMode){if(! m_bTurnBlack){m_iPositionPiece[m_stcLastPos.ptBlack.x][m_stcLastPos.ptBlack.y] = NONE; }else{m_iPositionPiece[m_stcLastPos.ptWhite.x][m_stcLastPos.ptWhite.y] = NONE; }m_bTurnBlack = ! m_bTurnBlack;}return TRUE;}return FALSE;设置对战模式:void CChess::SetVSMode(enumVSMode emVSMode){m_emVSMode = emVSMode;}void CChess::SetAIDepth(int emAIDepth){m_emAIDepth = emAIDepth;}3. 课程设计内容3.1 概要设计游戏的操作方面主要以鼠标点击为主,鼠标点击方格里面进行落子操作。

相关文档
最新文档