课程
说明书 NO.1
打飞机游戏
1.课程设计目的
本次我做的是一个简单的打飞机的游戏,包括计算打飞机、时间和打飞机的规则制定。综合运用所学知识,熟练掌握VC++程序设计的编码与以及各类作用个的具体实现,独自利用VC++程序编写打飞机游戏,以检测自己一个学期对C++学习的情况,以及了解自己在VC++学习中的不足,巩固和提高自己对C++的理解和掌握。掌握C++编程和调试的基本技能,进一步提高自己的动手能力,和运用C++解决实际问题的能力。
随着信息时代的到来,人们生活节奏的加快,利用电脑放松心情似乎已很是常见,电脑游戏便应运而生了。基于此,对于游戏的开发者似乎也是一种挑战,它需要娱乐的同时,又有一定的放松大脑疲劳的作用。当然,如果能在此同时又能使我们的大脑得到进一步的锻炼与开发更是一种需求。鉴于此,开发者需要开发出满足以上需求的游戏供大家工作之余的放松以及智力的开发。当然,随着电脑的广泛使用,游戏的类型和种类均有增加。打飞机游戏由于其能很好的满足上述需求,使得其受到广泛的欢迎。而本游戏的开发是基于单机模式的。
本游戏针对人们的需求而设计,使得上述功能成为了可能。其安装及操作步骤均很简单,适合各类人群的使用。完成打飞机游戏的设计本系统是采用Visual C++ 高级语言进行程序编制。
沈 阳 大 学
课程设计说明书 NO.2 2.#设计
#论证
2.1需求
由于本游戏系统的对象单一,且每个数据内容具有较强的关联性,涉及的计算过程不是很复杂。当前各种游戏软件层出不穷。打飞机游戏的基本需要点击鼠标左键于未知区域,如果未知区域有飞机,并且游戏停止,显示所有的飞机。如果飞机,则显示周围飞机数,如果周围没飞机,则再查看周围区域是否有飞机直到有飞机为止并显示,这属于是一个递归过程。点击鼠标右键于未知区域,则将其置为有飞机而不管是否真的有飞机。飞机区右下角显示总飞机数减去被标明有飞机区域的数目。系统主要功能包括:游戏的生成打飞机游戏的初始化,根据数量不同的飞机,每种难度下的飞机数量相同。游戏难度的选择难度设置,从简单到困难,难度越大,生成游戏时飞机数量越多。因此,在选择数据库时,应考虑数据库应用的特点及适用范围,Visual C++ 是一种可视化的、面对对象和调用事件驱动方式的结构化高级程序设计,可用于开发 Windows 环境下的种类应用程序。它简单易学、效率高,且功能强大。在 Visual C++环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,可以高效、快速地开发出 Windows 环境下功能强大、图形界面丰富的应用软件系统。
2.2系统总体设计
系统主要功能包括:游戏的生成打飞机游戏的初始化,根据数量不同的飞机,每种难度下的飞机数量相同。游戏难度的选择难度设置,从简单到困难,难度越大,生成游戏时飞机数量越多。我们所设计的这个软件系统规模不大,就系统分析设计阶段而言不须太多人力物力。为明确各自不同的任务侧重点便于分配管理,我们将软件开发周期分为问题定义与可行性分析、需求分析、概要设计、详细设计四个方面,利于我们相互协作。
目前,计算机的应用领域越来越广,为我们的这套软件提供了硬件环境。本系统可以运行在Windows95/98/2000/XP等操作系统上,可说市场上流行的操作系统都可以支持,功能模块图,如图1所示。
沈 阳 大 学
课程设计说明书 NO.3
打飞机游戏
开布载退
始 局 入 出
图1 系统功能模块
2.3设计步骤
首先是具体的设计步骤如下:在VC++6.0中,用自己的名字gaoqingzhi建立一个MFC AppWizard(exe)工程,在应用程序类型中选择“基本对话框”,其余的都采用默认选项,即可完成对话框的创建。在对话框中添加4个图像,6个按钮(分别是开始、布局、保存、选项、载入、退出,)接着根据属性对以上所添加的控件进行属性修改,主要进行重命名,以便编辑源代码的时候区分,另外对图像的处理除了对其进行重命名外还要对其添加位图。之后通过打开C:\WINDOWS\system32打开cards.dll加载Bitmap图片,并选中对其进行重命名。接着对以上添加的控件建立类向导。主要有Add Function、Add Variable和Edit Code这三项的添加。根据流程图在类的原文件中逐一添加实现各个模块其功能所需要的各种函数,并添加相应的源代码,同时在头文件中添加对各种函数及变量的声明。对编译好的程序进行保存,开始进行调试,边调试边根据报错对原程序进行修改,直到程序不再进行报错为止,如图2所示。
沈 阳 大 学
课程设计说明书 NO.4
图2设计模块
2.4主窗口建立
主界面控制菜单的设计接下来回到资源编程界面,编写菜单资源,用来控制扫雷的过程,难度选定,以及自定义难度窗口等。设置菜单包含:开始,布局,载入,保存。帮助菜单获取该软件的版本信息,如图3所示。
沈 阳 大 学
课程设计说明书 NO.5
图3 开始功能模块 具体实现代码为:
BOOL m_bLoadWelcomeString;
int m_nGameStatus; //游戏是否开始
BOOL m_bLoadFrame;
CString m_strComment5;
CString m_strComment4;
CString m_strComment3;
CString m_strComment2;
CString m_strComment1;
CRect m_rectCommentFrame; //fixed frame
CPoint m_ptComment; //scroll(the rectangle to show Comment)
CRect m_rectFighterDown;
CRect m_rectBomb;
CRect m_rectFighterHit;
int m_nCommentTimer;
int m_nWelcomeTimer;
int m_nFighterHit;
沈 阳 大 学
课程设计说明书 NO.6
int m_nFighterDown;
int m_nBomb;
public:
void SetURL(CString strURL);
CString GetURL() const;
void SetColours(COLORREF crLinkColour, COLORREF crVisitedColour,
COLORREF crHoverColour = -1);
COLORREF GetLinkColour() const;
COLORREF GetVisitedColour() const;
COLORREF GetHoverColour() const;
void SetVisited(BOOL bVisited = TRUE);
BOOL GetVisited() const;
void SetLinkCursor(HCURSOR hCursor);
HCURSOR GetLinkCursor() const;
void SetUnderline(BOOL bUnderline = TRUE);
BOOL GetUnderline() const;
void SetAutoSize(BOOL bAutoSize = TRUE);
BOOL GetAutoSize() const;
HINSTANCE GotoURL(LPCTSTR url, int showcmd);
void DrawComment(CDC * pDC);
CPoint m_ptNew;
void DrawPiece(CDC * pDC, int x, int y, int nResult);
void DrawShootingResult(CDC * pDC);
int m_nShootingResult[10][10];
int m_nSky[10][10];
CRect m_rectSky;
2.5打飞机游戏布局建立
沈 阳 大 学
课程设计说明书 NO.7 此模块对游戏的使用客户有着自行的需求,除了能有系统自带的飞机,游戏的使用
这还可以自行设计飞机数量、位置、以及飞机形态大小一系列的基本信息,并且还能使
游戏充满动态形式多变等如图4所示。
图4 游戏的布局
具体实现代码为:
public:
BOOL StartScrolling();
void EndScrolling();
void SetCredits(LPCTSTR credits, char delimiter = '|');
void SetCredits(UINT nID, char delimiter = '|');
void SetSpeed(UINT index, int speed = 0);
void SetColor(UINT index, COLORREF col);
void SetTextHeight(UINT index, int height);
void SetEscape(UINT index, char escape);
void SetGradient(UINT value = GRADIENT_RIGHT_DARK);
BOOL SetBkImage(UINT nIDResource);
BOOL SetBkImage(LPCTSTR lpszResourceName);
void SetTransparent(BOOL bTransparent = TRUE);
// Overrides
沈 阳 大 学
课程设计说明书 NO.8
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CCreditStatic)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CCreditStatic();
// Generated message map functions
protected:
void MoveCredit(CDC *pDC, CRect& r, CRect& r2, BOOL bCheck);
void AddBackGround(CDC* pDC, CRect& m_ScrollRect, CRect& m_ClientRect);
void DrawCredit(CDC* pDC, CRect& m_ScrollRect);
void FillGradient(CDC *pDC, CRect *m_ScrollRect, CRect *m_FillRect, COLORREF color);
void DrawBitmap(CDC* pDC, CDC* pDC2, CRect *rBitmap);
此游戏还具有保存功能,可以在用户使用一半时进行保存,以备下次能继续使用,
此保存功能如图5所示。
图5游戏保存图
具体实现代码为:
沈 阳 大 学
课程设计说明书 NO.9
#ifndef BCMenu_H
#define BCMenu_H
#include
// BCMenuData class. Fill this class structure to define a single menu item: class BCMenuData
{ wchar_t *m_szMenuText;
public:
BCMenuData () {menuIconNormal=-1;xoffset=-1;bitmap=NULL;pContext=NULL;
nFlags=0;nID=0;syncflag=0;m_szMenuText=NULL;global_offset=-1;};
void SetAnsiString(LPCSTR szAnsiString);
void SetWideString(const wchar_t *szWideString);
const wchar_t *GetWideString(void) {return m_szMenuText;};
~BCMenuData ();
CString GetString(void);//returns the menu text in ANSI or UNICODE
int xoffset,global_offset;
int menuIconNormal;
UINT nFlags,nID,syncflag;
CImageList *bitmap;
void *pContext; // used to attach user data
};
protected:
COLORREF m_Colors[5];
int m_TextHeights[4];
TCHAR m_Escapes[4];
int m_DisplaySpeed[3],m_CurrentSpeed;
// CRect m_ScrollRect; // rect of Static Text frame
CStringList m_ArrCredit;
CString m_szWork;
int m_nCounter; // work ints
POSITION m_ArrIndex;
沈 阳 大 学
课程设计说明书 NO.10
BOOL m_bFirstTime;
BOOL m_bDrawText;
int m_nClip,m_ScrollAmount;
int m_nCurrentFontHeight;
CBitmap m_bmpWork; // bitmap holder
CBitmap m_BmpMain; // bitmap holder
CSize m_size; // drawing helpers
CPoint m_pt;
BOOL m_bProcessingBitmap;
CPalette m_pal;
CBitmap m_bitmap;
int m_cxBitmap, m_cyBitmap;
BOOL m_bFirstTurn;
UINT m_Gradient;
BOOL m_bTransparent;
3.设计结果与分析
3.1游戏的调试及保存
沈 阳 大 学
课程设计说明书 NO.11
在代码添加过程中,由于涉及到很多的函数和变量,有时候可能会出现某几个变量忘定义的情况,这些变量有可能是在头文件中忘记定义或者在某个函数体中忘记定义,在添加完各个函数的代码完毕后,以为头文件会自动对相应得变量进行定义,但头文件没有对所有的变量都定义,于是出现了如上图所示的错误。打开头文件,双击gaoqingzhiDlg.h,在class CDgaoqingzhiDlg : public Cdialog类定义函数中添加对m_back参数的定义就可运行成功,如图6所示。
图6程序调试图
程序调试成功后进行运行界面,运行成功后可以选择开始选项、布局选项、保存选项、载入选项以及退出,程序调试成功后运行,如图7所示。
沈 阳 大 学
课程设计说明书 NO.12
图7程序运行图
在程序运行成功后如果用户想重新开始游戏,也可以重新选择开始,开始新的游戏,新的游戏开始如图8所示。
图8游戏重新开始图
沈 阳 大 学
课程设计说明书 NO.13 4.设计
该项目的实现,在经过代码的不断完善和功能的加强后,该系统在封装前能够在WINDOWS平台上正常的运行,能够实现相应的作用。该项目的运行状况:该游戏能够在用户合法登陆后进行相应的功能,运行状况良好。
在这次课程设计过程中,我的编程有了很大的提高,虽然有时候自己没有思路,但是凡事不能被困难吓倒,只要有开始,去尝试。就会有意想不到的收获。可以借鉴别人的代码,看别人设计的思路,理解的同时自己小试一下也可以编出来,所以其次,在运行、调试过程中也学到了很多,以前编程最怕的就是报错,尤其是错误多了的时候,感觉毫无头绪直接头大,但是编程不可能不出错,报错,只要逐一对付,然后细心研究改正,终究一切问题都会迎刃而解的,所以遇到问题,不能急,要心平气和的去应对,才能把所学的只是真正用于实际,这不得不说正是我们当代大学生所严重缺乏的,以后的学习中更应注意。
综上,课程设计即将结束,虽然时间有些紧凑,虽然中间遇到好多的挫折,但毕竟是自己努力了的,自己收获的是过程中的酸甜苦辣,总体收获很大,有了此次的学习经验,我想以后的课程设计应该就会轻松的多吧。通过这次课程设计,加强了我动手、思考和解决问题的能力。比如细心还有耐心还有对自己有一定的自信等等。而且课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时只有课间的学习是远远不够的,所以以后要多花时间温故知新。过程曲折可谓一语难尽。在此期间我也从毫无头绪到一度热情高涨。到从开始时满富盛激情到调不出结果的焦头烂额,到最后慧心的笑,点点滴滴无不令我回味无长。总之对我而言,知识上的收获重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这次课设必是我人生旅途上一个非常美好的回忆~
沈 阳 大 学
课程设计说明书 NO.14 5.参考文献
[1] 罗超理. VC++系统原理与应用.北京: 清华大学出版社,2011 [2] 袁俊. VC++课程设计中的界面[J],2011
[3] 张晓辉. 数据库管理及应用系统开发.北京:清华大学出版社,2012 [4] 范士喜. VC++课程设计的内容和形式探讨[J], 2011
[5] 李倩. 《Visual C++》课程实验教学改革探讨[J], 2012 [6] 郭兴成. Visual C++ 6.0 教程.北京: 北京希望电子出版社,2011 [7] 赵丽娟. 基于软件工程理论的VC++课程设计项目教学法研究[J],2011
沈 阳 大 学