首页 > 代码库 > 消灭星星的数组高效率算法(c++代码,控制台程序)
消灭星星的数组高效率算法(c++代码,控制台程序)
#include <iostream> using namespace std; #define ROW 12 #define COL 10 class Star { public: enum Stat_star { willRemoved = -2, hasRemoved, normal }; Star() { for (unsigned i = 0; i < ROW; i++) { for (unsigned j = 0; j < COL; j++) { m_arr[i][j].state = normal; m_arr[i][j].visited = false; } } } ~Star(){} void print() { cout << "=====================" << endl; for (unsigned i = 0; i < ROW; i++) { for (unsigned j = 0; j < COL; j++) {cout << m_arr[i][j].data << "(" << m_arr[i][j].state << ")" << "\t";} cout << endl; } } void resetVisited() { for (unsigned i = 0; i < ROW; i++) { for (unsigned j = 0; j < COL; j++) { if(m_arr[i][j].state != hasRemoved) {m_arr[i][j].visited = false;} } } } //检測是否游戏结束 bool checkGameOver() { for (unsigned i = 0; i < ROW; i++) { for (unsigned j = 0; j < COL; j++) { if(findWillRemove(i, j) > 1) {return false;} } } return true; } //检測是否要整列移动 void checkColMove() { int dt = 0; //列的增量 for (int i = 0; i < COL - dt; i++) { bool allRemoved = true; //检測某列是否整列为空 for (int j = 0; j < ROW; j++) { if(m_arr[j][i].state != hasRemoved) { allRemoved = false; break; } } //開始移动列 if(allRemoved) { for (int x = i; x < COL; x++) { for (int y = 0; y < ROW; y++) { if(x + 1 < COL) { Star_data tempStar = m_arr[y][x]; m_arr[y][x] = m_arr[y][x + 1]; } } } //最后一列置空 for (int y = 0; y < ROW; y++) {m_arr[y][COL - 1].state = hasRemoved;} i--; dt++; } } } //找到同样的球后。删除同样的球 void removeSameStar() { //以列来找 for (int j = 0; j < COL; j++) { for (int i = ROW - 1; i >= 0; i--) { if(m_arr[i][j].state == willRemoved) { Star_data tempStar = m_arr[i][j]; //依次把星星下移。而且把空的星星放到最上面 for (int x = i; x >= 0; x--) { if(x - 1 >= 0) {m_arr[x][j] = m_arr[x - 1][j];} } m_arr[0][j] = tempStar; m_arr[0][j].state = hasRemoved; i++; } } } } //点击某个星星。找到将要被移除的星星 int findWillRemove(int i, int j) { int findCount = 0; findWillRemove(i, j, findCount); resetVisited(); return findCount; } //查找将要被移除的 void findWillRemove(int i, int j, int &findCount) { if(i >= ROW || i < 0 || j >= COL || j < 0 || m_arr[i][j].state == hasRemoved || m_arr[i][j].visited) {return;} m_arr[i][j].visited = true; findCount++; //左 if(i - 1 >= 0 && m_arr[i - 1][j].state != hasRemoved && m_arr[i - 1][j].data =http://www.mamicode.com/= m_arr[i][j].data)>cout <<"over" : cout <<"not over"; system("pause"); return 0; }
消灭星星的数组高效率算法(c++代码,控制台程序)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。