C++ 五子棋游戏论文.docx
- 文档编号:397207
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:16
- 大小:127.39KB
C++ 五子棋游戏论文.docx
《C++ 五子棋游戏论文.docx》由会员分享,可在线阅读,更多相关《C++ 五子棋游戏论文.docx(16页珍藏版)》请在冰豆网上搜索。
C++五子棋游戏论文
XXXX大学
《C++语言程序设计》课程设计(论文)
题目:
五子棋游戏
院(系):
专业班级:
学号:
学生姓名:
指导教师:
教师职称:
起止时间:
课程设计(论文)任务及评语
院(系):
教研室:
学号
学生姓名
专业班级
课程设计(论文)题目
五子棋游戏
课程设计(论文)任务
程序设计的任务与要求:
(1).掌握面向对象程序设计语言C++的基本语法
(2).掌握C++面向对象设计的思想
(3).掌握VC++6.0与DEVC++开发工具的使用
(4).运用标准C++规范设计应用程序
设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。
正确地完成上述内容,规范完整地撰写出设计报告。
指导教师评语及成绩
成绩:
指导教师签字:
年月日
第1章课程设计目的与要求
1.1设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
硬件要求能运行Windows操作系统的微机系统。
C++语言应用程序开发软件使用:
VC++系统,或其他C++语言应用程序开发软件。
熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。
1.仔细分析设计题目,画出程序流程图,编写程序源代码。
2.积极上机调试源程序,增强编程技巧与调程能力。
3.认真书写课程设计预习报告,课程设计说明书。
4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。
第2章课程设计内容
2.1课题描述
五子棋游戏的实现需要一定的人工智能,让电脑会思考问题。
电脑通过思考后自动做出反应。
做五子棋游戏可以让我对人工智能及MFC有初步的认识。
同时更锻炼了C++的实战能力,为以后这方面的发展打下基础,随后详细介绍了五子棋游戏的开发过程。
本系统将实现下棋中可能出现的意外进行了处理。
这样五子棋休闲游戏将不在是一个功能单一界面枯燥的无声游戏,而是一个较完善的休闲游戏。
2.2系统设计
功能分析
(1)用函数画出棋盘,画出棋子
(2)实现人工智能让电脑具有“思考”能力,实现人机对弈。
玩家先走执白子,电脑自动后手下棋,执黑子。
玩家执白子#defineWhite0白子在数组位置定义为0;电脑黑子#defineBlack1数组位置定义为1;无子位置#defineEmpty-1数组位置定义为-1。
本程序将棋盘设为一个二维数组,每次点击鼠标左键通过voidCMyView:
:
OnLButtonDown(UINTnFlags,CPointpoint)反馈点击坐标信息,从而改变二维数组相应位置上的值,再在voidCMyView:
:
OnDraw(CDC*pDC)函数中根据数组的值绘制出棋子。
玩家先手下棋后判断此时棋盘输赢情况进而SendMessage(WM_COMPUTER);发送消息让电脑思考下棋。
电脑思考分情况:
当棋盘上只有一个棋子时1==m_Unit,电脑会生成八个随机数根据生成的随机数随机在玩家棋子周围下一步棋。
玩家下棋时m_IsManOrder=TRUE;当玩家落棋以后m_IsManOrder=FALSE;此时玩家不能在下棋,电脑开始下棋,电脑下完棋后m_IsManOrder=TRUE人又可以下棋。
这样就实现了人机交替下棋。
(3)倒计时功能
通过SetTimer(1,1000,NULL);函数每1秒响应一次OnTimer,定时器标号为1。
通过KillTimer
(1);关闭1号定时器。
倒计时有四种可选项:
OnLevtime1()、OnLevtime2()、OnLevtime3()、OnNotime()这四个函数分别对应30秒、一分钟、五分钟和不限时这四种情况。
在voidCMyView:
:
OnTimer(UINTnIDEvent)函数中,当时间<=10秒时,开始读秒。
并当时间减少至0是判定玩家输。
(4)坐标显示
实现显示上一步坐标功能比较简单,直接根据和来决定输出的坐标。
只是当时直接输出数字即可,但时要用switch()转换一步,将数字对应的字母A~O输出即可
面向对象设计
CAboutDlg继承了CDialog类。
对话框有两类:
模态对话框和非模态对话框。
模态对话框在应用继续进行之前必须关闭。
非模态对话框允许用户执行另外的操作而不必取消或删除该对话框
一个CDialog对象是对话框模板与一个CDialog派生类的组合。
使用对话框编辑器创建对话框并存入资源之中,然后使用ClassWizard创建一个CDialog派生类。
同其它窗口一样,对话框从Windows中获取信息。
在对话框中会对来自对话框控件的处理消息感兴趣,因为它说明了对话框是如何与用户交互的。
ClassWizard观察对话框每个控件可能产生的消息,可以选择你所希望处理的消息。
ClassWizard将适当的消息映射器入口和消息处理成员函数加到一个新类中。
图2.1CAboutDlg类图
CMyApp继承了CWinApp类。
通过它来继承Windows应用程序对象。
应用程序对象提供了初始化应用程序(以及它的每一个实例)和运行应用程序所需的成员函数。
每个使用微软基础类库的应用程序都只能包含一个从CWinApp继承的对象。
当Windows调用WinMain函数时,这个对象在其它C++全局对象都已经生成并且可用之后才被创建,WinMain函数是由微软基础类库提供的。
将CWinApp对象定义为全局的。
当从CWinApp继承应用程序类的时候,应重载InitInstance成员函数以创建应用程序的主窗口对象。
图2.2CMyApp类图
图2.3CMyView类图
整体UML类图如下:
图2.4整体的UML类图
总体流程图
主循环控制模块:
控制下棋顺序,当轮到某方下子时,负责将程序转到相应的模块中去,主要担当一个调度者的角色。
这个五子棋程序是用键盘控制下棋。
五子棋流程图如2.5所示
开始
白方下子
判断该位置是否有棋
找另一位置
白方下子
判断白方是否胜出
跳出白方胜出
黑方下子
判断该位置是否有棋
找另一位置
黑方下子
判断黑方是否胜出
跳出黑方胜出
有
是
否
是
有
无
选择是否重新开局
游戏结束
是
图五子棋的流程图
2.2.3类成员描述
核心类ClassCMyView()函数成员及其主要功能简介:
CMyView:
:
CMyView()构造函数,初始化数据
CMyView:
:
~CMyView()析构函数
BOOLCMyView:
:
PreCreateWindow(CREATESTRUCT&cs)生成窗口
voidCMyView:
:
OnDraw(CDC*pDC)设置底色,插入棋盘图片,画棋子(黑、白),显示剩余时间//显示横纵坐标(落子位置)
在MFC的发行版本中,ASSERT_VALID什么也不做。
在调试版本中,它检验一个指针是否为NULL,并且调用对象自己的AssertValid成员函数。
如果这些测试中有些失败了,它就按照与ASSERT相同的方式显示一个警告信息。
voidCMyView:
:
(CDumpContext&dc)const
CMyDoc*CMyView:
:
GetDocument()//non-debugversionisinline
voidCMyView:
:
OnGameStart()//游戏一开始的一些初始化和设置
voidCMyView:
:
OnGameOver()//游戏结束后的一些操作和设置
voidCMyView:
:
OnHelp()//帮助
源码分析
(1)初始化棋盘:
判断哪方先开始,
(2)初始化计算机和玩家的获胜组合情况
boolctable[15][15][572],boolptable[15][15][572]
voidCMyChessDlg:
:
InitializeBoard()
{//初始时双方都还没下子
inti,j,count=0,k;
m_pclastpos.x=-1;
m_pclastpos.y=-1;
m_pplastpos.x=-1;
m_pplastpos.y=-1;
start=true;//判断哪方先开始
if(m_bwfirst)
{
player=false;
computer=true;
}
else{
player=true;
computer=false;
}
pwin=cwin=false;//初始化计算机和玩家的获胜组合情况
for(i=0;i<15;i++)
for(j=0;j<15;j++)
for(k=0;k<572;k++){
ptable[i][j][k]=false;
ctable[i][j][k]=false;
}
for(i=0;i<2;i++)
for(j=0;j<572;j++)
win[i][j]=0;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
board[i][j]=2;
for(i=0;i<15;i++)
for(j=0;j<11;j++){
for(k=0;k<5;k++)
{
ptable[j+k][i][count]=true;
ctable[j+k][i][count]=true;
}
count++;
}
for(i=0;i<15;i++)
for(j=0;j<11;j++){
for(k=0;k<5;k++){
ptable[i][j+k][count]=true;
ctable[i][j+k][count]=true;
}
count++;
}
for(i=0;i<11;i++)
for(j=0;j<11;j++){
for(k=0;k<5;k++){
ptable[j+k][i+k][count]=true;
ctable[j+k][i+k][count]=true;
}
count++;
}
for(i=0;i<11;i++)
for(j=14;j>=4;j--){
for(k=0;k<5;k++){
ptable[j-k][i+k][count]=true;
ctable[j-k][i+k][count]=true;
}
count++;
}}
(3)给出下了一个子后的分数:
intCMyChessDlg:
:
GiveScore(inttype,intx,inty)
{
inti,score=0;
for(i=0;i<572;i++){//计算机下
if(type==1){
if(ctable[x][y][i]){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 五子棋游戏论文 五子棋 游戏 论文