这篇“C++如何实现趣味扫雷游戏”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++如何实现趣味扫雷游戏”文章吧。
1.初始化阵列。
2.输入坐标点。
3.选择:挖掘,标记,取消标记,重启,退出游戏。
如果选了挖掘,判断坐标点是地雷则游戏结束,是数字则显示数字并回到2,是空格则显示周围8个元素值并直到连带的空格显示完了回到2;
如果选了标记,将该点的元素值设为-2并回到2;
如果选了取消标记,初始化该点,回到2;
如果选了重启,则初始化阵列,回到2;
如果选了退出游戏,则exit。
4.挖掘完所有非地雷点后,游戏胜利,选择是否再来一局,是则回到1,否则exit
创建一个bombsweep类,存储几个方法:
calculate:统计以(x,y)为中心周围8个点的地雷数目。
game:模拟游戏过程。
print:打印阵列。
check:检查是否满足胜利条件。
在main函数中,在需要的时候根据bombsweep类创建bs对象,调用bs里面的相关方法。
程序代码
#include <ctime> #include <cstdlib> #include <iostream> #include <cstring> using namespace std; int map[12][12]; // ??????????,????????????1 int derection[3] = { 0, 1, -1 }; //????????8????? int type; class bombsweep { public: int calculate ( int x, int y ) { int counter = 0; for ( int i = 0; i < 3; i++ ) for ( int j = 0; j < 3; j++ ) if ( map[ x+derection[i]][ y+derection[j] ] == 9 ) counter++; // ???(x,y)?????8??????? return counter; } void game ( int x, int y ) { if ( calculate ( x, y ) == 0 ) { map[x][y] = 0; for ( int i = 0; i < 3; i++ ) { // ???????,????????? for ( int j = 0; j < 3; j++ ) if ( x+derection[i] <= 9 && y+derection[j] <= 9 && x+derection[i] >= 1 && y+derection[j] >= 1 && !( derection[i] == 0 && derection[j] == 0 ) && map[x+derection[i]][y+derection[j]] == -1 ) game( x+derection[i], y+derection[j] ); // ???????????????0,????????! } //????????.??????????? } else map[x][y] = calculate(x,y); } void print (int x,int y) { cout << " |"; for (int i=1; i<10; i++) cout << " " << i; cout << endl; cout << "__|__________________Y" ; cout << endl; for ( int i = 1; i < 10; i++ ) { cout << i << " |"; for ( int j = 1; j < 10; j++ ) { if(map[i][j]==-2) cout <<" B"; else if ( map[i][j] == -1 || map[i][j] == 9 ) cout << " #"; else cout << " "<< map[i][j]; } cout << "\n"; } cout << " X\n"; } bool check () { int counter = 0; for ( int i = 1; i < 10; i++ ) for ( int j = 1; j < 10; j++ ) if ( map[i][j] != -1 ) counter++; if ( counter == 10 ) return true; else return false; } }; int main () { int i, j, x, y; char ch; srand ( time ( 0 ) ); do { //????? memset ( map, -1, sizeof(map) ); for ( i = 0; i < 10; ) { x = rand()%9 + 1; y = rand()%9 + 1; if ( map[x][y] != 9 ) { map[x][y] = 9; i++; } } cout << " |"; for (i=1; i<10; i++) cout << " " << i; cout << endl; cout << "__|__________________Y" ; cout << endl; for ( i = 1; i < 10; i++ ) { cout << i << " |"; for ( j = 1; j < 10; j++ ) cout << " "<< "#"; cout << "\n"; } cout << " X\n"; cout << "Please input location x,press enter then input location y: \n"; while ( cin >> x >> y ) { cout << "Please select:1.dig, 2.sign, 3.cancel sign, 4.restart, 5.exit: \n"; cin >>type; switch(type) { case 1: { if ( map[x][y] == 9 || map[x][y]==-2) { cout << "YOU LOSE!" << endl; cout << " |"; for (i=1; i<10; i++) cout << " " << i; cout << endl; cout << "__|__________________Y"<<endl ; for ( i = 1; i < 10; i++ ) { cout << i << " |"; for ( j = 1; j < 10; j++ ) { if ( map[i][j] == 9 || map[i][j]==-2) cout << " @"; else cout << " #"; } cout << "\n"; } cout << " X\n"; exit(0); } bombsweep bs; bs.game(x,y); bs.print(x,y); cout << "Please input location x,press enter then input location y: \n"; if ( bs.check()) { cout << "YOU WIN" << endl; break; } continue; } case 2: { bombsweep bs; map[x][y]=-2; bs.print(x,y); cout << "Please input location x,press enter then input location y: \n"; continue; } case 3: { bombsweep bs; map[x][y]=-1; bs.print(x,y); cout << "Please input location x,press enter then input location y: \n"; continue; } case 4: { memset ( map, -1, sizeof(map) ); for ( i = 0; i < 10; ) { x = rand()%9 + 1; y = rand()%9 + 1; if ( map[x][y] != 9 ) { map[x][y] = 9; i++; } } cout << " |"; for (i=1; i<10; i++) cout << " " << i; cout << endl; cout << "__|__________________Y" ; cout << endl; for ( i = 1; i < 10; i++ ) { cout << i << " |"; for ( j = 1; j < 10; j++ ) cout << " "<< "#"; cout << "\n"; } cout << " X\n"; cout << "Please input location x,press enter then input location y: \n"; continue; } case 5: cout << "Game Ended\n"; exit(0); break; default: cout<< "Invalid input, try again: \n"; continue; }//end switch }//end while(cin >> x >>y) cout << "Do you want to play again?(y/n):" << endl; cin >> ch; }//end do while ( ch == 'y' ); return 0; }//end main()
以上就是关于“C++如何实现趣味扫雷游戏”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。