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

📄 main.c

📁 GNU国际象棋C++源代码Windows版的
💻 C
📖 第 1 页 / 共 3 页
字号:

        case IDM_TIME:
          lpfnDlgProc = MakeProcInstance ( TimeDlgProc, hInst);
          DialogBox ( hInst, MAKEINTRESOURCE(TIME), hWnd, lpfnDlgProc);
          FreeProcInstance ( lpfnDlgProc);
          break;
        case IDM_RANDOM:
          dither = (dither)?0:DITHER;
          break;
        case IDM_EASY:
          flag.easy = !flag.easy;
          if (flag.easy && flag.searching && player==opponent)
              flag.timeout=true;
          break;
        case IDM_DEPTH:
          lpszTitle=CP[61];
          DlgInt1=MaxSearchDepth;
          lpfnDlgProc = MakeProcInstance ( GetNumDlgProc, hInst);
          if (DialogBoxParam ( hInst, MAKEINTRESOURCE(NUMDLG), hWnd,
                   lpfnDlgProc,47L)) MaxSearchDepth=DlgInt1;
          FreeProcInstance ( lpfnDlgProc);
          TCflag = !(MaxSearchDepth > 0);
          break;

        case IDM_REVERSE:
          flag.reverse=!flag.reverse;
          if(selected) {selectX=7-selectX; selectY=7-selectY;}
          InvalidateRect(hWnd,0,true);
          break;

        case IDM_BACKGROUND:
          if (GetColor(clrBackGround))
           {
            clrBackGround=cc.rgbResult;
            InvalidateRect(hWnd,0,true);
            DeleteObject (hBrushBackGround);
            hBrushBackGround = CreateSolidBrush ( clrBackGround );
           }
          break;
        case IDM_BLACKSQUARE:
          if (GetColor(clrBlackSquare))
           {
            clrBlackSquare=cc.rgbResult;
            UpdateDisplay(0, 0, 1, 0, 0);
           }
          break;
        case IDM_WHITESQUARE:
          if (GetColor(clrWhiteSquare))
           {
            clrWhiteSquare=cc.rgbResult;
            UpdateDisplay(0, 0, 1, 0, 0);
           }
          break;
        case IDM_BLACKPIECE:
          if (GetColor(clrBlackPiece))
           {
            clrBlackPiece=cc.rgbResult;
            UpdateDisplay(0, 0, 1, 0, 0);
           }
          break;
        case IDM_WHITEPIECE:
          if (GetColor(clrWhitePiece))
           {
            clrWhitePiece=cc.rgbResult;
            UpdateDisplay(0, 0, 1, 0, 0);
           }
          break;
        case IDM_TEXT:
          if (GetColor(clrText))
           {
            clrText=cc.rgbResult;
            InvalidateRect (hWnd, NULL, TRUE);
           }
          break;
        case IDM_EDGE:
          if (GetColor(clrEdge))
           {
            clrEdge=cc.rgbResult;
            UpdateDisplay(0, 0, 1, 0, 0);
           }
          break;
        case IDM_DEFAULT:
          LoadDefaultColors();
          DeleteObject(hBrushBackGround);
          hBrushBackGround=CreateSolidBrush(clrBackGround);
          InvalidateRect(hWnd,0,true);
          break;

        case IDM_SMALL:
        case IDM_MEDIUM:
        case IDM_LARGE:
         {
          SHORT i;

          CheckMenuItem ( GetMenu(hWnd), boardsize/12+IDM_SMALL,
                     MF_UNCHECKED);
          boardsize=(LOWORD(wParam)-IDM_SMALL)*12;
          CheckMenuItem ( GetMenu(hWnd), LOWORD(wParam), MF_CHECKED);
          for (i=pawn;i<=king;i++)
          { DeleteObject(pieces[i].detail);
            DeleteObject(pieces[i].mask);
            pieces[i].detail = LoadBitmap (hInst, MAKEINTRESOURCE(i+boardsize));
            pieces[i].mask = LoadBitmap (hInst, MAKEINTRESOURCE(i+boardsize+6));
          }
          InitScreen();
          MoveStatics();
          SizeWindow(0);
          InvalidateRect(hWnd,0,TRUE);
          break;
         }
        case IDM_3D:
          squarebd=0;
          goto changebd;
        case IDM_SQUARE:
          squarebd=1;
