c++课程设计报告

时间:2024.4.21

徐州师范大学物电学院

课程设计报告

称:  计算机程序设计实训     

       目:  AngryBirds记忆翻牌游戏 

级:  1141                 

名:  杨国栋                  

号:  11224024               

       期:  2013.12.28             

师:  赵纪平                 

物电学院教务部印制

说明:

1、报告中的第一、二、三项由学生在课程设计开始前填写,由指导教师指导并确认签字。

2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩,并填写成绩评定表。

3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。答辩小组成员应由2人及以上教师组成。答辩后学生根据答辩情况填写答辩记录表。

4、报告正文字数一般应不少于3000字,也可由指导教师根据本门课程设计的情况另行规定。

5、平时表现成绩低于6分的学生,取消答辩资格,其该课程设计成绩按不及格处理。

6、课程设计完成后,由指导教师根据完成情况写出总结。

7、此表格式为徐州师范大学物理与电子工程学院提供的基本格式,指导教师可根据本门课程设计的特点及内容做适当的调整。

  指导教师签字:                    

                                                                         


目 录

摘 要 ………………………………………………………………………………………,

Abstract …………………………………………………………………………………,...

1 绪论…………………….……………………………………. ………………………..

1.1  设计背景………………………………………………………………………………,

1.2  设计目的…………………………………………………..………………………….,.

1.3  设计意义………………………………………………………………………………..,

1.4  需解决的问题…………………………………………………………………………,,,

1.5  风险评估 ………………………………………………………………………………..

2 设计方案简述 ………………………………………..………………………………..

2.1  需求分析…………………………………………………..………………………….…

2.2  市场分析…………………………………………………..………………………….…

2.3  系统总体设计……………………………………………..………………………….…

2.4  各子类系统设计………………………………………………………………………..

3 详细设计……………………………………………………………..…………………..

3.1  类与结构…………………………………………………..………………………….…

3.1  系统生成的类…………………………………………..………………………….……

4 设计结果及分析………………………………………………..…….………………...

4.1  测试总结……………………………………….………………………………..………

4.2  测试记录…………………………………………………..………………………….…

4.3  技术难点…………………………………………………………………………………

5总 结 ……..…………………………………………………..………………………….…

参考文献 …….………………..………………………………..………………………….…

摘  要

记忆翻牌游戏的设计能有效的是玩家在休闲时间达到放松的目的,在深入的学习了vc++实用教程后,同时,在对休闲游戏市场的分析,用其MFC做一个此类的小游戏,不仅是对自己学习的检验,使自己得到锻炼的机会,增强编程能力,为以后找工作奠定扎实的基础。

关键词:记忆翻牌;游戏;编程;MFC。

Abstract

Memory flop game design can effectively be players in the leisure time to relax purpose ,in-depth study of the vc++ ,After the practical course, while in the casual game market analysis, with its MFC to do a kind of small game is not only a test of their own learning, so that they can receive training opportunities to enhance the programming ability  to  lay a solid foundation to find a job for the future.

Keywords:Memory flop game;Game;Programming ;MFC。


1 绪论

1.1  设计背景

 在大多数小组都选择计算器等一些应用程序的情况下,我选择了制作游戏,而在休闲游戏中,翻牌类游戏涉及较少,所以我选择记忆翻牌游戏软件。由于市场上的翻牌游戏大体都是一样的框架,所以我做出几点创新:1.进行人机对战。2.增加难度选择。加强了游戏的耐玩性,增强了市场上的竞争能力。在刚接触MFC的情况下,依然选择了并不熟悉翻牌游戏的制作,更多的是因为希望迎接挑战。

1.2  设计目的

   “记忆翻牌游戏”将重点放在放松精神和训练短时记忆力上,以期获得大众的青睐,缓解大众的疲劳,是大众得到休闲娱乐,同时检验自己对于vc++的学习,增强自己的编程能力,达到实战的目的。

1.3  设计意义

目前市面上有不少类似的小游戏,需要有独到之处才能吸引受众的眼球。选择了目前热度较高的“愤怒的小鸟”作为整个游戏的背景,辅以一些欢快的音乐。只要令玩家放松,休闲,则增强市场竞争力。

1.4 需解决的问题

在开发的过程中,将会碰到几个难点:

