亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mapeditview.cpp

?? 超級瑪麗經典小游戲源碼,供大家參考學習.
?? CPP
字號:
// MapEditView.cpp : implementation of the CMapEditView class
//

#include "stdafx.h"
#include "MapEdit.h"

#include "MapEditDoc.h"
#include "MapEditView.h"
#include "MapWidthDlg.h"
#include "ObjectTypeDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

enum
{ 
	BRICK1, BRICK2, BRICK3, GRASS, CLOUD, HILL, MARK, TUBE, BUILDING,
	GHOST1, GHOST2, GHOST3,
};

enum
{
	SURF_NONE = -1,
	SURF_SOLID,
	SURF_BRICK,
	SURF_COIN,
	SURF_MUSHROOM,
};

const int TILE_W = 32;
const int TILE_H = 32;


CSize GetSize( UINT object )
{
	int w, h;

	switch( object )
	{
	case BRICK1:
	case BRICK2:
	case BRICK3:
	case MARK:
		w = 1;
		h = 1;
		break;

	case GRASS:
		w = 3;
		h = 1;
		break;

	case CLOUD:
	case HILL:
		w = 3;
		h = 2;
		break;

	case TUBE:
		w = 2;
		h = 2;
		break;

	case GHOST1:
		w = h = 1;
		break;

	case GHOST2:
	case GHOST3:
		w = 1;
		h = 2;
		break;

	case BUILDING:
		w = h = 5;
		break;
	}
	
	return CSize(w * TILE_W, h * TILE_H );
}


/////////////////////////////////////////////////////////////////////////////
// CMapEditView

IMPLEMENT_DYNCREATE(CMapEditView, CScrollView)

BEGIN_MESSAGE_MAP(CMapEditView, CScrollView)
	//{{AFX_MSG_MAP(CMapEditView)
	ON_WM_MOUSEMOVE()
	ON_WM_RBUTTONDOWN()
	ON_COMMAND(ID_EDIT_MAPWIDTH, OnEditMapwidth)
	ON_WM_LBUTTONDOWN()
	//}}AFX_MSG_MAP
	ON_COMMAND_RANGE( ID_BRICK1, ID_GHOST3, OnSelectObject )
	ON_UPDATE_COMMAND_UI_RANGE( ID_BRICK1, ID_GHOST3, OnUpdateObject )
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMapEditView construction/destruction

CMapEditView::CMapEditView()
{
	m_object = BRICK1;
	m_tilex = 0;
	m_tiley = 0;

	m_bmTiles.LoadBitmap( IDB_TILES );
	m_bmGhosts[0].LoadBitmap( IDB_GHOST1 );
	m_bmGhosts[1].LoadBitmap( IDB_GHOST2 );
	m_bmGhosts[2].LoadBitmap( IDB_GHOST3 );
}

CMapEditView::~CMapEditView()
{

}

BOOL CMapEditView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMapEditView drawing

void CMapEditView::OnDraw(CDC* pDC)
{
	CMapEditDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	CDC dcMem;
	CBitmap bitmap, *pbmOld;
	dcMem.CreateCompatibleDC( pDC );
	bitmap.CreateCompatibleBitmap( pDC, 640, 480 );
	pbmOld = (CBitmap *)dcMem.SelectObject( &bitmap );
	dcMem.FillSolidRect( 0, 0, 640, 480, RGB(107,136,255) );
	
	int planex = GetScrollPosition().x;
	
	// draw tiles
	CDC dcTiles;
	dcTiles.CreateCompatibleDC( pDC );
	CBitmap *pbmOld1 = (CBitmap *)dcTiles.SelectObject( &m_bmTiles );
	int min = planex / TILE_W;
	int max = min + 20;
	int leftx = planex - min * TILE_W;
	int width = pDoc->m_width;
	int height = pDoc->m_height;
	char *tiles = pDoc->m_tiles;
	
	for( int i = 0; i < height; i ++ )
	{
		int destx = 0;
		for( int j = min; j <= max; j ++ )
		{
			int tile = tiles[i * width + j];
			if( tile >= 0 )
			{
				int desty = i * TILE_H;
				int srcx = (tile % 16) * TILE_W;
				int srcy = (tile / 16) * TILE_H;
				int w = TILE_W;
				int h = TILE_H;
				if( j == min )
					srcx += leftx;
				else if( j == max )
					w = leftx;
				
				dcMem.BitBlt( destx, desty, w, h, &dcTiles, srcx, srcy, SRCCOPY );
			}
			if( j == min )
				destx += TILE_W - leftx;
			else
				destx += TILE_W;
		}
	}
	dcTiles.SelectObject( pbmOld1 );
	dcTiles.DeleteDC();
	
	// draw ghosts
	for( i = 0; i < 3; i ++ )
		pDoc->m_ghostlist[i].Draw( &dcMem, &m_bmGhosts[i], planex );


	// draw focus rect
	CBrush *pbrOld = (CBrush *)dcMem.SelectStockObject( NULL_BRUSH );
	RECT rc;
	CSize size = GetSize( m_object );
	rc.left = m_tilex * TILE_W - planex;
	rc.right = rc.left + size.cx;
	rc.top = m_tiley * TILE_H;
	rc.bottom = rc.top + size.cy;
	dcMem.Rectangle( &rc );

	pDC->BitBlt( planex, 0, 640, 480, &dcMem, 0, 0, SRCCOPY );
	dcMem.SelectObject( pbmOld );
	dcMem.SelectObject( pbrOld );
}


