中国象棋游戏开发设计报告Word下载.doc

上传人:b****9 文档编号:13064004 上传时间:2022-10-04 格式:DOC 页数:18 大小:626.50KB
下载 相关 举报
中国象棋游戏开发设计报告Word下载.doc_第1页
第1页 / 共18页
中国象棋游戏开发设计报告Word下载.doc_第2页
第2页 / 共18页
中国象棋游戏开发设计报告Word下载.doc_第3页
第3页 / 共18页
中国象棋游戏开发设计报告Word下载.doc_第4页
第4页 / 共18页
中国象棋游戏开发设计报告Word下载.doc_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

中国象棋游戏开发设计报告Word下载.doc

《中国象棋游戏开发设计报告Word下载.doc》由会员分享,可在线阅读,更多相关《中国象棋游戏开发设计报告Word下载.doc(18页珍藏版)》请在冰豆网上搜索。

中国象棋游戏开发设计报告Word下载.doc

二、功能描述和分析(用户需求分析)

2.1开发背景

我们周围有许多同学喜欢下象棋,尤其是男同学,希望能有人可以和自己下象棋,但这种意愿常因为受到条件的限制而难以如愿,比如说需要身边刚好有现成的棋盘棋子,比如说需要是同样懂得中国象棋的对手,但是大家都知道我们这所大学男性同学占少数,即便是条件都满足了,还要考虑这位对手是否有何自己下棋的心情。

这时,如果有一台计算机,一个能够支持人机对弈的程序,上面的问题迎刃而解。

而我们小组的这个想起游戏设计,正是希望能够做出一款拥有良好性能,良好的智能,能够满足大多数爱好象棋的同学的需求中国象棋人机对弈程序。

2.2用户需求分析

一款能够与用户对弈,满足用户需求的中国象棋程序,需要有棋盘棋子的局面、鼠标响应控制棋子移动、棋子的走法规则、人机对弈的搜索算法、避免异常引入的多线程、胜负判断,具体分析如下:

2.2.1棋盘棋子的局面

作为中国象棋的这项游戏,其必不可少的是就是棋子和棋盘,没有这两个部分,想起功能无法实现,不仅仅如此,如果,仅仅有棋子和棋盘,而没有将两者结合起来,那么,也将无法实现中国象棋的游戏功能,所以,棋子和棋盘的设计在这个游戏设计中至关重要。

2.2.2鼠标响应

在对弈中,棋子是必须可以移动的,不然游戏无法进行。

因此,鼠标左键点击是必不可少的一部分。

2.2.3棋子的功能分析:

中国象棋中各色的象棋棋子的功能使象棋具有了真正的趣味性,中国象棋的棋子的类型大致分为:

帅(将)、士、象、马、车、炮、兵(卒)等几个类型。

帅(将):

红方中的帅和黑方中的将的功能相同,都是只能在九宫格中进行横向和竖向的移动,每次移动一格,并且不能移动超出九宫格,帅和将不能见面。

士:

士在整片棋盘中,和帅的移动范围类似,也是只能在九宫格中移动,不过士的移动方向是对角线,并且每次只能在一个格子中移动。

象:

象的走法遵循“象走田”的原则,不能绊象腿。

马:

马的走法遵循“马走日”的原则,不能绊马腿。

车:

在整块棋盘中,车可以横向或纵向3移动任意格。

炮:

每次移动和车的类似,但是在吃对方棋子的时候必须中间有且只能有一个棋子的间隔。

兵(卒):

红方的兵和黑方的卒的功能相同,特点是只能向对方前进,而不能后退,过河之前不能横向移动,过河之后可以横向移动,不管是前进还是横向移动,每次都只能移动一格。

2.2.4良好的人机对弈

要实现人机的对弈,搜索算法是很重要的一部分。

关于棋类对弈程序中的搜索算法,已有成熟的Alpha-Beta搜索算法。

我们在程序中直接借鉴了Alpha-Beta搜索算法并辅以历史启发。

Alpha-Beta搜索算法:

在中国象棋里,双方棋手获得相同的棋盘信息。

他们轮流走棋,目的就是吃掉对方的将或帅,或者避免自己的将或帅被吃。

搜索算法的搜索过程很漫长,因此对搜索算法进行简化是有必要的。

2.2.5多线程的必要性

由于程序在进行搜索时会占用大量的CPU时间,因而阻塞了位于同一线程内的其他指令,使之无法正常工作,因而引入了多线程的思想另外开一个线程,让各程序分开于多个线程。

就可以解决程序异常的问题了,因此,多线程思想的引入是有必要的。

2.2.6判断胜负

游戏需要判断最后由谁胜出

三、采用的开发工具和技术,开发环境,适用环境

开发工具:

VisualC++MFC工程;

开发环境:

win7;

适用环境:

windows系统;

四、小组成员分工

初始化、局面设计部分(贺景);

判断胜负、棋子走法部分(邹京甫);

