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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? reversi.c

?? UC_GUI開發(fā)源代碼,里面含有范例,源文件
?? C
?? 第 1 頁 / 共 3 頁
字號:
    _Board.ActPlayer = 3 - Player;
    ValidMoves = _CalcValidMoves(&_Board);
    _Board.ActPlayer = Player;
    _CalcValidMoves(&_Board);
    if (ValidMoves) {   /* No valid moves, player must pass */
      if (_pPlayerAI[_Board.ActPlayer - 1] == NULL) {
        _ShowMessageBox("Reversi", "No possible moves.\nYou have to pass!", 0);
      } else {
        /* Pass ai player */
      }
      _SetPlayer(3 - _Board.ActPlayer);
    } else {            /* No valid moves for all players, game is over */
      char ac[256];
      int Score;
      _GameOver = 1;
      _Board.ActPlayer = 1;
      Score = _CalcScore(&_Board);
      if (Score > 0) {
        sprintf(ac, "Red wins by %d stones!\nDo you want to start a new game?", Score);
      } else if (Score) {
        sprintf(ac, "Blue wins by %d stones!\nDo you want to start a new game?", -Score);
      } else {
        strcpy(ac, "The game ends in a draw!\nDo you want to start a new game?");
      }
      if (_ShowMessageBox("Reversi", ac, 1)) {
        _StartNewGame();
      }
    }
  }
}

/*******************************************************************
*
*       _NextPlayer
*/
static void _NextPlayer(void) {
  do {
    _SetPlayer(3 - _Board.ActPlayer);
    if (_pPlayerAI[_Board.ActPlayer - 1]&& !_GameOver) {
      int x, y;
      char DoMove;
      DoMove = (*_pPlayerAI[_Board.ActPlayer - 1])(&_Board, &x, &y);
      _Delay(100);
      if (DoMove) {
        _MakeMove(&_Board, x, y);
      }
    }
  } while (_pPlayerAI[_Board.ActPlayer - 1] && !_GameOver);
}

/*******************************************************************
*
*       _StartNewGame
*/
static void _StartNewGame(void) {
  memset(&_Board, 0, sizeof(BOARD));
  _Board.aCells[3][3] = 1;
  _Board.aCells[4][4] = 1;
  _Board.aCells[3][4] = 2;
  _Board.aCells[4][3] = 2;
  _GameOver    = 0;
  _SetPlayer(1);
  _InvalidateBoard();
}

/*******************************************************************
*
*       _HandlePID
*/
static void _HandlePID(int x, int y, int Pressed) {
  static int _IsInHandlePID = 0;
  if (_IsInHandlePID++ == 0) {
    _CalcBoardDimensions();
    x -= _BoardX0;
    y -= _BoardY0;
    if ((x >= 0) && (y >= 0)) {
      x /= _CellSize;
      y /= _CellSize;
      if ((x < 8) && (y < 8)) {
        if (_IsValidMove(&_Board, x, y)) {
          if (Pressed == 0) {
            _ReleaseCapture();
            _MakeMove(&_Board, x, y);
            _NextPlayer();
          } else {
            _SetCapture();
          }
          goto EndHandlePID;
        }   
      }
    }
    _ReleaseCapture();
  }
EndHandlePID:
  _IsInHandlePID--;
}

/*********************************************************************
*
*       _OnTouch
*/
static void _OnTouch(WM_MESSAGE* pMsg) {
  const GUI_PID_STATE* pState = (const GUI_PID_STATE*)pMsg->Data.p;
  if (pState) {  /* Something happened in our area (pressed or released) */
    _HandlePID(pState->x, pState->y, pState->Pressed);
  }
}

/*********************************************************************
*
*       _OnMouseOver
*/
#if (GUI_SUPPORT_MOUSE & GUI_SUPPORT_CURSOR)
static void _OnMouseOver(WM_MESSAGE* pMsg) {
  const GUI_PID_STATE* pState = (const GUI_PID_STATE *)pMsg->Data.p;
  if (pState) {
    _HandlePID(pState->x, pState->y, -1);
  }
}
#endif

