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

📄 addition.cpp

📁 caro program is written by VC++ and AI
💻 CPP
字号:
/****************************************************************************/
//
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Some other Functions I ~~~~~~~~~~~~~~~~~~~~~~~~
//									addition.cpp
//
//***************************************************************************/



// Include
#include "ExCaro.h"


//////////////////////////////////////////////////////////////
// Save Avatar to a file
void SaveAvatar()
{
HANDLE hFile;
DWORD dwBW;
TCHAR szBuffer[MAX_PATH]="";
TCHAR szFileType[40]="Anitsoft ExCaro 4.1 Avatar File";

	// Create new setting file	
	strcat(szBuffer,ec.szAppDir);
	strcat(szBuffer,"\\avatar.ava");
	if(INVALID_HANDLE_VALUE!=(hFile=CreateFile(szBuffer,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL)))
	{
		// Write Header Data
		WriteFile( hFile, &szFileType, sizeof(TCHAR) * 40, &dwBW ,NULL);

		WriteFile(hFile,&avatar,sizeof(avatar),&dwBW,NULL);
	}
	else
		// Error
		MessageBox(WndMain.hWnd,"Can't save avatar.\nMaybe disk full or protected.",APPNAME,MB_OK|MB_ICONERROR);

	CloseHandle(hFile);
}

////////////////////////////////////////////////////////////////////
// Load avatar from a file
void LoadAvatar(char szFileName[])
{
HANDLE hFile;
DWORD dwBR;
TCHAR szBuffer[MAX_PATH]="";
TCHAR szFileType[40];

	// Open setting file
	strcpy(szBuffer,"");
	strcat(szBuffer,ec.szAppDir);
	strcat(szBuffer,"\\");
	strcat(szBuffer,szFileName);
    if(INVALID_HANDLE_VALUE!=(hFile = CreateFile (szBuffer, GENERIC_READ, FILE_SHARE_READ,NULL, OPEN_EXISTING, 0, NULL)))
	{
		// Read Header Data
		ReadFile (hFile, &szFileType, sizeof(TCHAR) * 40, &dwBR, NULL);

		// If this file is oldder version setting file or setting file corrupted
		if(strcmp(szFileType,"Anitsoft ExCaro 4.1 Avatar File"))
		{
			wsprintf(szBuffer,"File %s is invalid.\nNo avatar loaded.",szFileName);
			MessageBox(WndMain.hWnd,szBuffer,APPNAME,MB_OK|MB_ICONERROR);
		} // endif( )

		// OK ! Loading now
		else
		{
			ReadFile (hFile,&avatar,sizeof(avatar),&dwBR,NULL);
		}//end else

	} //endif(INVALID.....
	else
	{
		wsprintf(szBuffer,"File %s not found.\nPlease reinstall this program. If not! no any avatar loaded.",szFileName);
		MessageBox(WndMain.hWnd, szBuffer , APPNAME,MB_OK|MB_ICONERROR);
		// No any setting file created
	}

	CloseHandle(hFile);
}

////////////////////////////////////////////////////////////////////
// Set Default Setting
void DefaultSetting()
{
int i, x, y;
char szPName[MAX_PLAYERNAME], szBuffer[MAX_PATH]="";

	/***********************************************************/
	// Default setting	
	setting.fWarning	= 0;
	setting.fSound		= 1;
	setting.fTime		= 0;
	setting.iTime		= 30;
	setting.iRule		= 0;
	setting.iBlock		= 30;
	setting.iNormalBlock = setting.iBlock;
	strcpy(setting.szSoundFile,"Sound.mid");
	setting.iOpacity	= 100;
	setting.fMenu		= 1;
	setting.fFullScreen = 0;
	setting.fGrip		= 1;
	setting.iLang		= 0;

	for(i=0;i<MAX_PLAYER;i++)
	{
		player[i].iDiff = 2;				// Default Difficult is Hard
		
		// Clear icon of all players
		for(x=0; x< XBLOCK - 1 ; x++)
			for(y=0; y< XBLOCK - 1; y++)
			{
				avatar[i].fDot[x][y] = 0;
			}

		int iRand = rand()%10;

		switch( iRand )
		{
			case 0:	strcpy(szPName,"Sam"); break;
			case 1:	strcpy(szPName,"Mike"); break;
			case 2:	strcpy(szPName,"John"); break;
			case 3:	strcpy(szPName,"Alex"); break;
			case 4:	strcpy(szPName,"Tom"); break;
			case 5:	strcpy(szPName,"Paul"); break;
			case 6:	strcpy(szPName,"Jack"); break;
			case 7:	strcpy(szPName,"Mark"); break;
			case 8:	strcpy(szPName,"Steve"); break;
			case 9:	strcpy(szPName,"Peter"); break;
		}

		strcpy(player[i].szName,szPName);	// Name of Player
	}
	
	if( !strcmp(player[0].szName , player[1].szName ) )
		strcpy(player[0].szName,"Vivi");

	player[0].fPlay = 0;	// P1 is Human
	player[1].fPlay = 1;	// P2 is Computer

	LoadAvatar("default.ava");
}

////////////////////////////////////////////////////////////////////
// Save all setting to a file
void SaveSetting()
{
HANDLE hFile;
DWORD dwBW;
TCHAR szBuffer[MAX_PATH]="";
TCHAR szFileType[40]="Anitsoft ExCaro 4.1 Setting File";
RECT rect;

	// Create new setting file	
	strcat(szBuffer,ec.szAppDir);
	strcat(szBuffer,"\\setting.dat");
	if(INVALID_HANDLE_VALUE!=(hFile=CreateFile(szBuffer,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL)))
	{
		// Write Header Data
		WriteFile( hFile, &szFileType, sizeof(TCHAR) * 40, &dwBW ,NULL);

		GetWindowRect(WndMain.hWnd, &rect );
		WriteFile(hFile,&rect,sizeof(RECT),&dwBW,NULL);

		WriteFile(hFile,&player,sizeof(player),&dwBW,NULL);
		WriteFile(hFile,&setting,sizeof(setting),&dwBW,NULL);
	}
	else
		// Error
		MessageBox(WndMain.hWnd,"Can't save setting.\nMaybe disk full or protected.",APPNAME,MB_OK|MB_ICONERROR);

	CloseHandle(hFile);
}

////////////////////////////////////////////////////////////////////
// Load all setting from file to memory
void LoadSetting()
{
HANDLE hFile;
DWORD dwBR;
TCHAR szBuffer[MAX_PATH]="";
TCHAR szFileType[40];
RECT rect;

	// Open setting file
	strcpy(szBuffer,"");
	strcat(szBuffer,ec.szAppDir);
	strcat(szBuffer,"\\setting.dat");
    if(INVALID_HANDLE_VALUE!=(hFile = CreateFile (szBuffer, GENERIC_READ, FILE_SHARE_READ,NULL, OPEN_EXISTING, 0, NULL)))
	{
		// Read Header Data
		ReadFile (hFile, &szFileType, sizeof(TCHAR) * 40, &dwBR, NULL);

		// If this file is oldder version setting file or setting file corrupted
		if(strcmp(szFileType,"Anitsoft ExCaro 4.1 Setting File"))
		{
			DefaultSetting();
			SaveSetting();
		} // endif( )

		// OK ! Loading now
		else
		{
			ReadFile (hFile,&rect,sizeof(RECT),&dwBR,NULL);

			ReadFile (hFile,&player,sizeof(player),&dwBR,NULL);
			ReadFile (hFile, &setting, sizeof(setting), &dwBR, NULL);
			
			if(!setting.fFullScreen) // restore last windows's size
				MoveWindow(WndMain.hWnd , rect.left , rect.top , rect.right - rect.left , rect.bottom - rect.top, FALSE );

			LoadAvatar("avatar.ava");
		}//end else

	} //endif(INVALID.....
	else
	{
		DefaultSetting();
		SaveSetting();
		// No any setting file created
	}

	CloseHandle(hFile);
}

//////////////////////////////////////////////////////////////////////////////
// Draw Player's Icon into a block
void DrawBlock( int xDraw, int yDraw, char playerTurn, COLORREF crColor )
{
int x, y;
HDC hDC;

	hDC = GetDC( WndPlay.hWnd );

	if( playerTurn < ( MAX_PLAYER ) )
	{
	for(x=0; x< XBLOCK -1;	x++)
		for(y=0; y< XBLOCK -1;	y++)
		{
			if (avatar[ playerTurn ].fDot[x][y] )
			{
				SetPixel(hDC, xDraw + 1 + x,  yDraw + 1 + y, crColor );
			}
		}
	}
	else
		if( setting.fWarning && play.fWin == FALSE )
		{
			SetTextColor(hDC, skin.crPColor[playerTurn - MAX_PLAYER]);
			SetTextAlign(hDC, TA_CENTER | TA_CENTER );
			SetBkMode(hDC, TRANSPARENT );
			TextOut(hDC, xDraw + XBLOCK/2 +1, yDraw + XBLOCK/3 -1 ,"!",1);
		}

	ReleaseDC(WndPlay.hWnd , hDC );
}

///////////////////////////////////////////////////////////////////////
// Re Draw Player Bar
void ReDrawPlayerBar()
{
RECT rect;

	// Redraw Player Bar
	SetRect(&rect, WndMain.xClient - 95, 20, WndMain.xClient - 5, YHEADER - 10 );
	InvalidateRect(WndMain.hWnd, &rect , FALSE );
}

///////////////////////////////////////////////////////////////////////
// Re Draw Player Bar
void ReDrawBanner()
{
RECT rect;

	SetRect(&rect, 0, YHEADER - 20, WndMain.xClient, YHEADER );
	InvalidateRect(WndMain.hWnd, &rect , FALSE );
	ReDrawPlayerBar();
}

////////////////////////////////////////////////////////////////////
// Show Status
void ShowStatus(TCHAR szBuffer[])
{
	SetWindowText(WndBtn[ID_STATUS].hWnd,szBuffer);
}

////////////////////////////////////////////////////////////////////
// Check 
char pBlock(int x, int y)
{
	if (x<0 || y<0 || x>(setting.iBlock -1) || y>(setting.iBlock -1) )
		return -1;
	else
		return *(pMatrix + setting.iBlock * y + x);
}

// Plays MIDI file
void PlaySoundFile(HWND hWnd, char *pszFileName)
{
char szBuffer[MAX_PATH];

	mciSendString("close all", 0, 0, hWnd); // Stop Midi
	wsprintf(szBuffer, "open \"%s\" type sequencer alias MySound",pszFileName);
	mciSendString(szBuffer, 0, 0, hWnd);
	mciSendString("play MySound from 0", 0 ,0, hWnd);
}


void GetWindowSize(WNDTYPE *Wnd)
{
RECT rect;
WNDTYPE WndType;

	WndType = *Wnd;
	GetWindowRect(WndType.hWnd,&rect) ;
	WndType.left		= rect.left ;
	WndType.top		= rect.top;
	WndType.right		= rect.right ;
	WndType.bottom	= rect.bottom ;

	GetClientRect(WndType.hWnd,&rect) ;
	WndType.xClient	= rect.right - rect.left ;
	WndType.yClient	= rect.bottom - rect.top ;

	*Wnd = WndType;
}

⌨️ 快捷键说明

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