十大羊奶粉排行榜-
姓名:熊闯
课题名称:五子棋游戏系统的开发
软
件
学
院
三级课题报告
课题名称:
五子棋游戏
专
业:
网络软件开发
班
级:
RB
软件
122
学
号:
2
学生姓名:
熊闯
2014
年
03
月
中原工学院软件学院
姓名:熊闯
课题名称:五子棋游戏系统的开发
三
级
实
践< br>课
题
设
计
任
务
书
姓
名
熊闯
软件工程(网络软件开发方向)专业
RBW122
班
题
目
五子棋游戏系统的开发
开发一个比较完善的基于
Visual C++MFC
的五子棋系统,
为我们 提供一个业
余娱乐的平台。主要功能包括:
1.
能使用鼠标进行走棋动作,并且能区分博弈双方的棋子。
2.
能正确判断胜利或失败。
3.
能正确判断走棋是否正确,是否会引起游戏结束。
设
计
任
务
4.
可以选择对弈的类型,即是与计算机对弈还是两个人在同台计算机上对弈的。
5.
可以选择落子的先后顺序。
6.
可以进行悔棋操作。
7.
可以进行游戏暂停,继续及窗口移动,最小化等操作。
8.
可以进行数据的读写,查询,统计分析等操作。
9.
能进行音效的设置。
10.
游戏进行中信息的及时更新与显示。
开发工具:
Vissual C++6.0,
SQL
语言
第
1
周(
14-02-24~14- 03-02
)
:主要任务是对数据结构设计,系统详细设计。
时
间
进
度
第
2
周(
14-03-03~14-03-09
)
:进行各模块的详细设计。
第3
周(
14-03-10~14-03-16
)
:系统整合、系统验收、 撰写总结报告。
原
主
马石安、
魏文平
.Vissual C++
程序设计与应用教程
(第二版)
[M]:
清华大学出版社
.
始
要
资
参
2011.3
料
考
与
文
献
指导教师签字:
年
月
日
姓名:熊闯
课题名称:五子棋游戏系统的开发
五子棋游戏系统的开发
摘
要
C++
语言是一种面向对象的语言,< br>,尽管在当前,可视化语言发展速度,普及很快,但
c++
语言作为一种基础的语言,它 的优势依旧存在,甚至有时它是不可替代的,特别是和
硬件接口技术相联系的软件。
五子棋游戏是一种简单大众的游戏,
自从计算机实现以来,
深受广大电脑玩极大喜爱,
传统的五子棋游戏功能相对单一,
为了更好的解剖大型
Windows
应用程序编程思 想,
本实
例加入了一些比较高级的功能,比如,人工智能(
AI
)的应用序列 化方式以及对文件的保
存与打开,数据库的操作等,因而这些实例应用程序要比传统的五子棋游戏要复杂 一些,
从上面的介绍功能可知,本程序的主要任务是实现游戏进行过程中各种状态参数的保存与
实时更新,并且能够把这些更新所引起的变化反映到界面上。
关键词:
c++
;
面向对象;
SQL
I
姓名:熊闯
课题名称:五子棋游戏系统的开发
目
录
摘
要
.
.............................................. .................................................. .............................................
I
第
1
章
功能描述
................................................. .................................................. ........................ 1
第
2
章
系统分析
.
............................ .................................................. ............................................ 3
2.1
实例分析
.
..................... .................................................. .................................................. ..... 3
2.2
计算机的决策方式
.
..... .................................................. .................................................. ..... 3
第
3
章
程序流程图
.
............................................. .................................................. ....................... 4
第
4
章
数据结构设计
.
.......................... .................................................. ...................................... 5
4.1
C
MANAGER
类
.
... .................................................. .................................................. ................ 5
4.1.1
类的定义
.................................................. .................................................. ................... 5
4.1.1
数据结构初始化
.................................. .................................................. ....................... 6
4.2
C
STATUS
类
......................... .................................................. ................................................. 7
4.2.1
类的定义
................. .................................................. .................................................. .. 7
4.2.2
数据结构初始化
........... .................................................. .............................................. 8
4.2.3
成员函数的实现
.............. .................................................. ........................................... 8
4.3
CC
HESS
类
.............. .................................................. .................................................. ........... 9
4.3.1
类的定义
..... .................................................. .................................................. ............ 10
4.3.2
数据结构初始化
.................................................. .................................................. ..... 10
4.3.3
成员函数的实现
....... .................................................. ................................................ 10
4.4
CP
LAYER
类
...... .................................................. .................................................. ............... 11
4.4.1
类的定义
.................................................. .................................................. ................. 11
4.4.2
数据结构初始化
.................................. .................................................. ..................... 11
4.5
CC
OMPUTER
类
.
.............. .................................................. .................................................. . 12
4.5.1
类的定义
.............. .................................................. .................................................. ... 12
4.5.2
数据结构初始化
......... .................................................. .............................................. 13
第
5
章
结束语
.
.. .................................................. .................................................. ...................... 17
附录
B:
主要源程序
.
........................... .................................................. ...................................... 19
姓名:熊闯
课题名称:五子棋游戏系统的开发
第
1
章
功能描述
本实例为传统的五子棋游戏, 它除了具有其他黑子和白子博弈游戏的基本功能外,还
具有一些较高级的功能具体如下:
1.
能使用鼠标进行走棋动作,并且能区分博弈双方的棋子。
2.
能正确判断胜利或失败。
3.
能正确判断走棋是否正确,是否会引起游戏结束。
4.
可以选择对弈的类型,即是与计算机对弈还是两个人在同台计算机上对弈的。
5.
可以选择落子的先后顺序。
6.
可以进行悔棋操作。
7.
可以进行游戏暂停,继续及窗口移动,最小化等操作。
8.
可以进行数据的读写,查询,统计分析等操作。
9.
能进行音效的设置。
10.
游戏进行中信息的及时更新与显示。
本实例应用程序运行界面如图< br>1.1
所示,该应用程序为单文档类型,整个窗口区域分
为左右两个部分。左窗口为显示 区,显示棋盘、普通棋子等;有窗口为操作区,从上自下
分为游戏设置、姓名输入、状态显示、耗时显示 以及功能按钮
5
个区。为了更方便游戏的
操作、更准确跟踪游戏进行的状态,应用程序 带有菜单项、工具栏及文档栏。
“文件”主
菜单实现文件的保存、文件的打开及游戏的重新开始 等操作,
“编辑”菜单用来进行悔棋
等,
“查看”菜单中有用于查询历次游戏的详细信 息及进行排名等,
“操作”菜单的功能与
有窗口各按钮功能相同。工具栏上的按钮与各主要菜单 项相关联,状态栏前半部分为用户
正在进行的操作功能说明,后半部分为游戏进行状态显示,包括对弈双 方姓名,目前中手
数以及日期时间等信息。
1
姓名:熊闯
课题名称:五子棋游戏系统的开发
图
1.1
五子棋游戏界面
2
姓名:熊闯
课题名称:五子棋游戏系统的开发
第
2
章
系统分析
从上面介绍的功能可知,本应 用程序的主要任务实现游戏进行程序中各状态参数的保
存于实时更新所引起的变化反映到界面上。所以系 统分析又分为实例分析和计算机的决策
方式。
2.1
实例分析
< br>一个游戏需要分为内核和界面两个部分,
界面为用户操作提供便利。
本实例游戏是
2D
的,而且整个界面简单,所以使用了适合商业软件的
GDI
绘图且使用
MFC
AppWizard
单
文档作为游戏的主界面,
并对界面进行合适的 分区与修饰,
以使整个布局更加和谐、
美观、
操作简单。
传统的五 子棋游戏功能相对单一,为了更好的解剖大型
Windows
应用程序编程思想,
本实 例加入了一些比较高级的功能,比如,人工智能(
AI
)的应用序列化方式以及对文件
的保存与打开,数据库的操作等,因而这些实例应用程序要比传统的五子棋游戏要复杂一
些。纵观整个过 程需要协调的物理对象主要有棋盘、棋子、人、计算机等,这些对象通过
一些数据进行关联,从而形成某 时刻可以种特殊的局面,或称棋局。因而,应用程序只要
对这些数据进行控制,从而就很好的管理整个棋 局。为此,我们设置了
5
个类
Cmanager
、
Cstatus< br>、
Cplayer
、
Ccomputer
和
Cchess,< br>分别代表管理者、数据、人、计算机和棋子。
本实例应用程序为单机运行,故主要是用 户与计算机对弈。下面先介绍计算机在游戏
过程中的决策方式。
2.2
计算机的决策方式
“当局者迷,
旁观者清”
,这句话用在由
AL
所控制的计算机选手上是不成立的,
相反,
计算机AL
必须要在每个回合下棋时都要能够知道有哪些获胜的方式,下一步是攻击还是
防守,并 计算算出每下一步棋到棋盘人一个子上的获胜几率,判断出最佳的落子位置。
3
姓名:熊闯
课题名称:五子棋游戏系统的开发
第
3
章
程序流程图
系统功能结构图如图
1-2
所示。
图
1-3
五子棋游戏系统功能结构图
五子棋
人
机
对
弈
两
人
对
岸弈
查
看
日
志
声
音
播
放
重
新
开
始
暂
停
继
续
悔
棋
4
姓名:熊闯
课题名称:五子棋游戏系统的开发
第
4
章
数据结构设计
根据面向对象 程序设计方法,结合上述系统分析中所描述的抽象模型,分别对个各类
进行详细设计。
4.1 Cmanager
类
该类是应用的核心类,主要用于对棋面状态数 据进行更新,并根据这些数据判断游戏
的下一个状态。比如游戏是否需要结束,是否有选手获胜等。类中 定义了
7
个数据成员,
用来保存某一时刻棋局的静态属性参数,包括对弈双方的获胜组 合表,每种获胜组合中目
前放入的棋子数等。类中除构造函数及析构函数外,另外定义了
7个成员函数,分别用来
实现改变状态参数,处理不同的对弈方式,判断胜负,播放声音以及完成序列 化等不同的
操作。由于该类中数据需要保存,所以将其基类指定为
Cobject
。其 成员属性及功能如表。
成员
P1table
与
p2table
Win
P1win
与
p2win
Over
Pause
Twoplayergame()
Withcomputergame()
Changeplayerstatus()
Judge()
Playmysound()
Opeator=()
Serialize()
功能
棋盘上的每一颗棋子是否在选手的获胜组合中
选手在各个获胜组合中所填入的棋子数
选手是否获胜
游戏是否结束
游戏是否暂停
两选手对弈
选手与计算机对弈
改变选手状态
判断是否获胜
播放声音
赋值运算符重载
序列化
4.1.1
类的定义
#include
#include
class CManager : public CObject
{
public:
CManager();
virtual ~CManager();
public:
BOOL p1table[15][15][572],p2table[15][15][572];//p1
为黑方
,p2
为白方
5
姓名:熊闯
课题名称:五子棋游戏系统的开发
int win[2][572];//0
为黑方
,1
为白方
BOOL p1win,p2win,over,pause;//p1
为黑方
,p2
为白方
public:
void TwoPlayerGame(CDC *pDC, CPoint point,CStatus* status,CChess *chess);
void
WithComputerGame(CDC
*pDC,
CChess*
playerChess,CChess*
computerChess,CStatus* status);
void ChangePlayerStatus(CChess* chess);
void Judge(CStatus& status);
void PlayMySound(UINT IDSoundRes);
CManager& operator=(CManager&);
virtual void Serialize(CArchive &ar);//
类
CManager
的序列化函数
DE CLARE_SERIAL(CManager)//
声明序列化类
CManager
};
4.1.1
数据结构初始化
CManager::CManager()
{
int i,j,k,count=0;
p1win=false;//
选手未获胜
p2win=false;
over=true;//
游戏未开始
pause=false;
//
选手的获胜组合中没有棋子
for(i=0;i<=1;i++)
for(j=0;j<572;j++)
win[i][j]=0;
//
棋盘上的每颗棋子是否在获胜组合中
for(i=0;i<15;i++)
for(j=0;j<15;j++)
for(k=0;k<572;k++)
{
p1table[i][j][k] = false;
p2table[i][j][k] = false;
}
//
水平方向
for(i=0;i<15;i++)
for(j=0;j<11;j++)
{
for(k=0;k<5;k++)
{
p1table[j+k][i][count] = true;
p2table[j+k][i][count] = true;
}
count++;
}
//
垂直方向
for(i=0;i<15;i++)
for(j=0;j<11;j++)
6
姓名:熊闯
课题名称:五子棋游戏系统的开发
{
for(k=0;k<5;k++)
{
p1table[i][j+k][count] = true;
p2table[i][j+k][count] = true;
}
count++;
}
//
右斜方向
for(i=0;i<11;i++)
for(j=0;j<11;j++)
{
for(k=0;k<5;k++)
{
p1table[j+k][i+k][count] = true;
p2table[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++)
{
p1table[j-k][i+k][count] = true;
p2table[j-k][i+k][count] = true;
}
count++;
}
}
4.2 Cstatus
类
该类用于管理对弈双 方选手属性,包括选手姓名拿子类型,本局获胜本局得分等。基
类为
Cobject
。 其成员属性及功能如表
13.4
所示
成员
Name
Chess type
Score
Winner
Operator=()
Serialize()
表
13.4Cplayer
类成员属性及功能
功能
选手姓名
执棋类型,执黑为
1
,执白为
2
得分
是否获胜,胜为
1
,负为
0
,平为
2
赋值运算符重载
序列化
4.2.1
类的定义
#include
7
姓名:熊闯
课题名称:五子棋游戏系统的开发
#include
class CStatus : public CObject
{
public:
CStatus();
virtual ~CStatus();
public:
CPlayer player[2];
int nWithComputer;//
与计算机为
1,
否则为
0
int cursor;//1
为黑、
2
为白、
0
为标准
int next;//
下一步落子操作,
0
为白、
1
为黑
int count;//
落子顺序号
int sound;//
音效状态,
1
为开、
0
为关
CChess chess[15][15];
public:
CStatus& operator=(CStatus&);
virtual void Serialize(CArchive &ar);//
类
CStatus
的序列化函数
DECLARE_SERIAL(CStatus)//
声明序列化类
Cstatus
};
4.2.2
数据结构初始化
CStatus::CStatus()
{
nWithComputer=1;//
与计算机对弈
next=1;//
黑方先落子
cursor=1;//
自定义黑方落子光标
count=0;
sound=1;
player[0].name=_T(
player[0].chessType=1;//
选手执黑先下
player[1].name=_T(
电脑
player[1].chessType=2;//
计算机执白后下
//
棋盘上
225
个落子点位的窗口坐标及棋盘坐标
for(int i=0;i<15;i++)
for(int j=0;j<15;j++)
{
chess[i][j].pointB.x=j;
chess[i][j].pointB.y=i;
chess[i][j].pointW.x=j*26+85;
chess[i][j].pointW.y=i*26+9;
}
}
4.2.3
成员函数的实现
CStatus& CStatus::operator=(CStatus& p)
{
int i,j;
for(i=0;i<15;i++)
8
姓名:熊闯
课题名称:五子棋游戏系统的开发
for(j=0;j<15;j++)
chess[i][j]=[i][j];
for(i=0;i<2;i++)
player[i]=[i];
nWithComputer=omputer;
cursor=;
next=;
count=;
sound=;
return* this;
}
void CStatus::Serialize(CArchive &ar)
{
if(ing())//
保存对象的数据
{
int i,j;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
chess[i][j].Serialize(ar);
for(i=0;i<2;i++)
player[i].Serialize(ar);
ar<
}
else
{
int i,j;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
chess[i][j].Serialize(ar);
for(i=0;i<2;i++)
player[i].Serialize(ar);
ar>>nWithComputer>>cursor>>next>>count>>sound;
}
4.3 CChess
类
该类用于管理棋子属性, 包括棋子类型,视图窗口坐标,棋盘坐标等。基类
Cobject,
成员属性及功能如图
13.3
所示。
成员
功能
Pointw
棋子在视图窗口中的坐标
Pointb
棋子在棋盘中的坐标
Type
棋子类型,
1
为黑子,
2
为白子
0
为空子
Num
落子顺序号空子为
0
Pointtostonepos(cpoint point)
棋子窗口号坐标装换为棋盘坐标
Pointtostonepos(int m,int n)
棋子棋盘坐标装换为窗口坐标
Operator=()
赋值运算符重载
Serialize()
序列化
表
Cchess
类成员属性及功能
9
姓名:熊闯
课题名称:五子棋游戏系统的开发
4.3.1
类的定义
class CChess : public CObject
{
public:
CChess();
virtual ~CChess();
public:
CPoint pointW;//
窗口位置
CPoint pointB;//
棋盘位置
int type;//1
为黑棋、
2
为白棋、
0
为空
int num;//
落子顺序号,空子为
0
public:
CPoint PointToStonePos(CPoint point);
CPoint PointToStonePos(int m,int n);
void DisplayStone(CDC* pDC,UINT IDResource,CPoint point);
CChess& operator=(CChess&);
virtual void Serialize(CArchive &ar);//
类
CChess
的序列化函数
DECLARE_SERIAL(CChess)//
声明序列化类
CChess
};
4.3.2
数据结构初始化
CChess::CChess()
{
type=0;
num=0;
}
4.3.3
成员函数的实现
CChess& CChess::operator=(CChess& p)
{
num=;
type=;
pointB=;
pointW=;
return* this;
}
void CChess::Serialize(CArchive &ar)
{
if(ing())
{
ar<
ar<
ar<
ar<
}
10
姓名:熊闯
课题名称:五子棋游戏系统的开发
}
else
{
ar>>num;
ar>>type;
ar>>pointB;
ar>>pointW;
}
4.4 CPlayer
类
该类用于管理对弈双方选手属性,包括选手姓名拿子类型,本局获 胜本局得分等。基
类为
Cobject
。其成员属性及功能如表
13.4所示
成员
Name
Chess type
Score
Winner
Operator=()
Serialize()
表
13.4Cplayer
类成员属性及功能
功能
选手姓名
执棋类型,执黑为
1
,执白为
2
得分
是否获胜,胜为
1
,负为
0
,平为
2
赋值运算符重载
序列化
4.4.1
类的定义
class CPlayer : public CObject
{
public:
CPlayer();
virtual ~CPlayer();
public:
CString name;
int chessType;//
执黑为
1,
白为
2
int score;
int winner;//1
胜
,0
负
,2
平
public:
CPlayer& operator=(CPlayer&);
virtual void Serialize(CArchive &ar);//
类
CPlayer
的序列化函数
DECLARE_SERIAL(CPlayer)//
声明序列化类
CPlayer
};
4.4.2
数据结构初始化
CPlayer& CPlayer::operator=(CPlayer& p)
{
chessType=ype;
name=;
score=;
winner=;
11
姓名:熊闯
课题名称:五子棋游戏系统的开发
return* this;
}
void CPlayer::Serialize(CArchive &ar)
{
if(ing())
{
ar<
ar<
ar<
ar<
}
else
{
ar>>chessType;
ar>>name;
ar>>score;
ar>>winner;
}
}
4.5 CComputer
类
该类用于选手与 计算机对弈是,处理计算机对落子位置判断等相关操作。其成员属性
及功能如表
13.5
所示
成员
Cgrades,pgrades
Cgrade,pgrade
Mat, nat
Mde,nde
Computer turn()
表
13.5Ccomputer
类成员属性及功能
功能
选手与计算机在棋盘空位置上的获胜
分数
选手与计算机的最高获胜分数
计算机攻击时的位置(棋盘坐标)
计算机防守时的位置(棋盘坐标)
确定计算机落子位置
4.5.1
类的定义
#include
#include
#include
class CComputer
{
public:
CComputer();
12
十大羊奶粉排行榜-
十大羊奶粉排行榜-
十大羊奶粉排行榜-
十大羊奶粉排行榜-
十大羊奶粉排行榜-
十大羊奶粉排行榜-
十大羊奶粉排行榜-
十大羊奶粉排行榜-
本文更新与2021-01-27 06:30,由作者提供,不代表本网站立场,转载请注明出处:http://www.xapfxb.com/yuer/429925.html
-
上一篇:基于android的中国象棋的设计与实现
下一篇:中老年人长期补钙好处