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

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

?? cbbuild.cpp

?? 赤壁之戰的游戲源代碼
?? CPP
字號:
/////////////
//	CBBuild.cpp		:	v0011
//	Written by		:	Liu Gang
//	Compiler		:	Microsoft Visual C++ 4.0 & DirectX
//	Library			:	DDraw.Lib
//	Copyright (C)	:	1996 WayAhead Corporation
//	v0010			:	Mar.7.1997
//	v0011			:	Mar.28.1997, changed BUILD_sBorder to BUILD_ptBorder
/////////////
// implementation file
// display build maps when placing buildings
// 當建造建筑時,點擊一個建筑按鈕后,鼠標變成一個建筑的影象,
// 隨著鼠標移動,戰場上能夠建造建筑的地方(格子)為綠色網格覆蓋,
// 不能建造的地方為紅色網格覆蓋,本文件就是顯示這個部分。

#include "stdafx.h"
#include "Assert.h"
#include "CBBuild.h"
#include "DDCompo.h"
#include "CBMAP.h"
#include "CBMouse.h"
#include "CBDraw.h"

#include<stdio.h>
/////////////
// members, globals
BOOL BUILD_bEnable = FALSE;
class	CDDSurface BUILD_sBack, *BUILD_psBorder;
BOOL BUILD_bCreated = FALSE;
SIZE BUILD_szBack = {144, 120};	// 背景面的大小
SIZE BUILD_szItem = {0, 0};		// 圖素的大小
SIZE BUILD_szBorder = {0, 0};	// 圖素邊界的大小
int	 BUILD_nSize=0;				// 圖素的大小類型
int BUILD_nLocationNum[4] = { 1, 4, 9, 16 };
/////////////

//////////////////
// other map surfaces, in CBDraw.cpp
extern class	CDDSurface	DRAW_sOtherMap[MAP_OTHER_NUM];
//////////////////

