From 98ad902fb015020e7f7cccf75fb4b91121c9fd64 Mon Sep 17 00:00:00 2001 From: Calcitem Team Date: Sat, 24 Aug 2019 23:39:28 +0800 Subject: [PATCH] Remove warnings --- NineChess/src/gamecontroller.cpp | 11 ++-- NineChess/src/gamecontroller.h | 6 +- NineChess/src/ninechess.cpp | 94 ++++++++++++++++---------------- NineChess/src/ninechess.h | 23 ++++---- 4 files changed, 70 insertions(+), 64 deletions(-) diff --git a/NineChess/src/gamecontroller.cpp b/NineChess/src/gamecontroller.cpp index e2de3ff7..3b7daf5f 100644 --- a/NineChess/src/gamecontroller.cpp +++ b/NineChess/src/gamecontroller.cpp @@ -347,12 +347,14 @@ void GameController::setSound(bool arg) void GameController::playSound(const QString &soundPath) { + if (soundPath == "") { + return; + } + #ifndef DONOT_PLAY_SOUND if (hasSound) { QSound::play(soundPath); } -#else - soundPath; // 为消除变量未使用过的警告 #endif /* ! DONOT_PLAY_SOUND */ } @@ -637,7 +639,7 @@ bool GameController::actionPiece(QPointF pos) switch (chess_.getAction()) { case NineChess::ACTION_PLACE: - if (chess_.place(c, p)) { + if (chess_._place(c, p)) { if (chess_.getAction() == NineChess::ACTION_CAPTURE) { // 播放成三音效 playSound(":/sound/resources/sound/capture.wav"); @@ -650,6 +652,7 @@ bool GameController::actionPiece(QPointF pos) } // 如果移子不成功,尝试重新选子,这里不break + [[fallthrough]]; case NineChess::ACTION_CHOOSE: piece = qgraphicsitem_cast(item); @@ -666,7 +669,7 @@ bool GameController::actionPiece(QPointF pos) break; case NineChess::ACTION_CAPTURE: - if (chess_.capture(c, p)) { + if (chess_._capture(c, p)) { // 播放音效 playSound(":/sound/resources/sound/remove.wav"); result = true; diff --git a/NineChess/src/gamecontroller.h b/NineChess/src/gamecontroller.h index 07cefd8f..fab9c586 100644 --- a/NineChess/src/gamecontroller.h +++ b/NineChess/src/gamecontroller.h @@ -104,7 +104,7 @@ signals: // 和棋数改变的信号 void scoreDrawChanged(const QString &score); - // 玩家1(先手)用时改变的信号 + // 玩家1(先手)用时改变的信号 void time1Changed(const QString &time); // 玩家2(后手)用时改变的信号 @@ -240,10 +240,10 @@ private: int stepsLimit; // 玩家1剩余时间(毫秒) - long remainingTime1; + int remainingTime1; // 玩家2剩余时间(毫秒) - long remainingTime2; + int remainingTime2; // 用于主窗口状态栏显示的字符串 QString message; diff --git a/NineChess/src/ninechess.cpp b/NineChess/src/ninechess.cpp index dc75d92a..3794bf99 100644 --- a/NineChess/src/ninechess.cpp +++ b/NineChess/src/ninechess.cpp @@ -327,13 +327,12 @@ void NineChess::createMillTable() } // 设置棋局状态和棋盘数据,用于初始化 -bool NineChess::setContext(const struct Rule *rule, int maxStepsLedToDraw, int maxTimeLedToLose, - int initialStep, int flags, const char *board, +bool NineChess::setContext(const struct Rule *rule, step_t maxStepsLedToDraw, int maxTimeLedToLose, + step_t initialStep, int flags, const char *board, int nPiecesInHand_1, int nPiecesInHand_2, int nPiecesNeedRemove) { // 有效性判断 - if (maxStepsLedToDraw < 0 || maxTimeLedToLose < 0 || initialStep < 0 || - nPiecesInHand_1 < 0 || nPiecesInHand_2 < 0 || nPiecesNeedRemove < 0) { + if (maxTimeLedToLose < 0) { return false; } @@ -571,12 +570,11 @@ bool NineChess::reset() if (sprintf(cmdline, "r%1u s%03u t%02u", i + 1, currentRule.maxStepsLedToDraw, currentRule.maxTimeLedToLose) > 0) { cmdlist.push_back(string(cmdline)); return true; - } else { - cmdline[0] = '\0'; - return false; } - return true; + cmdline[0] = '\0'; + + return false; } bool NineChess::start() @@ -588,7 +586,8 @@ bool NineChess::start() return false; // 如果游戏结束,则重置游戏,进入未开始状态 case GAME_OVER: - reset(); // 这里不要break; + reset(); + [[fallthrough]]; // 如果游戏处于未开始状态 case GAME_NOTSTARTED: // 启动计时器 @@ -661,7 +660,7 @@ int NineChess::cp2pos(int c, int p) return c * N_SEATS + p - 1; } -bool NineChess::place(int pos, long time_p, bool cp) +bool NineChess::place(int pos, int time_p, int8_t cp) { // 如果局面为“结局”,返回false if (context.stage == GAME_OVER) @@ -685,7 +684,7 @@ bool NineChess::place(int pos, long time_p, bool cp) pos2cp(pos, c, p); // 时间的临时变量 - long player_ms = -1; + int player_ms = -1; // 对于开局落子 int piece = '\x00'; @@ -712,7 +711,7 @@ bool NineChess::place(int pos, long time_p, bool cp) #endif move_ = pos; - if (cp == true) { + if (cp) { player_ms = update(time_p); sprintf(cmdline, "(%1u,%1u) %02u:%02u.%03u", c, p, player_ms / 60000, (player_ms % 60000) / 1000, player_ms % 1000); @@ -794,7 +793,7 @@ bool NineChess::place(int pos, long time_p, bool cp) // 移子 move_ = (currentPos << 8) + pos; - if (cp == true) { + if (cp) { player_ms = update(time_p); sprintf(cmdline, "(%1u,%1u)->(%1u,%1u) %02u:%02u.%03u", currentPos / N_SEATS, currentPos % N_SEATS + 1, c, p, player_ms / 60000, (player_ms % 60000) / 1000, player_ms % 1000); @@ -841,14 +840,14 @@ bool NineChess::place(int pos, long time_p, bool cp) } out: - if (cp == true) { + if (cp) { setTips(); } return true; } -bool NineChess::place(int c, int p, long time_p) +bool NineChess::_place(int c, int p, int time_p) { // 转换为 pos int pos = cp2pos(c, p); @@ -856,15 +855,15 @@ bool NineChess::place(int c, int p, long time_p) return place(pos, time_p, true); } -bool NineChess::capture(int c, int p, long time_p) +bool NineChess::_capture(int c, int p, int time_p) { // 转换为 pos int pos = cp2pos(c, p); - return capture(pos, time_p, true); + return capture(pos, time_p, 1); } -bool NineChess::capture(int pos, long time_p, bool cp) +bool NineChess::capture(int pos, int time_p, int8_t cp) { // 如果局面为"未开局"或“结局”,返回false if (context.stage == GAME_NOTSTARTED || context.stage == GAME_OVER) @@ -884,7 +883,7 @@ bool NineChess::capture(int pos, long time_p, bool cp) pos2cp(pos, c, p); // 时间的临时变量 - long player_ms = -1; + int player_ms = -1; // 对手 char opponent = context.turn == PLAYER1 ? 0x20 : 0x10; @@ -922,7 +921,7 @@ bool NineChess::capture(int pos, long time_p, bool cp) move_ = -pos; - if (cp == true) { + if (cp) { player_ms = update(time_p); sprintf(cmdline, "-(%1u,%1u) %02u:%02u.%03u", c, p, player_ms / 60000, (player_ms % 60000) / 1000, player_ms % 1000); cmdlist.push_back(string(cmdline)); @@ -1006,7 +1005,7 @@ bool NineChess::capture(int pos, long time_p, bool cp) } out: - if (cp == true) { + if (cp) { setTips(); } @@ -1077,16 +1076,19 @@ bool NineChess::giveup(Player loser) // 打算用个C++的命令行解析库的,简单的没必要,但中文编码有极小概率出问题 bool NineChess::command(const char *cmd) { - int r, s, t; + int r, t; + step_t s; int c1, p1, c2, p2; int args = 0; int mm = 0, ss = 0, mss = 0; - long tm = -1; + int tm = -1; // 设置规则 - if (sscanf(cmd, "r%1u s%3u t%2u", &r, &s, &t) == 3) { - if (r <= 0 || r > N_RULES) + if (sscanf(cmd, "r%1u s%3hd t%2u", &r, &s, &t) == 3) { + if (r <= 0 || r > N_RULES) { return false; + } + return setContext(&NineChess::RULES[r - 1], s, t); } @@ -1098,7 +1100,7 @@ bool NineChess::command(const char *cmd) tm = mm * 60000 + ss * 1000 + mss; } if (choose(c1, p1)) - return place(c2, p2, tm); + return _place(c2, p2, tm); else return false; } @@ -1110,7 +1112,7 @@ bool NineChess::command(const char *cmd) if (mm >= 0 && ss >= 0 && mss >= 0) tm = mm * 60000 + ss * 1000 + mss; } - return capture(c1, p1, tm); + return _capture(c1, p1, tm); } // 落子 @@ -1120,7 +1122,7 @@ bool NineChess::command(const char *cmd) if (mm >= 0 && ss >= 0 && mss >= 0) tm = mm * 60000 + ss * 1000 + mss; } - return place(c1, p1, tm); + return _place(c1, p1, tm); } // 认输 @@ -1169,11 +1171,11 @@ bool NineChess::command(int move) return false; } -inline long NineChess::update(long time_p /*= -1*/) +inline int NineChess::update(int time_p /*= -1*/) { - long ret = -1; - long *player_ms = (context.turn == PLAYER1 ? &elapsedMS_1 : &elapsedMS_2); - long playerNext_ms = (context.turn == PLAYER1 ? elapsedMS_2 : elapsedMS_1); + int ret = -1; + int *player_ms = (context.turn == PLAYER1 ? &elapsedMS_1 : &elapsedMS_2); + int playerNext_ms = (context.turn == PLAYER1 ? elapsedMS_2 : elapsedMS_1); // 根据局面调整计时器 @@ -1186,7 +1188,7 @@ inline long NineChess::update(long time_p /*= -1*/) // 更新时间 if (time_p >= *player_ms) { *player_ms = ret = time_p; - long t = elapsedMS_1 + elapsedMS_2; + int t = elapsedMS_1 + elapsedMS_2; startTimeb.time = currentTimeb.time - (t / 1000); startTimeb.millitm = currentTimeb.millitm - (t % 1000); @@ -1196,7 +1198,7 @@ inline long NineChess::update(long time_p /*= -1*/) startTimeb.millitm += 1000; } } else { - *player_ms = ret = static_cast(currentTimeb.time - startTimeb.time) * 1000 + *player_ms = ret = static_cast(currentTimeb.time - startTimeb.time) * 1000 + (currentTimeb.millitm - startTimeb.millitm) - playerNext_ms; } @@ -1630,7 +1632,7 @@ enum NineChess::Player NineChess::getWhosPiece(int c, int p) return NOBODY; } -void NineChess::getElapsedTimeMS(long &p1_ms, long &p2_ms) +void NineChess::getElapsedTimeMS(int &p1_ms, int &p2_ms) { update(); @@ -1662,14 +1664,14 @@ void NineChess::mirror(bool cmdChange /*= true*/) s = (N_SEATS - s) % N_SEATS; move_ = -(r * N_SEATS + s); } else { - llp[0] = move_ >> 8; + llp[0] = static_cast(move_ >> 8); llp[1] = move_ & 0x00ff; for (i = 0; i < 2; i++) { r = static_cast(llp[i]) / N_SEATS; s = static_cast(llp[i]) % N_SEATS; s = (N_SEATS - s) % N_SEATS; - llp[i] = r * N_SEATS + s; + llp[i] = static_cast(r * N_SEATS + s); } move_ = static_cast(((llp[0] << 8) | llp[1])); @@ -1692,7 +1694,7 @@ void NineChess::mirror(bool cmdChange /*= true*/) r = static_cast(llp[i]) / N_SEATS; s = static_cast(llp[i]) % N_SEATS; s = (N_SEATS - s) % N_SEATS; - llp[i] = r * N_SEATS + s; + llp[i] = static_cast(r * N_SEATS + s); } *mill &= 0xffffff00ff00ff00; @@ -1777,7 +1779,7 @@ void NineChess::turn(bool cmdChange /*= true*/) move_ = -(r * N_SEATS + s); } else { - llp[0] = move_ >> 8; + llp[0] = static_cast(move_ >> 8); llp[1] = move_ & 0x00ff; for (i = 0; i < 2; i++) { @@ -1789,7 +1791,7 @@ void NineChess::turn(bool cmdChange /*= true*/) else if (r == N_RINGS) r = 1; - llp[i] = r * N_SEATS + s; + llp[i] = static_cast(r * N_SEATS + s); } move_ = static_cast(((llp[0] << 8) | llp[1])); @@ -1822,7 +1824,7 @@ void NineChess::turn(bool cmdChange /*= true*/) else if (r == N_RINGS) r = 1; - llp[i] = r * N_SEATS + s; + llp[i] = static_cast(r * N_SEATS + s); } *mill &= 0xffffff00ff00ff00; @@ -1983,16 +1985,16 @@ void NineChess::rotate(int degrees, bool cmdChange /*= true*/) s = (s + N_SEATS - degrees) % N_SEATS; move_ = -(r * N_SEATS + s); } else { - llp[0] = move_ >> 8; + llp[0] = static_cast(move_ >> 8); llp[1] = move_ & 0x00ff; r = static_cast(llp[0]) / N_SEATS; s = static_cast(llp[0]) % N_SEATS; s = (s + N_SEATS - degrees) % N_SEATS; - llp[0] = r * N_SEATS + s; + llp[0] = static_cast(r * N_SEATS + s); r = static_cast(llp[1]) / N_SEATS; s = static_cast(llp[1]) % N_SEATS; s = (s + N_SEATS - degrees) % N_SEATS; - llp[1] = r * N_SEATS + s; + llp[1] = static_cast(r * N_SEATS + s); move_ = static_cast(((llp[0] << 8) | llp[1])); } @@ -2013,7 +2015,7 @@ void NineChess::rotate(int degrees, bool cmdChange /*= true*/) r = static_cast(llp[i]) / N_SEATS; s = static_cast(llp[i]) % N_SEATS; s = (s + N_SEATS - degrees) % N_SEATS; - llp[i] = r * N_SEATS + s; + llp[i] = static_cast(r * N_SEATS + s); } *mill &= 0xffffff00ff00ff00; @@ -2149,7 +2151,7 @@ NineChess::hash_t NineChess::revertHash(int pos) NineChess::hash_t NineChess::updateHashMisc() { // 清除标记位 - context.hash &= ~0xFF; + context.hash &= static_cast(~0xFF); // 置位 diff --git a/NineChess/src/ninechess.h b/NineChess/src/ninechess.h index bce147c7..5a3a550f 100644 --- a/NineChess/src/ninechess.h +++ b/NineChess/src/ninechess.h @@ -74,6 +74,7 @@ public: // 定义类型 typedef int32_t move_t; + typedef uint16_t step_t; #ifdef HASH_MAP_CUTDOWN typedef uint32_t hash_t; @@ -133,7 +134,7 @@ public: bool allowFlyWhenRemainThreePieces; // 最大步数,超出判和 - int maxStepsLedToDraw; + step_t maxStepsLedToDraw; // 包干最长时间(秒),超出判负,为0则不计时 int maxTimeLedToLose; @@ -303,9 +304,9 @@ public: // 设置棋局状态和棋盘上下文,用于初始化 bool setContext(const struct Rule *rule, - int maxStepsLedToDraw = 0, // 限制步数 + step_t maxStepsLedToDraw = 0, // 限制步数 int maxTimeLedToLose = 0, // 限制时间 - int initialStep = 0, // 默认起始步数为0 + step_t initialStep = 0, // 默认起始步数为0 int flags = GAME_NOTSTARTED | PLAYER1 | ACTION_PLACE, // 默认状态 const char *board = nullptr, // 默认空棋盘 int nPiecesInHand_1 = 12, // 玩家1剩余未放置子数 @@ -384,7 +385,7 @@ public: } // 玩家1和玩家2的用时 - void getElapsedTimeMS(long &p1_ms, long &p2_ms); + void getElapsedTimeMS(int &p1_ms, int &p2_ms); // 获取棋局的字符提示 const string getTips() const @@ -459,10 +460,10 @@ public: bool choose(int c, int p); // 落子,在第c圈第p个位置,为迎合日常,c和p下标都从1开始 - bool place(int c, int p, long time_p = -1); + bool _place(int c, int p, int time_p = -1); // 去子,在第c圈第p个位置,为迎合日常,c和p下标都从1开始 - bool capture(int c, int p, long time_p = -1); + bool _capture(int c, int p, int time_p = -1); // 认输 bool giveup(Player loser); @@ -505,7 +506,7 @@ protected: int cp2pos(int c, int p); // 更新时间和状态,用内联函数以提高效率 - inline long update(long time_p = -1); + inline int update(int time_p = -1); // 是否分出胜负 bool win(); @@ -523,8 +524,8 @@ protected: // 下面几个函数没有算法无关判断和无关操作,节约算法时间 bool command(int move); bool choose(int pos); - bool place(int pos, long time_p = -1, bool cp = false); - bool capture(int pos, long time_p = -1, bool cp = false); + bool place(int pos, int time_p = -1, int8_t cp = 0); + bool capture(int pos, int time_p = -1, int8_t cp = 0); #if ((defined HASH_MAP_ENABLE) || (defined BOOK_LEARNING) || (defined THREEFOLD_REPETITION)) // hash相关 @@ -566,10 +567,10 @@ private: timeb currentTimeb; // 玩家1用时(毫秒) - long elapsedMS_1; + int elapsedMS_1; // 玩家2用时(毫秒) - long elapsedMS_2; + int elapsedMS_2; /* 当前着法,AI会用到,如下表示 0x 00 00