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

📄 fanpai.cpp

📁 一个翻拍的皱形
💻 CPP
字号:

#pragma warning(disable:4091)
#define STRY_POSITION   250
#define STRX_POSITION  360
#define UP_KEY    0x01
#define DOWN_KEY  0x02
#define ENTER_KEY 0x0d

#ifdef __cplusplus
extern "C"{
#endif
#include"efi.h"
#include"efilib.h"
//#include <time.h>
//#include <malloc.h>
#include "GraphicsPrint.h"
//#include"Hii\Hii.h"
#include"ConsoleControl\ConsoleControl.h"
EFI_UGA_DRAW_PROTOCOL *UgaDraw;
EFI_STATUS
ShowPng(
 IN char *FileName, IN int Sx, IN int Sy, IN int Dx, IN int Dy );

void 
GetPngWidth(
char *FileName,
int *Width,
int *Height);
#ifdef __cplusplus
}
#endif 
bool FlagExit=0;
#include"fanpai.h"
//全局的
FanPaiUi  *FanPai;
KeyBoard  *HandleKey;
EFI_CONSOLE_CONTROL_PROTOCOL *ConsoleControl;
void
MainFanPai();
void *operator new (UINTN Size){
	EFI_STATUS Status;
	void * Pointer;
   Status=BS->AllocatePool(EfiBootServicesData,Size,&Pointer);
   if(EFI_ERROR(Status))
	   return 0;
   return Pointer;
}

void operator delete(void * Pointer)
{

if(BS)
	BS->FreePool(Pointer);
}

VOID 
SwitchGraphicsMode(UINTN Mode);

//EFI_GUID HiiProtocolGuid=EFI_HII_PROTOCOL_GUID;

//EFI_HII_PROTOCOL      *Hii;

void
AdjustXy(
IN UINTN  Width, //a picture width
IN UINTN  Height,//a picture Height
OUT UINTN *StartX,
OUT UINTN *StartY
);



EFI_STATUS
FanPaiEntry(
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS  Status;
UINTN StartX,StartY;

int      Width,Height;


//int        SrandNo;
//int        i;
InitializeLib(ImageHandle,SystemTable);
InitializeLibC(ImageHandle,SystemTable);
InitiaFanPaiInterface();
//AdjustXy(100,100,&StartX,&StartY);
FanPai=new FanPaiUi;
HandleKey=new KeyBoard;
//FanPaiUi  FanPai;
//time(0);
//#ifdef __JackeXu_Debug__
//	Print(L"Jackesssddd");
//#endif 

//随机函数
//srand(6);   

//randomize();
//产生0--10
//srand(time((time_t *)NULL));
//for(i=0;i<10;i++)
	//{
//SrandNo=rand()%10;
//randomize();
//Print(L"%d  ",SrandNo);
	//}
SwitchGraphicsMode(1);
Status=UgaDraw->Blt(UgaDraw,&mEfiColors[2],EfiUgaVideoFill,0,0,0,0,800,600,0);
if(EFI_ERROR(Status)){
Print(L"%r",Status);
	}


//GetPngWidth("Title01.png",&Width,&Height);
//printf("%d %d ",Width,Height);
for(;;){
FanPai->ShowUiPicture("Title01.png",0,0,800/2-640/2,600/2-480/2);
FanPai->ShowUiString();
//MainFanPai();
while(1){
HandleKey->WaitForPressKey();
HandleKey->ReadKey();
Status=HandleKey->SwitchKey();
if(Status==0x100)
	break;
else if(Status==0x101){
	FanPai->Exit();
    return EFI_SUCCESS;
}
//if(FlagExit==1)
	//goto 
FanPai->MoveUiMenu();
}
}
//HandleKey->ReadKey();

//printf("jackexu\n");
//BS->Stall(10000);
//ShowPng("Title01.png",0,0,StartX,StartY);
//ShowPng("background.png",0,0,100,100);
//FanPai 是指向对象的指针

delete FanPai;
delete HandleKey;
return EFI_SUCCESS;
}
//find protocol and set center point