/*******************************************************************
*
*       _OnMenu
*/
static void _OnMenu(WM_MESSAGE* pMsg) {
  MENU_MSG_DATA* pData = (MENU_MSG_DATA*)pMsg->Data.p;
  MENU_Handle    hMenu = pMsg->hWinSrc;
  switch (pData->MsgType) {
  case MENU_ON_INITMENU:
    if (_GameOver) {
      MENU_DisableItem(hMenu, ID_MENU_PASS);
    } else {
      MENU_EnableItem(hMenu, ID_MENU_PASS);
    }
    break;
  case MENU_ON_ITEMSELECT:
    switch (pData->ItemId) {
    case ID_MENU_NEW:
      _StartNewGame();
      break;
    case ID_MENU_PASS:
      _NextPlayer();
      break;
    case ID_MENU_EXIT:
      WM_DeleteWindow(_hFrame);
      break;
    case ID_MENU_SETTINGS:
      _ShowDialogSettings();
      break;
    case ID_MENU_ABOUT:
      _ShowAboutBox();
      break;
    case ID_MENU_TEST:
      WM_ReleaseCapture();
      WM_DetachWindow(_hContextMenu);
      break;
    }
    break;
  default:
    WM_DefaultProc(pMsg);
  }
}

/*******************************************************************
*
*       _OnPaint
*/
static void _OnPaint(WM_HWIN hWin) {
  GUI_COLOR Color;
  GUI_RECT  r;
  int x, y, xPos, yPos;
  int CellSize, rStone, rMove;
  char Cell, IsValidMove;
  _CalcBoardDimensions();
  GUI_AA_SetFactor(AA_FACTOR);
  #if AA_USE_HIRES
    GUI_AA_EnableHiRes();
  #endif
  LCD_SetBkColor(CLIENT_COLOR);
  WM_GetClientRectEx(hWin, &r);
  GUI_ClearRect(r.x0, r.y0, r.x1, _BoardY0 - 1);
  GUI_ClearRect(r.x0, _BoardY0, _BoardX0 - 1, _BoardY0 + (8 * _CellSize));
  GUI_ClearRect(_BoardX0 + (8 * _CellSize) + 1, _BoardY0, r.x1, _BoardY0 + (8 * _CellSize));
  GUI_ClearRect(r.x0, _BoardY0 + (8 * _CellSize) + 1, r.x1, r.y1);
  CellSize = _CellSize - 1;
  rStone = ((CellSize - 3) * AA_CALCFACTOR) >> 1;
  rMove  = ((CellSize - 2) * AA_CALCFACTOR) >> 3;
  if (rStone < AA_CALCFACTOR) {
    rStone = AA_CALCFACTOR;
  }
  if (rMove < (AA_CALCFACTOR >> AA_USE_HIRES)) {
    rMove = (AA_CALCFACTOR >> AA_USE_HIRES);
  }
  for (yPos = _BoardY0, y = 0; y < 8; y++) {
    for (xPos = _BoardX0, x = 0; x < 8; x++) {
      Color = ((x + (y & 1)) & 1) ? (GUI_LIGHTGRAY) : (GUI_WHITE);
      LCD_SetColor(Color);
      GUI_FillRect(xPos + 1, yPos + 1, xPos + CellSize, yPos + CellSize);
      Cell        = _GetStone(&_Board, x, y);
      IsValidMove = (_ShowPossibleMoves) ? _IsValidMove(&_Board, x, y) : 0;
      if (_pPlayerAI[_Board.ActPlayer - 1]) {
        IsValidMove = 0;
      }
      if (Cell || IsValidMove) {
        int xCircle, yCircle;
        xCircle = (xPos + 1) * AA_CALCFACTOR + ((CellSize * AA_CALCFACTOR) >> 1);
        yCircle = (yPos + 1) * AA_CALCFACTOR + ((CellSize * AA_CALCFACTOR) >> 1);
        if (Cell) {
          Color = (Cell == 1) ? (GUI_RED) : (GUI_BLUE);
          LCD_SetColor(Color);
          #if (AA_FACTOR > 1)
            GUI_AA_FillCircle(xCircle, yCircle, rStone);
          #else
            GUI_FillCircle(xCircle, yCircle, rStone);
          #endif
        } else {
          LCD_SetColor(GUI_BLACK);
          #if (AA_FACTOR > 1)
            GUI_AA_FillCircle(xCircle, yCircle, rMove);
          #else
            GUI_FillCircle(xCircle, yCircle, rMove);
          #endif
        }
      }
      LCD_SetColor(GRID_COLOR);
      GUI_DrawVLine(xPos, yPos + 1, yPos + CellSize);
      xPos += _CellSize;
    }
    GUI_DrawVLine(xPos, yPos + 1, yPos + CellSize);
    GUI_DrawHLine(yPos, _BoardX0, _BoardX0 + (_CellSize << 3));
    yPos += _CellSize;
  }
  GUI_DrawHLine(yPos, _BoardX0, _BoardX0 + (_CellSize << 3));
}

