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

📄 参考代码.cpp

📁 斗地主源码
💻 CPP
字号:

//从位图载入到表面的代码;

/*
	if (!pMy_Draw->Load_Bitmap_File(&pMy_Draw->bitmap,"desk.bmp"))
	{
	    return(0);
	}
// lock the surface
	lpddsbackground->Lock(NULL,&pMy_Draw->ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL);

// get video pointer to primary surfce
	       
	DWORD *image_buffer = (DWORD *)pMy_Draw->ddsd.lpSurface;
// process each line and copy it into the primary buffer
	for (int index_y = 0; index_y < Screen_Height; index_y++)
    {
		for (int index_x = 0; index_x < Screen_Width; index_x++)
        {
        // get BGR values
        UCHAR blue  = (pMy_Draw->bitmap.buffer[index_y*Screen_Width*3 + index_x*3 + 0]),
              green = (pMy_Draw->bitmap.buffer[index_y*Screen_Width*3 + index_x*3 + 1]),
              red   = (pMy_Draw->bitmap.buffer[index_y*Screen_Width*3 + index_x*3 + 2]);

        // this builds a 32 bit color value in A.8.8.8 format (8-bit alpha mode)
        DWORD pixel = _RGB32BIT(0,red,green,blue);

        // write the pixel
        image_buffer[index_x + (index_y*pMy_Draw->ddsd.lPitch >> 2)] = pixel;

        } // end for index_x

    } // end for index_y

// now unlock the primary surface
	if (FAILED(lpddsbackground->Unlock(NULL)))
	{
		return(0);
	}

// unload the bitmap file, we no longer need it
	pMy_Draw->Unload_Bitmap_File(&pMy_Draw->bitmap);
*/
///////////////////////////////////////////////////////////////////////////////////

//渲染一个表面!COOL!

/*  渲染的例子;可以改变画像颜色;
DDRAW_INIT_STRUCT(ddsd); 

// lock the primary surface
if (FAILED(lpddsbackground->Lock(NULL, &ddsd,
                    DDLOCK_WAIT,
                   NULL)))
   return(0);


int lpitch32 = (int)(ddsd.lPitch >> 2);
UINT *video_buffer = (UINT *)ddsd.lpSurface;


	for (int index_y = 0; index_y < SCREEN_HEIGHT; index_y++)
    {
		for (int index_x = 0; index_x < SCREEN_WIDTH; index_x++)
        {
        // get BGR values
//        UCHAR blue  = (UCHAR)(video_buffer[index_x + (index_y*ddsd.lPitch >> 2)]) ,
//              green = (UCHAR)(video_buffer[index_x + (index_y*ddsd.lPitch >> 2)] >> 8),
//              red   = (UCHAR)(video_buffer[index_x + (index_y*ddsd.lPitch >> 2)] >> 16);

        // this builds a 32 bit color value in A.8.8.8 format (8-bit alpha mode)

//		green+=40;
//		blue-=30;


//        DWORD pixel = _RGB32BIT(0,red,green,blue);

        // write the pixel
//        video_buffer[index_x + (index_y*ddsd.lPitch >> 2)] = pixel;

		video_buffer[index_x + (index_y*ddsd.lPitch >> 2)] += 0x3000;

        } // end for index_x

    } // end for index_y      


if (FAILED(lpddsbackground->Unlock(NULL)))
   return(0);
*/


//	char buffer[256];   //记录键盘的缓冲区;	
//	HRESULT result = pDI_Keyborad->GetDeviceState(sizeof(buffer),(LPVOID)&buffer);  
//    if(result != DI_OK)
//	{
//		AfxMessageBox("取得键盘状态失败!");
//	}

///////////////////////////////////////////////////////////

//牌的布局代码;

