亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mainform1.cpp

?? 《C++Builder程序設計范例--中國象棋》配書盤自述文件
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/*
主菜單項“忽略”事件處理函數
把主窗體中棋盤上編輯過的棋子全部作廢。
*/
void __fastcall TMainForm::CancelClick(TObject *Sender)
{
   memcpy(ChessBoard, SaveChessBoard, sizeof(BOARDTYPE) * 0x99);
   ResetNewPos();
   NormalSetup();
}
//---------------------------------------------------------------------------
/*
自定義正常設置函數
InfoForm->BringToFront()將信息子窗體InfoForm推到前端。
恢復棋子在主窗體上的原始位置。
*/
void TMainForm::NormalSetup()
{
   InfoForm->BringToFront();
   MainForm->Menu=TChessMenu;  //動態設置主窗體主菜單
   delete[] SaveChessBoard;
   Editing = EditingChessBoard = false;
   UpdateChessBoard();
}

//---------------------------------------------------------------------------
 /*
主菜單項“演示模式”事件處理函數
程序輪流成為紅方、黑方,即自己與自己對弈。
*/
void __fastcall TMainForm::DemoClick(TObject *Sender)
{
  extern bool AutoPlay;
   bool IsEasy = false;
    if (Level == easygame)
      {
      IsEasy = true;
      Level = normal;
      HideAttacks();
      }
   AutoPlay = true;
   ComputersTurn();
   if (IsEasy)
      {
      Level = easygame;
      UpdateChessBoard();
      }
   CurPlayer = Player;
   ComputerColor = Opponent;
   PrintCurLevel();
}
//---------------------------------------------------------------------------
 /*
主菜單項“無限制”事件處理函數
改變信息窗體中信息提示為無限制
程序無限制地加大深度搜索最好的一步棋。
*/
void __fastcall TMainForm::InfiniteClick(TObject *Sender)
{
 if (Level != infinite)
      {
      UnCheckLevelMenu(Level);
      CheckMenuItem(TChessMenu->Handle, Infinite->Command, MF_CHECKED);
      }
   Level = infinite;
   MaxLevel = MAXPLY;
   PrintCurLevel();
}
//---------------------------------------------------------------------------
/*
主菜單項“將死搜索”事件處理函數
改變信息窗體中信息提示為將死搜索
程序無限制地加大深度直到搜索到能將死的一步棋。
當棋子比較多時,很難搜索到終局(將死)。
*/
void __fastcall TMainForm::MateClick(TObject *Sender)
{
  if (Level != matesearch)
      {
      UnCheckLevelMenu(Level);
      CheckMenuItem(TChessMenu->Handle, Mate->Command, MF_CHECKED);
      }
   Level = matesearch;
   PrintCurLevel();
   ComputersTurn();

}
//---------------------------------------------------------------------------
/*
主菜單項“回合搜索”事件處理函數
彈出“設置回合數”對話框。
在主菜單項“回合搜索”前打勾。
改變信息窗體中信息提示為所設置的回合數。
*/
void __fastcall TMainForm::Ply1Click(TObject *Sender)
{
 char *PlySearchDepth = new char[40];
   sprintf(PlySearchDepth, "%d", MaxLevel);
   if (InputPlyDlg->ShowModal()== mrOk)
      {
      int NewPlyDepth = StrToInt(InputPlyDlg->Edit1->Text);
      if (NewPlyDepth > 0)
         {
         if (Level != plysearch)
            {
            UnCheckLevelMenu(Level);
            CheckMenuItem(TChessMenu->Handle, Ply1->Command, MF_CHECKED);
            }
        MaxLevel = (BYTE)((NewPlyDepth > MAXPLY) ? MAXPLY : NewPlyDepth);
        Level = plysearch;
         PrintCurLevel();
         }
      else
	Error("數據不正確。請重輸。");
      }
   delete PlySearchDepth;
}
//---------------------------------------------------------------------------
/*
主菜單項“兩人對弈”事件處理函數
翻轉主菜單項“兩人對弈”為”單獨對弈“
*/
void __fastcall TMainForm::TwoPlayerClick(TObject *Sender)
{
static LEVELTYPE OldLevel = normal;
   MultiMove = !MultiMove;
   if (MultiMove)
      {
      TwoPlayer->Caption= "單獨對弈";    //動態改變菜單項文本
      OldLevel = Level;
      EnableMenuItem(TChessMenu->Handle, 2, MF_GRAYED | MF_BYPOSITION);
      DrawMenuBar(MainForm->Handle);
      Level = normal;
      PrintCurLevel();
      }
   else
      {
      TwoPlayer->Caption = "兩人對弈";   //動態改變菜單項文本
      EnableMenuItem(TChessMenu->Handle, 2, MF_ENABLED | MF_BYPOSITION);
      /*
      第一個參數為菜單句柄,從菜單TChessMenu句柄屬性Handle獲取。
      第二個參數指明菜單的位置,即第三項。
      第三個參數是一個標志集合。它告訴菜單項是應該執行哪一些操作
      和如何被指明的。在這種情況下,MF_ENABLED告訴EnableMenuItem菜單項激活
      MF_BYPOSITION告訴EnableMenuItem菜單項是用位置指明的。
      */
      DrawMenuBar(MainForm->Handle);
      Level = OldLevel;
      PrintCurLevel();
      }

}
//---------------------------------------------------------------------------
/*
主菜單項“反轉棋盤”事件處理函數
對換紅方和黑方的棋盤。
*/
void __fastcall TMainForm::ReverseClick(TObject *Sender)
{
 Turned = !Turned;
   PrintChessBoard();
        
}
//---------------------------------------------------------------------------
/*
主菜單項“悔棋”事件處理函數
至少要動過一次棋子,該菜單項才由灰色變為黑色(激活狀態)。
*/
void __fastcall TMainForm::UndoMoveClick(TObject *Sender)
{

   if (ComputerThinking)
      {
      MessageToPost = IDM_UNDO;
      return;
      }
   if (!Undo())
    UndoMove->Enabled = false;
    RedoUndo->Enabled = true;

   CurPlayer = Player;
   ComputerColor = Opponent;
        
}
//---------------------------------------------------------------------------
/*
主菜單項“重下”事件處理函數
至少要悔過一次棋子,該菜單項才由灰色變為黑色(激活狀態)。
*/
void __fastcall TMainForm::RedoUndoClick(TObject *Sender)
{
if (ComputerThinking)
      {
      MessageToPost = IDM_REDO;
      return;
      }
   if (!Redo())
     RedoUndo->Enabled = false;
     UndoMove->Enabled = true;


   CurPlayer = Player;
   ComputerColor = Opponent;
        
}
//---------------------------------------------------------------------------
/*
自定義子菜單項加勾函數
選中子菜單項”容易“、”每次移動時間“、”總時間“、”匹配“、
”無限制“、”回合搜索“、”將死搜索“ 之一時,在該項前打勾。
*/
void TMainForm::CheckLevelMenu(LEVELTYPE level)
{
   int CheckItem = Easy->Command;
   switch (level)
      {
      case normal :
         CheckItem = MoveTime->Command;
         break;
      case fullgametime :
         CheckItem = TotalTime->Command;
         break;
      case plysearch :
         CheckItem = Ply1->Command;
         break;
      case easygame :
         CheckItem = Easy->Command;
         break;
      case infinite :
         CheckItem = Infinite->Command;
         break;
      case matesearch :
         CheckItem = Mate->Command;
         break;
      case matching :
         CheckItem = Matching->Command;
         break;
      }
   CheckMenuItem(TChessMenu->Handle, CheckItem, MF_CHECKED);
}

