一个小游戏内置外挂

一个小游戏内置外挂

/**
 * by:gonzhihui
 * 2017.11.30
 * 
 * 一个小游戏 10*10矩阵 相邻两个或多个消成0
 * (内置外挂)一键秒杀 :input x: 100
 *  
 * 主要数据结构:
 *     typedef std::vector<std::pair<int, int> > VectorPair;
 *     vector中存放一次输入后的check后的下标。
 * 
 * 编译 直接 g++ -o 可执行文件名 源文件名.cpp 
 * 
 */
 
#include <stdlib.h>  //srand() rand()
#include <iostream>  //make_pair
#include <cstring>
#include <time.h>    //time(0)
#include <vector>    
 
using std::make_pair;
typedef std::vector<std::pair<int, int> > VectorPair;
 
VectorPair vp;
static int c[10][10];
 
//输出矩阵
void show();
 
//初始化矩阵
void initMatrix();
 
//核心算法
bool check(int i, int j);
bool checkTop(int i, int j);
bool checkBottom(int i, int j);
bool checkLeft(int i, int j);
bool checkRight(int i, int j);
 
//将vector中下标处的数组值清零。
bool change0(int i, int j, VectorPair &vp);
 
//一键秒杀(内置外挂)
void secKill(VectorPair &vp);
 
void show()
{
    std::cout<< "   0 1 2 3 4 5 6 7 8 9" <<std::endl;
    std::cout<< ""<<std::endl;
    for(int i = 0;i < 10;i++)
    {
        printf("%d  %d %d %d %d %d %d %d %d %d %d\n", i,
            c[i][0], c[i][1], c[i][2], c[i][3], c[i][4], c[i][5],
            c[i][6], c[i][7], c[i][8], c[i][9]);
    }
    
}
 
bool checkTop(int i, int j)
{
    if(i-1 >= 0 && c[i-1][j] == c[i][j])
    { 
        auto pr = make_pair(i-1, j);
        vp.push_back(pr);
        return true;
        
    }  
    return false;
}
 
bool checkBottom(int i, int j)
{
    if(i+1 <= 9 && c[i+1][j] == c[i][j])
    {
        auto pr = make_pair(i+1, j);
        vp.push_back(pr);
        return true;
    }
    return false;
}
 
bool checkLeft(int i, int j)
{
 
    //左
    if(j-1 >= 0 && c[i][j-1] == c[i][j])
    {
        auto pr = make_pair(i, j-1);
        vp.push_back(pr);
        return true;
    }
    return false;
}
 
bool checkRight(int i, int j)
{
    //右
    if(j+1 <= 9 && c[i][j+1] == c[i][j])
    {
        auto pr = make_pair(i, j+1);
        vp.push_back(pr);
        return true;
    }
  
    return false;
}
 
bool check(int i, int j)
{
    bool ret = false;   
    
    //这么多变量 是为了防止每个while互相影响
    //当然有其他写法 就是在每个while里创建临时
    //变量,代码同样没有减少多少,暂时想到这么多
    int i1,i2,i3,i4,j1,j2,j3,j4;
    i1 = i2 = i3 = i4 = i;
    j1 = j2 = j3 = j4 = j;
    while(checkTop(i1, j1))
    {
        i1--;
        ret = true;
    }
    while(checkBottom(i2, j2))
    {
        i2++;
        ret = true;
    }
    while(checkLeft(i3, j3))
    {
        j3--;
        ret = true;
    }
    while(checkRight(i4, j4))
    {
        j4++;
        ret = true;
    }
 
    return ret;
}
 
void initMatrix()
{
    memset(c, 0, sizeof(int) * 10 * 10);
    srand(time(0));
    for(int i = 0;i < 10;i++)
    {
        for(int j = 0;j < 10;j++)
        {
            int num = rand() % 5 + 1;
            c[i][j] = num;
        }
    }
}
 
bool change0(int i, int j, VectorPair &vp)
{
    if(vp.size() ==0)
        return false;
    c[i][j] = 0;
    for(auto i : vp)
    {
        c[i.first][i.second] = 0;
    }
    //清除vp
    VectorPair().swap(vp);
    return true;
}
 
void secKill(VectorPair &vp)
{
    for(int i = 0;i<10;i++)
    {
        for(int j = 0;j<10;j++)
        {
            check(i, j);
            change0(i, j, vp);
        }
    }
    show();
    std::cout<< "秒杀成功(^_^)" <<std::endl;
}
 
int main()
{
    initMatrix();
    show();
    while(true)
    {
        int i, j;
 
        std::cout<<"input x:";
        std::cin>>i;
        if(i == -1) break;
        if(i == 100)
        {
            secKill(vp);
            break;
        } 
 
        std::cout<<"input y:";
        std::cin>>j;
        if(j == -1) break;
        if(j == 100)
        {
            secKill(vp);
            break;
        } 
 
        check(i, j);
        change0(i, j, vp);
        show();  
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值