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

📄 game_in_minigui.c

📁 minigui 图形库环境下的 俄罗斯方块 游戏 源码。
💻 C
📖 第 1 页 / 共 5 页
字号:
   mii.typedata    = (DWORD)"Start two player game";
   InsertMenuItem(hmnu, 1, TRUE, &mii);
   
   mii.type        = MFT_STRING ;
   mii.state       = 0;
   mii.id          = ID_NEWTWOTEASE;
   mii.typedata    = (DWORD)"Start two player game(Tease)";
   InsertMenuItem(hmnu, 2, TRUE, &mii); 

   mii.type        = MFT_STRING ;
   mii.state       = 0;
   mii.id          = ID_HIGHSCORE;
   mii.typedata    = (DWORD)"High Score";
   InsertMenuItem(hmnu, 3, TRUE, &mii); 

   mii.type        = MFT_STRING ;
   mii.state       = 0;
   mii.id          = ID_EXIT;
   mii.typedata    = (DWORD)"Exit";
   InsertMenuItem(hmnu, 4, TRUE, &mii);
   
   return hmnu;
} 

HMENU createpmenusetting(void)
{
   HMENU hmnu; 

   MENUITEMINFO mii;
   memset (&mii, 0, sizeof(MENUITEMINFO));
   mii.type        = MFT_STRING;
   mii.id          = 0;
   mii.typedata    = (DWORD)"Setting";
   hmnu = CreatePopupMenu (&mii);
   
   memset (&mii, 0, sizeof(MENUITEMINFO));
   mii.type        = MFT_STRING ;
   mii.state       = 0;
   mii.id          = ID_KEYSARRANGE;
   mii.typedata    = (DWORD)"Optoins";
   InsertMenuItem(hmnu, 0, TRUE, &mii); 

   return hmnu;
} 

HMENU createpmenuabout(void)
{
   HMENU hmnu;
   MENUITEMINFO mii;
   memset (&mii, 0, sizeof(MENUITEMINFO));
   mii.type        = MFT_STRING;
   mii.id          = 0;
   mii.typedata    = (DWORD)"About";
   hmnu = CreatePopupMenu (&mii);
   
   memset (&mii, 0, sizeof(MENUITEMINFO));
   mii.type        = MFT_STRING ;
   mii.state       = 0;
   mii.id          = ID_ABOUT;
   mii.typedata    = (DWORD)"About Russia Square";
   InsertMenuItem(hmnu, 0, TRUE, &mii);
   return hmnu;
} 

int TestMyWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
RECT rect1;
int iMousePositionX;
int iMousePositionY;
switch(message){
case MSG_CREATE:
if(!InitializeApp()){
           DestroyMainWindow (hWnd);
           PostQuitMessage (hWnd);
}
break;
case MSG_COMMAND:
switch(LOWORD(wParam)){
case ID_NEWONE:
theApp.bTease = FALSE;
OnCommandNewOne(hWnd);
InvalidateRect(hWnd,NULL,TRUE);
break;
case ID_NEWTWO:
theApp.bTease = FALSE;
OnCommandNewTwo(hWnd);
InvalidateRect(hWnd,NULL,TRUE);
break;
case ID_NEWTWOTEASE:
theApp.bTease = FALSE;
OnCommandNewTwo(hWnd);
OnStartKeyDown(hWnd,theApp.pPlayingWindow1,1);
OnStartKeyDown(hWnd,theApp.pPlayingWindow2,2);
theApp.bTease = TRUE;
InvalidateRect(hWnd,NULL,TRUE);
break;
case ID_HIGHSCORE:
DialogHighScore(hWnd);
break;
case ID_EXIT:
       PostMessage(hWnd, MSG_CLOSE, 0, 0);
break;
case ID_KEYSARRANGE:
DialogKeySetting(hWnd);
break;
case ID_about:
MessageBox(hWnd, "Song Lixin(zjujoe@263.net)\nRussia Square Ver 0.1 (2000/08/04)", "About", MB_OK);
break;
}
break; 

case MSG_LBUTTONDOWN:
iMousePositionX = LOWORD(lParam);
iMousePositionY = HIWORD(lParam);
return 0;
case MSG_PAINT:
hdc = BeginPaint(hWnd);
OnDraw(hWnd,hdc);
EndPaint(hWnd,hdc);
return 0;
case MSG_KEYDOWN:
GetMenuBarItemRect(hWnd,1,&rect1);
//syslog(LOG_INFO,"MenuBar:%d,%d,%d,%d",rect1.left,rect1.top,rect1.right,rect1.bottom);
if(wParam == theApp.KeySetting1.iKeyRotate){
return OnRotateKeyDown(hWnd,theApp.pPlayingWindow1,1);
}else if(wParam == theApp.KeySetting1.iKeyDown){
return OnDownKeyDown(hWnd,theApp.pPlayingWindow1,1);
}else if(wParam == theApp.KeySetting1.iKeyLeft){
return OnLeftKeyDown(hWnd,theApp.pPlayingWindow1,1);
}else if(wParam == theApp.KeySetting1.iKeyRight){
return OnRightKeyDown(hWnd,theApp.pPlayingWindow1,1);
}else if(wParam == theApp.KeySetting1.iKeyStart){
return OnStartKeyDown(hWnd,theApp.pPlayingWindow1,1);
}else if(wParam == theApp.KeySetting1.iKeyPause){
return OnPauseKeyDown(hWnd,theApp.pPlayingWindow1,1);
// Keys in Playing Windows 2 presswd:
}else if(wParam == theApp.KeySetting2.iKeyRotate){
return OnRotateKeyDown(hWnd,theApp.pPlayingWindow2,2);
}else if(wParam == theApp.KeySetting2.iKeyDown){
return OnDownKeyDown(hWnd,theApp.pPlayingWindow2,2);
}else if(wParam == theApp.KeySetting2.iKeyLeft){
return OnLeftKeyDown(hWnd,theApp.pPlayingWindow2,2);
}else if(wParam == theApp.KeySetting2.iKeyRight){
return OnRightKeyDown(hWnd,theApp.pPlayingWindow2,2);
}else if(wParam == theApp.KeySetting2.iKeyStart){
return OnStartKeyDown(hWnd,theApp.pPlayingWindow2,2);
}else if(wParam == theApp.KeySetting2.iKeyPause){
return OnPauseKeyDown(hWnd,theApp.pPlayingWindow2,2);
}
return 0;
case MSG_TIMER:
if(theApp.bBusy)
break;
if(wParam == RUSSIA_SQUARE_TIMER1){
OnTimer(hWnd,theApp.pPlayingWindow1,1);
} else if(wParam == RUSSIA_SQUARE_TIMER2){
OnTimer(hWnd,theApp.pPlayingWindow2,2);
}
break;
   case MSG_CLOSE:
OnClose(hWnd);
    return 0;
}
return DefaultMainWinProc(hWnd, message, wParam, lParam);
}
#if 0
           TextOut (hdc, 10, 25, "Russia Square Ver 0.1 (2000/08/04)"); 
           TextOut (hdc, 10, 55, 
     "Author: Mr.Song Lixin(zjujoe@263.net).");
#endif 

void InitMyWinCreateInfo(PMAINWINCREATE pCreateInfo)
{ 

   pCreateInfo->dwstyle = WS_CAPTION | WS_BORDER | WS_SYSMENU |  WS_VISIBLE;
   pCreateInfo->dwExstyle = WS_EX_NONE;
   pCreateInfo->spCaption="Russia Square";
   pCreateInfo->hMenu = createmenu1();
   pCreateInfo->hCursor = GetSystemCursor(0);
   pCreateInfo->hIcon = 0;
   pCreateInfo->MainWindowProc = TestMyWinProc;
   pCreateInfo->lx = 0;
   pCreateInfo->ty = 0;
   pCreateInfo->rx = WIDTH_LARGEWIN;
   pCreateInfo->by = HEIGHT_LARGEWIN;
   pCreateInfo->iBkColor = COLOR_black; 
   pCreateInfo->dwAddData = 0;
   pCreateInfo->hHosting = HWND_DESKTOP;
} 

int MiniGUIMain(int args, const char* arg[])
{
   MSG Msg;
   MAINWINCREATE CreateInfo;
   HWND hMainWnd; 

#if defined(_LITE_VERSION) && !(_STAND_ALONE)
   int i;
   const char* layer = NULL;
   RECT max_rect = {0, 0, 0, 0}; 

   for (i = 1; i < args; i++) {
       if (strcmp (arg[i], "-layer") == 0) {
           layer = arg[i + 1];
           break;
       }
   }
   GetLayerInfo (layer, &max_rect, NULL, NULL, NULL);
   if (JoinLayer (layer, arg[0],
               max_rect.left, max_rect.top, 
               max_rect.left + WIDTH_LARGEWIN, 
               max_rect.top + HEIGHT_LARGEWIN) == INV_LAYER_HANDLE) {
       printf ("JoinLayer: invalid layer handle.\n");
       exit (1);
   }
#else
#ifdef _IME_GB2312
   GBIMEWindow (HWND_DESKTOP);
#endif
#endif
InitMyWinCreateInfo(&CreateInfo); 

   hMainWnd = CreateMainWindow(&CreateInfo); 

   if (hMainWnd == HWND_INVALID)
       return -1; 

   ShowWindow(hMainWnd,SW_SHOWNORMAL);
   while( GetMessage(&Msg, hMainWnd) ) {
       TranslateMessage (&Msg);
       DispatchMessage(&Msg);
   } 

   MainWindowThreadCleanup(hMainWnd);
   return 0;
} 

BOOL InitializeApp(void)
{
KeySetting * pKeySetting;
openlog("rs",LOG_CONS,LOG_USER);
strncpy (theApp.strEtcFilePath, getpwuid (getuid ()) ->pw_dir,MAX_PATH);
if (theApp.strEtcFilePath[strlen (theApp.strEtcFilePath) - 1] != '/')
strncat (theApp.strEtcFilePath, "/",MAX_PATH);
strncat (theApp.strEtcFilePath,".",MAX_PATH);
strncat (theApp.strEtcFilePath, ETCFILENAME,MAX_PATH);
//syslog(LOG_INFO,"INIT:path:%s",theApp.strEtcFilePath);
   //initialize keysetting:
if(GetvalueFromEtcFile(theApp.strEtcFilePath,"HighScoreA","TitleHolder", theApp.HighScore[0].strTitleHolder,50)!=ETC_OK){
strncpy(theApp.HighScore[0].strTitleHolder,"joe",50);
}
if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"HighScoreA","TheScore", &(theApp.HighScore[0].iHighScore))!=ETC_OK){
theApp.HighScore[0].iHighScore = 0;
} 

if(GetvalueFromEtcFile(theApp.strEtcFilePath,"HighScoreB","TitleHolder", theApp.HighScore[1].strTitleHolder,50)!=ETC_OK){
strncpy(theApp.HighScore[1].strTitleHolder,"joe",50);
}
if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"HighScoreB","TheScore", &(theApp.HighScore[1].iHighScore))!=ETC_OK){
theApp.HighScore[1].iHighScore = 0;
} 

if(GetvalueFromEtcFile(theApp.strEtcFilePath,"HighScoreC","TitleHolder", theApp.HighScore[2].strTitleHolder,50)!=ETC_OK){
strncpy(theApp.HighScore[2].strTitleHolder,"joe",50);
}
if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"HighScoreC","TheScore", &(theApp.HighScore[2].iHighScore))!=ETC_OK){
theApp.HighScore[2].iHighScore = 0;
}
if(GetvalueFromEtcFile(theApp.strEtcFilePath,"HighScoreD","TitleHolder", theApp.HighScore[3].strTitleHolder,50)!=ETC_OK){
strncpy(theApp.HighScore[3].strTitleHolder,"joe",50);
}
if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"HighScoreD","TheScore", &(theApp.HighScore[3].iHighScore))!=ETC_OK){
theApp.HighScore[3].iHighScore = 0;
}
if(GetvalueFromEtcFile(theApp.strEtcFilePath,"HighScoreE","TitleHolder", theApp.HighScore[4].strTitleHolder,50)!=ETC_OK){
strncpy(theApp.HighScore[4].strTitleHolder,"joe",50);
}
if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"HighScoreE","TheScore", &(theApp.HighScore[4].iHighScore))!=ETC_OK){
theApp.HighScore[4].iHighScore = 0;
} 

pKeySetting = &(theApp.KeySetting1); 

if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadA","Difficulty", &(pKeySetting->iDifficulty))!=ETC_OK){
pKeySetting->iDifficulty = 0;
}else{
pKeySetting->iDifficulty %= 10;
} 

if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadA","Rotate Key", &(pKeySetting->iKeyRotate))!=ETC_OK){
pKeySetting->iKeyRotate = SCANCODE_W;
} 

if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadA","Down Key", &(pKeySetting->iKeyDown))!=ETC_OK){
   pKeySetting->iKeyDown = SCANCODE_S;
} 

if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadA","Left Key", &(pKeySetting->iKeyLeft))!=ETC_OK){
pKeySetting->iKeyLeft = SCANCODE_A;
}
if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadA","Right Key", &(pKeySetting->iKeyRight))!=ETC_OK){
pKeySetting->iKeyRight = SCANCODE_D;
}
if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadA","Start Key", &(pKeySetting->iKeyStart))!=ETC_OK){
pKeySetting->iKeyStart = SCANCODE_F;
}
if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadA","Pause Key", &(pKeySetting->iKeyPause))!=ETC_OK){
pKeySetting->iKeyPause = SCANCODE_G;
} 

pKeySetting = &(theApp.KeySetting2);
if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadB","Difficulty", &(pKeySetting->iDifficulty))!=ETC_OK){
pKeySetting->iDifficulty = 0;
}else{
pKeySetting->iDifficulty %= 10;
} 

if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadB","Rotate Key", &(pKeySetting->iKeyRotate))!=ETC_OK){
pKeySetting->iKeyRotate = SCANCODE_CURSORBLOCKUP;
} 

if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadB","Down Key", &(pKeySetting->iKeyDown))!=ETC_OK){
   pKeySetting->iKeyDown = SCANCODE_CURSORBLOCKDOWN;
} 

if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadB","Left Key", &(pKeySetting->iKeyLeft))!=ETC_OK){
pKeySetting->iKeyLeft = SCANCODE_CURSORBLOCKLEFT;
}
if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadB","Right Key", &(pKeySetting->iKeyRight))!=ETC_OK){
pKeySetting->iKeyRight = SCANCODE_CURSORBLOCKRIGHT;
}
if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadB","Start Key", &(pKeySetting->iKeyStart))!=ETC_OK){
pKeySetting->iKeyStart = SCANCODE_KEYPAD0;
}
if(GetIntvalueFromEtcFile(theApp.strEtcFilePath,"KeyPadB","Pause Key", &(pKeySetting->iKeyPause))!=ETC_OK){
pKeySetting->iKeyPause = SCANCODE_KEYPADPERIOD;
}
SaveSettingvalue();
return TRUE;
}
void FreePlayingWindow(HWND hWnd)
{
PlayingWindow * pPlayingWindow;
pPlayingWindow = theApp.pPlayingWindow1;
if(pPlayingWindow){
if(pPlayingWindow->pMovingSquare)
free(pPlayingWindow->pMovingSquare);
if(pPlayingWindow->pPreCreatedSquare)
free(pPlayingWindow->pPreCreatedSquare);
free(theApp.pPlayingWindow1);
KillTimer(hWnd,RUSSIA_SQUARE_TIMER1);
}
theApp.pPlayingWindow1 = NULL;
pPlayingWindow = theApp.pPlayingWindow2;
if(pPlayingWindow){
if(pPlayingWindow->pMovingSquare)
free(pPlayingWindow->pMovingSquare);
if(pPlayingWindow->pPreCreatedSquare)
free(pPlayingWindow->pPreCreatedSquare);
free(theApp.pPlayingWindow2);
KillTimer(hWnd,RUSSIA_SQUARE_TIMER2);
}
theApp.pPlayingWindow2 = NULL; 

}
void OnCommandNewOne(HWND hWnd)
{
PlayingWindow * pPlayingWindow;
FreePlayingWindow(hWnd);
theApp.pPlayingWindow1 = (PlayingWindow*)calloc(1,sizeof(PlayingWindow));
pPlayingWindow = theApp.pPlayingWindow1;
pPlayingWindow->iLevel = theApp.KeySetting1.iDifficulty;
#ifdef _TIMER_UNIT_10MS
SetTimer(hWnd,RUSSIA_SQUARE_TIMER1,1000/TimerFreq[pPlayingWindow->iLevel]);
#else
SetTimer(hWnd,RUSSIA_SQUARE_TIMER1,TimerFreq[pPlayingWindow->iLevel]);
#endif
}
void OnCommandNewTwo(HWND hWnd)
{
PlayingWindow * pPlayingWindow;
FreePlayingWindow(hWnd);
theApp.pPlayingWindow1 = (PlayingWindow*)calloc(1,sizeof(PlayingWindow));
pPlayingWindow = theApp.pPlayingWindow1;
pPlayingWindow->iLevel = theApp.KeySetting1.iDifficulty;
#ifdef _TIMER_UNIT_10MS
SetTimer(hWnd,RUSSIA_SQUARE_TIMER1,1000/TimerFreq[pPlayingWindow->iLevel]);
#else
SetTimer(hWnd,RUSSIA_SQUARE_TIMER1,TimerFreq[pPlayingWindow->iLevel]);
#endif 

theApp.pPlayingWindow2 = (PlayingWindow*)calloc(1,sizeof(PlayingWindow));
pPlayingWindow = theApp.pPlayingWindow2;
pPlayingWindow->iLevel = theApp.KeySetting2.iDifficulty;
#ifdef _TIMER_UNIT_10MS
SetTimer(hWnd,RUSSIA_SQUARE_TIMER2,1000/TimerFreq[pPlayingWindow->iLevel]);
#else
SetTimer(hWnd,RUSSIA_SQUARE_TIMER2,TimerFreq[pPlayingWindow->iLevel]);
#endif
}
void OnDraw(HWND hWnd,HDC hDC)
{
POINT poStart;
int   iSideLength;
RECT rect;
GetClientRect(hWnd,&rect);
SetBkColor(hDC,COLOR_black);
SetTextColor(hDC,COLOR_green);
SetPenColor(hDC,COLOR_green);
iSideLength = (RECTW(rect)-60)/22;
assert(iSideLength>0);
// 2 players
//test
//syslog(LOG_INFO,"OnDraw():iSideLength:%d",iSideLength);
if(theApp.pPlayingWindow2) {
poStart.x = rect.left+RUSSIA_SQUARE_GRID;
poStart.y = rect.top +RUSSIA_SQUARE_GRID*1.5;
DrawPlayingWindow(hDC,poStart,iSideLength,theApp.pPlayingWindow1);
poStart.x = rect.left+RECTW(rect)/2 +RUSSIA_SQUARE_GRID;
   DrawPlayingWindow(hDC,poStart,iSideLength,theApp.pPlayingWindow2);
} 
//1 player.
elseif(theApp.pPlayingWindow1) {
poStart.x = rect.left + RECTW(rect)/4;
poStart.y = rect.top  + RUSSIA_SQUARE_GRID*1.5;
DrawPlayingWindow(hDC,poStart,iSideLength,theApp.pPlayingWindow1);
}
//No player.
else{
TextOut(hDC,rect.left+40,rect.top+20,"Choose from menu to begin game.");
}

⌨️ 快捷键说明

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