/*void
AdjustXy(
IN UINTN  Width, //a picture width
IN UINTN  Height,//a picture Height
OUT UINTN *StartX,
OUT UINTN *StartY
)
{

Status=UgaDraw->GetMode(UgaDraw,&SizeOfX,&SizeOfY,&ColorDepth,&RefreshRate);
if(EFI_ERROR(Status))
	return ;
//printf("%d %d %d %d \n",SizeOfX,SizeOfY,ColorDepth,RefreshRate);

*StartX=(SizeOfX-Width)/2;
*StartY=(SizeOfY-Height)/2;

}
*/
//define class
FanPaiUi::FanPaiUi()
{
printf("\ndsddsdsdd\n");
	MenuIndex=0;
	PreLightMenu=0;
}
FanPaiUi::~FanPaiUi()
{
	//printf("jacke\n");
	printf("\n finish over\n");
}
void FanPaiUi::ShowUiPicture(char *FileName,int Sx,int Sy,int Dx,int Dy)
{
printf("test showpictureui");
ShowPng(FileName,Sx,Sy,Dx,Dy);

}

int NoIndex[16]={-1};
//int No1Index[16]={-1};
int RandPanel[16];
int CardIndex[16];
int CardPosition[16];
void FanPaiUi::NewGame()
{
//UgaDraw-Blt
int i,j,RanData;

FanPai->ShowUiPicture("background.png",0,0,800/2-640/2,600/2-480/2);
//产生随机数的种子
srand(time(0));

for(i=0;i<8;i++){
	
//产生8个0----18的数字
RanData=rand()%18;
//把这8个数字保存起来
NoIndex[i]=RanData;


for(j=0;j<i;j++){
if(RanData==NoIndex[j]){
//重新产生随机数
RanData=rand()%18;
NoIndex[i]=RanData;
//让j=0,重新比较
j=-1;
}
}

CardIndex[2*i]=RanData;
CardIndex[i+8]=RanData;
//GraphicsPrintAt(UgaDraw,10+i*100,10,0,0,L"NoIndex %d,%d ",2*i,CardIndex[2*i]);
//GraphicsPrintAt(UgaDraw,10+i*100,30,0,0,L"NoIndex %d,%d ",2*i+1,CardIndex[2*i+1]);


}


for(i=0;i<16;i++){
RanData=rand()%16;
NoIndex[i]=RanData;
//for(;;){
for(j=0;j<i;j++){
if(RanData==NoIndex[j]){
	 RanData=rand()%16;
	 NoIndex[i]=RanData;
	 j=-1;
}
} 
//NoIndex[i]=RanData;
CardPosition[i]=NoIndex[i];

}

for(i=0;i<16;i++){
	GraphicsPrintAt(UgaDraw,10+i*20,10,0,0,L"%d ",CardIndex[i]);
}

for(i=0;i<16;i++)
GraphicsPrintAt(UgaDraw,10+i*20,50,0,0,L"%d ",CardPosition[i]);

for(i=0;i<16;i++)
RandPanel[CardPosition[i]]=CardIndex[i];

for(i=0;i<16;i++)
GraphicsPrintAt(UgaDraw,10+i*20,100,0,0,L"%d ",RandPanel[i]);

}

void FanPaiUi::Help(){
	UgaDraw->Blt(UgaDraw,&mEfiColors[6],EfiUgaVideoFill,0,0,250,100,250,250,0);
	///printf("Help Information that you can write by yourself");
}


void FanPaiUi::Exit(){
SwitchGraphicsMode(0);
//FlagExit=1;
}
void FanPaiUi::Difficuty(){

}

void FanPaiUi::ShowUiString()
{
//if(MenuIndex)
int i;
for(i=0;i<NumMenu;i++)
{
if(i==PreLightMenu)
GraphicsPrintAt(UgaDraw,STRX_POSITION ,STRY_POSITION+i*19,&mEfiColors[15],&mEfiColors[4],MenuStr[i]);
else 
GraphicsPrintAt(UgaDraw,STRX_POSITION,STRY_POSITION+i*19,&mEfiColors[15],&mEfiColors[7],MenuStr[i]);
}
}
void FanPaiUi::MoveUiMenu()
	{
if(HandleKey->Key.UnicodeChar!=0xd){
GraphicsPrintAt(UgaDraw,STRX_POSITION,STRY_POSITION+PreLightMenu*19,&mEfiColors[15],&mEfiColors[7],MenuStr[PreLightMenu]);
GraphicsPrintAt(UgaDraw,STRX_POSITION ,STRY_POSITION+MenuIndex*19,&mEfiColors[15],&mEfiColors[4],MenuStr[MenuIndex]);
	}
	}