/////////////
DWORD BUILD_nCode;
BOOL BUILD_bLocation[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/////////////

//---------------LWC
#ifdef	_MAP_COMPRESS_
#include "L_image.h"
extern class  CPicture_image	DRAW_ImageLib;	// CBDraw.cpp
extern RECT DRAW_rcClient;						// CBDraw.cpp
extern POINT MAP_ptLocation[2][MAP_LOCATION_MAX];		// CBMap.cpp
#endif
//---------------LWC

/////////////
// declared in CBDraw.cpp
extern POINT DRAW_ptScreenOffset;
/////////////


void BUILD_draw2Back( LPRECT prcCut, int nLayer, POINT ptPosG, BOOL bFront = FALSE );
void BUILD_drawBorders( LPRECT prcCut, POINT ptPosG );
void BUILD_drawBorder( LPRECT prcCut, int nLayer, POINT ptTopLeftG, int nType );

/////////////
BOOL BUILD_Load()
{
#ifdef	_DEBUG
	if( BUILD_bCreated )
	{
		ErrorMessage( hwndGame, BUILD_ERROR_ID+0, "Shadow surfaces have been created!" );
		return FALSE;
	}
#endif

	// has color key , in system memory
	if( !BUILD_sBack.Create( BUILD_szBack.cx, BUILD_szBack.cy, TRUE, FALSE ) )
	{
//		OutputDebugString( "BUILD_Load: Cannot create back surface in video memory!\n" );
//		if( !BUILD_sBack.Create( BUILD_szBack.cx, BUILD_szBack.cy, TRUE, FALSE ) )
		{
			ErrorMessage( hwndGame, BUILD_ERROR_ID+1, "Cannot create build background surface!" );
			return FALSE;
		}
	}

	// load shadow source image file
	// color key, system memory
	//if( !BUILD_sBorder.LoadBitmap( filename, TRUE, FALSE ) )
	BUILD_psBorder = &DRAW_sOtherMap[5];
	if( BUILD_psBorder == NULL || BUILD_psBorder->GetSurface() == NULL )
	{
		ErrorMessage( hwndGame, BUILD_ERROR_ID+2, "Cannot create build border surface!" );
		return FALSE;
	}

	BUILD_bCreated = TRUE;
	return TRUE;
}

void BUILD_Release()
{
#ifdef	_DEBUG
	if( !BUILD_bCreated )
	{
		ErrorMessage( hwndGame, BUILD_ERROR_ID+10, "Try to release build surfaces before load them!" );
		return;
	}
#endif

	BUILD_sBack.Release();
	//BUILD_sBorder.Release();
	BUILD_bCreated = FALSE;
}
/////////////

/////////////
// 把建筑的影像貼到建造背景面中
void BUILD_Set( DWORD codeU )
{
#ifdef	_DEBUG
	if( BUILD_bCreated == FALSE )
		OutputDebugString( "BUILD_Set Error(0): the surfaces have not been created!\n" );
	if( codeU == MAP_DATA_NONE )
		OutputDebugString( "BUILD_Set Error(0): code is invalid!\n" );
#endif

	struct MAP_UNIT_CODE_STRUCT stctU;
	MAP_UnitDeCode( codeU, &stctU );
	
	BUILD_nCode = codeU;

	// set size
	BUILD_nSize = MAP_Lib.Unit[stctU.nFile].nLocationSize;
	int nFrame = MAP_Lib.AniSeq[stctU.nFile].nOffset;

	// set size of item
	BUILD_szItem = MAP_Lib.Unit[stctU.nFile].szItem;

	// calc border size
	BUILD_szBorder.cx = (BUILD_nSize+1)*MAP_Lib.szItem.cx;
	BUILD_szBorder.cy = (BUILD_nSize+1)*MAP_Lib.szItem.cy;

	// clear the background surface
	BUILD_sBack.Erase();

	LPDIRECTDRAWSURFACE2 pSurDest = BUILD_sBack.GetSurface();
	DDSURFACEDESC       ddsdDest;
	ddsdDest.dwSize = sizeof( ddsdDest );

	// 注意:這里有一個容易引起錯誤的地方:
	// P_image()的第三個參數,不應該是ddsdDest.dwWidth,而應該是
	// ddsdDest.lPitch,這是指指針換行所應跳過的距離
	// 在很多情況下,這兩個值是相等,而在這里第一次貼圖時不是。
	if( pSurDest->Lock( NULL, &ddsdDest, DDLOCK_WAIT, NULL ) == DD_OK )
	{
		DRAW_ImageLib.P_image(0, 0, ddsdDest.lPitch, 
				(char*)ddsdDest.lpSurface,
				0, nFrame );
		pSurDest->Unlock( NULL );
	}
}

void BUILD_draw2Back( LPRECT prcCut, int nLayer, POINT ptPosG, BOOL bFront )
{
	POINT ptPos;
	RECT rcCutOld, rcCut;
	POINT ptTopLeft;
	POINT ptDest;
	RECT rcSrc;

#ifdef	_DEBUG
	if( BUILD_bCreated == FALSE )
		OutputDebugString( "BUILD_Set Error(0): the surfaces have not been created!\n" );
#endif

	// change grid to point
	ptPos = MOUSE_Grid2Point( nLayer, ptPosG );

	// get origenal destination rectangle on screen
	ptTopLeft.x = ptPos.x - (BUILD_szItem.cx>>1);
	ptTopLeft.y = ptPos.y + (MAP_Lib.szItem.cy>>1) - BUILD_szItem.cy;
	SetRect( &rcCutOld, ptTopLeft.x, ptTopLeft.y, 
			ptTopLeft.x+BUILD_szItem.cx, ptTopLeft.y+BUILD_szItem.cy );
	if( !IntersectRect( &rcCut, &rcCutOld, prcCut ) )
		return;

	// calc positions
	ptDest.x = rcCut.left, ptDest.y = rcCut.top;
	rcSrc.left = rcCut.left - rcCutOld.left;
	rcSrc.top = rcCut.top - rcCutOld.top;
	rcSrc.right = BUILD_szItem.cx - (rcCutOld.right - rcCut.right);
	rcSrc.bottom = BUILD_szItem.cy - (rcCutOld.bottom - rcCut.bottom);
	
	// draw to back
	BUILD_sBack.BltToBack( ptDest, &rcSrc );

	// draw from back buffer to front buffer
	if( bFront )
		DDC_UpdateScreen( prcCut );
}

void BUILD_drawBorder( LPRECT prcCut, POINT ptTopLeft, int nType )
{
	RECT rcCutGOld, rcCutG;
	POINT ptDest;
	RECT rcSrc;

	SetRect( &rcCutGOld, ptTopLeft.x, ptTopLeft.y,
		ptTopLeft.x+MAP_Lib.szItem.cx, ptTopLeft.y+MAP_Lib.szItem.cy );
	if( !IntersectRect( &rcCutG, &rcCutGOld, prcCut ) )
		return;

	ptDest.x = rcCutG.left, ptDest.y = rcCutG.top;
	rcSrc.left = rcCutG.left - rcCutGOld.left;
	rcSrc.top = rcCutG.top - rcCutGOld.top + nType*MAP_Lib.szItem.cy;
	rcSrc.right = MAP_Lib.szItem.cx + ( rcCutG.right - rcCutGOld.right );
	rcSrc.bottom = MAP_Lib.szItem.cy + ( rcCutG.bottom - rcCutGOld.bottom ) 
					+ nType*MAP_Lib.szItem.cy;

	//BUILD_sBorder.BltToBack( ptDest, &rcSrc );
	BUILD_psBorder->BltToBack( ptDest, &rcSrc );
}

void BUILD_drawBorders( LPRECT prcCut, int nLayer, POINT ptPosG )
{
	POINT ptTopLeft, ptPosGNext;

	int bOdd = ptPosG.y%2;
	for( int i=0; i< BUILD_nLocationNum[BUILD_nSize]; i++ )
	{
		// get positions in this location			
		ptPosGNext.x = ptPosG.x + MAP_ptLocation[bOdd][i].x;
		ptPosGNext.y = ptPosG.y + MAP_ptLocation[bOdd][i].y;
		// change grid to point
		ptTopLeft = MOUSE_Grid2Point( nLayer, ptPosGNext );
		ptTopLeft.x -= MAP_Lib.szItem.cx>>1;
		ptTopLeft.y -= MAP_Lib.szItem.cy>>1;
		if( BUILD_bLocation[i] == MAP_REGION_SUCCESS )
		{
			BUILD_drawBorder( prcCut, ptTopLeft, 1 );
		}
		else
		{
			BUILD_drawBorder( prcCut, ptTopLeft, 0 );
		}
	}
}

void BUILD_Enable( BOOL bEnable/* = TRUE*/ )
{
	BUILD_bEnable = bEnable;
}

inline BOOL BUILD_IfEnable()
{
	return BUILD_bEnable;
}

void BUILD_Draw( LPRECT prcCut/*=NULL*/ )
{
	POINT ptPos, ptPosG;

	if( !BUILD_bEnable )	return;
	
	// get mouse cursor position
	GetCursorPos( &ptPos );

	// change positoin to grids
	struct MOUSE_HITRESULT_STRUCT hit;
	if( !MOUSE_HitTestG( ptPos, &hit, 0 ) )	return;
	Assert( hit.nType == MOUSE_HITRESULT_GROUND );
	ptPosG = hit.ptHit;

	// draw building image to back buffer
	BUILD_draw2Back( prcCut, 0, ptPosG );

	// draw border indicate can build or not
	// calc points
	MAP_TestRegionBuild( 0, ptPosG, BUILD_nCode, BUILD_bLocation, BUILD_nLocationNum[BUILD_nSize] );
	// draw
	BUILD_drawBorders( prcCut, 0, ptPosG );
}

int BUILD_IfCan()
{
	if( !BUILD_bEnable )
	{
		OutputDebugString( "CBBuild BUILD_IfCan() Warning(1): test build result before set it!\n" );
		return FALSE;
	}
	
	for( int i=0; i<BUILD_nLocationNum[BUILD_nSize]; i++ )
	{
		if( BUILD_bLocation[i] != MAP_REGION_SUCCESS )
			return BUILD_bLocation[i];
	}
	return MAP_REGION_SUCCESS;
}
/////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美国三级日本三级久久99| 国产亚洲1区2区3区| 亚洲视频一区在线| 精品系列免费在线观看| 日韩欧美一级二级三级久久久| 夜夜嗨av一区二区三区中文字幕 | 午夜欧美视频在线观看| 日本福利一区二区| 亚洲一区二区三区三| 欧美亚洲精品一区| 亚洲曰韩产成在线| 欧美日韩国产电影| 看国产成人h片视频| 日韩精品一区二区三区三区免费| 免费人成黄页网站在线一区二区| 91精品国产一区二区| 人禽交欧美网站| 欧美日韩综合不卡| 青草av.久久免费一区| 日韩欧美国产一区二区三区| 日本伊人色综合网| 日韩欧美国产综合一区| 蜜臀久久久久久久| 欧美tk—视频vk| 国产九色sp调教91| 成人免费在线观看入口| 色偷偷久久一区二区三区| 欧美国产日韩a欧美在线观看| 久久99精品久久久| 国产精品蜜臀在线观看| 在线中文字幕不卡| 奇米在线7777在线精品| 久久综合狠狠综合| 91视频xxxx| 日韩av成人高清| 欧美肥妇free| 国产成人无遮挡在线视频| 一区二区成人在线| 精品久久99ma| 一本大道av伊人久久综合| 天堂成人免费av电影一区| 久久夜色精品一区| 色8久久人人97超碰香蕉987| 免费成人av在线| 18涩涩午夜精品.www| 91精品国产91久久综合桃花 | 久久精品亚洲精品国产欧美kt∨| 99久久99久久久精品齐齐| 亚洲国产成人高清精品| 亚洲精品一区二区三区香蕉 | 99精品视频在线播放观看| 亚洲成a天堂v人片| 亚洲国产成人午夜在线一区| 欧美偷拍一区二区| 国产.欧美.日韩| 日韩一区欧美二区| 亚洲免费在线观看视频| 日韩丝袜美女视频| 91亚洲精品久久久蜜桃网站| 精彩视频一区二区| 亚洲午夜国产一区99re久久| 中文字幕乱码一区二区免费| 欧美色电影在线| 9i看片成人免费高清| 蜜臀av一区二区三区| 中文字幕制服丝袜成人av| 91精品国产综合久久久久| 成人午夜电影网站| 日韩精品一级中文字幕精品视频免费观看 | 欧美午夜一区二区三区| 国产99久久久国产精品| 麻豆精品视频在线| 亚洲图片欧美一区| 亚洲欧洲制服丝袜| 国产日韩欧美精品综合| 91精品国产色综合久久ai换脸| 在线影院国内精品| 91网站在线播放| 成人av在线资源| 国产·精品毛片| 国精产品一区一区三区mba视频| 亚洲一区二区三区中文字幕| 国产精品久久毛片av大全日韩| 日韩女优毛片在线| 91精品国产色综合久久ai换脸| 91黄色激情网站| 白白色 亚洲乱淫| 成人久久视频在线观看| 懂色av一区二区三区免费观看 | 国产精品嫩草影院com| 久久一留热品黄| 精品第一国产综合精品aⅴ| 3d动漫精品啪啪一区二区竹菊| 日本二三区不卡| 欧美午夜一区二区三区免费大片| 色综合天天综合| 91麻豆swag| 欧洲亚洲精品在线| 欧美日韩五月天| 欧美精品在线观看播放| 欧美妇女性影城| 日韩欧美国产1| 亚洲精品在线一区二区| 久久久久久久一区| 国产精品久线观看视频| 亚洲天天做日日做天天谢日日欢 | 国产精品国产a| 亚洲精品乱码久久久久久黑人 | 99视频有精品| 欧美图区在线视频| 欧美日韩www| 欧美成人a在线| 国产三级精品三级| 亚洲视频免费观看| 亚洲sss视频在线视频| 蜜臀av亚洲一区中文字幕| 国内精品久久久久影院色| 国产成人精品一区二区三区网站观看 | 国产一区二区三区日韩| 久久se这里有精品| 国产麻豆成人精品| 93久久精品日日躁夜夜躁欧美| 欧美日韩国产美| www久久久久| 亚洲日本在线视频观看| 五月天激情综合网| 国产剧情在线观看一区二区| 波多野结衣91| 欧美精品 国产精品| 久久久久88色偷偷免费| 综合久久国产九一剧情麻豆| 亚洲国产精品一区二区久久| 六月丁香综合在线视频| 成人av手机在线观看| 在线观看一区二区精品视频| 久久99久久99| 91免费看`日韩一区二区| 欧美一二三在线| 国产999精品久久| 色偷偷88欧美精品久久久| 欧美精品自拍偷拍| 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品热久久久久夜色精品三区 | 风间由美一区二区三区在线观看| 亚洲午夜久久久久久久久电影院 | 99re这里只有精品首页| 色菇凉天天综合网| 日韩免费高清av| 一区二区三区在线视频免费观看| 美女网站色91| 色偷偷久久一区二区三区| 精品久久久网站| 午夜精品aaa| 亚洲电影在线免费观看| 国产一区二区三区电影在线观看 | 国产精品1区2区3区在线观看| 欧美放荡的少妇| 亚洲成a天堂v人片| 色综合夜色一区| 综合网在线视频| 在线一区二区视频| 夜夜精品视频一区二区| 欧美中文字幕一区二区三区亚洲 | 亚洲综合在线电影| 在线观看免费成人| 亚洲一区二区成人在线观看| 色综合久久综合网欧美综合网 | 一本色道综合亚洲| 亚洲免费在线电影| 欧美性高清videossexo| 亚洲成av人片在线观看无码| 欧美亚洲国产怡红院影院| 亚洲最新视频在线播放| 欧美视频精品在线观看| 日韩国产一二三区| 精品乱人伦一区二区三区| 精品一区二区三区av| 亚洲国产精品av| 91日韩在线专区| 午夜精品久久久久久久久久 | 欧美在线免费观看亚洲| 亚洲成av人片一区二区梦乃| 欧美日韩卡一卡二| 蜜桃视频第一区免费观看| 精品国产sm最大网站免费看| 国产成人鲁色资源国产91色综 | 国产三区在线成人av| 99视频一区二区三区| 亚洲国产综合91精品麻豆| 欧美一区二区三区日韩| 国产成人亚洲精品狼色在线| 国产精品传媒入口麻豆| 欧美欧美欧美欧美首页| 国产一本一道久久香蕉| 1000部国产精品成人观看| 在线成人高清不卡| 国产经典欧美精品| 一区二区三区毛片| 久久综合网色—综合色88| 不卡一区二区三区四区|