MFC课程设计五子棋汇编Word文件下载.docx

上传人:b****2 文档编号:4994655 上传时间:2023-05-04 格式:DOCX 页数:44 大小:56.54KB
下载 相关 举报
MFC课程设计五子棋汇编Word文件下载.docx_第1页
第1页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第2页
第2页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第3页
第3页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第4页
第4页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第5页
第5页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第6页
第6页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第7页
第7页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第8页
第8页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第9页
第9页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第10页
第10页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第11页
第11页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第12页
第12页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第13页
第13页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第14页
第14页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第15页
第15页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第16页
第16页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第17页
第17页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第18页
第18页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第19页
第19页 / 共44页
MFC课程设计五子棋汇编Word文件下载.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

MFC课程设计五子棋汇编Word文件下载.docx

《MFC课程设计五子棋汇编Word文件下载.docx》由会员分享,可在线阅读,更多相关《MFC课程设计五子棋汇编Word文件下载.docx(44页珍藏版)》请在冰点文库上搜索。

MFC课程设计五子棋汇编Word文件下载.docx

1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;

2.基本掌握面向对象程序设计的基本思路和方法;

3.掌握用VC++开发应用程序的的一般步骤和方法;

4.能够利用所学的基本知识,设计一个简单的五子棋游戏,具有以下功能:

①数据结构的设计;

五子棋棋盘的绘制。

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

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

1.2设计要求

用VS2010进行编码,实现应用程序的功能。

注重编码质量,代码要有适当的注释;

提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。

游戏规则:

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

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

程序功能模块

棋局的绘制、保存、和AI三大块

1.3软件、硬件环境

软件:

Windows10操作系统,MicrosoftVisualstudio2010

硬件:

Inter(R)Core(TM)i5-4200HCPU@3.40GHz

2.课程设计步骤

新建单文档程序Gobang_FiveChess

接着就是定义变量了,但是,由于这个游戏要添加的变量和函数太多了,我们要建一个新类。

是否应该先添加应该类呢?

最好是这样。

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

添加普通类CChess

classCChess

{

public:

CChess(void);

~CChess(void);

voidInit(CRectrect);

voidDraw(CDC*pDC);

//画棋局

voidSetPiecePos(CPointptCurrent);

//设置当前棋子的位置下棋函数

voidNewGame();

//新游戏

BOOLRegret();

//悔棋

voidSetVSMode(enumVSModeemVSMode);

//设置对战模式enumVSMode

voidSetAIDepth(intemAIDepth);

//设置AI智能程度

enumWinFlagGetWinFlag();

//获取输赢状况

CRectGetRectBoard();

//获取棋盘区域

private:

enumChessColorm_iPositionPiece[COLUMNS][ROWS];

//棋子的信息

CChessDrawm_chessdraw;

//棋局绘制类

CRectm_rcBoard;

//棋盘区域

CPointm_ptCurrent;

//棋子当前位置

enumWinFlagm_emWin;

//输赢状况

enumVSModem_emVSMode;

//对战模式

STC_REGRETm_stcLastPos;

//记录最近一次的下棋位置

BOOLm_bTurnBlack;

//是否轮到黑方下棋

intm_emAIDepth;

//AI智能程度为方便外部调用SetAIDepth(),所以设为了int类型

BOOLIsWin(UINTuiCol,UINTuiRow,enumChessColoremChessColor);

//在第uiCol列第uiRow行,判断是否结束,若结束则返回TRUE

BOOLGetBestPosByAI(UINT&

uiCol,UINT&

uiRow,enumChessColoremEnemyChessColor=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);

}

画图函数:

voidCChess:

Draw(CDC*pDC)

CMyMemDCmemDC(pDC);

m_chessdraw.SetDC(memDC);

m_chessdraw.DrawBackground();

m_chessdraw.DrawBoard();

//-----------------------重画整个棋局-----------------------

if(FIGHTING==m_emWin)//没分胜负时才允许改变m_emWin的状态

{

m_emWin=PEACE;

}

for(inti=0;

i<

COLUMNS;

i++)

for(intj=0;

j<

ROWS;

j++)

{

if(NONE!

=m_iPositionPiece[i][j])

{

m_chessdraw.DrawPiece(i,j,BLACK==m_iPositionPiece[i][j]);

}

elseif(PEACE==m_emWin)

m_emWin=FIGHTING;

//若有空位,则还可以继续,否则平局,即m_emWin=PEACE;

}

m_chessdraw.DrawPieceCur(m_ptCurrent.x,m_ptCurrent.y);