/*
//中间的牌;
	if(person.counter < 20)
	{
//中间已出的牌;
	DDraw_Draw_Surface(person.frames[0], 
                       centerx1, centery1,
                       person.width,person.height,
                       lpddsback);
//中间没出的牌;
	if(counter%3 == 0)
	{
	DDraw_Draw_Surface(person.frames[0], 
                       centerx, centery-20,
                       person.width,person.height,
                       lpddsback);
	}
	else
	{
	DDraw_Draw_Surface(person.frames[0], 
                       centerx, centery,
                       person.width,person.height,
                       lpddsback);
	}

	centerx+=22;
	centerx1+=16;

	person.counter++;

	}
//左边的牌;
	if(counter < 20 )
	{
	DDraw_Draw_Surface(person.frames[1], 
                       leftx, lefty,
                       person.width,person.height,
                       lpddsback);
//左边已出的牌;
	DDraw_Draw_Surface(person.frames[0], 
                       leftx1, lefty1,
                       person.width,person.height,
                       lpddsback);

	lefty+=16;
	lefty1+=16;	
	}
//右边的牌;
	if(counter < 20 )
	{
		DDraw_Draw_Surface(person.frames[1], 
                       rightx, righty,
                       person.width,person.height,
                       lpddsback);
//已
		DDraw_Draw_Surface(person.frames[0], 
                       rightx1, righty1,
                       person.width,person.height,
                       lpddsback);

		righty1+=16;
		righty+=16;
		counter++;
	}
//左边刚出的牌
	if(counter2<12)
	{
	DDraw_Draw_Surface(person.frames[0], 
                       leftx2, lefty2,
                       person.width,person.height,
                       lpddsback);

	lefty2+=25;

//右边刚出的牌


	DDraw_Draw_Surface(person.frames[0], 
                       rightx2, righty2,
                       person.width,person.height,
                       lpddsback);

	righty2+=25;

//中间刚出的牌

	DDraw_Draw_Surface(person.frames[0], 
                       centerx2, centery2,
                       person.width,person.height,
                       lpddsback);
	centerx2+=25;

	counter2++;
	}
*/



	int Dealing_Cards_Center(int Current_x,
				int Card_Color,
				int Card_Value
							);


	int Dealing_Cards_Left(int Current_y);
	int Dealing_Cards_Right(int Current_y);


//发中间的牌;
int CDraw_Cards_Engine::Dealing_Cards_Center(int Current_x,int Card_Color,int Card_Value)
{
	int dx,dy,dx2,dy2,x_inc,y_inc,error;
	int x = Card_x,y = Card_y;

	dx = Current_x - Card_x;

	dy = Center_y0 - Card_y;
	
	if(dx>=0)
	{
		x_inc = 1;
	}
	else
	{
		x_inc = -1;
		dx = -dx;
	}

	if(dy >= 0)
	{
		y_inc = 1;
	}
	else
	{
		y_inc = -1;
		dy = -dy;
	}

	dx2 = dx << 1;
	dy2 = dy << 1;

//这里只考虑dy > dx;

	error = dx2 - dy;
	for(int i=0;i<int(dy);i++)
	{
		if(i%80 == 0)
		{
			Redraw_Game();
			Draw_A_Card(x,y,Card_Color,Card_Value,lpddsback);
			while (FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT)));
		}

		if(error >= 0)
		{
			error-=dy2;
			x+=x_inc;
		}
			error+=dx2;
			y+=y_inc;
	}//end for~

	Redraw_Game();
	Draw_A_Card(x,y,Card_Color,Card_Value,lpddsback);
	while (FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT)));
	return 1;
}

