左键操作事件( 二 )


左右键同时点击事件
int MineMap::onLeftRightDown(int x, int y){//必须是已经被点开的if (x >= m_x || x < 0 || y >= m_y || y < 0 || m_map[x][y] >= 9 || m_map[x][y] < 0)return 0;if (m_win == 0 || m_win == 2)return 0;//99代表雷,周围8个区域必须被插对棋子旗子才能直接被填满m_floatX = x;m_floatY = y;int count = 0;int cows[8];int cols[8];memset(cows, -1, 8 * sizeof(int));memset(cols, -1, 8 * sizeof(int));for (int m = -1; m < 2; m++){for (int n = -1; n < 2; n++){int j = m + x;int k = n + y;//先判断是否都被点开或者被插上棋子if (m_map[j][k] > 90 &&(j != x || k != y)){cows[count] = j;cols[count] = k;count++;}}}if (count == m_map[x][y]){for (int i = 0;; i++){if (cows[i] == -1)break;m_map[cows[i]][cols[i]] -= 100;if (m_map[cows[i]][cols[i]] == -1){//重新开始m_map[cows[i]][cols[i]] = -2;for (int i = 0; i < m_x; i++){for (int j = 0; j < m_y; j++){if (m_map[i][j] == 99){m_map[i][j] = -1;}if (m_map[i][j] == 49){m_map[i][j] = -1;}if (m_map[i][j] >= 50 && m_map[i][j] <= 58){m_map[i][j] = -2;}}}m_win = 0;return 3;}}return 1;}else{for (int m = -1; m < 2; m++){for (int n = -1; n < 2; n++){int j = m + x;int k = n + y;//先判断是否都被点开或者被插上棋子if (m_map[j][k] > 90)m_map[j][k] -= 120;}}}//如果周围有没有被点开或者没有被插上棋子的就进行浮动效果return 2;}
目前的操作是双击该区域的话会先进行判断该区域的雷数和为点开的数量是否相等,不相等的话只是弹出,相等的话会帮助用户点开,弹出的时间在主界面进行设置 。
void MainWindow::onFloatTimer(){m_minemap.floatCoordinateRestore();update();m_floatTime->stop();}