void CMapEditView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	CSize sizeTotal;
	sizeTotal.cx = GetDocument()->m_width * TILE_W;
	sizeTotal.cy = GetDocument()->m_height * TILE_H;
	SetScrollSizes(MM_TEXT, sizeTotal);
}

/////////////////////////////////////////////////////////////////////////////
// CMapEditView diagnostics

#ifdef _DEBUG
void CMapEditView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CMapEditView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CMapEditDoc* CMapEditView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMapEditDoc)));
	return (CMapEditDoc*)m_pDocument;
}
#endif //_DEBUG


char CMapEditView::GetTile( int x, int y )
{
	int width = GetDocument()->m_width;
	int height = GetDocument()->m_height;
	if( x >= 0 && x < width &&
		y >= 0 && y < height )
	{
		return GetDocument()->m_tiles[y*width+x];
	}
	return -1;
}

void CMapEditView::SetTile( int x, int y, char tile )
{
	int width = GetDocument()->m_width;
	int height = GetDocument()->m_height;
	if( x >= 0 && x < width &&
		y >= 0 && y < height )
	{
		GetDocument()->m_tiles[y*width+x] = tile;
		GetDocument()->SetModifiedFlag();
	}
}


char CMapEditView::GetSurface( int x, int y )
{
	int width = GetDocument()->m_width;
	int height = GetDocument()->m_height;
	if( x >= 0 && x < width &&
		y >= 0 && y < height )
	{
		return GetDocument()->m_surface[y*width+x];
	}
	return -1;
}


void CMapEditView::SetSurface( int x, int y, char surf )
{
	int width = GetDocument()->m_width;
	int height = GetDocument()->m_height;
	if( x >= 0 && x < width &&
		y >= 0 && y < height )
	{
		GetDocument()->m_surface[y*width+x] = surf;
		GetDocument()->SetModifiedFlag();
	}
}

/////////////////////////////////////////////////////////////////////////////
// CMapEditView message handlers

void CMapEditView::OnSelectObject( UINT nID )
{
	m_object = nID - ID_BRICK1;
}

void CMapEditView::OnUpdateObject( CCmdUI *pCmdUI )
{
	pCmdUI->SetCheck( pCmdUI->m_nID - ID_BRICK1 == m_object );
}

void CMapEditView::OnMouseMove(UINT nFlags, CPoint point)
{
	CClientDC dc(this);
	OnPrepareDC( &dc );
	dc.DPtoLP( &point );

	int tilex = point.x / TILE_W;
	int tiley = point.y / TILE_H;
	if( tilex != m_tilex || tiley != m_tiley )
	{
		m_tilex = tilex;
		m_tiley = tiley;
		Invalidate( FALSE );
	}
	
	CScrollView::OnMouseMove(nFlags, point);
}


