当前位置:首页 > 通信资讯 > 正文

c++ 扫雷游戏(扫雷游戏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里面的相关方法。

程序代码

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 #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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/xiheng66/article/details/117597375

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。