changebd:
          InitScreen();
          MoveStatics();
          SizeWindow(0);
          InvalidateRect(hWnd,0,TRUE);
          break;
        case IDM_HINT:
          GiveHint();
          break;

        case IDM_INDEX:
          if (!WinHelp(hWnd,szHelpFile,HELP_CONTENTS,0L))
             ShowMessage("Could not open gnuchess.hlp");
          break;
        case IDM_HELP:
          if (!WinHelp(hWnd,"winhelp.hlp",HELP_HELPONHELP,0L))
             ShowMessage("Could not open winhelp.hlp");
          break;
        case IDM_ABOUT:
          lpfnDlgProc = MakeProcInstance ( AboutDlgProc, hInst);
          DialogBox (hInst,MAKEINTRESOURCE(ABOUT),hWnd,lpfnDlgProc);
          FreeProcInstance ( lpfnDlgProc);
          break;

        case IDM_CLEAR:     /*editing*/
          {
           short i;
           for (i=0;i<64;i++){board[i]=no_piece;color[i]=neutral;}
          }
          board[4]=board[60]=king;
          color[4]=white;
          color[60]=black;
          selected=0;
          UpdateDisplay(0,0,1,0,0);
          break;
        case IDM_RESTORE:     /*editing*/
          {
           short i;
           for (i=0;i<64;i++)
            {
             board[i]=Stboard[i];
             color[i]=Stcolor[i];
            }
           selected=0;
           UpdateDisplay(0,0,1,0,0);
           break;
          }
        case IDM_PREV:        /*replay*/
        case IDM_NEXT:
        case IDM_DONE:        /*editing*/
          command=LOWORD(wParam);
       }
      return 0;

    case WM_INITMENUPOPUP:
      if (!flag.editing) switch (lParam)
      {
       case 0:       /*Game menu*/
            EnableMenuItem ( (HMENU)wParam, IDM_SAVE,
                             (GameCnt>0 ? MF_ENABLED : MF_GRAYED) );
            EnableMenuItem ( (HMENU)wParam, IDM_LIST,
                             (GameCnt>0 ? MF_ENABLED : MF_GRAYED) );
            break;
       case 1:       /*Edit Menu */
            EnableMenuItem ( (HMENU)wParam, IDM_REVIEW,
                             (GameCnt>0 ? MF_ENABLED : MF_GRAYED) );
            EnableMenuItem ( (HMENU)wParam, IDM_UNDO,
                             (GameCnt>0 ? MF_ENABLED : MF_GRAYED) );
            EnableMenuItem ( (HMENU)wParam, IDM_REMOVE,
                          ((flag.searching ? OrigGameCnt : GameCnt)>1
                           ? MF_ENABLED : MF_GRAYED) );
            break;
       case 2:  /* Options Menu */
            CheckMenuItem ( (HMENU)wParam, IDM_HASH,
                     flag.hash?MF_CHECKED:MF_UNCHECKED);
            EnableMenuItem ( (HMENU)wParam, IDM_HASH,
                     (hashfile ? MF_ENABLED : MF_GRAYED) );
            CheckMenuItem ( (HMENU)wParam, IDM_COORD,
                     flag.coords?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_BEEP,
                     flag.beep?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_BOOK,
                     flag.usebook?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_POST,
                     flag.post?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_ANIMATE,
                     flag.animate?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_MATERIAL,
                     flag.material?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_RCPTR,
                     flag.rcptr?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_THREAT,
                     flag.threat?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_PVS,
                     flag.pvs?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_NEWEVAL,
                     flag.neweval?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_GAMEIN,
                     flag.gamein?MF_CHECKED:MF_UNCHECKED);
            break;
       case 3:   /*skill menu*/
            CheckMenuItem ( (HMENU)wParam, IDM_RANDOM,
                     dither?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_EASY,
                     flag.easy?MF_CHECKED:MF_UNCHECKED);
            break;
       case 4:   /*Side menu*/
          {
            int color=flag.bothsides ? 2
                      : computer^(flag.force & forcing);
            CheckMenuItem ( (HMENU)wParam, IDM_REVERSE,
                     flag.reverse?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_BLACK,
                 (color==black)?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_WHITE,
                 (color==white)?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_BOTH,
                     flag.bothsides?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_WTM,
                     player==white?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_BTM,
                     player==black?MF_CHECKED:MF_UNCHECKED);
            CheckMenuItem ( (HMENU)wParam, IDM_FORCE,
                   flag.force == false ? MF_UNCHECKED : MF_CHECKED);
          }
       case 5: /*Board menu */
         CheckMenuItem ( (HMENU)wParam, IDM_SQUARE,
                    squarebd?MF_CHECKED:MF_UNCHECKED);
         CheckMenuItem ( (HMENU)wParam, IDM_3D,
                    squarebd?MF_UNCHECKED:MF_CHECKED);
      }
      return 0;

    case WM_SYSCOLORCHANGE:
      DeleteObject(hDlgBkgrnd);
      hDlgBkgrnd=CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
      return 0;

    case WM_DESTROY:
      flag.quit=true;
      flag.timeout=flag.abort=true;
      flag.bothsides=false;
      command=IDM_QUIT;
      GetWindowRect(hWnd,&wr);
      maximized=IsZoomed(hWnd);
      if (IsIconic(hWnd)) wr.right = 0;
      WinHelp(hWnd,szHelpFile,HELP_QUIT,0L);
      return 0;
  }
  return DefWindowProc(hWnd,Message,wParam,lParam);
}

