⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skyblue_rectview.h

📁 这是一个用VC++编写的俄罗斯方块的游戏、直接运行就可以不用了
💻 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 + -