//发左边的牌;
int CDraw_Cards_Engine::Dealing_Cards_Left(int Current_y)
{
	int dx,dy,dx2,dy2,x_inc,y_inc,error;
	int x = Card_x,y = Card_y;

	dx = Left_x0 - Card_x;

	dy = Current_y - Card_y;
	
	if(dx>=0)
	{
		x_inc = 1;
	}
	else
	{
		x_inc = -1;
		dx = -dx;
	}

	if(dy >= 0)
	{
		y_inc = 1;
	}
	else
	{
		y_inc = -1;
		dy = -dy;
	}

	dx2 = dx << 1;
	dy2 = dy << 1;

	if(dx > dy)
	{
		error = dy2 - dx;
		for(int i=0;i<int(dx);i++)
		{
			if(i%140 == 0)
			{
				Redraw_Game();
				pMy_Draw->DDraw_Draw_Surface(lpddsbg_Cards[14], 
							x, y,
                       Cards_Width,Cards_Height,
                       lpddsback,1);

				while (FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT)));
			}

			if(error >= 0)
			{
				error-=dx2;
				y+=y_inc;
			}
			error+=dy2;
			x+=x_inc;
		}//end for~
	}
	else
	{
		error = dx2 - dy;
		for(int i=0;i<int(dy);i++)
		{
			if(i%140 == 0)
			{
				Redraw_Game();
				pMy_Draw->DDraw_Draw_Surface(lpddsbg_Cards[14], 
							x, y,
                       Cards_Width,Cards_Height,
                       lpddsback,1);

				while (FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT)));
			}

			if(error >= 0)
			{
				error-=dy2;
				x+=x_inc;
			}
			error+=dx2;
			y+=y_inc;
		}//end for~

	}

	Redraw_Game();
	pMy_Draw->DDraw_Draw_Surface(lpddsbg_Cards[14], 
							x, y,
                      Cards_Width,Cards_Height,
                       lpddsback,1);
	
	while (FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT)));

	return 1;
}

int CDraw_Cards_Engine::Dealing_Cards_Right(int Current_y)
{
	int dx,dy,dx2,dy2,x_inc,y_inc,error;
	int x = Card_x,y = Card_y;

	dx = Right_x0 - Card_x;

	dy = Current_y - Card_y;
	
	if(dx>=0)
	{
		x_inc = 1;
	}
	else
	{
		x_inc = -1;
		dx = -dx;
	}

	if(dy >= 0)
	{
		y_inc = 1;
	}
	else
	{
		y_inc = -1;
		dy = -dy;
	}

	dx2 = dx << 1;
	dy2 = dy << 1;

	if(dx > dy)
	{
		error = dy2 - dx;
		for(int i=0;i<int(dx);i++)
		{
			if(i%140 == 0)
			{
				Redraw_Game();
				pMy_Draw->DDraw_Draw_Surface(lpddsbg_Cards[14], 
							x, y,
                       Cards_Width,Cards_Height,
                       lpddsback,1);

				while (FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT)));
			}

			if(error >= 0)
			{
				error-=dx2;
				y+=y_inc;
			}
			error+=dy2;
			x+=x_inc;
		}//end for~
	}
	else
	{
		error = dx2 - dy;
		for(int i=0;i<int(dy);i++)
		{
			if(i%140 == 0)
			{
				Redraw_Game();
				pMy_Draw->DDraw_Draw_Surface(lpddsbg_Cards[14], 
							x, y,
                       Cards_Width,Cards_Height,
                       lpddsback,1);

				while (FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT)));
			}

			if(error >= 0)
			{
				error-=dy2;
				x+=x_inc;
			}
			error+=dx2;
			y+=y_inc;
		}//end for~

	}

	Redraw_Game();
	pMy_Draw->DDraw_Draw_Surface(lpddsbg_Cards[14], 
							x, y,
                      Cards_Width,Cards_Height,
                       lpddsback,1);

	while (FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT)));
	return 1;
}


//CGame
//		pCDraw_Cards->Draw_A_Card(Left_x0,
//								  pGame_Map->Left0[counter].y,
//								  0,
//								  17,
//								  lpddsbg_Dealing);

//		pMy_Draw->DDraw_Draw_Surface(lpddsbg_Dealing,0,0, Screen_Width,Screen_Height, lpddsback,0); 


		
//		pCDraw_Cards->Draw_A_Card(pGame_Map->Center0[counter].x,
//								  Center_y0,
//								  pMy_Cards->Cards[counter].Color,
//								  pMy_Cards->Cards[counter].Value,
//								  lpddsbg_Dealing);

//		pMy_Draw->DDraw_Draw_Surface(lpddsbg_Dealing,0,0, Screen_Width,Screen_Height, lpddsback,0); 