void  FanPaiUi::ShowHiddenCard()
{


}
//
KeyBoard::KeyBoard()
{
Key.ScanCode=0;
Key.UnicodeChar=0;

}

KeyBoard::~KeyBoard()
{

}
void KeyBoard::ReadKey()
{

ST->ConIn->ReadKeyStroke(ST->ConIn,&Key);
Print(L"%x",Key.ScanCode);
}

void KeyBoard::WaitForPressKey()
{
Key.ScanCode=0;
WaitForSingleEvent(ST->ConIn->WaitForKey,0);

}

int KeyBoard::SwitchKey(){

if(Key.ScanCode==UP_KEY){

	FanPai->PreLightMenu=FanPai->MenuIndex;
	FanPai->MenuIndex--;
if(FanPai->MenuIndex<0)
FanPai->MenuIndex=NumMenu-1;
//SwitchGraphicsMode(0);
Print(L"\n \n x%d x%d ",FanPai->PreLightMenu,FanPai->MenuIndex);
}

else if(Key.ScanCode==DOWN_KEY){
	FanPai->PreLightMenu=FanPai->MenuIndex;
	FanPai->MenuIndex++;
if(FanPai->MenuIndex>NumMenu-1)
	FanPai->MenuIndex=0;
}
else if(Key.ScanCode==0x17)
	//MainFanPai();
return  0x100;
else if(Key.UnicodeChar==ENTER_KEY)
	{
	switch(FanPai->MenuIndex){
		case 0:
			FanPai->NewGame(); break;
		case 1:
			FanPai->Difficuty();break;
		case 2:
			FanPai->Help();break;
		case 3:
           // SwitchGraphicsMode(0);		
			return 0x101;
			//break;
	}
	}
}

VOID 
SwitchGraphicsMode(UINTN Mode)
{
if(Mode){
ConsoleControl->SetMode(ConsoleControl,EfiConsoleControlScreenGraphics);
 }
else
ConsoleControl->SetMode(ConsoleControl,EfiConsoleControlScreenText);
}

EFI_STATUS
InitiaFanPaiInterface()
{

EFI_STATUS Status;
UINTN      NoHandle;
EFI_HANDLE *HandleBuffer;
EFI_HANDLE UgaHandle;
UINTN      Index;
//UINTN      SizeOfX,SizeOfY,ColorDepth,RefreshRate;
EFI_GUID   gConsoleControlProtocolGuid=EFI_CONSOLE_CONTROL_PROTOCOL_GUID;
Status=BS->LocateHandleBuffer(ByProtocol,&UgaDrawProtocol,NULL,&NoHandle,&HandleBuffer);
if(EFI_ERROR(Status))
	return  Status;
for(Index=0;Index<NoHandle;Index++){
	Status=BS->HandleProtocol(HandleBuffer[Index],&DevicePathProtocol,(VOID **)&UgaDraw);
	if(!EFI_ERROR(Status)){
		UgaHandle=HandleBuffer[Index];
		break;
	  }
}
BS->FreePool(HandleBuffer);
Status=BS->HandleProtocol(UgaHandle,&UgaDrawProtocol,(VOID **)&UgaDraw);
if(EFI_ERROR(Status))
	return Status;
//Status=BS->LocateProtocol(&HiiProtocolGuid,NULL,(VOID **)&Hii);
//if(EFI_ERROR(Status))
	//return Status;
Status=BS->LocateProtocol(&gConsoleControlProtocolGuid,NULL,(VOID **)&ConsoleControl);
if(EFI_ERROR(Status))
	return Status;
return EFI_SUCCESS;
}

/*void
MainFanPai()
{	
FanPai->ShowUiPicture("Title01.png",0,0,800/2-640/2,600/2-480/2);
FanPai->ShowUiString();
while(1){
HandleKey->WaitForPressKey();
HandleKey->ReadKey();
HandleKey->SwitchKey();
if(FlagExit==1)
	break;
FanPai->MoveUiMenu();
}

}*/

⌨️ 快捷键说明

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