zoukankan      html  css  js  c++  java
  • C++语言实现开心消消乐

    用C++实现的开心消消乐主要分成一个一个模块去实现的,较少代码的耦合性,在这里用了一个xiaoxiaogame类去实现,其中构造函数中对数组和变量的初始化 xiaoxiaogame(int row1, int col1); 用void display();这样一个函数实现显示,用bool isvalid(int x, int y);来判断一个坐标所在的位置能不能消除, 用bool isgameover();判断游戏有没有结束,用void remove(int x, int y, int target);来消除方块,然后用void adjustment()去调试消除方块后的位置 用void playgame();来执行游戏。代码如下:

    #include<iostream>
    #include<string>
    #include<vector>
    #include<ctime>
    using namespace std;
    
    class xiaoxiaogame
    {
    public:
        //构造函数中对数组和变量的初始化
        xiaoxiaogame(int row1, int col1);
        //显示
        void display();
        //判断一个坐标所在的位置能不能消
        bool isvalid(int x, int y);
        //判断游戏有没有结束
        bool isgameover();
        //用深度遍历去执行消除功能
        void remove(int x, int y, int target);
        //消除方块后剩余方块的摆放位置的调整
        void adjustment();
        //执行游戏
        void playgame();
    private:
        //存放游戏开心消消乐的二维数组
        vector<vector<int>>nums;
        //记录存在的状态
        vector<vector<bool>>state;
        //记录分数
        int score;
        //连在一起的相同数字的个数
        int cnt;
        //开心消消乐的行
        int row;
        //开心消消乐的列
        int col;
    };
    xiaoxiaogame::xiaoxiaogame(int row1, int col1)
    {
        row = row1;
        col = col1;
        score = 0;
        cnt = 0;
        srand(time(0));
        vector<vector<int>>tmp(row1,vector<int>(col1,0));
        vector<vector<bool>>temp(row1, vector<bool>(col1, false));
        state = temp;
        for (int i = 0; i < row; i++)
        {
            for (int j = 0; j < col; j++)
            {
                tmp[i][j] = rand() % 3;
            }
        }
        nums = tmp;
        display();
    }
    void xiaoxiaogame::display()
    {
        for (int i = 0; i < row; i++)
        {
            for (int j = 0; j < col; j++)
            {
                if (!state[i][j])
                    cout << nums[i][j] << " ";
                else cout << "  ";
            }
            cout << endl;
        }
        cout << "your score is :" << score << endl;
    }
    bool xiaoxiaogame::isvalid(int x, int y)
    {
        if (x < 0 || x >= row || y < 0 || y >= col || state[x][y])return false;
        return true;
    }
    bool xiaoxiaogame::isgameover()
    {
        for (int i = 0; i < row; i++)
        {
            for (int j = 0; j < col; j++)
            {
                int target = nums[i][j];
                int x = i;
                int y = j;
                if (!isvalid(i, j))return false;
                if ((isvalid(x + 1, y) && nums[x + 1][y] == target) || (isvalid(x - 1, y) && nums[x - 1][y] == target) || 
                    (isvalid(x, y + 1) && nums[x][y + 1] == target) || (isvalid(x, y - 1) && nums[x][y - 1] == target))
                    return false;
            }
        }
        return true;
    }
    void xiaoxiaogame::remove(int x, int y, int target)
    {
        if (!isvalid(x, y))return;
        if (nums[x][y] != target)return;
        state[x][y] = true;
        cnt++;
        remove(x + 1, y, target);
        remove(x - 1, y, target);
        remove(x, y + 1, target);
        remove(x, y - 1, target);
    }
    void xiaoxiaogame::adjustment()
    {
        for (int j = 0; j < col; j++)
        {
            vector<int>tmp;
            for (int i = row - 1; i >= 0; --i)
            {
                if (!state[i][j])tmp.push_back(nums[i][j]);
    
            }
            int r = row - 1;
            for (int i = 0; i < tmp.size(); i++)
            {
                nums[r][j] = tmp[i];
                state[r][j] = false;
                r--;
            }
            for (; r >= 0; r--)
            {
                state[r][j] = true;
            }
        }
    }
    void xiaoxiaogame::playgame()
    {
        int x, y;
        while (cin >> x >> y)
        {
            if (!isvalid(x, y))continue;
            int target = nums[x][y];
            cnt = 0;
            if ((isvalid(x + 1, y) && nums[x + 1][y] == target) || (isvalid(x - 1, y) && nums[x - 1][y] == target) || 
                (isvalid(x, y + 1) && nums[x][y + 1] == target) || (isvalid(x, y - 1) && nums[x][y - 1] == target))
                remove(x, y, target);
            score += target*cnt;
            adjustment();
            display();
            if (isgameover())
            {
                cout << "gameover" << endl;
                break;
            }
        }
    }
    int main()
    {
        xiaoxiaogame t(10, 10);
        t.playgame();
        cin.get();
        return 0;
    }
  • 相关阅读:
    浅析Android中的消息机制
    Delphi 调用webservice接口
    进程间的相互调用与参数传递【Delphi版】
    网络上可供测试的Web Service
    mysql复制功能——“masterslave”结构
    SQL Server 2008 事件探查器【转】
    mysql常用存储引擎对比(转)
    线程池基本理论
    中国金融体系简略图
    《Windows核心编程》学习笔记(6)– 线程的创建、与进程的关系、伪句柄转换
  • 原文地址:https://www.cnblogs.com/mahaitao/p/5821134.html
Copyright © 2011-2022 走看看