鼠标响应、绘图部分(吴鑫);

搜索引擎部分等由组员共同完成。

五、具体开发方法和过程

5.1初始化部分

OnInitDialog()负责的是对话框的初始化。

可以把有关中国象棋的棋局初始化情况也放在了这里面。

初始化的内容包括:

对引擎部分所用到的变量的初始化。

包括对棋盘上的棋子位置进行初始化(棋盘数组的初始化),对搜索深度、当前走棋方标志、棋局是否结束标志等的初始化;

对棋盘、棋子的贴图位置(即棋盘、棋子在程序中实际显示位置)的初始化;

对程序辅助部分所用到的一些变量的初始化。

棋盘、棋子样式的默认形式,以及着法名称列表的初始化等。

1.对棋盘的初始化memcpy(m_byChessBoard,InitChessBoard,90);

2.对棋盘、棋子的贴图位置(即棋盘、棋子在程序中实际显示位置)的初始化;

MemDC.SelectObject(&

pOldBmp);

//恢复内存Dc的原位图

3.对程序辅助部分所用到的一些变量的初始化

棋盘、棋子样式的默认形式,下棋模式的默认选择,以及着法名称列表的初始化等。

初始化部分的代码如下:

BOOLCChessDlg:

:

OnInitDialog()

{

CDialog:

OnInitDialog();

//Add"

About..."

menuitemtosystemmenu.

//IDM_ABOUTBOXmustbeinthesystemcommandrange.

ASSERT((IDM_ABOUTBOX&

0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<

0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

{

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty())

{

pSysMenu->

AppendMenu(MF_SEPARATOR);

AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

SetIcon(m_hIcon,TRUE);

//Setbigicon

SetIcon(m_hIcon,FALSE);

//Setsmallicon

//彩色进度条设置

m_progressThink.SetStartColor(RGB(0xFF,0xFF,0x00));

//黄色

m_progressThink.SetEndColor(RGB(0x00,0x93,0x00));

//绿色

m_progressThink.SetBkColor(RGB(0xE6,0xE6,0xFA));

//淡紫色

m_progressThink.SetTextColor(RGB(0,0,255));

m_progressThink.ShowPercent

(1);

m_tooltip.Create(this);

m_tooltip.Activate

(1);

m_Chessman.Create(IDB_CHESSMAN,36,14,RGB(0,255,0));

//创建含有棋子图形的ImgList,用于绘制棋子

//下面这段代码取棋盘图形的宽,高

BITMAPBitMap;

m_BoardBmp.LoadBitmap(IDB_CHESSBOARD);

m_BoardBmp.GetBitmap(&

BitMap);

//取BitMap对象

m_nBoardWidth=BitMap.bmWidth;

//棋盘宽度

m_nBoardHeight=BitMap.bmHeight;

//棋盘高度

m_BoardBmp.DeleteObject();

memcpy(m_byChessBoard,InitChessBoard,90);

//初始化棋盘

memcpy(m_byShowChessBoard,InitChessBoard,90);

memcpy(m_byBackupChessBoard,InitChessBoard,90);

m_pSE->

SetSearchDepth(3);

//设定搜索层数为3

SetMoveGenerator(m_pMG);

//给搜索引擎设定走法产生器

SetEveluator(m_pEvel);

//给搜索引擎设定估值核心

SetUserChessColor(m_nUserChessColor);

//设定用户为黑方或红方

SetThinkProgress(&

m_progressThink);

//设定进度条

m_MoveChess.nChessID=NOCHESS;

//将移动的棋子清空

returnTRUE;

//returnTRUEunlessyousetthefocustoacontrol

}

5.2局面设计

游戏设计中,我们的象棋棋盘采用的是直接加载位图生成棋盘,图片的大小是宽度377*高度417,棋盘上每个格子的大小:

39*39,图片格式为:

BMP。

棋子部分是通过加载位图实现的,图片的大小是:

宽度32*高度32,图片的格式也是BMP。

我们用一个10*9的数组来存储棋盘上的信息,数组的每个元素存储棋盘上是否有棋子。

棋盘的初始情形如下所示(图1是整个棋盘与棋子的局面图):

constBYTEInitChessBoard[10][9]=

{B_CAR,B_HORSE,B_ELEPHANT,B_BISHOP,B_KING,B_BISHOP,B_ELEPHANT,B_HORSE,B_CAR},

{NOCHESS,NOCHESS,NOCHESS,NOCHESS,NOCHESS,NOCHESS,NOCHESS,NOCHESS,NOCHESS},

{NOCHESS,B_CANON,NOCHESS,NOCHESS,NOCHESS,NOCHESS,NOCHESS,B_CANON,NOCHESS},

{B_PAWN,NOCHESS,B_PAWN,NOCHESS,B_PAWN,NOCHESS,B_PAWN,NOCHESS,B_PAWN},

{NOCHESS,NOCHESS,NOCHESS,NOCHESS,NOCHES

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

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1