#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
int map[12][12]; // 为避免边界的特殊处理,故将二维数组四周边界扩展1
int derection[3] = { 0, 1, -1 }; //方向数组
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)为中心的四周的雷数目
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 ()
{
for ( int i = 1; i < 10; i++ )
{
for ( int j = 1; j < 10; j++ )
{
if ( map[i][j] == -1 || map[i][j] == 9 )
cout << "#";
else
cout << map[i][j];
}
cout << endl;
}
}
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) ); // 将map全部初始化为-1,以后用-1表示未涉及的区域
for ( i = 0; i < 10; )
{
x = rand()%9 + 1;
y = rand()%9 + 1;
if ( map[x][y] != 9 )
{
map[x][y] = 9;
i++;
}
}
for ( i = 1; i < 10; i++ )
{
for ( j = 1; j < 10; j++ )
cout << "#";
cout << "\n";
}
cout << "\n";
cout << "Please enter a coordinate: ";
while ( cin >> x >> y )
{
if ( map[x][y] == 9 )
{
cout << "GAME OVER" << endl; //点中雷之后游戏结束,并且输出雷的位置
for ( i = 1; i < 10; i++ )
{
for ( j = 1; j < 10; j++ )
{
if ( map[i][j] == 9 )
cout << "@";
else
cout << "#";
}
cout << endl;
}
break;
}
game(x,y);
print();
if ( check () )
{
cout << "YOU WIN" << endl;
break;
}
cout << "\n\n";
}
cout << "Do you want to play again, if true enter Y, or enter N" << endl;
cin >> ch;
cout << "\n\n";
} while ( ch == 'Y' );
return 0;
}
C++扫雷代码
最新推荐文章于 2025-05-08 12:39:03 发布