/*
自定義子菜單項去勾函數
改變選中子菜單項”容易“、”每次移動時間“、”總時間“、”匹配“、
”無限制“、”回合搜索“、”將死搜索“ 之一時,在該項前去掉勾。
*/
void TMainForm::UnCheckLevelMenu(LEVELTYPE level)
{
    int CheckItem = Easy->Command;

   switch (level)
      {
      case normal :
         CheckItem = MoveTime->Command;
         break;
      case fullgametime :
         CheckItem = TotalTime->Command;
         break;
      case plysearch :
         CheckItem = Ply1->Command;
         break;
      case easygame :
         CheckItem = Easy->Command;
         break;
      case infinite :
         CheckItem = Infinite->Command;
         break;
      case matesearch :
         CheckItem = Mate->Command;
         break;
      case matching :
         CheckItem = Matching->Command;
         break;
      }
   CheckMenuItem(TChessMenu->Handle, CheckItem, MF_UNCHECKED);
}
//---------------------------------------------------------------------------
/*
主菜單項“容易”事件處理函數
 選中子菜單項”容易“時,在該項前打勾。
 對弈時在棋盤上對下一步要吃掉的棋子用正方形框住。
*/
void __fastcall TMainForm::EasyClick(TObject *Sender)
{
 if (Level != easygame)
      {
      UnCheckLevelMenu(Level);
      CheckMenuItem(TChessMenu->Handle, Easy->Command, MF_CHECKED);
      }
   Level = easygame;
   AverageTime = 5.;
   MaxLevel = MAXPLY;
   PrintCurLevel();
        
}
//---------------------------------------------------------------------------
/*
主菜單項“完成”事件處理函數
 測試棋盤中的棋子擺放是否正確。如果不正確,則彈出錯誤對話框,
 直至正確才退出編輯狀態。
*/
void __fastcall TMainForm::DoneClick(TObject *Sender)
{
  SQUARETYPE sq;
   int TotalCount[2] = { 0, 0 };
   int KingCount[2] = { 0, 0 };
   int AssistCount[2] = { 0, 0};
   int BishopCount[2] = { 0, 0 };
   int KnightCount[2] = { 0, 0 };
   int RookCount[2] = { 0, 0 };
   int GunnerCount[2] = { 0, 0 };
   int PawnCount[2] = { 0, 0 };
   bool Done = false;
   bool RKingNumDone, BKingNumDone, RAssistNumDone, BAssistNumDone;
   bool RBishopNumDone, BBishopNumDone, RKnightNumDone, BKnightNumDone;
   bool RRookNumDone, BRookNumDone, RGunnerNumDone, BGunnerNumDone;
   bool RPawnNumDone, BPawnNumDone;

   RKingNumDone = BKingNumDone = RAssistNumDone = BAssistNumDone = true;
   RBishopNumDone = BBishopNumDone = RKnightNumDone = BKnightNumDone = true;
   RRookNumDone = BRookNumDone = RGunnerNumDone = BGunnerNumDone = true;
   RPawnNumDone = BPawnNumDone = true;

   bool RKingPosDone, BKingPosDone, RAssistPosDone, BAssistPosDone;
   bool RBishopPosDone, BBishopPosDone, RPawnPosDone, BPawnPosDone;
   RKingPosDone = BKingPosDone = RAssistPosDone = BAssistPosDone = true;
   RBishopPosDone = BBishopPosDone = RPawnPosDone = BPawnPosDone = true;

   AnsiString ErrorNumText = "";
   AnsiString ErrorPosText = "";

   if (Modified)
      {
       for (sq = 0; sq < 0x99; sq++)
	  if (((sq>>4)<10) && ((sq % 16)<9)  && ((sq | 0xff)>=0))
            {
            if (ChessBoard[sq].piece != empty)
               {
               TotalCount[ChessBoard[sq].color]++;
               if (ChessBoard[sq].piece == king)
                  KingCount[ChessBoard[sq].color]++;
               if (ChessBoard[sq].piece == assist)
                  AssistCount[ChessBoard[sq].color]++;
               if (ChessBoard[sq].piece == bishop)
                  BishopCount[ChessBoard[sq].color]++;
               if (ChessBoard[sq].piece == knight)
                  KnightCount[ChessBoard[sq].color]++;
               if (ChessBoard[sq].piece == rook)
                  RookCount[ChessBoard[sq].color]++;
               if (ChessBoard[sq].piece == gunner)
                  GunnerCount[ChessBoard[sq].color]++;
               if (ChessBoard[sq].piece == pawn)
                  PawnCount[ChessBoard[sq].color]++;
               }
            }

      if (KingCount[red] != 1)
            {
             ErrorNumText =  "帥";
             RKingNumDone = false;
            }
       if (KingCount[black] != 1)
            {
             ErrorNumText = ErrorNumText + "將";
             BKingNumDone = false;
            }
      if (AssistCount[red] > 2)
            {
             ErrorNumText = ErrorNumText + "仕";
             RAssistNumDone = false;
            }
      if (AssistCount[black] > 2)
            {
             ErrorNumText = ErrorNumText + "士";
             BAssistNumDone = false;
            }
      if (BishopCount[red] > 2)
             {
             ErrorNumText = ErrorNumText + "相";
             RBishopNumDone = false;
             }
      if  (BishopCount[black] > 2)
             {
             ErrorNumText = ErrorNumText + "象";
             BBishopNumDone = false;
             }
      if ((KnightCount[red] > 2 ) ||( KnightCount[black] > 2))
             {
             ErrorNumText = ErrorNumText + "馬";
             RKnightNumDone = BKnightNumDone = false;
             }
      if ((RookCount[red] >2 )||( RookCount[black] >2 ))
             {
             ErrorNumText = ErrorNumText + "車";
             RRookNumDone = BRookNumDone = false;
             }
      if ( GunnerCount[red] > 2)
             {
             ErrorNumText = ErrorNumText + "炮";
             RGunnerNumDone = false;
             }
      if ( GunnerCount[black] > 2)
             {
             ErrorNumText = ErrorNumText + "砲";
             BGunnerNumDone = false;
             }
      if (PawnCount[red] > 5)
             {
             ErrorNumText = ErrorNumText + "兵";
             RPawnNumDone = false;
             }
      if (PawnCount[black] > 5)
             {
             ErrorNumText = ErrorNumText + "卒";
             BPawnNumDone = false;
             }
       ErrorNumText = ErrorNumText + "的數目不正確";

      for (sq = 0; sq < 0x99; sq++)
	 if (((sq>>4)<10) && ((sq % 16)<9)  && ((sq | 0xff)>=0))
           {
           if (ChessBoard[sq].color == red)
                  if (ChessBoard[sq].piece == king)
                    if (((sq >> 4) > 2) || ((sq % 16) > 5) || ((sq % 16) < 3))
                      RKingPosDone = false;

           if (ChessBoard[sq].color == black)
                  if (ChessBoard[sq].piece == king)
                    if (((sq >> 4) < 7) || ((sq % 16) > 5) || ((sq % 16) < 3))
                      BKingPosDone = false;

           if (ChessBoard[sq].color == red)
                 if (ChessBoard[sq].piece == assist)
                   {
                    if (((sq >> 4) > 2) || ((sq % 16) > 5) || ((sq % 16) < 3))
                      RAssistPosDone = false;
                    if ((sq == 0x13) || (sq == 0x15)||(sq == 4)||(sq == 0x24))
                       RAssistPosDone = false;
                   }

           if (ChessBoard[sq].color == black)
              if (ChessBoard[sq].piece == assist)
                  {
                    if (((sq >> 4) < 7) || ((sq % 16) > 5) || ((sq % 16) < 3))
                     BAssistPosDone = false;
                    if ((sq == 0x83) || (sq == 0x55)||(sq == 0x94)||(sq == 0x74))
                       BAssistPosDone = false;
                   }

           if (ChessBoard[sq].color == red)
               if (ChessBoard[sq].piece == bishop)
                 if ((sq != 2) && (sq != 6) && (sq != 0x20) && (sq != 0x24)
                     && (sq != 0x28) && (sq != 0x42) && (sq != 0x46))

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色偷偷一区二区三区| 亚洲精品福利视频网站| 在线观看亚洲成人| 欧美亚洲国产怡红院影院| 欧美日韩色综合| 欧美v国产在线一区二区三区| 欧美韩国日本不卡| 欧美激情资源网| 亚洲成a人片在线观看中文| 精品三级在线观看| 成人欧美一区二区三区小说| 国产美女精品人人做人人爽| 3atv一区二区三区| 久久精品欧美一区二区三区不卡| 日本欧美在线看| 日韩美女视频在线| 麻豆91在线观看| 久久免费电影网| 国产成人aaa| 国产精品麻豆久久久| 风间由美一区二区av101| 欧美大黄免费观看| 国产成人在线视频网站| 精品久久久久一区| 成人午夜又粗又硬又大| 亚洲美女在线国产| 欧美白人最猛性xxxxx69交| 国产成人免费在线视频| 中文字幕一区二区日韩精品绯色| 国产成人福利片| 亚洲三级在线免费观看| 欧美一区二区三区免费在线看| 亚洲美女偷拍久久| 欧美色手机在线观看| 欧美日韩精品是欧美日韩精品| 国产肉丝袜一区二区| 99riav久久精品riav| 国产毛片一区二区| 久久国产精品区| 蜜臀av性久久久久蜜臀av麻豆| 蜜桃av一区二区在线观看| 69成人精品免费视频| 蜜臀av性久久久久av蜜臀妖精| 欧美一区二区三区视频在线观看| 日本午夜一区二区| 精品久久一区二区三区| 国产裸体歌舞团一区二区| 国产日产亚洲精品系列| 波多野结衣在线aⅴ中文字幕不卡| 日本一区二区三区免费乱视频| www.亚洲精品| 亚洲成人自拍偷拍| 日韩精品一区二区在线| 国产二区国产一区在线观看| 国产精品盗摄一区二区三区| 欧美吻胸吃奶大尺度电影| 免费成人性网站| 国产精品高清亚洲| 欧美三级日韩在线| 国产一区二区91| 亚洲青青青在线视频| 欧美日韩精品欧美日韩精品一综合| 日本伊人午夜精品| 欧美韩国日本一区| 欧美午夜寂寞影院| 国产毛片精品视频| 伊人开心综合网| 日韩免费观看高清完整版 | 韩国理伦片一区二区三区在线播放| 日韩情涩欧美日韩视频| 国产成人精品免费视频网站| 亚洲欧美日韩在线不卡| 欧美一区二区三区四区在线观看| 国产成人亚洲综合色影视 | 国产日韩欧美精品电影三级在线| 不卡的电影网站| 日韩电影在线观看电影| 国产日韩精品一区二区浪潮av| 欧美性受xxxx| 暴力调教一区二区三区| 美女久久久精品| 亚洲一区二区精品视频| 国产欧美在线观看一区| 欧美一级精品在线| 91久久国产最好的精华液| 国产精品一区二区黑丝| 天堂在线亚洲视频| 亚洲色图一区二区| 久久久亚洲综合| 欧美一区二区三区在线观看| 91婷婷韩国欧美一区二区| 国产一区二区三区不卡在线观看| 亚洲成人精品在线观看| 国产精品久久久久桃色tv| 精品国产乱码久久久久久闺蜜| 欧美日韩在线播放三区| 99这里都是精品| 国产一区二区三区高清播放| 日韩精品成人一区二区在线| 夜夜嗨av一区二区三区中文字幕| 国产精品国模大尺度视频| 久久人人超碰精品| 精品嫩草影院久久| 欧美一区二区三区免费观看视频| 在线视频一区二区三区| 色狠狠色狠狠综合| 日本韩国精品一区二区在线观看| 成人免费观看av| 大胆亚洲人体视频| 国产精品白丝jk白祙喷水网站 | 偷窥国产亚洲免费视频| 一区二区三区国产精品| 一区二区三区四区在线| 1024亚洲合集| 伊人色综合久久天天人手人婷| 亚洲欧洲制服丝袜| 亚洲同性同志一二三专区| 国产精品久久久久久久久图文区 | 97se亚洲国产综合在线| 成人av高清在线| 成年人午夜久久久| 91免费观看视频| 欧美亚洲国产怡红院影院| 欧美在线观看一二区| 欧美视频完全免费看| 日韩一区二区三区四区五区六区| 日韩三级.com| 亚洲国产高清在线观看视频| 亚洲人成在线播放网站岛国| 亚洲视频一二三区| 亚洲成人1区2区| 国产一区二区三区四区五区入口| 国产精品一区二区无线| 91浏览器打开| 7777女厕盗摄久久久| 国产亚洲一区二区三区在线观看| 国产精品你懂的在线欣赏| 伊人色综合久久天天人手人婷| 丝瓜av网站精品一区二区| 国内精品写真在线观看| 丁香婷婷综合五月| 欧洲人成人精品| 久久亚区不卡日本| 亚洲欧洲性图库| 亚洲a一区二区| 国产成人h网站| 精品视频1区2区3区| 精品福利一二区| 亚洲色图欧美激情| 久久99精品国产91久久来源| 成人福利视频网站| 91精品国产一区二区| 日本一区二区三区四区| 日韩专区欧美专区| 成人小视频在线| 欧美一区二区黄| 亚洲欧美激情一区二区| 毛片一区二区三区| 色综合中文字幕国产 | 狠狠色丁香九九婷婷综合五月| 免费成人在线网站| 欧美视频第二页| 亚洲香肠在线观看| 91精品欧美综合在线观看最新| 伊人色综合久久天天人手人婷| 色视频成人在线观看免| 爽好多水快深点欧美视频| 国产在线麻豆精品观看| 久久久不卡网国产精品一区| 国产成人a级片| 亚洲男人的天堂网| 欧美在线影院一区二区| 日本免费新一区视频| 日韩美女一区二区三区四区| 日韩电影一区二区三区四区| 欧美性色黄大片| 精品一区二区影视| 国产亚洲综合av| 在线观看日韩毛片| 国产自产v一区二区三区c| 国产亚洲综合av| 色88888久久久久久影院按摩| 亚洲欧美精品午睡沙发| 欧美岛国在线观看| 97国产精品videossex| 午夜精品久久久久久久久久| 国产视频视频一区| 欧美精品久久天天躁| 99在线精品免费| 成人午夜视频在线| 国产自产2019最新不卡| 亚洲欧美在线高清| 精品国产免费视频| 欧美美女一区二区| 欧美在线免费观看视频| 成人午夜精品一区二区三区| 首页欧美精品中文字幕| 亚洲精品中文在线观看| 国产精品欧美综合在线| 综合久久综合久久|