1.为避免玩家很快玩腻,设置了难度等级;

2.为了给游戏增加挑战性,设置了电脑AI玩家,并且电脑会具备记忆能力;

3.对于翻开相同的牌时,设计把它消除。

   对于第一个难点:需要响应玩家在对话框中点击的按钮消息,在绘制区域的时候选择矩形的排列和个数。

  对于第二个难点:需要设计在玩家点击翻牌指令后,插入一个延时函数,再获得一张卡片的坐标,存入一个用于记录计算机翻过的牌的数组,并对之前存入数组的牌逐个检索,分别对有或没有与此次翻牌内容相同的牌进行处理。有相同的牌之后将会在下次选择这两张牌。

对于第三个难点:要能够比较两次翻牌的结果,并能分别处理,是消除还是重新绘制。

1.5 风险评估

此类小游戏的市场竞争较为激烈,因而此软件的推出可能会陷入竞争利润的泥潭,埋没在大量同类游戏之中。同时,此游戏较为简单易玩,同时具有很强的吸引力,可能会导致部分青少年沉迷其中,消耗大量宝贵时间,耽误学业

2 设计方案简述

2.1 需求分析

目前市面上有不少类似的小游戏,所以吸引用户就必须靠程序的特别之处。因而我们选择了目前热度较高的“愤怒的小鸟”作为整个游戏的背景,并配以轻松欢快的音乐以取得放松的效果,从而满足用户在闲余时间放松精神的需求。

2,2 市场分析

随着工作和生活压力的增大,人们的精神始终处于高度紧张状态,疲劳感和记忆力衰退顺之成为大众当今面临的几个主要问题之一,因而我们这个“记忆翻牌游戏”将重点放在放松精神和训练短时记忆力上,以期获得大众的青睐。

2.3 系统总体设计

   游戏能够实现人机互动,玩家通过点击翻牌与电脑AI进行比赛。在此游戏中实现了难度等级的设定,玩家可以根据自己的喜好选择牌堆的数量。游戏操作中,实现了翻牌数量最大为两张,并在翻出相同的牌之后进行消去,不符合时翻回的功能。在整个游戏过程中进行积分统计,在消去所有的牌之后将玩家与电脑AI的得分比较,决出胜负。整个游戏精心设计了好看的画面和欢快的音乐,有着更好的休闲娱乐的效果。

24 各子系统设计

1.窗口显示:显示选择界面,游戏界面(牌的翻转、图片、文字与背景),游戏结束后结果界面。

2.Manager管理:构造并显示牌堆,AI智能翻牌,判断翻牌是否消除,得分统计,判断结果。

3.音乐效果。

3 详细设计

3.1类与结构

1.class Manager  //游戏整体管理类

{

public:

    void ShowCurrentGUI(CDC *pDC,CWnd *pWnd);//显示得分

    int SingleCardShow(CDC *pDC,CPoint point,CWnd *pWnd);//显示牌面

    int GetCardNums();//获取牌的序号

    int GetColumns();//获取牌的列号

    int GetRows();//获取牌的行号

Manager():rows(0),columns(0),CardNums(0),CardDouble(NULL),pCardActiveList(NULL),pCardList(NULL),pRobotRememberList(NULL),DoubleFlag(0),MatchedCardPairNums(0),MismatchedCardPairNums(0),Created(false),ClientScore(0),IsRobotChance(false){}//构造函数

    void Create(int x,int y);//根据玩家选择生成牌堆结构

    virtual ~Manager();//析构函数

    bool RobotDoMatch(CDC *pDC,CWnd *pWnd);//电脑AI进行选牌

    bool IsRobotChance;//判断电脑是否选牌

private:

    void ShowResult();//显示结果

    void GetRand(int down,int up,int &n);//获取随机翻牌的随机数

    int ClientScore;//玩家得分

    void DrawRect(CDC *pDC,bool active,int column=0,int row=0);

//显示单张牌区域

    bool IsCardMatch(Card *pCardDouble);//判断是否匹配

    int GetRand();//获取随机数,范围为[1,CardNums)

    bool Created;//是否已经构造游戏

    int MatchedCardPairNums;//已匹配牌的号码

    int MismatchedCardPairNums;//未匹配牌的号码

    int DoubleFlag;//连续点击不同图片的个数

    Card *pCardList;//记录已翻出的牌

    Card *pCardActiveList;//记录正在翻出的牌

    Card *pRobotRememberList;//电脑AI记录翻开的牌

    Card *CardDouble;//记录进行比较配对的牌

    int rows;//行号

    int columns;//列号

    int CardNums;//牌号

};