void SizeWindow(int move)
  {
    RECT wr;
    WinSizeX=LEFTMARGIN+sqwidthB*8+deltaX/2+20+CompMoveExt
          +GetSystemMetrics(SM_CXFRAME)*2;
    WinSizeY=BACKMARGIN+sqdepth*8+BRD_EDGE+LineSpace+SLineSpace+5
          +GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYFRAME)*2
          +GetSystemMetrics(SM_CYMENU);
    GetWindowRect(GetDesktopWindow(),&wr);
    if (wr.right-wr.left > WinSizeX) WinPosX = (wr.right-WinSizeX)/2;
    else { WinPosX=0; WinSizeX=wr.right-wr.left; }
    if (wr.bottom-wr.top > WinSizeY) WinPosY = (wr.bottom-WinSizeY)/2;
    else { WinPosY=0; WinSizeY=wr.bottom-wr.top; }
    if (!move)
     {
      GetWindowRect(hWnd,&wr);
      WinPosX=wr.left;
      WinPosY=wr.top;
     }
    MoveWindow(hWnd, WinPosX, WinPosY, WinSizeX, WinSizeY, TRUE);
  }

void CheckMessage(void)
 {
  MSG msg;

  if ( PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
    if ( !TranslateAccelerator (hWnd, hAccel, &msg) )
     {    TranslateMessage(&msg);
       DispatchMessage(&msg); }
 }

BOOL GetColor(DWORD current)
{
  cc.lStructSize=sizeof(cc);
  cc.hwndOwner=hWnd;
  cc.rgbResult=current;
  cc.lpCustColors=&CustCols;
  cc.Flags=CC_FULLOPEN|CC_RGBINIT;
  return ChooseColor(&cc);
}

void LoadDefaultColors()
 {
  clrBackGround  = BROWN;
  clrBlackSquare = DARKGREEN;
  clrWhiteSquare = PALEGRAY;
  clrBlackPiece  = DARKRED;
  clrWhitePiece  = CWHITE;
  clrText        = CBLACK;
  clrEdge        = CBLACK;
 }

void
Exit (int code)
{
  SHORT bm;

  for (bm=pawn;bm<=king;bm++)
   {
    DeleteObject(pieces[bm].mask);
    DeleteObject(pieces[bm].detail);
   }
  DeleteObject(hBrushBackGround);
  DeleteObject(hFont);
  if (!code) SaveSettings();
  exit (code);
}

⌨️ 快捷键说明

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