?? skyblue_rectview.h
字號:
// skyblue_RectView.h : interface of the CSkyblue_RectView class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_SKYBLUE_RECTVIEW_H__D33E8EC7_BE69_4161_9B54_FB14CBA27F2E__INCLUDED_)
#define AFX_SKYBLUE_RECTVIEW_H__D33E8EC7_BE69_4161_9B54_FB14CBA27F2E__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// 宏變量:白色和黑色
#define WHITE RGB(255,255,255)
#define BLACK RGB(0,0,0)
#define BLUE RGB(0,0,255)
//中斷操作的運動趨勢
#define LEFT 0 //向左移動
#define RIGHT 1 //向左移動
#define UP 2 //向上(變形)
#define DOWN 3 //向下移動(加速)
//游戲區域地圖最大限制
#define MAX_ROW 100 //地圖的最大行數
#define MAX_COL 100 //地圖的最大列數
//地圖狀態
#define MAP_STATE_EMPTY 0 //空(未被占據)
#define MAP_STATE_NOT_EMPTY 1 //被占據
class CSkyblue_RectView : public CView
{
protected: // create from serialization only
CSkyblue_RectView();
DECLARE_DYNCREATE(CSkyblue_RectView)
// Attributes
public:
CSkyblue_RectDoc* GetDocument();
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSkyblue_RectView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CSkyblue_RectView();
protected:
int m_nWidth; //子窗口的寬度
int m_nHeight; //子窗口的高度
//列與行的數量
int m_iCol;
int m_iRow;
//小方塊的大小,它會隨著行與列的不同而不同,具體為:
// 12行10列,30個象素的正方形
// 18行15列,20
// 24行20列,15
// 30行25列,12
int m_iLarge;
//當前的級別,換算成速度的算法為:1500 - m_iLevel*200
int m_iLevel;
//當前選擇的方塊顯示樣式
int m_iBlockSytle;
//游戲區域左上角的坐標
int m_iStartX;
int m_iStartY;
void RectChange();
BOOL IsLeftLimit(); //下墜物件是否可向左移動
BOOL IsRightLitmit();
//接觸面二維數組,記錄1~7種下墜物的1~4種形態的接觸面信息
//我們把該下墜物的某種形態種的4個方塊,有接觸面則記錄方位,無則為-1標識。
int InterFace[74][4];
//當前的方塊形狀
int m_currentRect;
//判斷當前方塊是否到底
void IsBottom();
//當前方塊下降
void RectDown();
//當前方塊加速:UP,左移:LEFT,右移:RIGHT
void RectArrow(int m_Type);
//根據下墜物的類型映射出它的具體形態 功能組
//根據舊的下一下墜物映射出當前激活狀態下的下墜物形態
void RectStatusToActiveStatus(int m_which);
//根據下墜物形態映射出下一下墜物的形態
void RectStatusToNextStatus(int m_which);
//將當前的狀態映射到地圖游戲區域
void ActiveStatusToGameStatus();
int Random(int MaxNumber);
//標識方塊已到底的變量,到底為TRUE
BOOL m_isBottom;
//用于標志方塊狀態的數組,大小由橫格與豎格數據決定,為1表示該方塊顯示,或者不顯示
//畫形狀只需要修改數組中相應元素的狀態值即可
//由時鐘控制,定時在OnPaint函數中根據數組畫方塊
int GameStatus[MAX_ROW][MAX_COL];
//用于保存當前方塊的動態位置,4個小方塊分別在大數組中的位置
//存放位置為先左后右,每一列又遵循先上后下的原則
int ActiveStatus[4][2];
//存入下一次要出來的方塊的模樣的數組
int NextStatus[4][2];
// Generated message map functions
protected:
BOOL m_bGamePaush;
void StopMid();
void PlayMid();
void CurrentAreaAndLevel();
//用于記錄當前區域大小與當前級別的字符串,用于顯示在屏幕上提示用戶當前狀態
CString m_strArea;
CString m_strLevel;
//當前的樣式 ,下一個將會出現的樣式
int m_icurrentStatus;
int m_inextStatus;
//OnDraw中需要用到的設備名稱
CPen *m_pBlackPen;
CBrush *m_pGrayBrush;
CBrush *m_pBlackBrush;
//是否畫網格線
BOOL m_bDrawGrid;
//是否插放背景音樂
BOOL m_bMusic;
//游戲總成績
int m_iPerformance;
//游戲是否已結束,為FALSE表示開始,否則為結束
BOOL m_bGameEnd;
//刷新指定的區域,它的大小為:四個小方塊所在的正方形的大小
void InvalidateCurrent();
//內存繪圖設備的處理
CDC m_memDC; //內存設備環境
CBitmap m_memBmp; //內存位圖
CDC m_memRectDC; //方塊內存設備環境
HBITMAP m_hMemRectBmp; //方塊內存位圖句柄
int m_bFistPlay; //是否是第一次開始游戲
void DcEnvInitial(void);
void DCEnvClear(void);
void DrawGame(CDC *pDC);
// Generated message map functions
protected:
//{{AFX_MSG(CSkyblue_RectView)
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 OnGameOption();
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 OnHelpHelp();
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();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/*
CRectGameView : public CView
{
//內部存取數據結構
int m_stateMap[MAX_ROW][MAX_COL];
//初始化操作
GameInitnal(); //游戲的初始化
//用于判斷數據相關狀態的操作
IsLeftLimit(); //下墜物件是否可向左移動
IsRightLitmit(); //
IsBottom(); //是否已經到達了底部
IsGameEnd(); //是否游戲已經結束
//方塊物件下墜過程中的操作
RectChange(); //下墜物件變形
RectDown(); //下墜物件正常下落
RectArrow(); //下墜物件方向移動(左,右,下加速)
//狀態控制操作
GameStart(); //游戲開始
GamePause(); //游戲暫停
GameEnd(); //游戲結束
}
#ifndef _DEBUG // debug version in skyblue_RectView.cpp
inline CSkyblue_RectDoc* CSkyblue_RectView::GetDocument()
{ return (CSkyblue_RectDoc*)m_pDocument; }
#endif
*/
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_SKYBLUE_RECTVIEW_H__D33E8EC7_BE69_4161_9B54_FB14CBA27F2E__INCLUDED_)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -