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

📄 nec_pingpong.c

📁 图像系统uc_GUI
💻 C
📖 第 1 页 / 共 4 页
字号:
        _InvalidateRect(_hWinScreenSaver, x, y, w, h);
      } else {
        _InvalidateRect(WM_HBKWIN, x, y, w, h);
      }
    }
  }
}

/*********************************************************************
*
*       _ScreenSaverOn
*/
static void _ScreenSaverOn(void) {
  if (_hWinScreenSaver == 0) {
    _hWinScreenSaver = WM_CreateWindow(0, 0, LCD_GetXSize(), LCD_GetYSize(),
                                       WM_CF_SHOW | WM_CF_STAYONTOP, &_cbScreenSaver, 0);
    WM_SetFocus(_hWinScreenSaver);
  }
}

/*********************************************************************
*
*       _ScreenSaverOff
*/
static void _ScreenSaverOff(void) {
  if (_hWinScreenSaver) {
    WM_DeleteWindow(_hWinScreenSaver);
    WM_SetFocus(WM_HBKWIN);
    _hWinScreenSaver = 0;
    WM_SelectWindow(WM_HBKWIN);
    GUI_SetBkColor(GUI_BLACK);
    GUI_Clear();
  }
  _ScreenSaverPrevTime = GUI_GetTime();
}

/*********************************************************************
*
*       _HandleScreenSaver
*/
static void _HandleScreenSaver(void) {
  if ((_hWinScreenSaver == 0) && (_GameState == SHOW_MENU)) {
    if ((GUI_GetTime() - _ScreenSaverPrevTime) >= SCREENSAVER_WAITTIME) {
      if (_ScreenSaverPrevTime != 0) {
        _ScreenSaverOn();
      }
      _ScreenSaverPrevTime = GUI_GetTime();
    }
  }
}

/*********************************************************************
*
*       _InitStep
*/
static void _InitStep(void) {
  if (_GameState != _NewGameState) {
    _GameState = _NewGameState;
    WM_InvalidateWindow(WM_HBKWIN);
    _ScreenSaverOff();
  }
}

/*********************************************************************
*
*       _NextStep
*/
static void _NextStep(unsigned Delay) {
  if (_NewGameState < SHOW_STATISTICS) {
    _NewGameState++;
  } else {
    _NewGameState = SHOW_MENU;
  }
  _GameWaitTime = GUI_GetTime() + Delay;
  _GameHalt = 0;
}

/*********************************************************************
*
*       _Delay
*/
static void _Delay(unsigned Delay) {
  _GameWaitTime = GUI_GetTime() + Delay;
}

/*********************************************************************
*
*       _Halt
*/
static void _Halt(void) {
  _GameHalt = 1;
}

/*********************************************************************
*
*       _StartGame
*/
static void _StartGame(void) {
  _GameCount++;
  _StopWatchTime = GUI_GetTime();
  /* TBD: Start game */
}

/*********************************************************************
*
*       _EndGame
*/
static void _EndGame(void) {
  _GameState = SHOW_MENU;
  WM_InvalidateWindow(WM_HBKWIN);
}

/*********************************************************************
*
*       _HandleGame
*/
static void _HandleGame(void) {
  if (_hWinScreenSaver == 0) {
    if ((GUI_GetTime() >= _GameWaitTime) && !_GameHalt) {
      _InitStep();
      switch (_NewGameState) {
      case NO_INIT:
        _NextStep(0);
        break;
      case SHOW_MENU:
        {
          WM_HWIN hWin;
          hWin = BUTTON_CreateEx(270, 270, 100, 30, WM_HBKWIN, WM_CF_SHOW, 0, ID_BUTTON_START);
          BUTTON_SetText(hWin, "Start Game");
          _Halt();
        }
        break;
      case SHOW_REDLIGHT:
        WM_DeleteWindow(WM_GetDialogItem(WM_HBKWIN, ID_BUTTON_START));
        _NextStep(2250);
        break;
      case SHOW_YELLOWLIGHT:
        _NextStep(2250);
        break;
      case SHOW_GREENLIGHT:
        _NextStep(1000);
        _StartGame();
        break;
      case SHOW_STOPWATCH:
        //if (_IsGameOver) {
        if ((GUI_GetTime() - _StopWatchTime) > 5000) {
          _NextStep(0);
        } else {
          WM_InvalidateWindow(WM_HBKWIN);
          _Delay(20);
        }
        break;
      case SHOW_WINNER:
        _NextStep(4000);
        break;
      case SHOW_STATISTICS:
        _NextStep(4000);
        break;
      }
    }
  }
}

/*********************************************************************
*
*       Static code, drawing functions
*
**********************************************************************
*/
/*********************************************************************
*
*       _DrawRoundRect
*/
static void _DrawRoundRect(int x, int y, int w, int h, int r) {
  GUI_COLOR Color;
  if ((w < (r << 2)) || (h < (r << 2))) {
    r = (w < h) ? (w >> 2) : (h >> 2);
  }
  Color = GUI_GetColor();
  GUI_SetColor(GUI_GetBkColor());
  GUI_FillCircle(x + r,         y + r, r);
  GUI_FillCircle(x + w - r - 1, y + r, r);
  GUI_FillCircle(x + r,         y + h - r - 1, r);
  GUI_FillCircle(x + w - r - 1, y + h - r - 1, r);
  GUI_SetColor(Color);
  GUI_DrawCircle(x + r,         y + r, r);
  GUI_DrawCircle(x + w - r - 1, y + r, r);
  GUI_DrawCircle(x + r,         y + h - r - 1, r);
  GUI_DrawCircle(x + w - r - 1, y + h - r - 1, r);
  GUI_DrawHLine(y, x + r, x + w - r - 1);
  GUI_DrawVLine(x, y + r, y + h - r - 1);
  GUI_DrawVLine(x + w - 1, y + r, y + h - r - 1);
  GUI_DrawHLine(y + h - 1, x + r, x + w - r - 1);
  GUI_ClearRect(x + r, y + 1, x + w - r - 1, y + r - 1);
  GUI_ClearRect(x + 1, y + r, x + w - 2, y + h - r - 1);
  GUI_ClearRect(x + r, y + h - r, x + w - r - 1, y + h - 2);
}

⌨️ 快捷键说明

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