void CMapEditView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	int x = m_tilex * TILE_W;
	int y = m_tiley * TILE_H;
	if( m_object == GHOST2 || m_object == GHOST3 )
		y += 16;
	if( m_object == GHOST1 ||
		m_object == GHOST2 ||
		m_object == GHOST3 )
	{
		int i = m_object - GHOST1;
		GetDocument()->m_ghostlist[i].Delete( x, y );
	}
	else
	{
		if( GetSurface( m_tilex, m_tiley ) == SURF_BRICK &&
			GetTile( m_tilex, m_tiley+1 ) == 20 )
			SetTile( m_tilex, m_tiley+1, 0 );

		SetTile( m_tilex, m_tiley, -1 );
		SetSurface( m_tilex, m_tiley, SURF_NONE );
	}

	Invalidate( FALSE );
	
	CScrollView::OnRButtonDown(nFlags, point);
}

void CMapEditView::OnEditMapwidth() 
{
	CMapWidthDlg dlg;
	int &width = GetDocument()->m_width;
	int &height = GetDocument()->m_height;
	BOOL &darken = GetDocument()->m_darken;
	dlg.m_width = width;
	dlg.m_bDarken = darken;
	
	if( dlg.DoModal() == IDOK )
	{
		if( dlg.m_width < width &&
			AfxMessageBox(IDS_WARNING, MB_YESNO) == IDNO )
			return;
		
		if( dlg.m_width != width )
		{
			GetDocument()->Resize( dlg.m_width );
			CSize sizeTotal;
			sizeTotal.cx = width * TILE_W;
			sizeTotal.cy = height * TILE_H;
			SetScrollSizes(MM_TEXT, sizeTotal);
		}
		darken = dlg.m_bDarken;
		GetDocument()->SetModifiedFlag();
	}
}


void CMapEditView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	if( nFlags & MK_CONTROL )
	{
		Property();
		return;
	}
	

	int &x = m_tilex;
	int &y = m_tiley;

	switch( m_object )
	{
	case BRICK1:
		if( GetSurface( x, y - 1 ) != SURF_BRICK )
			SetTile( x, y, 0 );
		else
			SetTile( x, y, 20 );

		if( GetTile( x, y + 1 ) == 0 )
			SetTile( x, y + 1, 20 );

		SetSurface( x, y, SURF_BRICK );
		break;

	case BRICK2:
		SetTile( x, y, 1 );
		SetSurface( x, y, SURF_SOLID );
		break;

	case BRICK3:
		SetTile( x, y, 19 );
		SetSurface( x, y, SURF_SOLID );
		break;

	case GRASS:
		SetTile( x, y, 2 );
		SetTile( x + 1, y, 3 );
		SetTile( x + 2, y, 4 );
		break;

	case CLOUD:
		SetTile( x + 1, y, 8 );
		SetTile( x, y + 1, 5 );
		SetTile( x + 1, y + 1, 6 );
		SetTile( x + 2, y + 1, 7 );
		break;

	case HILL:
		SetTile( x + 1, y, 12 );
		SetTile( x, y + 1, 9 );
		SetTile( x + 1, y + 1, 10 );
		SetTile( x + 2, y + 1, 11 );
		break;

	case MARK:		// question mark
		SetTile( x, y, 13 );
		SetSurface( x, y, SURF_COIN );
		break;

	case TUBE:
		SetTile( x, y, 16 );
		SetTile( x + 1, y, 17 );
		SetTile( x, y + 1, 14 );
		SetTile( x + 1, y + 1, 15 );
		
		SetSurface( x, y, SURF_SOLID );
		SetSurface( x + 1, y, SURF_SOLID );
		SetSurface( x, y + 1, SURF_SOLID );
		SetSurface( x + 1, y + 1, SURF_SOLID );
		break;

	case GHOST1:
	case GHOST2:
	case GHOST3:
		{
			int i = m_object - GHOST1;
			int spritex = x * TILE_W;
			int spritey = y * TILE_H;
			if( m_object == GHOST2 || m_object == GHOST3 )
				spritey += 16;
			
			GetDocument()->m_ghostlist[i].Add( spritex, spritey );
			GetDocument()->SetModifiedFlag();
		}
		break;

	case BUILDING:
		SetTile( x + 1, y, 26 );
		SetTile( x + 2, y, 26 );
		SetTile( x + 3, y, 26 );
		SetTile( x + 1, y + 1, 24 );
		SetTile( x + 2, y + 1, 20 );
		SetTile( x + 3, y + 1, 25 );
		SetTile( x, y + 2, 26 );
		SetTile( x + 1, y + 2, 23 );
		SetTile( x + 2, y + 2, 23 );
		SetTile( x + 3, y + 2, 23 );
		SetTile( x + 4, y + 2, 26 );
		SetTile( x, y + 3, 20 );
		SetTile( x + 1, y + 3, 20 );
		SetTile( x + 2, y + 3, 22 );
		SetTile( x + 3, y + 3, 20 );
		SetTile( x + 4, y + 3, 20 );
		SetTile( x, y + 4, 20 );
		SetTile( x + 1, y + 4, 20);
		SetTile( x + 2, y + 4, 21 );
		SetTile( x + 3, y + 4, 20 );
		SetTile( x + 4, y + 4, 20 );
		break;
	}
	Invalidate( FALSE );
	
	CScrollView::OnLButtonDown(nFlags, point);
}