2.class NewDialog : public CDialog//窗口类,继承CDialog类

{

public:

    int columns;//列号

    int rows;//行号

    NewDialog(CWnd* pParent = NULL);//构造函数

protected:

    CBrush   m_brush;//画刷

    DECLARE_MESSAGE_MAP()

};

3.struct Card

{

    Card():row(0),column(0),ID(0){}

    void SetPrimitive(){row=0;column=0;ID=0;}//设置为翻转原始图片

    void SetDisappear(){row=0;column=0;ID=-1;}//设置以翻转消除图片

    int row;//行号

    int column;//列号

    int ID;//临时图片的ID

};

3.2 系统生成的类

4. class CAboutDlg : public CDialog//继承CDialog生成的CAboutDlg类

{

public:

    CAboutDlg();

// Dialog Data

    //{{AFX_DATA(CAboutDlg)

    enum { IDD = IDD_ABOUTBOX };

    //}}AFX_DATA

    // ClassWizard generated virtual function overrides

    //{{AFX_VIRTUAL(CAboutDlg)

    protected:

    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

    //}}AFX_VIRTUAL

// Implementation

protected:

    //{{AFX_MSG(CAboutDlg)

       // No message handlers

    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()

};

5. class CMainFrame : public CFrameWnd//继承CFrameWnd生成的CMainFrame类

{

   

protected: // create from serialization only

    CMainFrame();

    DECLARE_DYNCREATE(CMainFrame)

// Attributes

public:

// Operations

public:

// Overrides

    // ClassWizard generated virtual function overrides

    //{{AFX_VIRTUAL(CMainFrame)

    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

    //}}AFX_VIRTUAL

// Implementation

public:

    virtual ~CMainFrame();

#ifdef _DEBUG

    virtual void AssertValid() const;

    virtual void Dump(CDumpContext& dc) const;

#endif

protected:  // control bar embedded members

    //CStatusBar  m_wndStatusBar;

    //CToolBar    m_wndToolBar;

// Generated message map functions

protected:

    //{{AFX_MSG(CMainFrame)

    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()

};

6. class CPairClientApp : public CWinApp//继承CWinApp生成的CPairClientApp类

{

public:

    CPairClientApp();

// Overrides

    // ClassWizard generated virtual function overrides

    //{{AFX_VIRTUAL(CPairClientApp)

    public:

    virtual BOOL InitInstance();

    //}}AFX_VIRTUAL

// Implementation

    //{{AFX_MSG(CPairClientApp)

    afx_msg void OnAppAbout();

       // NOTE - the ClassWizard will add and remove member functions here.

       //    DO NOT EDIT what you see in these blocks of generated code !

    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()

};

7. class CPairClientDoc : public CDocument//继承CDocument生成的CPairClientDoc类

{

protected: // create from serialization only

    CPairClientDoc();

    DECLARE_DYNCREATE(CPairClientDoc)

// Attributes

public:

// Operations

public:

// Overrides

    // ClassWizard generated virtual function overrides

    //{{AFX_VIRTUAL(CPairClientDoc)

    public:

    virtual BOOL OnNewDocument();

    virtual void Serialize(CArchive& ar);

    //}}AFX_VIRTUAL

// Implementation

public:

    virtual ~CPairClientDoc();

#ifdef _DEBUG

    virtual void AssertValid() const;

    virtual void Dump(CDumpContext& dc) const;

#endif

protected:

// Generated message map functions

protected:

    //{{AFX_MSG(CPairClientDoc)

       // NOTE - the ClassWizard will add and remove member functions here.

       //    DO NOT EDIT what you see in these blocks of generated code !

    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()

};

8. class CPairClientView : public CView//继承CView生成的CPairClientView类

{

protected: // create from serialization only

    CPairClientView();

    DECLARE_DYNCREATE(CPairClientView)

// Attributes

public:

    CPairClientDoc* GetDocument();

// Operations

public:

// Overrides

    // ClassWizard generated virtual function overrides

    //{{AFX_VIRTUAL(CPairClientView)

    public:

    virtual void OnDraw(CDC* pDC);  // overridden to draw this view

    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

    protected:

    virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);

    virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);

    virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

    //}}AFX_VIRTUAL

// Implementation

public:

   

    Manager myManager;

   

    virtual ~CPairClientView();

#ifdef _DEBUG

    virtual void AssertValid() const;

    virtual void Dump(CDumpContext& dc) const;

#endif

protected:

// Generated message map functions

protected:

    //{{AFX_MSG(CPairClientView)

    afx_msg BOOL OnEraseBkgnd(CDC* pDC);

    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

    afx_msg void OnNewGame();

afx_msg    LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam) ;

    afx_msg void OnTimer(UINT nIDEvent);

    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()

private:

    bool IsNewGame;

   

    void DrawLineBG(CDC *pDC);

};

9. class CResultDialog : public CDialog//继承CDialog生成的CResultDialog类

{

// Construction

public:

    void ShowDlg(CString result);

    CResultDialog(CWnd* pParent = NULL);   // standard constructor

// Dialog Data

    //{{AFX_DATA(CResultDialog)

    enum { IDD = IDD_DIALOG_RESULT };

    CStatic    m_result;

    //}}AFX_DATA

// Overrides

    // ClassWizard generated virtual function overrides

    //{{AFX_VIRTUAL(CResultDialog)

    protected:

    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

    //}}AFX_VIRTUAL

// Implementation

protected:

    // Generated message map functions

    //{{AFX_MSG(CResultDialog)

    virtual void OnOK();

    virtual BOOL OnInitDialog();

    afx_msg void OnTimer(UINT nIDEvent);

    afx_msg BOOL OnEraseBkgnd(CDC* pDC);

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()

private:

    CString result;

    CBrush   m_brush;};

4 设计结果及分析

4.1 测试记录

4.2 测试总结

总结的多次测试,有时并不是多大的错误,说不定只是一个字母或者符号的错,但就是这小小的一环却依然对整个程序有着很大的影响。因此,在编写程序时就变得无比小心,现在的小心是减少以后的工作量。问题是需要去寻找的,而测试也是对知识的考验,在测试时将知识与实践融汇,同时也学会了合作与科研的精神。在此才意识到测试的重要性,并对程序的制作的整个过程都学会了大胆创新,细致工作。

4.3 技术难点

1.电脑AI的编写:电脑要记住已经翻开的牌并将相同的牌翻出。

解决方法:参考一些有AI的程序,想出用数组存取坐标的方法,最后参考一些有AI的程序完善编写。

2.窗口的动画效果。

解决办法:参考一些书籍和网上的教程,解决了用控件显示动画效果的问题。

3.相同牌的消去效果。

解决办法:经过同学和老师的帮助,并结合不断调试的改进,成功完成了消去效果。

5 总结

在这一次课程设计中,虽然是各自为战,自己做自己的课题,但是,在实际中仍然是需要老师和同学的帮助的。第一次的一个人做一个课程设计,其一是这一块是比较新的知识额,需要在完成课题之前要大量参考文献,因为每一个课题有其自己鲜明的特点;其二是限于刚刚上手MFC,有许多代码上的不熟悉没时间也不可能在刚刚开始学习时就完全解决,必须一边写代码,一边借鉴一些功能相仿的程序的写法,有的甚至还要与所做程序同样含有某一类功能,如图片处理。还有,第一次编程还要注意各模块的借口问题,某一模块的函数是否能满足别的模块的功能,如通过重载drawrect函数实现最开始的初始化牌堆和每次点击牌的显示结果。还有其他一些问题在整个过程中不断出现,都需要去解决。

  但是经历过这样的实践后,也收获了很多东西。比如专研精神:如何在庞大的数据资料面前寻找适合自己的材料。还有学习新知识的能力,学会走出课堂,在没有老师的帮助下自主自学所需的知识,这也是大学生必须掌握的基本素质之一。

  关于我的程序,经过多方的努力。实现了一个翻牌记忆游戏所具备的几乎所有的功能。如传统的难度选择(牌数的多少)、点击翻牌、同类消去、计分、胜负判断等。特别加入的电脑AI系统能够很大程度上与传统的单人翻牌游戏区别出来,实现了人类与计算机的记忆力的比拼,增加了趣味和挑战性,这也作为本游戏的一大亮点和难点所在。由于时间不足,程序还有很多可以提升的空间,如现代游戏十分常见的完成等级评定、更加绚丽的动态效果、奖励道具等等。还有待进一步开发。

参考文献

1.郑阿奇.  Vc++实用教程(第四版).电子工业出版社,2011

2.孙鑫. VC++深入详解.电子工业出版社.

3.侯俊杰. 深入浅出MFC.华中科技大学出版社. 2001

4.陈元琰等.vc++6.0实用技术与案例.清华大学出版社.2001

答辩记录表

成绩评定表

学生姓名:杨国栋        学号     11224024          班级:  1141 

课程设计总结

更多相关推荐:
C语言课程设计报告

3130111103福建工程学院C语言课程设计报告班级机械1301学号姓名指导教师日期20xx123020xx133130111103第一部分一问题描述题目1企业发放的奖金根据利润提成利润I低于或等于10万元时...

C课程设计报告

C课程设计报告题目小学算术运算测试设计者刘星刘俊良凌锋专业班级计算机网络0901班学号343337指导教师任长安所属系部计算机与信息科学系20xx年6月20日目录1程序功能简介12主题内容21程序算法22程序结...

C课程设计报告模板

课程设计报课程名称C语言课程设计课题名称通讯录专业纺织工程班级学号姓名指导教师黄晓宇20xx年12月20日告1湖南工程学院课程设计任务书课程名称课题专业班级纺织工程学生姓名学号指导老师审批任务书下达日期20xx...

c语言课程设计报告

C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体设计四详细设计五运行结果六课程设计体会一实验目的1通过课程设计加深对结构化程序设...

c语言课程设计+报告+源代码

西安郵電大學C语言课程设计报告题院系名称计算机学院专业名称班级学号8位指导教师设计起止时间20xx年06月03日20xx年06月12日一设计目的1通过本课程设计强化上机动手能力使学生在理论和实践的基础上进一步巩...

C语言课程设计报告

河南理工大学C程序设计报告C语言课程设计报告题目小学算术运算测试mathc设计者史前利专业班级通信工程1205学号31120xx20xx1指导教师刘洁所属系部计算机科学与技术20xx年07月03日河南理工大学河...

C课程设计报告—贪吃蛇

程序设计基础课程设计C课程设计报告贪吃蛇院系:计算机学院网络工程系班级:122班姓名:指导教师:20##年12月25日程序设计基础课程设计任务书一、题目:贪吃蛇二、设计要求(1)XXX负责设计与实现。(2)查阅…

C语言课程设计报告-游戏20xx

东华理工大学报告学院国际教育学院学院专业电子信息工程班级学号20xx20xx0638姓名钟天运一课程设计题目游戏20xx二课程设计要求a使用C语言编写20xx这款游戏b能够正常运行拥有游戏界面c能正常进行游戏从...

C语言课程设计报告(通讯录)

设计说明书通讯录系统起止日期20xx年01月03日至20xx年01月08日学班学成生姓名级号绩XXX指导教师签字计算机与通信学院20xx年01月08日一课题任务设计一个通讯录管理系统课题的主要任务是1对通讯录信...

C语言课程设计报告—人事管理系统

人事管理系统前言:现代计算机技术的发展为人们的学习、生活、工作提供了很大的帮助,各行各业都需要特定计算系统的运用,我们需要了解这些系统是怎么样为我们服务以及他们是怎样编辑出来的。我们需要学习C语言编程,根据课堂…

C语言课程设计报告书样本

海南大学三亚学院C语言程序设计课程设计贪吃蛇算法专业计算机科学与技术班级计科1001姓名杨凯文题目学号指导老师李春林目录C语言程序设计课程设计11程序要求32程序分析与设计33流程图44源程序清单45调试过程1...

C语言课程设计报告样本

C语言程序设计综合实验报告设计题目图书管理系统班级学号姓名指导教师梁国业起止时间20xx118至20xx22520xx20xx学年第一学期1设计任务该系统包含图书馆馆藏图书的信息供读者查询建立一个文件存放图书信...

c++课程设计报告(32篇)