//		pCDraw_Cards->Draw_A_Card(Right_x0,
//								  pGame_Map->Left0[counter].y,
//								  0,
//								  17,
//								  lpddsbg_Dealing);



//		pCDraw_Cards->Dealing_Cards_Center(Center_x0 + counter*Card_Distance1,
// 									   Lord_Cards.Cards[counter].Color,Lord_Cards.Cards[counter].Value);

//		pCDraw_Cards->Dealing_Cards_Center(Center_x0 + counter*Card_Distance1,
//									   Lord_Cards.Cards[counter+1].Color,Lord_Cards.Cards[counter].Value);

//		pCDraw_Cards->Dealing_Cards_Center(Center_x0 + counter*Card_Distance1,
// 									   Lord_Cards.Cards[counter+2].Color,Lord_Cards.Cards[counter].Value);

//		pCDraw_Cards->Dealing_Cards_Up(Lord_Card1_x);
//		pCDraw_Cards->Dealing_Cards_Up(Lord_Card2_x);
//		pCDraw_Cards->Dealing_Cards_Up(Lord_Card3_x);


int CGame::Clean_Up_Cards()
{
//	pLeft_Cards  = new CPlaying_Cards;    //左边玩家的牌对象;
//	pMy_Cards    = new CPlaying_Cards;	  //主机玩家的牌对象;
//	pRight_Cards = new CPlaying_Cards;	  //右边玩家的牌对象;
//	::Sleep(10000);


	


	for(int k=0;k<17;k++)
	{
		lpddsbg_Dealing->Blt(
			CRect(Center_x0 + k*Card_Distance1,
				  Center_y0,
				  Center_x0 + k*Card_Distance1 + Cards_Width,
				  Center_y0 + Cards_Height),      //目标区域;
			lpddsbg_Cards[pMy_Cards->Cards[k].Value - 3],  //源表面;
			CRect(pMy_Cards->Cards[k].Color*Cards_Width,
				  0,
				  pMy_Cards->Cards[k].Color*Cards_Width + Cards_Width,
				  Cards_Height),				  //源区域;
			DDBLT_WAIT | DDBLT_KEYSRC,
			NULL);

		pMy_Draw->DDraw_Draw_Surface(lpddsbg_Dealing,0,0, Screen_Width,Screen_Height, lpddsback,0); 

		while (FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT)));
	}
	return 1;
}

//其他精灵;
//角花
/*
	file = "bmp\\item\\left_top.bmp" ;

	lpddsbg_Person[0] = pMy_Draw->DDraw_Create_Surface(15,15,0,blue);

	pMy_Draw->BltBitmap_to_Surface(lpddsbg_Person[0],0,0,file,15,15);
//角花贴到角上;
	pMy_Draw->DDraw_Draw_Surface(lpddsbg_Person[0], 
                       0, 0,
                       15,15,
                       lpddsbg_Game,1);
	pMy_Draw->DDraw_Draw_Surface(lpddsbg_Person[0], 
                       1024-15, 0,
                       15,15,
                       lpddsbg_Game,1);

	pMy_Draw->DDraw_Draw_Surface(lpddsbg_Person[0], 
                       0, 768-15,
                       15,15,
                       lpddsbg_Game,1);
	pMy_Draw->DDraw_Draw_Surface(lpddsbg_Person[0], 
                       1024-15, 768-15,
                       15,15,
                       lpddsbg_Game,1);
//地主牌边框;
	file = "bmp\\item\\lord2.bmp" ;

	pMy_Draw->BltBitmap_to_Surface(lpddsbg_Game,
								   Lord_Card1_x - 11,
								   Lord_Card1_y - 9,
								   file,
								   288,
								   132);

	pMy_Draw->DDraw_Draw_Surface(lpddsbg_Game,0,0, Screen_Width,Screen_Height,lpddsback,0); 
	while (FAILED(lpddsprimary->Flip(NULL, DDFLIP_WAIT)));	
	Sleep(4000);
	*/

⌨️ 快捷键说明

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