自己写的扫雷程序~请大家帮忙看一下有没有更好的写法?
这个是老师布置的作业,随机显示雷和雷周围的数字,我是这样写的,不知道有没有更好的方法??程序代码:
#include<iostream> #include<ctime> using namespace std; int iValue(int iROW , int iCOL); #define ROW 9 // 行数 #define COL 9 // 列数 #define BOMBNUMS 30 // 雷数 int main() { char arrInfo[ROW][COL]; memset(arrInfo, '0' , ROW * COL * sizeof(char) ); int iNum = 0; // 已经布下的雷 unsigned iBombNO = 0; srand( time(0) ); int iTmpRow, iTmpCol; //行、列位置 while ( iNum < BOMBNUMS ) { iBombNO = rand() % (ROW * COL); iTmpRow = iBombNO / COL; iTmpCol = iBombNO % COL; if (arrInfo[iTmpRow][iTmpCol] == '*' ) //如果找到的位置有炸弹,重新找位置 { continue; } arrInfo[iTmpRow][iTmpCol] = '*'; // 设置为雷 ++iNum; //已经布下的雷数加1 } // 简单显示输出 for(int j = 0; j < ROW; ++j) { for ( int k = 0; k < COL; ++k) { if (arrInfo [j][k] == '*') { cout <<" "<< '*'; } else { //开始 int iTmp = 0; if ((j-1 >= 0) && (k-1 >= 0)) { if (arrInfo[j-1][k-1] == '*') iTmp += 1; } if (j-1 >= 0) { if (arrInfo[j-1][k] == '*') iTmp += 1; } if ((j-1 >= 0) && (k+1 < COL)) { if (arrInfo[j-1][k+1] == '*') iTmp += 1; } if (k-1 >= 0) { if (arrInfo[j][k-1] == '*') iTmp += 1; } if (k+1 < COL) { if (arrInfo[j][k+1] == '*') iTmp += 1; } if ((j+1 < ROW) && (k-1 >= 0)) { if (arrInfo[j+1][k-1] == '*') iTmp += 1; } if (j+1 < ROW) { if (arrInfo[j+1][k] == '*') iTmp += 1; } if ((j+1 < ROW) && (k+1 < COL)) { if (arrInfo[j+1][k+1] == '*') iTmp += 1; } //结束 cout <<" "<< iTmp; } } cout<<endl; } return 0; }