📄 m_screen.cpp
字号:
#include "StdAfx.h"
#include "m_Screen.h"
#include "OurBloke.h"
#include "OurBlokeView.h"
#include "MainFrm.h"
#define WM_CHANGEBLOKEVIEW (WM_USER + 2)
#define WM_LEVELUP (WM_USER + 3)
m_Screen::m_Screen(void)
:score(0)
{
for (int i = 0;i<16;i++)
{
for (int j = 0;j<10;j++)
{
_map[i][j] = -1;
}
}
MAP_BottomX = MAP_MAXX/2 - 1;//MAP_MAXX/2 - 1;
MAP_BottomY = 0;//Why??
SetSharp();
SetSharp2();
_Queue.SetRandomColorIndex();
_QueuePrp.SetRandomColorIndex();
COurBlokeApp * pApp = (COurBlokeApp * )AfxGetApp();
MaxNum = pApp->MaxNum;
}
m_Screen::~m_Screen(void)
{
}
void m_Screen::OnDraw(CDC * pDC,COurBlokeView * pView)
{
_Queue.OnDraw(pDC,MAP_BottomX,MAP_BottomY);
this->DrawMap(pDC,pView);
_Queue.OnDraw(pDC,MAP_BottomX,MAP_BottomY);
_QueuePrp.OnDraw(pDC,0,-1);
}
void m_Screen::SetSharp(void)
{
_Queue.SetPosition(0,0,0);
_Queue.SetPosition(1,1,0);
_Queue.SetPosition(2,0,-1);
_Queue.SetPosition(3,1,-1);
}
void m_Screen::RestartQueue(void)
{
MAP_BottomX = MAP_MAXX/2 - 1;//MAP_MAXX/2 - 1;//MAP_MAXX/2 - 1;
MAP_BottomY = 0;//Why??
//_Queue = _QueuePrp;
for (int i = 0;i<QUEUELENTH;i++)
{
_Queue.SetColorIndex(i,_QueuePrp.GetColorIndex(i));
}
_QueuePrp.SetRandomColorIndex();
}
bool m_Screen::HasTouch()
{
if ((_map[MAP_BottomX][MAP_BottomY] == -1)&&(_map[MAP_BottomX+1][MAP_BottomY]==-1))
{
return false;
}
else
{
return true;
}
}
void m_Screen::SetTouch()
{
int tmpY = MAP_BottomY;
while ((_map[MAP_BottomX][tmpY] == -1)&&(tmpY< MAP_MAXY))
{
tmpY += 1;
}
_map[MAP_BottomX][tmpY-1] = _Queue.GetColorIndex(0);
_map[MAP_BottomX][tmpY-2] = _Queue.GetColorIndex(2);
int tmpY2 = MAP_BottomY;
while ((_map[MAP_BottomX+1][tmpY2] == -1)&&(tmpY2< MAP_MAXY))
{
tmpY2 += 1;
}
_map[MAP_BottomX+1][tmpY2-1] = _Queue.GetColorIndex(1);
_map[MAP_BottomX+1][tmpY2-2] = _Queue.GetColorIndex(3);
SetGray(MAP_BottomX,tmpY-1);
SetGray(MAP_BottomX,tmpY-2);
SetGray(MAP_BottomX+1,tmpY2-1);
SetGray(MAP_BottomX+1,tmpY2-2);
}
void m_Screen::IncBottomY(void)
{
MAP_BottomY++;
}
bool m_Screen::JudgeBottomY(void)
{
if (MAP_BottomY >= (MAP_MAXY))
{
return true;
}
return false;
}
void m_Screen::Rightwards(void)
{
if (MAP_BottomX<(MAP_MAXX-2))
{
if (MAP_BottomY== 1)
{
if ((_map[MAP_BottomX+2][MAP_BottomY-1]== -1))
{
MAP_BottomX++;
}
}
else
{
if (MAP_BottomY == 0)
{
MAP_BottomX++;
}
else
{
if ((_map[MAP_BottomX+2][MAP_BottomY-1]== -1)&&(_map[MAP_BottomX+2][MAP_BottomY-2]== -1))
{
MAP_BottomX++;
}
}
}
}
}
void m_Screen::Leftwards(void)
{
if (MAP_BottomX>0)
{
if (MAP_BottomY== 1)
{
if ((_map[MAP_BottomX-1][MAP_BottomY-1]== -1))
{
MAP_BottomX--;
}
}
else
{
if (MAP_BottomY == 0)
{
MAP_BottomX--;
}
else
{
if ((_map[MAP_BottomX-1][MAP_BottomY-1]== -1)&&(_map[MAP_BottomX-1][MAP_BottomY-2]== -1))
{
MAP_BottomX--;
}
}
}
}
}
void m_Screen::Downwards(void)
{
if (MAP_BottomY<(MAP_MAXY))
{
if (!HasTouch())
{
MAP_BottomY++;
if (HasTouch())
{
if (HasFailed())
{
CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
pMain->SendMessage(WM_CHANGEBLOKEVIEW,0,0);
}
else
{
SetTouch();
RestartQueue();
}
}
}
else
{
if (HasFailed())
{
CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
pMain->SendMessage(WM_CHANGEBLOKEVIEW,0,0);
}
else
{
SetTouch();
RestartQueue();
}
}
}
}
void m_Screen::TurnAround(void)
{
_Queue.TurnAround();
}
void m_Screen::MappingQueue(void)
{
_map[MAP_BottomX][MAP_MAXY-1] = _Queue.GetColorIndex(0);//MAP_BottomY-1
_map[MAP_BottomX+1][MAP_MAXY-1] = _Queue.GetColorIndex(1);
_map[MAP_BottomX][MAP_MAXY-2] = _Queue.GetColorIndex(2);
_map[MAP_BottomX+1][MAP_MAXY-2] = _Queue.GetColorIndex(3);
SetGray(MAP_BottomX,MAP_MAXY-1);
SetGray(MAP_BottomX,MAP_MAXY-2);
SetGray(MAP_BottomX+1,MAP_MAXY-1);
SetGray(MAP_BottomX+1,MAP_MAXY-2);
}
void m_Screen::DrawMap(CDC *pDC, COurBlokeView * pView)
{
for (int i = 0;i<MAP_MAXX;i++)
{
for (int j = 0;j<MAP_MAXY;j++)
{
if (_map[i][j] != -1)
{
COurBlokeApp * pApp = (COurBlokeApp *)::AfxGetApp();
if (_map[i][j] >= 2)
{
_Blockbmp.LoadBitmap(pApp->ColorIndex[2]);
}
else
{
_Blockbmp.LoadBitmap(pApp->ColorIndex[_map[i][j]]);
}
CDC mdc;
HGDIOBJ hOldObject;
mdc.CreateCompatibleDC(pDC);
hOldObject = mdc.SelectObject(&_Blockbmp);
//_Blockbmp.CreateCompatibleBitmap(pDC,15,15);
//Draw the screen
pDC->BitBlt( SCREENX_L + CELLSIZEX*(i),SCREENY_T + CELLSIZEY*(j ),SCREENX_L + CELLSIZEX*(i) + CELLSIZEX,SCREENY_T + CELLSIZEY*(j+1),&mdc,0,0,SRCCOPY);
//relieve the resource of the objects which I have gotten.
SelectObject(mdc,hOldObject);
DeleteObject(hOldObject);
DeleteObject(_Blockbmp);
DeleteDC (mdc) ;
// mdc.release
// ReleaseDC(((HWND)pView),&mdc);
/*CDC mdc;
mdc.CreateCompatibleDC(pDC);
CBitmap bitmap;
mdc.SelectObject(_Blockbmp);//
pDC->BitBlt( x + CELLSIZEX*_positionX,y + CELLSIZEY*_positionY,x + CELLSIZEX*_positionX + CELLSIZEX,y + CELLSIZEY*_positionY+ CELLSIZEY,&mdc,0,0,SRCCOPY);
DeleteDC(mdc);*/
}
}
}
}
void m_Screen::Reduceblock(int _CursorX)
{
/*int j = (_CursorX-SCREENX_L)/CELLSIZEX;
if (j== 0)
{
int b = 0;
}
if(j<(MAP_MAXX-1))
{
for(int i = 0;i<(MAP_MAXY-1);i++)
{
if((_map[j][i]!=-1)&&(_map[j][i+1]!=-1)&&(_map[j+1][i]!=-1)&&(_map[j+1][i+1]!=-1))
{
if((_map[j][i]==_map[j][i+1])&&(_map[j][i+1]==_map[j+1][i])&&(_map[j+1][i]==_map[j+1][i+1]))
{
btmp[i][0]=true;
btmp[i+1][0] = true;
btmp[i][1] = true;
btmp[i+1][1] = true;
}
}
}
}
if ((j>=0)&&(j<=(MAP_MAXX-1)))
{
for (int i = 0;i<MAP_MAXY;i++)
{
if(btmp[i][0]==true)
{
for(int u = i;u>0;u--)
{
_map[j][u]=_map[j][u-1];
}
_map[j][0]=-1;
}
}
for (int i = 0;i<MAP_MAXY;i++)
{
btmp[i][0] = btmp[i][1];
btmp[i][1] = false;
}
}*/
int j = (_CursorX-SCREENX_L)/CELLSIZEX;
if ((j>=0)&&(j<=(MAP_MAXX-1)))
{
for(int i = 0;i<MAP_MAXY;i++)
{
if(_map[j][i] >= 2)
{
for(int u = i;u>0;u--)
{
_map[j][u]=_map[j][u-1];
}
_map[j][0]=-1;
score +=10;
if (score >= MaxNum )
{
CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
// pMain->LevelUp();
pMain->SendMessage(WM_LEVELUP,0,0);
}
}
}
}
if (j>0)
{
for (int i = 1;i<MAP_MAXY;i++)
{
SetGray(j-1,i);
}
}
}
void m_Screen::SetSharp2(void)
{
_QueuePrp.SetPosition(0,0,0);
_QueuePrp.SetPosition(1,1,0);
_QueuePrp.SetPosition(2,0,-1);
_QueuePrp.SetPosition(3,1,-1);
}
bool m_Screen::HasFailed(void)
{
if ((MAP_BottomY == 0)||(MAP_BottomY == 1))//MAP_BottomY-1)
{
return true;
}
return false;
}
void m_Screen::SetGray(int inMap_BottomX, int inMap_BottomY)
{
if (_map[inMap_BottomX][inMap_BottomY] == -1)
{
return;
}
if (((inMap_BottomY-1)>= 0)&&((inMap_BottomX -1)>= 0))
{
int a,b,c,d;
a = _map[inMap_BottomX][inMap_BottomY]%2;
b = _map[inMap_BottomX-1][inMap_BottomY]%2;
c = _map[inMap_BottomX-1][inMap_BottomY-1]%2;
d = _map[inMap_BottomX][inMap_BottomY-1]%2;
if((a== b)&&(b==c)&&(c==d))
{
_map[inMap_BottomX][inMap_BottomY]+=2;
_map[inMap_BottomX-1][inMap_BottomY]+=2;
_map[inMap_BottomX-1][inMap_BottomY-1]+=2;
_map[inMap_BottomX][inMap_BottomY-1] +=2;
}
}
if (((inMap_BottomY)<= (MAP_MAXY-2))&&((inMap_BottomX -1)>= 0))
{
int a,b,c,d;
a = _map[inMap_BottomX][inMap_BottomY]%2;
b = _map[inMap_BottomX-1][inMap_BottomY]%2;
c = _map[inMap_BottomX-1][inMap_BottomY+1]%2;
d = _map[inMap_BottomX][inMap_BottomY+1]%2;
if((a== b)&&(b==c)&&(c==d))
{
_map[inMap_BottomX][inMap_BottomY]+=2;
_map[inMap_BottomX-1][inMap_BottomY]+=2;
_map[inMap_BottomX][inMap_BottomY+1]+=2;
_map[inMap_BottomX-1][inMap_BottomY+1] +=2;
}
}
if (((inMap_BottomY)<= (MAP_MAXY-2))&&((inMap_BottomX)<= (MAP_MAXX-2)))
{
int a,b,c,d;
a = _map[inMap_BottomX][inMap_BottomY]%2;
b = _map[inMap_BottomX+1][inMap_BottomY]%2;
c = _map[inMap_BottomX+1][inMap_BottomY+1]%2;
d = _map[inMap_BottomX][inMap_BottomY+1]%2;
if((a== b)&&(b==c)&&(c==d))
{
_map[inMap_BottomX][inMap_BottomY]+=2;
_map[inMap_BottomX+1][inMap_BottomY]+=2;
_map[inMap_BottomX+1][inMap_BottomY+1]+=2;
_map[inMap_BottomX][inMap_BottomY+1] +=2;
}
}
if (((inMap_BottomY-1)>= 0)&&((inMap_BottomX)<= (MAP_MAXX-2)))
{
int a,b,c,d;
a = _map[inMap_BottomX][inMap_BottomY]%2;
b = _map[inMap_BottomX+1][inMap_BottomY]%2;
c = _map[inMap_BottomX+1][inMap_BottomY-1]%2;
d = _map[inMap_BottomX][inMap_BottomY-1]%2;
if((a== b)&&(b==c)&&(c==d))
{
_map[inMap_BottomX][inMap_BottomY]+=2;
_map[inMap_BottomX+1][inMap_BottomY]+=2;
_map[inMap_BottomX+1][inMap_BottomY-1]+=2;
_map[inMap_BottomX][inMap_BottomY-1] +=2;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -