📄 russia.c
字号:
}
}
void DelRussia( RUSSIADATA * p )
{
int i,j,f;
char *d,*s;
for(j=23; j>0; j--)
{
f = 1;
for(i=0; i<10; i++)
{
if(p->map[j][i]==0){f=0;break;}
}
if( f )
{
f = j*10;
s = p->map[j]-1;
d = p->map[j+1]-1;
while( f-- )*d-- = *s--;
memset( p->map[0], 0, 10 );
j++;
}
}
}
void TimeRussia( RUSSIADATA * p )
{
int i;
if( p->Flag != 1 )return;
//触地判断。
BlockOut( p );
p->FlyY++;
if( !BlockIn( p ) )
{
if( p->FlyY < 4 )//游戏结束。
{
p->Flag = 3;
SSS_Timer_Out( RMSG_TIME );
//启动动画。
memset( p->map, 0, 24*10 );
DrawRussia( p );
for( i=23; i>=4; i-- )
{
memset( p->map[i], 1, 10 );
DrawRussia( p );
Sleep( 40 );
}
}
else//触地。
{
p->FlyY--;
if( BlockIn( p ) )StepRussia( p );
DelRussia( p );
}
}
DrawRussia( p );
}
void CircleRussia( RUSSIADATA * p )
{
int i;
if( p->Flag != 1 )return;
i = p->FlyF;
BlockOut( p );
p->FlyF = (p->FlyF+1)%4;
if( !BlockIn( p ) )
{
p->FlyF = i;
BlockIn( p );
}
DrawRussia( p );
}
void RightRussia( RUSSIADATA * p )
{
if( p->Flag != 1 )return;
BlockOut( p );
p->FlyX++;
if( !BlockIn( p ) )
{
p->FlyX--;
BlockIn( p );
}
DrawRussia( p );
}
void LeftRussia( RUSSIADATA * p )
{
if( p->Flag != 1 )return;
BlockOut( p );
p->FlyX--;
if( !BlockIn( p ) )
{
p->FlyX++;
BlockIn( p );
}
DrawRussia( p );
}
void Run( void* pDummy )
{
int i = 0, j = 0;
int msg;
int KeyDown=0,KeyLeft=0,KeyRight=0,KeyCircle=0;
RUSSIADATA Data = {0,};
srand( GetTickCount() );
if( !InitRussia( &Data ) )SSS_Exit();
else DrawRussia( &Data );
while(1)
{
SSS_Cpu_Halt( 0 );
while( GetMsg( &msg ) )
{
switch( msg )
{
case RMSG_PAINT:DrawRussia( &Data );break;
case RKEY_SPEEDUP:
if( Data.Speed<80 )
{
Data.Speed+=5;
if( Data.Flag == 1 )
{
SSS_Timer_Out( RMSG_TIME );
SSS_Timer_Init( RMSG_TIME, (100-Data.Speed)*2/3, IntTime );
}
else SendMsg( RMSG_PAINT );
}
break;
case RKEY_SPEEDDOWN:
if( Data.Speed>5 )
{
Data.Speed-=5;
if( Data.Flag == 1 )
{
SSS_Timer_Out( RMSG_TIME );
SSS_Timer_Init( RMSG_TIME, (100-Data.Speed)*2/3, IntTime );
}
else SendMsg( RMSG_PAINT );
}
break;
case RKEY_START:
StartRussia( &Data );
break;
case RKEY_PAUSE:
PauseRussia( &Data );
break;
case RKEY_LEFT:
j = -1; KeyLeft = 1;
LeftRussia( &Data );
break;
case RKEY_RIGHT:
j = -1; KeyRight = 1;
RightRussia( &Data );
break;
case RKEY_DOWN:
i = 8; KeyDown = 1;
break;
case RKEY_CIRCLE:
j = -6; KeyCircle = 1;
CircleRussia( &Data );
break;
case RMSG_TIME:
if( Data.Flag == 1 )
{
i += (KeyDown ? 4: 1);
if( ++j>= 5 )
{
if( KeyLeft && KeyRight )
{
j = 0;
}
if( KeyLeft )
{
i -= 4;
j = 0;
LeftRussia( &Data );
}
if( KeyRight )
{
i -= 4;
j = 0;
RightRussia( &Data );
}
if( KeyCircle )
{
i = 0;
j = 0;
CircleRussia( &Data );
}
}
if( i>= 8 )
{
i = 0;
TimeRussia( &Data );
}
}
break;
case RKEY_LEFT+10: KeyLeft = 0; break;
case RKEY_RIGHT+10: KeyRight = 0; break;
case RKEY_DOWN+10: KeyDown = 0; break;
case RKEY_CIRCLE+10: KeyCircle = 0; break;
}
}
}
}
void IntKey( int ID,int keystatus,int count)
{
switch( keystatus )
{
case KEY_STATUS_DOWN:
SendMsg( ID );
SSS_Cpu_Interrupt( 0 );
break;
case KEY_STATUS_UP:
SendMsg( ID+10 );
SSS_Cpu_Interrupt( 0 );
break;
case KEY_STATUS_CONTINUE:
break;
}
}
void KeyAdd( int ID, DWORD vKey, int* p )
{
SSS_BUTTON b,*pSssBtn;
b.pBmpName = MAKEINTRESOURCE(IDB_BUTTON);
b.transColorFlag = 1;
b.transColor = RGB(0,0,0);
if( p )
{
b.x = p[0];
b.y = p[1];
SetRect( &b.rcUp, p[4], p[5], p[4]+p[2], p[5]+p[3] );
SetRect( &b.rcDown, p[6], p[7], p[6]+p[2], p[7]+p[3] );
pSssBtn = &b;
}
else pSssBtn = NULL;
SSS_Key_Add( ID, vKey, pSssBtn );
}
void OnCreate()
{
int Btn[6][8]=
{
//{dX,dY,Width,High,sUpX,sUpY,sDownX,sDownY,},
{131,182,37,22,0,0,37,0,},
{171,182,37,22,0,22,37,22,},
{211,182,37,22,0,44,37,44,},
{171,154,37,22,0,66,37,66,},
{173,103,33,20,0,88,33,88,},
{173,127,33,20,0,108,33,108,},
};
SSS_Key_Init( 50, IntKey );
SSS_Key_OnOff( 1 );
KeyAdd( RKEY_LEFT, SKEY_LEFT, &Btn[0][0]);
KeyAdd( RKEY_DOWN, SKEY_DOWN, &Btn[1][0]);
KeyAdd( RKEY_RIGHT, SKEY_RIGHT, &Btn[2][0]);
KeyAdd( RKEY_CIRCLE, SKEY_UP, &Btn[3][0]);
KeyAdd( RKEY_START, SKEY_RETURN, &Btn[4][0]);
KeyAdd( RKEY_PAUSE, SKEY_ESCAPE, &Btn[5][0]);
KeyAdd( RKEY_SPEEDUP, SKEY_PGDN, NULL );
KeyAdd( RKEY_SPEEDDOWN, SKEY_PGUP, NULL );
SSS_Cpu_Init( 0, Run, 0 );
}
/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□-------DLGHelpAboutProc()--------------------------------------------
□
□ 处理ABOUT对话框的消息回调函数。
□
□---2001.7.30---------------------------------------------------------
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
long FAR PASCAL DLGHelpAboutProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
break;
case WM_COMMAND:
switch(wParam)
{
case ID_OK:PostMessage(hWnd,WM_CLOSE,0,0);break;
case IDC_HOMEPAGE:
{
HWND hWndURL = GetDlgItem(hWnd, wParam);
char url[256];
GetWindowText(hWndURL, url, sizeof(url));
ShellExecute(hWnd,
"open",
url,
NULL,
NULL,
SW_SHOWNORMAL);
}
break;
case IDC_EMAIL:
ShellExecute(hWnd,
"open",
"mailto:wwwbbbjjj@eyou.com",
NULL,
NULL,
SW_SHOWNORMAL);
break;
}
break;
case WM_CLOSE:EndDialog(hWnd, 0);break;
default:return(0);break;
}
return(1);
}
/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□-------MainProc()----------------------------------------------------
□
□ 处理主窗口的消息回调函数。
□
□---------------------------------------------------------------------
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
LRESULT WINAPI MainProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch( message )
{
case WM_CREATE:
OnCreate();
break;
//绘制窗口背景图。
case WM_ERASEBKGND:
return 1;
case WM_PAINT:
SendMsg( RMSG_PAINT );
SSS_Cpu_Interrupt( 0 );
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_GAME_ABOUT:
DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_ABOUT),hWnd,(DLGPROC)DLGHelpAboutProc);
break;
case ID_SSS:
PostMessage( hWnd, WM_HOTKEY, 0xbfff, 0 );
break;
case ID_GAME_NEW:
SendMsg( RKEY_START );
SSS_Cpu_Interrupt( 0 );
break;
case ID_GAME_PAUSE:
SendMsg( RKEY_PAUSE );
SSS_Cpu_Interrupt( 0 );
break;
case ID_SPEED_ADD:
SendMsg( RKEY_SPEEDUP );
SSS_Cpu_Interrupt( 0 );
break;
case ID_SPEED_DEC:
SendMsg( RKEY_SPEEDDOWN );
SSS_Cpu_Interrupt( 0 );
break;
case ID_GAME_EXIT:SSS_Exit();break;
}
break;
}
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
SSS_WINDOW sWnd;
g_hInstance = hInstance;
SSS_SetRegCode( "EVALUATE", "29O33P7M" );
memset( &sWnd,0,sizeof(sWnd) );
sWnd.IfWndFrame = FALSE;
sWnd.Width = 260;
sWnd.Height = 220;
sWnd.pTitleStr = "SSS Example - RUSSIA";
sWnd.pBmpName = MAKEINTRESOURCE(IDB_FACE);
sWnd.transColor = RGB(0,0,0);
sWnd.iconID = IDI_ICON;
sWnd.menuID = IDR_MENU;
sWnd.popmenuID = IDR_POPMENU;
sWnd.accelID = IDR_ACCELERATOR;
sWnd.pFuncWndProc = MainProc;
return SSS_InitWnd( &sWnd );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -