MFC课程设计———五子棋

  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)******************* 2.课程设计步骤

新建单文档程序Gobang_FiveChess

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

是否应该先添加应该类呢?最好是这样。因为新类将会涉及到变量。

添加普通类CChess

class 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); // 设置对战模式enumVSMode

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

}

}

相关文档
最新文档