?? hgameview.h
字號:
// HGAMEView.h : CHGAMEView 類的接口
//
#pragma once
// 宏變量:白色和黑色
#define WHITE RGB(255,255,255)
#define BLACK RGB(0,0,0)
#define BLUE RGB(0,0,255)
//中斷操作的運(yùn)動(dòng)趨勢
#define LEFT 0 //向左移動(dòng)
#define RIGHT 1 //向左移動(dòng)
#define UP 2 //向上(變形)
#define DOWN 3 //向下移動(dòng)(加速)
//游戲區(qū)域地圖最大限制
#define MAX_ROW 100 //地圖的最大行數(shù)
#define MAX_COL 100 //地圖的最大列數(shù)
//地圖狀態(tài)
#define MAP_STATE_EMPTY 0 //空(未被占據(jù))
#define MAP_STATE_NOT_EMPTY 1 //被占據(jù)
class CHGAMEView : public CView
{
protected: // 僅從序列化創(chuàng)建
CHGAMEView();
DECLARE_DYNCREATE(CHGAMEView)
// 屬性
public:
CHGAMEDoc* GetDocument() const;
// 操作
public:
// 重寫
public:
virtual void OnDraw(CDC* pDC); // 重寫以繪制該視圖
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
int m_nWidth; //子窗口的寬度
int m_nHeight; //子窗口的高度
//列與行的數(shù)量
int m_iCol;
int m_iRow;
//小方塊的大小,它會(huì)隨著行與列的不同而不同,具體為:
// 12行10列,30個(gè)象素的正方形
// 18行15列,20
// 24行20列,15
// 30行25列,12
int m_iLarge;
//當(dāng)前的級別,換算成速度的算法為:1500 - m_iLevel*200
int m_iLevel;
//當(dāng)前選擇的方塊顯示樣式
int m_iBlockSytle;
//游戲區(qū)域左上角的坐標(biāo)
int m_iStartX;
int m_iStartY;
void RectChange();
BOOL IsLeftLimit(); //下墜物件是否可向左移動(dòng)
BOOL IsRightLitmit();
//接觸面二維數(shù)組,記錄1~7種下墜物的1~4種形態(tài)的接觸面信息
//我們把該下墜物的某種形態(tài)種的4個(gè)方塊,有接觸面則記錄方位,無則為-1標(biāo)識(shí)。
int InterFace[74][4];
//當(dāng)前的方塊形狀
int m_currentRect;
//判斷當(dāng)前方塊是否到底
void IsBottom();
//當(dāng)前方塊下降
void RectDown();
//當(dāng)前方塊加速:UP,左移:LEFT,右移:RIGHT
void RectArrow(int m_Type);
//根據(jù)下墜物的類型映射出它的具體形態(tài) 功能組
//根據(jù)舊的下一下墜物映射出當(dāng)前激活狀態(tài)下的下墜物形態(tài)
void RectStatusToActiveStatus(int m_which);
//根據(jù)下墜物形態(tài)映射出下一下墜物的形態(tài)
void RectStatusToNextStatus(int m_which);
//將當(dāng)前的狀態(tài)映射到地圖游戲區(qū)域
void ActiveStatusToGameStatus();
int Random(int MaxNumber);
//標(biāo)識(shí)方塊已到底的變量,到底為TRUE
BOOL m_isBottom;
//用于標(biāo)志方塊狀態(tài)的數(shù)組,大小由橫格與豎格數(shù)據(jù)決定,為1表示該方塊顯示,或者不顯示
//畫形狀只需要修改數(shù)組中相應(yīng)元素的狀態(tài)值即可
//由時(shí)鐘控制,定時(shí)在OnPaint函數(shù)中根據(jù)數(shù)組畫方塊
int GameStatus[MAX_ROW][MAX_COL];
//用于保存當(dāng)前方塊的動(dòng)態(tài)位置,4個(gè)小方塊分別在大數(shù)組中的位置
//存放位置為先左后右,每一列又遵循先上后下的原則
int ActiveStatus[4][2];
//存入下一次要出來的方塊的模樣的數(shù)組
int NextStatus[4][2];
BOOL m_bGamePaush;
void CurrentAreaAndLevel();
//用于記錄當(dāng)前區(qū)域大小與當(dāng)前級別的字符串,用于顯示在屏幕上提示用戶當(dāng)前狀態(tài)
CString m_strArea;
CString m_strLevel;
//當(dāng)前的樣式 ,下一個(gè)將會(huì)出現(xiàn)的樣式
int m_icurrentStatus;
int m_inextStatus;
//OnDraw中需要用到的設(shè)備名稱
CPen *m_pBlackPen;
CBrush *m_pGrayBrush;
CBrush *m_pBlackBrush;
//是否畫網(wǎng)格線
BOOL m_bDrawGrid;
//游戲總成績
int m_iPerformance;
//游戲是否已結(jié)束,為FALSE表示開始,否則為結(jié)束
BOOL m_bGameEnd;
//刷新指定的區(qū)域,它的大小為:四個(gè)小方塊所在的正方形的大小
void InvalidateCurrent();
//內(nèi)存繪圖設(shè)備的處理
CDC m_memDC; //內(nèi)存設(shè)備環(huán)境
CBitmap m_memBmp; //內(nèi)存位圖
CDC m_memRectDC; //方塊內(nèi)存設(shè)備環(huán)境
HBITMAP m_hMemRectBmp; //方塊內(nèi)存位圖句柄
int m_bFistPlay; //是否是第一次開始游戲
void DcEnvInitial(void);
void DCEnvClear(void);
void DrawGame(CDC *pDC);
// 實(shí)現(xiàn)
public:
virtual ~CHGAMEView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// 生成的消息映射函數(shù)
protected:
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnGameStart();
afx_msg void OnGameEnd();
afx_msg void OnUpdateGameStart(CCmdUI* pCmdUI);
afx_msg void OnUpdateGameOption(CCmdUI* pCmdUI);
afx_msg void OnUpdateGameEnd(CCmdUI* pCmdUI);
afx_msg void OnUpdateGameExit(CCmdUI* pCmdUI);
afx_msg void OnUpdateHelpAbout(CCmdUI* pCmdUI);
afx_msg void OnUpdateHelpHelp(CCmdUI* pCmdUI);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnUpdateOptionArea1(CCmdUI* pCmdUI);
afx_msg void OnUpdateOptionArea2(CCmdUI* pCmdUI);
afx_msg void OnUpdateOptionArea3(CCmdUI* pCmdUI);
afx_msg void OnUpdateOptionArea4(CCmdUI* pCmdUI);
afx_msg void OnOptionArea1();
afx_msg void OnOptionArea2();
afx_msg void OnOptionArea3();
afx_msg void OnOptionArea4();
afx_msg void OnUpdateOptionLevel1(CCmdUI* pCmdUI);
afx_msg void OnUpdateOptionLevel2(CCmdUI* pCmdUI);
afx_msg void OnUpdateOptionLevel3(CCmdUI* pCmdUI);
afx_msg void OnUpdateOptionLevel4(CCmdUI* pCmdUI);
afx_msg void OnUpdateOptionLevel5(CCmdUI* pCmdUI);
afx_msg void OnUpdateOptionLevel6(CCmdUI* pCmdUI);
afx_msg void OnOptionLevel1();
afx_msg void OnOptionLevel2();
afx_msg void OnOptionLevel3();
afx_msg void OnOptionLevel4();
afx_msg void OnOptionLevel5();
afx_msg void OnOptionLevel6();
afx_msg void OnUpdateOptionGrid(CCmdUI* pCmdUI);
afx_msg void OnOptionGrid();
afx_msg void OnUpdateOptionMusic(CCmdUI* pCmdUI);
afx_msg void OnOptionMusic();
afx_msg void OnUpdateGamePaush(CCmdUI* pCmdUI);
afx_msg void OnGamePaush();
afx_msg void OnGameExit();
afx_msg void OnHelpAbout();
DECLARE_MESSAGE_MAP()
};
/*
CRectGameView : public CView
{
//內(nèi)部存取數(shù)據(jù)結(jié)構(gòu)
int m_stateMap[MAX_ROW][MAX_COL];
//初始化操作
GameInitnal(); //游戲的初始化
//用于判斷數(shù)據(jù)相關(guān)狀態(tài)的操作
IsLeftLimit(); //下墜物件是否可向左移動(dòng)
IsRightLitmit(); //
IsBottom(); //是否已經(jīng)到達(dá)了底部
IsGameEnd(); //是否游戲已經(jīng)結(jié)束
//方塊物件下墜過程中的操作
RectChange(); //下墜物件變形
RectDown(); //下墜物件正常下落
RectArrow(); //下墜物件方向移動(dòng)(左,右,下加速)
//狀態(tài)控制操作
GameStart(); //游戲開始
GamePause(); //游戲暫停
GameEnd(); //游戲結(jié)束
}
#ifndef _DEBUG // debug version in skyblue_RectView.cpp
inline CSkyblue_RectDoc* CSkyblue_RectView::GetDocument()
{ return (CSkyblue_RectDoc*)m_pDocument; }
#endif
*/
#ifndef _DEBUG // HGAMEView.cpp 中的調(diào)試版本
inline CHGAMEDoc* CHGAMEView::GetDocument() const
{ return reinterpret_cast<CHGAMEDoc*>(m_pDocument); }
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -