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

📄 fdraw.cpp

📁 用VC7.0 开发的俄罗斯方块游戏
💻 CPP
字号:
// Fdraw.cpp : 实现文件
//
//提供方块的画图 13个象素一个单元格  12个象素一个填充格
#include "stdafx.h"
#include "fangk.h"
#include "Fdraw.h"


// Fdraw

Fdraw::Fdraw()
{
	//初始化颜色、方格
	for(int i=0;i<ROW;i++)
		for(int j=0;j<LINE;j++)
		{
			Datas[i][j] = true;
			Cor[i][j] = GetSysColor(COLOR_3DFACE);
		}
	//初始化形状数组
	for(int i=0;i<3;i++)
		for(int j=0;j<3;j++)
			m_nData[i][j]=0;
}

Fdraw::~Fdraw()
{
}

void Fdraw::drawcell(CDC * pDC,int Col,int Row,COLORREF crColor)
{
	CPoint point;
	point.x = 13*Row;
	point.y = 13*Col;
	drawcell(pDC,point,crColor);
}

void Fdraw::drawcell(CDC *pDC,CPoint point,COLORREF crColor)
{
	CBrush brush;
	brush.CreateSolidBrush(crColor);
	CPen penGray(PS_SOLID,1,RGB(0,0,0));
	CPen penWhite(PS_SOLID,1,RGB(255,255,255));
	CPen *pOld = NULL;
	CPoint topleft = point;
	CPoint buttonright;
	buttonright.x = point.x+CELL;
	buttonright.y = point.y+CELL;
	CRect rect(topleft,buttonright);

	pOld = pDC->SelectObject(&penWhite);
	pDC->FillRect(&rect,&brush);
	pDC->MoveTo(point);
	pDC->LineTo(point.x,point.y+=CELL);

	pOld = pDC->SelectObject(&penGray);
	pDC->LineTo(point.x+=CELL,point.y);
	pDC->LineTo(point.x,point.y-=CELL);

	pOld = pDC->SelectObject(&penWhite);
	pDC->LineTo(point.x-=CELL,point.y);
}

void Fdraw::drawnull(CDC *pDC,CPoint point)
{
	CPoint topleft = point;
	CPoint buttonright;
	buttonright.x = point.x+13;
	buttonright.y = point.y+13;
	CRect rect(topleft,buttonright);

	CBrush brush;
	brush.CreateSolidBrush(GetSysColor(COLOR_3DFACE));

	pDC->FillRect(&rect,&brush);
}

void Fdraw::drawnull(CDC *pDC,int line,int row)
{
	CPoint x(row*13,line*13);
	drawnull(pDC,x);
}

void Fdraw::getdata(int Shape,int ID)
{
		//存放颜色和变化的中间数据
	int nData[][4] = {
			{ 0x038, 0x092, 0x038, 0x092 },
			{ 0x093, 0x03c, 0x192, 0x078 },
			{ 0x096, 0x138, 0x0d2, 0x039 },
			{ 0x1b0, 0x1b0, 0x1b0, 0x1b0 },
			{ 0x198, 0x05a, 0x198, 0x05a },
			{ 0x0f0, 0x099, 0x0f0, 0x099 },
			{ 0x03a, 0x0b2, 0x0b8, 0x09a }
		};
	int Data = nData[Shape][ID];
	//取得形状数组
	m_nData[0][0] = (Data&0x100)>>8;
	m_nData[0][1] = (Data&0x80)>>7;
	m_nData[0][2] = (Data&0x40)>>6;
	m_nData[1][0] = (Data&0x20)>>5;
	m_nData[1][1] = (Data&0x10)>>4;
	m_nData[1][2] = (Data&0x8)>>3;
	m_nData[2][0] = (Data&0x4)>>2;
	m_nData[2][1] = (Data&0x2)>>1;
	m_nData[2][2] = (Data&0x1)>>0;
}
void Fdraw::drawshape(CDC *pDC,CPoint point,SHAPE shape,int ID,bool overwrite)
{
	getdata(shape,ID);
	CPoint DPoint;
	//获取各图形的颜色
	crColor[0] = RGB(92,88,146);
	crColor[1] = RGB(75,150,158);
	crColor[2] = RGB(73,160,80);
	crColor[3] = RGB(147,139,87);
	crColor[4] = RGB(152,95,82);
	crColor[5] = RGB(151,83,149);
	crColor[6] = RGB(114,107,109);
//nRow为y,nCol 为x!!!
	for(int nRow = 0;nRow<3;nRow++)
		for(int nCol = 0;nCol<3;nCol++)
		{
			if(m_nData[nRow][nCol])
			{
				DPoint.x = point.x+nCol*13;
				DPoint.y = point.y+nRow*13;  // 求出画图的x. y点
				if(overwrite)
					drawnull(pDC,DPoint);
				else
					drawcell(pDC,DPoint,crColor[shape]);
			}
		}
	//此时,竖条只有3块,需要新增加一块
	if(shape==0)
	{
		if(ID==1||ID==3)  //竖
		{
			DPoint.y -=39;
			if(overwrite)
				drawnull(pDC,DPoint);
			else
				drawcell(pDC,DPoint,crColor[shape]);
		}
		else                     //横
		{
			DPoint.x +=13;
			if(overwrite)
				drawnull(pDC,DPoint);
			else
				drawcell(pDC,DPoint,crColor[shape]);
		}
	}
}

void Fdraw::drawshape(CDC *pDC,int Col,int Row,SHAPE shape,int ID,bool overwrite)
{
	CPoint point;
	point.x = Col*13;
	point.y = Row*13;
	drawshape(pDC,point,shape,ID,overwrite);
}

void Fdraw::drawmark(CDC *pDC,int mark,bool overwrite)
{
	CRect rect(150,80,200,150);
	pDC->FillRect(rect,&CBrush(GetSysColor(COLOR_3DFACE)));
	CPen pen(PS_SOLID,1,RGB(255,0,0));
	CPen *pOldPen = NULL;
	pOldPen = pDC->SelectObject(&pen);
	pDC->SetBkMode(0);
	
	CString str,level;
	str.Format("%d",mark);
	level.Format("%d",mark/100);
	str = "分数:"+str; 
	level = "级别:"+level;
	pDC->TextOut(150,80,str);
	pDC->TextOut(150,100,level);
}
// Fdraw 成员函数

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -