VC++贪吃蛇游戏设计+流程图(12)_毕业论文

毕业论文移动版

毕业论文 > 计算机论文 >

VC++贪吃蛇游戏设计+流程图(12)


protected:
    afx_msg void OnPaint();
    afx_msg void OnTimer(UINT nIDEvent);
    afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
    DECLARE_MESSAGE_MAP()
};
#endif
B:通过前面类的声明,已经知道主游戏类中包含了几个基本函数,如构造,析构,绘图和接受键盘等。这些都是主游戏窗口类基础用于构成对话框,处理图片的显示和人机交互的过程。其代码如下:
#include "stdafx.h"
#include "SnakeGame.h"
#include "Resource.h"
#include "Rule.h"
#include "HeroDlg.h"
// Download by http://down.liehuo.net
CSnakeGame::CSnakeGame()
{
    m_nScore = 0;
    m_psFood.x = 30;
    m_psFood.y = 30;
    m_nHighScore = 0;
}

CSnakeGame::~CSnakeGame()
{
}

// 消息映射表
BEGIN_MESSAGE_MAP( CSnakeGame, CWnd )
//{{AFX_MSG_MAP(CSnakeGame)
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_KEYUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////////
// 初始化果实
//////////////////////////////////////////////////////////////////////////
void CSnakeGame::InitFoods()
{    
    int m_ysX,m_ysY;
    while(1)
    {
        m_ysX=rand()%28;          //随机生成横坐标使其与贪吃蛇的身体可以接上
        m_ysY=rand()%28;          //随机生成纵坐标使其与贪吃蛇的身体可以接上
        for(int i=0;i<=m_body.GetUpperBound();i++)
        {
            CPoint ysPoint1=m_body.GetAt(i);      //获取贪吃蛇的身体坐标
            if(ysPoint1.x!=m_ysX||ysPoint1.y!=m_ysY)//如果身体的横坐标或纵坐标与果实的横纵坐标相同
            {
                m_psFood = CPoint(m_ysX, m_ysY);//将随机出现的坐标记录为果实坐标
                return;
            }
        }
    }
}
//////////////////////////////////////////////////////////////////////////
// 设置游戏等级
//////////////////////////////////////////////////////////////////////////
void CSnakeGame::SetGameLevel(int level)
{
    m_nlevel = level;
}
//////////////////////////////////////////////////////////////////////////
// 开始游戏函数
//////////////////////////////////////////////////////////////////////////
BOOL CSnakeGame::GameStart()
{
    int nSleep = LOW_LEVEL_SLEEP;

    char pszTmp[128] = {0};

    switch(m_nlevel)
    {
    case GAME_LEVEL_HIGH:
        nSleep = HIGH_LEVEL_SLEEP;
        break;
    case GAME_LEVEL_NOR:
        nSleep = NOR_LEVEL_SLEEP;
        break;
    }

    GetPrivateProfileString("HERO", "score", "0", (责任编辑:qin)