//标记当前棋子

下棋函数:

SetPiecePos(CPointptCurrent)

if(FIGHTING!

=m_emWin)

return;

//没分胜负时才允许改变m_ptCurrent的状态

UINTuiPosX,uiPosY;

if(!

m_chessdraw.GetCoordinateWithPoint(ptCurrent,&

uiPosX,&

uiPosY))

return;

//不在棋盘内的位置不做处理

}

if(NONE!

=m_iPositionPiece[uiPosX][uiPosY])

//已有棋子的位置不做处理

2;

{

m_iPositionPiece[uiPosX][uiPosY]=m_bTurnBlack?

BLACK:

WHITE;

//-----------------------------------判断输赢-----------------------------------

if(IsWin(uiPosX,uiPosY,m_iPositionPiece[uiPosX][uiPosY]))

m_ptCurrent=CPoint(uiPosX,uiPosY);

//已分出胜负

}

//-----------------------------------记录上一次的棋子位置-----------------------------------

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);

else

m_stcLastPos.ptWhite=CPoint(uiPosX,uiPosY);

m_stcLastPos.iPieceNum++;

//-----------------------------------轮到白方下棋-----------------------------------

m_bTurnBlack=!

m_bTurnBlack;

if((!

m_bTurnBlack&

GetBestPosByAI(uiPosX,uiPosY,(!

m_bTurnBlack)?

WHITE))

if(PERSON_VS_PERSON==m_emVSMode)

break;

//如果是人人对战,则退出循环

enumWinFlagCChess:

GetWinFlag()

returnm_emWin;

悔棋函数:

OOLCChess:

Regret()

if((m_stcLastPos.iPieceNum>

0)&

(FIGHTING==m_emWin))//如已分出胜负,则不再允许悔棋

//只允许悔一步

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)

m_bTurnBlack)

returnTRUE;

returnFALSE;

设置对战模式:

SetVSMode(enumVSModeemVSMode)

m_emVSMode=emVSMode;

SetAIDepth(intemAIDepth)

m_emAIDepth=emAIDepth;

3.课程设计内容

3.1概要设计

游戏的操作方面主要以鼠标点击为主,鼠标点击方格里面进行落子操作。

选择人人对战,人机对战(选择对战难度),五子连棋时就判断白方或者黑方胜利。

3.1.1程序总体框架描述

3.1.2本项目主要有棋局绘制、棋局功能、机器AI三个类,主要源码文件如下图

3.2主要技术

1.界面的设置

2.下棋处理函数;

3.视图框架设置;

4.机器AI算法。

5.功能的设置。

3.3系统设计结果(界面截图、操作流程)

1.界面截图:

此为困难级别,白色为机器方。

操作流程图

4.设计总结

4.1遇到的问题及如何解决

随着五子棋游戏的开发完成,本游戏中预期的主要功能也基本实现。

本系统以Visualstudio2010作为前台开发工具,Visualstudio2010以简单、易用等优点成为开发本系统的首选工具。

本论文阐述了五子棋游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。

五子棋游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。

这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。

由于我学习Visualstudio2010和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,

在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;

在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;

对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;

完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查没有找到语句或定义错误,后来发现是电脑问题,我在任务管理器中结束wkh.exe。

再次链接,错误就消除了。

4.2体会

在五子棋游戏中有些功能还不够完善,例如在五子棋游戏中不能实现游戏的保存和声音的添加。

希望在以后的工作和学习中不断的充实自己的知识结构,把扫雷游戏的功能进一步完善,使它成为一个更具有实用价值的游戏软件,同时也恳请老师给予批评指正。

5.源代码

~CChess(void)

NewGame();

NewGame()

if(MACHINE_VS_MACHINE==m_emVSMode)

CPointptFirst;

srand(time(NULL));

ptFirst.x=rand()%COLUMNS;

ptFirst.y=rand()%ROWS;

m_chessdraw.GetPointWithCoordinate(ptFirst,ptFirst.x,ptFirst.y);

SetPiecePos(ptFirst);

Init(CRectrect)

m_chessdraw.InitBoard(rect,COLUMNS,ROWS,rect.Height()/ROWS,rect.Height()/ROWS/2-2);

m_rcBoard=m_chessdraw.GetRectBoard();

CRectCChess:

GetRectBoard()

returnm_rcBoard;

BOOLCChess:

IsWin(UINTuiCol,UINTuiRow,enumChessColoremChessColor)

{

intiSameColor[MA

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

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2