/*******************************************************************
*
*       _cbReversiWin
*/
static void _cbReversiWin(WM_MESSAGE* pMsg) {
  WM_HWIN hWin = pMsg->hWin;
  switch (pMsg->MsgId) {
  case WM_PAINT:
    _OnPaint(hWin);
    break;
  case WM_TOUCH:
    _OnTouch(pMsg);
    break;
#if (GUI_SUPPORT_MOUSE & GUI_SUPPORT_CURSOR)
  case WM_MOUSEOVER:
    _OnMouseOver(pMsg);
    break;
#endif
  case WM_MENU:
    _OnMenu(pMsg);
    break;
  case WM_DELETE:
    _hFrame = 0;
    break;
  default:
    WM_DefaultProc(pMsg);
  }
}

/*********************************************************************
*
*       _StartReversi
*/
static void _StartReversi(void) {
  _hFrame = FRAMEWIN_CreateEx(64, 11, 191, 218, WM_HBKWIN, WM_CF_SHOW, FRAMEWIN_CF_MOVEABLE, 0, NULL, &_cbReversiWin);
  FRAMEWIN_SetClientColor(_hFrame, GUI_INVALID_COLOR);
  FRAMEWIN_SetFont       (_hFrame, &GUI_Font10_1);
  FRAMEWIN_SetTextAlign  (_hFrame, GUI_TA_HCENTER);
  FRAMEWIN_AddCloseButton(_hFrame, FRAMEWIN_BUTTON_LEFT,  0);
  FRAMEWIN_AddMaxButton  (_hFrame, FRAMEWIN_BUTTON_RIGHT, 0);
  FRAMEWIN_AddMinButton  (_hFrame, FRAMEWIN_BUTTON_RIGHT, 1);
  FRAMEWIN_SetResizeable (_hFrame, 1);
  _CreateMenu(_hFrame);
  _StartNewGame();
  WM_SetFocus(_hFrame);
  while (_hFrame) {
    GUI_Delay(500);
  }
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/

#if 1

/*********************************************************************
*
*       _GetNearValue
*/
static int _GetNearValue(int x, int y) {
  int r = 0xFF;
  if ((x >= 0) && (y >= 0)) {
    int x1, y1;
    x1 = 7 - x;
    y1 = 7 - y;
    x  = (x < x1) ? x : x1;
    y  = (y < y1) ? y : y1;
    r  = (x < y)  ? x : y;
  }
  return r;
}

/*********************************************************************
*
*       _PlayerAI_NearToBorder
*/
static char _PlayerAI_NearToBorder(U16 Board[8][8], U16 Flags, int Player, int* px, int* py) {
  int x, y, xNear, yNear;
  xNear = -1;
  for (y = 0; y < 8; y++) {
    for (x = 0; x < 8; x++) {
      if (((y == 1) || (y == 6)) && ((x != 0) && (x != 7))) {
        continue;
      }
      if (((x == 1) || (x == 6)) && ((y != 0) && (y != 7))) {
        continue;
      }
      if (Board[x][y] & 0xFF00) {
        if (_GetNearValue(x, y) < _GetNearValue(xNear, yNear)) {
          xNear = x;
          yNear = y;
        }
      }
    }
  }
  if (xNear >= 0) {
    *px = xNear;
    *py = yNear;
  } else {
    return _PlayerAI_FirstValid(&_Board, px, py);
  }
  return 1;
}
#endif

/*********************************************************************
*
*       MainTask
*/
void MainTask(void);
void MainTask(void) {
  GUI_Init();
  GUI_CURSOR_Select(&GUI_CursorArrowM);
  GUI_CURSOR_Show();  
  WM_SetDesktopColor(DESKTOP_COLOR);
  WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */
  //_pPlayerAI[1] = &_PlayerAI_NearToBorder;
  _pPlayerAI[1] = &_PlayerAI_FirstValid;
  while (1) {
    _StartReversi();
    GUI_Delay(1000);
  }
}

/*************************** End of file ****************************/
	 	 			 		    	 				 	  			   	 	 	 	 	 	  	  	      	   		 	 	 		  		  	 		 	  	  			     			       	   	 			  		    	 	     	 				  	 					 	 			   	  	  			 				 		 	 	 			     			 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看91av| 中文字幕日本乱码精品影院| 2023国产精华国产精品| 中文字幕一区二区在线播放 | 91色视频在线| 日韩精品一区在线| 亚洲综合图片区| 国产高清无密码一区二区三区| 在线精品视频小说1| 久久精品视频在线免费观看| 亚洲一区二区三区四区在线观看| 国产成人精品一区二区三区四区| 欧美男男青年gay1069videost| 日本一区二区视频在线| 热久久一区二区| 91精品办公室少妇高潮对白| 26uuu久久天堂性欧美| 天天操天天色综合| 色诱视频网站一区| 国产精品嫩草99a| 国产一区二区三区四区在线观看| 中文字幕乱码亚洲精品一区| 蜜臀a∨国产成人精品| 欧美亚洲精品一区| 亚洲一区二区三区四区五区黄| 成人蜜臀av电影| 国产午夜精品久久久久久免费视| 奇米精品一区二区三区在线观看| 91黄色免费版| 一区二区三区中文字幕| 成人网男人的天堂| 国产午夜精品一区二区三区视频| 久久99国产精品成人| 日韩一级片在线观看| 亚洲成在线观看| 欧美日韩激情一区二区| 五月婷婷色综合| 91精品国模一区二区三区| 亚洲国产精品视频| 欧美精品tushy高清| 日韩精品电影在线观看| 日韩午夜精品电影| 国产一区福利在线| 久久久久久亚洲综合影院红桃| 国产一区二区久久| 中文一区在线播放| 色综合久久精品| 一区二区三区日韩精品视频| 91福利精品第一导航| 一区二区高清免费观看影视大全| 欧美亚州韩日在线看免费版国语版| 亚洲一区二区三区在线看| 欧美另类变人与禽xxxxx| 日本一不卡视频| 欧美精品一区二区不卡| 懂色一区二区三区免费观看| 亚洲国产精品成人久久综合一区 | 久久久久久久精| 国产成人在线免费观看| 一区二区三区在线观看动漫| 欧美精品一级二级三级| 国产精品一区二区视频| 一区二区成人在线视频| 91精品国产一区二区| 国精产品一区一区三区mba视频| 中文字幕一区在线| 日韩一级完整毛片| 成a人片国产精品| 亚洲图片自拍偷拍| ww亚洲ww在线观看国产| 94-欧美-setu| 美女任你摸久久 | wwwwxxxxx欧美| 91年精品国产| 免费一级片91| 亚洲男人的天堂一区二区| 日韩一区二区精品| 99免费精品视频| 青娱乐精品在线视频| 最新不卡av在线| 欧美mv日韩mv国产网站app| 91香蕉视频mp4| 久久精品国产999大香线蕉| 综合久久综合久久| 精品国产伦理网| 欧美午夜不卡视频| thepron国产精品| 久久精品国产99| 亚洲午夜久久久久| 成人免费在线视频| 久久久久久久综合狠狠综合| 欧美群妇大交群中文字幕| www.亚洲精品| 国内精品写真在线观看| 亚洲一区二区三区国产| 国产精品国产自产拍在线| 日韩欧美中文字幕一区| 欧美影院午夜播放| 成人h动漫精品一区二区| 精品一区二区免费视频| 亚洲一线二线三线视频| 国产精品午夜在线观看| 2017欧美狠狠色| wwww国产精品欧美| 欧美videofree性高清杂交| 337p亚洲精品色噜噜噜| 91.成人天堂一区| 91.xcao| 欧美高清性hdvideosex| 欧美日韩国产在线播放网站| 91福利精品视频| 欧美专区在线观看一区| 欧美色网站导航| 欧美日韩亚洲综合| 欧美精品久久久久久久多人混战| 欧美日韩国产三级| 911精品国产一区二区在线| 91精品麻豆日日躁夜夜躁| 欧美男生操女生| 日韩视频一区二区在线观看| 欧美一区二区成人6969| 日韩女优毛片在线| www成人在线观看| 欧美激情一区二区三区蜜桃视频| 久久久精品国产免大香伊| 久久在线免费观看| 久久综合狠狠综合久久综合88| 欧美精品一区二区三区四区| 精品国产乱码久久久久久老虎| 精品电影一区二区三区| 精品国产乱码久久久久久久| 国产亚洲精品福利| 国产精品电影院| 日韩美女视频一区| 婷婷久久综合九色综合绿巨人| 日韩国产高清影视| 久久国产精品72免费观看| 国产一区二区在线视频| 春色校园综合激情亚洲| 色域天天综合网| 日韩欧美国产高清| 国产精品久久久久久久久免费相片| 亚洲精品中文在线| 亚洲国产日韩一级| 国内精品国产三级国产a久久| 国产iv一区二区三区| 色综合中文综合网| 日韩精品视频网站| 欧美另类久久久品| 欧美日韩国产一二三| 欧美男人的天堂一二区| 精品免费国产一区二区三区四区| 欧美国产精品专区| 亚洲高清视频在线| 成人污视频在线观看| 欧美视频三区在线播放| 久久亚洲影视婷婷| 亚洲精品久久7777| 国产精品一二三四区| 欧美制服丝袜第一页| 精品国产1区二区| 一区二区三区91| 国产精品18久久久久久久网站| 91老司机福利 在线| 日韩精品在线看片z| 亚洲精品高清在线| 国产一区在线观看视频| 91视频国产资源| 26uuu精品一区二区三区四区在线| 亚洲欧洲美洲综合色网| 麻豆中文一区二区| 欧美私模裸体表演在线观看| 国产欧美日韩三区| 日日夜夜一区二区| 色综合色综合色综合色综合色综合| 精品乱人伦小说| 日韩中文字幕亚洲一区二区va在线 | 玖玖九九国产精品| 欧美三级资源在线| 中文字幕精品三区| 国产在线看一区| 欧美日韩精品一区视频| 亚洲丝袜精品丝袜在线| 国产老肥熟一区二区三区| 欧美三级视频在线观看| 亚洲男女毛片无遮挡| 成人在线一区二区三区| 2024国产精品| 久久国内精品自在自线400部| 色综合久久88色综合天天6 | 日韩一级大片在线观看| 亚洲猫色日本管| 99久久精品国产一区二区三区| 精品国产一区二区三区忘忧草 | 精品国产伦一区二区三区免费| 日韩精品欧美成人高清一区二区| 欧美日韩一区二区三区四区| 亚洲免费视频中文字幕| 一本色道亚洲精品aⅴ| 国产精品传媒在线|