中国象棋游戏开发设计报告

中国象棋游戏开发设计报告
班级:                         
小组编号:                             
小组成员:             
指导老师:                             

一、开发的目的和意义
面向对象程序设计作为一门软件设计的课程,具有极强的实践性,要求学生具备灵活应用理
论知识的能力及面向对象程序设计技能的基础。通过游戏开发,学生能了解C++面向对象的设计方法与技巧,有效地、深刻地理解课程内容,体会理论、方法和设计原则,培养分析实际问题和解决问题的能力,具备使用面向对象程序设计开发工具设计实际系统的能力。还能够了解并通过使用MFC,掌握一种可视化编程的方法,并通过游戏的开发加深对可视化编程的理解。同时,可以提高运用C++编程语言解决实际问题的能力。
属于休闲类游戏,具有上手快、游戏时间短的特点,更利于用户进行放松休闲,为人们所喜爱,特别是棋类游戏,方便、快捷、操作简单,在休闲娱乐中占主要位置。中国象棋作为中国自古以来的经典之一,一直都是人之间的较量,将中国象棋制作成游戏,可以实现人与计算机之间的对弈。而且人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。开发出了计算机象棋游戏,以后不仅仅可以进行休闲游戏,还能锻炼自己的智力和象棋技术,更加方便了人们的日常生活。
二、功能描述和分析(用户需求分析)
开发背景
我们周围有许多同学喜欢下象棋,尤其是男同学,希望能有人可以和自己下象棋,但这种意愿常因为受到条件的限制而难以如愿,比如说需要身边刚好有现成的棋盘棋子,比如说需要是同样懂得中国象棋的对手,但是大家都知道我们这所大学男性同学占少数,即便是条件都满足了,还要考虑这位对手是否有何自己下棋的心情。 这时,如果有一台计算机,一个能够支持人机对弈的程序,上面的问题迎刃而解。
而我们小组的这个想起游戏设计,正是希望能够做出一款拥有良好性能,良好的智能,能够满足大多数爱好象棋的同学的需求中国象棋人机对弈程序。
用户需求分析
一款能够与用户对弈,满足用户需求的中国象棋程序,需要有棋盘棋子的局面、鼠标响应控制棋子移动、棋子的走法规则、人机对弈的搜索算法、避免异常引入的多线程、胜负判断,具体分析如下:
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判断胜负
游戏需要判断最后由谁胜出
三、采用的开发工具和技术,开发环境,适用环境
开发工具:Visual C++ MFC工程;
开发环境:win7;
厕所除臭机
适用环境:windows系统;
四、小组成员分工
初始化、局面设计部分(贺景);
判断胜负、棋子走法部分(邹京甫);
鼠标响应、绘图部分(吴鑫);
涂布刮刀搜索引擎部分等由组员共同完成。
五、具体开发方法和过程
初始化部分
OnInitDialog()负责的是对话框的初始化。可以把有关中国象棋的棋局初始化情况也放在了这里面。初始化的内容包括:
对引擎部分所用到的变量的初始化。包括对棋盘上的棋子位置进行初始化(棋盘数组的初
始化),对搜索深度、当前走棋方标志、棋局是否结束标志等的初始化;
对棋盘、棋子的贴图位置(即棋盘、棋子在程序中实际显示位置)的初始化;
对程序辅助部分所用到的一些变量的初始化。棋盘、棋子样式的默认形式,以及着法名称列表的初始化等。
1.对棋盘的初始化memcpy(m_byChessBoard,InitChessBoard,90);
2.对棋盘、棋子的贴图位置(即棋盘、棋子在程序中实际显示位置)的初始化;(&pOldBmp);程序辅助部分所用到的一些变量的初始化
喷嘴清洗棋盘、棋子样式的默认形式,下棋模式的默认选择,以及着法名称列表的初始化等。
初始化部分的代码如下:
BOOL CChessDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    ." menu item to system menu.
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
重结晶碳化硅    CMenu* pSysMenu = GetSystemMenu(FALSE);
沙袋填充物
    if (pSysMenu != NULL)
    {
        CString strAboutMenu;
        (IDS_ABOUTBOX);

本文发布于:2024-09-22 07:30:32,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/220072.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:棋子   游戏   棋盘   程序   中国象棋   移动   设计
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议