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

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

?? reversiboard.cpp

?? MONA是為數(shù)不多的C++語言編寫的一個很小的操作系統(tǒng)
?? CPP
字號:
// This file's encoding is UTF-8.#include "ReversiBoard.h"using namespace MonAPI;/** * コンストラクタ */ReversiBoard::ReversiBoard() {    init();}/** * 指定された駒が盤面上にいくつあるかを數(shù)える * @param  piece <code>ReversiBoard.WHITE, ReversiBoard.BLACK, ReversiBoard.EMPTY</code> * @return 駒の個數(shù) */int ReversiBoard::countPieces(int piece) {    int result = 0;    // 駒の個數(shù)を數(shù)える    for (int x = 0; x < BOARDW; x++) {        for (int y = 0; y < BOARDH; y++) {            if (this->board[x][y] == piece) result++;        }    }    return result;}/** * 指定された位置の駒を返す * @param  x (x, y) 駒の位置 * @param  y (x, y) 駒の位置 * @return 駒 盤面の範(fàn)囲外の場合は<code>ReversiBoard.EMPTY</code> */int ReversiBoard::getPiece(int x, int y) {    // x, yの範(fàn)囲をチェック   if (!checkRange(x, y)) return EMPTY;    // 駒を返す    return board[x][y];}/** * 指定された位置の駒を返す * @param  point 駒の位置 * @return 駒 盤面の範(fàn)囲外の場合は<code>ReversiBoard.EMPTY</code> */int ReversiBoard::getPiece(Point2D* point) {    return getPiece(point->x, point->y);}/** * 現(xiàn)在の手番のプレイヤーを返す<code>ReversiBoard.EMPTY</code>を返したときは勝負(fù)の決著がついている狀態(tài)<BR> * @return 現(xiàn)在の手番のプレイヤー <code>ReversiBoard.BLACK, WHITE, EMPTY</code> */int ReversiBoard::getCurrentHand() const {    return this->currentHand;}/** * 指定された位置に駒を置く。<BR> * 駒が置けた場合、置いた場所を示す。<BR> * <code>Point2D</code>がnotifyObserversで<BR> * 監(jiān)視元に通知される * @param x (x, y) 駒の位置 * @param y (x, y) 駒の位置 * @param piece 置く駒 * @return 駒が置けたら<code>true</code>, 駒が置けなかったら<code>false</code> */bool ReversiBoard::setPiece(int x, int y, int piece) {    int numReversiblePieces; // 裏返すことのできる駒數(shù)    // 現(xiàn)在の手と照合    if (currentHand != piece) return false;    // 前手が完全に終了したかどうかをチェック    if (existNotReversedPieces()) return false;    // そこに置けるかどうかを調(diào)べる    numReversiblePieces = countReversiblePieces(x, y, piece);    if (numReversiblePieces <= 0) return false;    // pieceを(x, y)に置いたときに、裏返す駒をすべて記憶    recordReversiblePieces(x, y, piece);    // 駒を置く    board[x][y] = piece;    // ターンを記憶    allTurns->add(new Point3D(x, y, piece));    turn++;    // 変更をObserverに通知    this->setChanged();    Point2D* p = new Point2D(x, y);    this->notifyObservers(p);    delete p;    this->clearChanged();    return true;}/** * <code>setPiece()</code>した後に、裏返してない駒が存在するかを返す<BR> * <pre> *    使用方法 *      board.setPiece(3, 5, OthlloBoard::BLACK); *      while (existNotReversedPieces()) { *          reverseNext(); *          // 描畫用処理 *      } * </pre> * @return 裏返してない駒が存在する場合<code>true</code> */bool ReversiBoard::existNotReversedPieces() {    return allNotReversedPieces->size() > 0;}/** * 次の駒を裏返す<BR> * 裏返した場所を示す<code>Point2D</code>がnotifyObserversで監(jiān)視元に通知される * existNotReversedPieces()の使用方法を參照 */void ReversiBoard::reverseNext() {    // 裏返す位置を取得    Point2D* point = allNotReversedPieces->get(0);    // 裏返す    reversePiece(point->x, point->y);    // 変更を通知    this->setChanged();    notifyObservers(new Point2D(point));    this->clearChanged();    // 裏返したので位置を消去    allNotReversedPieces->removeAt(0);    return;}/** * 現(xiàn)在ターンを返す * @return 現(xiàn)在ターン */int ReversiBoard::getTurn() const {    return this->turn;}/** * undo機能 * 1手戻る */void ReversiBoard::undo() {    // 1手前に戻れない場合    if (getTurn() < 1) return;    // 盤面初期化    initBoard();    // 盤面並べなおし    for (int i = 0; i < allTurns->size() -1; i++) {        // 駒を置く        Point3D* p = allTurns->get(i);        setPiece(p->x, p->y, p->z);        while (existNotReversedPieces()) {            reverseNext();        }    }    // 最後のターンを消去    allTurns->removeAt(allTurns->size() -1);    return;}/** * 指定された位置に駒を置いたときに、いくつ駒が裏返せるかを返す * @param x * @param y * @param piece 置く駒 * @return 裏返せる駒數(shù) */int ReversiBoard::countReversiblePieces(int x, int y, int piece) {    int result = 0;    // x, yの範(fàn)囲をチェック    if (!checkRange(x, y)) return 0;    // すでに駒が置かれているかをチェック    if (board[x][y] != EMPTY) return 0;    // (x, y)にpieceを置いた場合に裏返すことのできる駒を8方向に探索    result += countReversiblePieceToOneAngle(x, y,  1,  0, piece, false);    result += countReversiblePieceToOneAngle(x, y,  1,  1, piece, false);    result += countReversiblePieceToOneAngle(x, y,  0,  1 ,piece, false);    result += countReversiblePieceToOneAngle(x, y, -1,  1, piece, false);    result += countReversiblePieceToOneAngle(x, y, -1,  0, piece, false);    result += countReversiblePieceToOneAngle(x, y, -1, -1, piece, false);    result += countReversiblePieceToOneAngle(x, y,  0, -1, piece, false);    result += countReversiblePieceToOneAngle(x, y,  1, -1, piece, false);    return result;}/** * リバーシ盤をリセットする */void ReversiBoard::resetBoard() {    delete (this->allTurns);    this->allTurns = new HList<Point3D*>();    initBoard();    // 変更を通知    this->setChanged();    this->notifyObservers(NULL);    this->clearChanged();    return;}/** * ReversiBoard生成と初期化を行う */void ReversiBoard::init() {    // 盤面初期化    initBoard();    // すべてのターンを記憶するHList初期化    allTurns = new HList<Point3D*>();    return;}/** * 盤面初期化行う */void ReversiBoard::initBoard() {    // 現(xiàn)在ターンを設(shè)定    this->turn = 0;    // 先手は黒    this->currentHand = BLACK;    // 盤面を空にする    for (int x = 0; x < BOARDW; x++) {        for (int y = 0; y < BOARDH; y++) board[x][y] = EMPTY;    }    // 初期狀態(tài)で置かれている駒をセット    board[3][3] = BLACK;    board[4][4] = BLACK;    board[4][3] = WHITE;    board[3][4] = WHITE;    // 裏返すべき駒のすべて位置を記憶するList初期化    allNotReversedPieces = new HList<Point2D*>();    return;}/** * 指定した駒を裏返す */void ReversiBoard::reversePiece(int x, int y) {    // x, yの範(fàn)囲をチェック    if (!checkRange(x, y)) return;    // 駒を裏返す?もし空なら何もしない    board[x][y] = turnColor(board[x][y]);    return;}/** * 入力された値が盤面上に存在するかチェックする */bool ReversiBoard::checkRange(int x, int y) {    // 盤面上にあるという條件    bool xRange = x >= 0 && x < BOARDW;    bool yRange = y >= 0 && y < BOARDH;    // 盤面上にある    if (xRange && yRange) return true;    // 盤面上にない    return false;}/** *  指定されたベクトル(toX, toY)の方向へ裏返せる駒數(shù)を數(shù)える *  reordFlagがtrueの時は位置を記憶 */int ReversiBoard::countReversiblePieceToOneAngle(int x, int y, int toX,int toY                                                 , int piece, bool recordFlag) {    int result = 0;    // 隣の駒へ移動    x += toX;    y += toY;    // 盤面の端まで探索を続ける    while (x >= 0 && y >= 0 && x < BOARDW && y < BOARDH) {        // 探索中の駒が裏返しの色なら裏返せる        if (board[x][y] == turnColor(piece)) {            // 裏返せる駒の位置を記憶            if (recordFlag) allNotReversedPieces->add(new Point2D(x, y));            // 駒數(shù)インクリメント            result++;        }        // 同じ色だったら、そこまであった裏返し色を裏返すことができる        else if (board[x][y] == piece) return result;        // 空なら裏返せない        else if (board[x][y] == EMPTY) {            if (recordFlag) {                // 記憶していた駒の位置                for (int i = 0; i < result; i++) {                    allNotReversedPieces->removeAt(allNotReversedPieces->size() - 1);                }            }            return 0;        }        // さらに隣の駒へ移動        x += toX;        y += toY;    }    if (recordFlag) {        // 記憶していた駒の位置        for (int i = 0; i < result; i++) {            allNotReversedPieces->removeAt(allNotReversedPieces->size() - 1);        }    }    return 0;}/** * 裏返した色を返す */int ReversiBoard::turnColor(int piece) {    return piece * -1;}/** * pieceを(x, y)に置いたときに、裏返す駒をすべて記憶 */bool ReversiBoard::recordReversiblePieces(int x, int y, int piece) {    // x, yの範(fàn)囲をチェック    if (!checkRange(x, y)) return false;    // すでに駒が置かれているかをチェック    if (board[x][y] != EMPTY) return false;    // 駒位置記憶オブジェクトを初期化    delete allNotReversedPieces;    allNotReversedPieces = new HList<Point2D*>();    // 裏返せる位置を記憶    countReversiblePieceToOneAngle(x, y,  1,  0, piece, true);    countReversiblePieceToOneAngle(x, y,  1,  1, piece, true);    countReversiblePieceToOneAngle(x, y,  0,  1 ,piece, true);    countReversiblePieceToOneAngle(x, y, -1,  1, piece, true);    countReversiblePieceToOneAngle(x, y, -1,  0, piece, true);    countReversiblePieceToOneAngle(x, y, -1, -1, piece, true);    countReversiblePieceToOneAngle(x, y,  0, -1, piece, true);    countReversiblePieceToOneAngle(x, y,  1, -1, piece, true);    return true;}// 次手のプレイヤーを判斷void ReversiBoard::setNextHand() {    if (isTherePlace(turnColor(currentHand))) {        currentHand = turnColor(currentHand);    } else if (isTherePlace(currentHand)) {        // 続けてもう1手    } else {        // 両プレイヤー共に置く場所がない        currentHand = EMPTY;    }    return;}// 盤面上に指定されたpieceをおくことができるかを判斷bool ReversiBoard::isTherePlace(int piece) {    int result = 0;    // 駒の個數(shù)を數(shù)える    for (int x = 0; x < BOARDW; x++) {        for (int y = 0; y < BOARDH; y++) {            result += countReversiblePieces(x, y, piece);        }    }    return result > 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久五月婷婷| 欧美色手机在线观看| 久久精品一区蜜桃臀影院| 丰满岳乱妇一区二区三区| 强制捆绑调教一区二区| 91精品国产综合久久精品| 免费看欧美女人艹b| 精品日韩在线观看| 国产91精品露脸国语对白| 自拍偷拍国产精品| 欧美久久婷婷综合色| 精一区二区三区| 中文子幕无线码一区tr| 色哟哟一区二区| 日韩成人一级片| 欧美韩日一区二区三区| 日本高清不卡视频| 麻豆精品在线看| 在线播放国产精品二区一二区四区| 粉嫩av一区二区三区粉嫩| 国产亲近乱来精品视频| 色噜噜狠狠成人网p站| 全部av―极品视觉盛宴亚洲| 久久久久久电影| 欧美性猛交xxxx乱大交退制版| 另类欧美日韩国产在线| 亚洲欧洲av在线| 欧美一卡在线观看| 色诱亚洲精品久久久久久| 美女高潮久久久| 亚洲丝袜另类动漫二区| 欧美一区二区高清| 一本久久综合亚洲鲁鲁五月天| 老司机午夜精品| 亚洲精品美国一| 2023国产精品| 欧美三级电影一区| 成人精品亚洲人成在线| 全部av―极品视觉盛宴亚洲| 亚洲欧洲日本在线| 精品国产91亚洲一区二区三区婷婷| 色婷婷综合久久久久中文一区二区| 久久电影国产免费久久电影| 一区二区三区日韩在线观看| 精品国产髙清在线看国产毛片| 色综合久久久久| 成人va在线观看| 国产美女精品人人做人人爽| 亚洲成人午夜电影| 亚洲欧美日韩国产一区二区三区 | 国产日韩欧美精品综合| 伊人婷婷欧美激情| 国产日本欧美一区二区| 精品久久久久久综合日本欧美| 欧美午夜片在线观看| www.日韩大片| 成人精品鲁一区一区二区| 九九精品视频在线看| 日韩成人午夜电影| 丝袜美腿成人在线| 亚洲国产一区二区视频| 亚洲天天做日日做天天谢日日欢| 国产日韩综合av| 久久综合久久综合久久综合| 欧美日韩免费视频| 欧美吻胸吃奶大尺度电影| 色综合久久久网| 在线观看区一区二| 日本高清成人免费播放| 91成人在线免费观看| 91丨九色丨蝌蚪富婆spa| 不卡在线观看av| 成人动漫一区二区在线| eeuss影院一区二区三区| bt欧美亚洲午夜电影天堂| 成av人片一区二区| 色综合夜色一区| 一本大道久久精品懂色aⅴ| 91在线观看下载| 91官网在线观看| 欧美日韩精品一二三区| 7777精品伊人久久久大香线蕉| 在线播放中文一区| 欧美成人性福生活免费看| 欧美精品一区二区三区很污很色的 | 中文字幕国产精品一区二区| 国产亚洲欧美激情| 国产精品看片你懂得| 国产精品成人网| 亚洲综合清纯丝袜自拍| 亚洲一区在线免费观看| 日本免费在线视频不卡一不卡二| 另类小说综合欧美亚洲| 国产精品77777| av中文一区二区三区| 日本黄色一区二区| 在线电影国产精品| 久久久久99精品国产片| 亚洲欧洲日产国产综合网| 天天射综合影视| 精品亚洲国产成人av制服丝袜| 盗摄精品av一区二区三区| 欧洲一区二区三区免费视频| 日韩欧美中文字幕公布| 国产欧美va欧美不卡在线| 亚洲欧美色图小说| 秋霞影院一区二区| 成人午夜伦理影院| 欧美日韩精品一区二区| 亚洲国产精华液网站w| 一区二区三区四区精品在线视频| 色偷偷久久一区二区三区| 欧美一级一区二区| 亚洲天堂中文字幕| 免费观看一级特黄欧美大片| 成人sese在线| 日韩一级大片在线观看| 亚洲欧洲美洲综合色网| 日产欧产美韩系列久久99| 国产999精品久久久久久绿帽| 在线欧美日韩国产| 国产偷国产偷亚洲高清人白洁| 亚洲色图清纯唯美| 黑人精品欧美一区二区蜜桃| 99久久99久久精品免费看蜜桃 | 裸体在线国模精品偷拍| 99久久综合99久久综合网站| 日韩欧美精品在线| 亚洲美女视频在线| 高清久久久久久| 欧美一区日韩一区| 亚洲免费观看高清完整| 国产精品夜夜爽| 日韩免费高清av| 亚洲国产人成综合网站| 成人国产在线观看| 久久久久国产成人精品亚洲午夜| 午夜精品久久久久久不卡8050| 成人免费电影视频| wwwwxxxxx欧美| 美国十次综合导航| 欧美剧情片在线观看| 亚洲欧美日韩国产另类专区| 国产成人aaa| 久久一区二区三区四区| 日韩电影在线一区二区| 在线观看日韩电影| 亚洲黄色小视频| 99精品视频在线播放观看| 日本一区二区综合亚洲| 国产真实乱对白精彩久久| 欧美一区午夜视频在线观看| 午夜精品久久久久久久久久| 在线免费不卡电影| 亚洲精品视频在线看| 97国产一区二区| 国产精品五月天| 国产精品99久久久久久似苏梦涵| 日韩一区二区在线看| 日韩va亚洲va欧美va久久| 欧美日韩一区二区三区免费看| 亚洲人123区| 99精品一区二区| 最新久久zyz资源站| 91免费国产在线观看| 亚洲欧美一区二区在线观看| av毛片久久久久**hd| 中文字幕在线一区免费| 9久草视频在线视频精品| |精品福利一区二区三区| 91麻豆国产福利在线观看| 一区二区三区在线视频观看 | 成人在线综合网| 中文字幕第一页久久| 成人黄色免费短视频| 最新国产精品久久精品| 在线观看日韩电影| 日日摸夜夜添夜夜添国产精品| 欧美一激情一区二区三区| 奇米777欧美一区二区| 天堂成人免费av电影一区| 欧美日韩高清不卡| 麻豆91精品视频| 国产视频一区二区在线观看| 丁香婷婷深情五月亚洲| 亚洲视频在线观看一区| 欧美最猛黑人xxxxx猛交| 免费高清视频精品| 国产日韩精品一区| 色88888久久久久久影院按摩| 亚洲制服丝袜一区| 日韩欧美成人激情| 粉嫩高潮美女一区二区三区| 一区二区三区中文字幕| 日韩欧美一级在线播放| 国产成人精品一区二区三区四区| 亚洲免费观看视频| 精品少妇一区二区三区在线视频| 成人一区二区在线观看| 亚洲国产视频一区二区|