void CMapEditView::Property() 
{
	char tile = GetTile( m_tilex, m_tiley );
	char surf = GetSurface( m_tilex, m_tiley );

	if( tile == 13 )		// question mark
	{
		CObjectTypeDlg dlg;
		dlg.m_nObjectType = GetSurface( m_tilex, m_tiley ) - SURF_COIN;
		if( dlg.DoModal() == IDOK )
		{
			if( dlg.m_bHidden )
				SetTile( m_tilex, m_tiley, -1 );
			SetSurface( m_tilex, m_tiley, dlg.m_nObjectType + SURF_COIN );
		}
	}
	else if( surf == SURF_BRICK )
	{
		CObjectTypeDlg dlg;
		if( surf == SURF_NONE )
			dlg.m_nObjectType = -1;
		else
			dlg.m_nObjectType = surf - SURF_COIN;
		if( dlg.DoModal() == IDOK )
		{
			int object = dlg.m_nObjectType;
			if( object == -1 )
				SetSurface( m_tilex, m_tiley, SURF_NONE );
			else
				SetSurface( m_tilex, m_tiley, object + SURF_COIN );
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产999精品久久久久久绿帽| 国产精品国产精品国产专区不片| 色综合 综合色| 国产毛片精品视频| 国产呦萝稀缺另类资源| 九九九久久久精品| 国产精品一区免费视频| av不卡在线播放| av色综合久久天堂av综合| 一本色道亚洲精品aⅴ| 色婷婷国产精品| 91精品国产综合久久久久| 欧美变态凌虐bdsm| 国产精品视频九色porn| 一区二区理论电影在线观看| 亚洲www啪成人一区二区麻豆 | 国产成人精品亚洲午夜麻豆| 国产成人精品免费| 色噜噜狠狠色综合中国| 欧美亚洲国产怡红院影院| 欧美精品xxxxbbbb| 国产精品区一区二区三区| 亚洲成av人在线观看| 成人免费毛片片v| 欧美日韩国产123区| 国产精品午夜久久| 五月综合激情婷婷六月色窝| 国产风韵犹存在线视精品| 欧美年轻男男videosbes| 国产日韩亚洲欧美综合| 韩国在线一区二区| 欧美精品久久99久久在免费线 | 亚洲一区二区三区小说| 日韩精品亚洲一区二区三区免费| 丁香另类激情小说| 色拍拍在线精品视频8848| 3atv一区二区三区| 亚洲天堂成人在线观看| 午夜伊人狠狠久久| 国产精品一区免费视频| 久久久精品影视| 成人精品国产福利| 日韩欧美国产高清| 亚洲一区二区三区中文字幕在线| 色综合久久久久久久久| 裸体健美xxxx欧美裸体表演| 国产精品区一区二区三区| 欧美巨大另类极品videosbest | 精品午夜久久福利影院| 亚洲日本青草视频在线怡红院| 欧美电影影音先锋| 在线观看日韩一区| 成人动漫视频在线| 夜色激情一区二区| 欧美另类变人与禽xxxxx| 麻豆成人av在线| 国产精品的网站| 精品视频999| 国产精品综合视频| 亚洲国产欧美另类丝袜| 精品少妇一区二区三区免费观看 | 亚洲国产欧美一区二区三区丁香婷| 欧美日韩综合在线免费观看| 久久精品999| 一区二区三区在线影院| 久久久亚洲综合| 8x8x8国产精品| 99热这里都是精品| 国产精品一区免费在线观看| 亚洲国产一区二区在线播放| 中文字幕欧美三区| 精品日产卡一卡二卡麻豆| 91女神在线视频| 国产成人在线视频网站| 日韩高清国产一区在线| 亚洲色图视频网| 欧美高清在线视频| 久久精品免视看| 久久日一线二线三线suv| 欧美精品久久天天躁| 欧洲一区二区三区免费视频| 94色蜜桃网一区二区三区| 国产白丝精品91爽爽久久| 久久电影国产免费久久电影 | 国产成人精品免费网站| 国产成人啪午夜精品网站男同| 亚洲欧美视频在线观看| 一区二区三区高清在线| 亚洲综合999| 久久福利视频一区二区| 国产激情一区二区三区四区 | 国产欧美一区二区三区鸳鸯浴| www国产亚洲精品久久麻豆| 久久精品欧美日韩精品| 亚洲色图在线看| 亚洲va天堂va国产va久| 久久精品国产澳门| 国产成人在线免费| 色婷婷亚洲综合| 欧美一区二区免费视频| 国产精品美女久久久久av爽李琼| 99视频一区二区| av不卡免费在线观看| 欧美三级中文字| 久久久三级国产网站| 亚洲午夜久久久久久久久久久| 午夜精品福利视频网站 | 欧美电视剧在线观看完整版| 国产日产精品1区| 亚洲永久精品国产| 国产一区高清在线| 在线影视一区二区三区| 久久久亚洲欧洲日产国码αv| 亚洲一区二区欧美| 99re成人精品视频| 2020国产精品自拍| 亚洲成人午夜电影| 色偷偷成人一区二区三区91| 精品国产一区二区三区不卡| 亚洲一区二区欧美| 色综合久久天天| 亚洲少妇最新在线视频| 国产成人免费在线观看不卡| 日韩限制级电影在线观看| 亚洲一级在线观看| 欧美主播一区二区三区美女| 亚洲精选视频免费看| 福利一区二区在线| 中文字幕av一区二区三区高| 国产露脸91国语对白| 精品国产乱码久久久久久免费| 日日骚欧美日韩| 欧美乱妇一区二区三区不卡视频 | 九九久久精品视频| 欧美精品在线一区二区| 日韩成人免费电影| 精品免费视频.| 国产成人精品免费| 亚洲免费观看高清在线观看| 91视频www| 青娱乐精品视频| 2021国产精品久久精品| 成人午夜在线播放| 亚洲一区视频在线| 欧美日韩大陆在线| 国产成人av一区二区| 亚洲一区二区三区视频在线播放| 欧美日韩国产小视频在线观看| 麻豆精品新av中文字幕| 国产精品久久免费看| 3751色影院一区二区三区| 大白屁股一区二区视频| 香港成人在线视频| 国产女人18毛片水真多成人如厕 | 亚洲婷婷综合久久一本伊一区| 欧美午夜不卡在线观看免费| 国产精品18久久久久久久久久久久| 亚洲精品亚洲人成人网在线播放| 精品欧美乱码久久久久久1区2区| 色婷婷国产精品| 97久久精品人人澡人人爽| 国产真实乱子伦精品视频| 午夜亚洲福利老司机| 一区二区在线观看视频| 国产精品国产三级国产aⅴ入口| 欧美大片在线观看| 欧美一卡在线观看| 91精选在线观看| 色噜噜久久综合| 国产69精品久久久久毛片| 久久激情五月婷婷| 精品中文av资源站在线观看| 青娱乐精品视频| 麻豆91精品91久久久的内涵| 麻豆成人久久精品二区三区小说| 亚洲第一主播视频| 日韩成人一级大片| 成人v精品蜜桃久久一区| 欧美精品一二三区| 国产日韩欧美一区二区三区综合| 亚洲色大成网站www久久九九| 天天操天天综合网| 99免费精品视频| 日韩欧美不卡在线观看视频| 国产精品国产自产拍高清av| 日本大胆欧美人术艺术动态| 不卡一区中文字幕| 精品三级av在线| 亚洲小说欧美激情另类| 日韩av一区二区三区四区| 国产精品一卡二| 欧美老肥妇做.爰bbww视频| 欧美一区二区成人6969| 亚洲1区2区3区视频| 色呦呦一区二区三区| 国产精品毛片久久久久久| 久久99精品久久久| 精品国产青草久久久久福利| 国产呦精品一区二区三区网站| 日韩你懂的在线播放|