千家信息网

C++如何实现趣味扫雷游戏

发表于:2024-10-14 作者:千家信息网编辑
千家信息网最后更新 2024年10月14日,这篇"C++如何实现趣味扫雷游戏"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C++
千家信息网最后更新 2024年10月14日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里面的相关方法。

程序代码

#include #include #include #include using namespace std;int map[12][12];    // ??????????,????????????1int 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"<> x >>y)        cout << "Do you want to play again?(y/n):" << endl;        cin >> ch;    }//end do    while ( ch == 'y' );    return 0;}//end main()

以上就是关于"C++如何实现趣味扫雷游戏"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

0