十滴水游戏破解

#include <iostream>
#include <vector>
using namespace std;

int states[6][6];
int ct=0;
int flag=0;

class drop
{
    public:
        drop(int x,int y,int d1,int d2)
        {
            position_x = x;
            position_y = y;
            direction[0] = d1;
            direction[1] = d2;
        }

        void move()
        {
            position_x+=direction[0];
            position_y+=direction[1];
        }

        int x()
        {
            return position_x;
        }

        int y()
        {
            return position_y;
        }
    private:
        int position_x;
        int position_y;
        int direction[2];
};
vector<drop> dr;
vector<drop> temp;

void Print(int i,int j)
{
    cout<<ct<<endl;
    cout<<i<<" "<<j<<endl;
    for(int k=0;k<=5;k++)
    {
        cout<<states[k][0]<<" "<<states[k][1]<<" "<<states[k][2]<<" "\
        <<states[k][3]<<" "<<states[k][4]<<" "<<states[k][5]<<" "<<endl;
    }
}

void creatdrops(int i,int j)
{
    drop dp1(i,j,-1,0);
    drop dp2(i,j,0,-1);
    drop dp3(i,j,0,1);
    drop dp4(i,j,1,0);
    dr.push_back(dp1);
    dr.push_back(dp2);
    dr.push_back(dp3);
    dr.push_back(dp4);
    states[i][j]=0;
}

void dropsclick(int x,int y,vector<drop>::iterator p)
{
    states[x][y]++;
    if(states[x][y]==5)
    {
        drop dp1(x,y,-1,0);
        drop dp2(x,y,0,-1);
        drop dp3(x,y,0,1);
        drop dp4(x,y,1,0);
        temp.push_back(dp1);
        temp.push_back(dp2);
        temp.push_back(dp3);
        temp.push_back(dp4);
        states[x][y]=0;
    }
    dr.erase(p);
}

int compare()
{
    int n=0;
    for(int i=0;i<=5;i++)
        for(int j=0;j<=5;j++)
        {
            if(states[i][j]==0)
            {
                n++;
            }
        }
    return n;
}

void adddrop(int x,int y)
{
    int state[6][6];
    ct++;
    for(int k=0;k<=5;k++)
    {
        state[k][0]=states[k][0];
        state[k][1]=states[k][1];
        state[k][2]=states[k][2];
        state[k][3]=states[k][3];
        state[k][4]=states[k][4];
        state[k][5]=states[k][5];
    }
    states[x][y]++;
    if(states[x][y]==5)
    {
        creatdrops(x,y);
        while(!dr.empty())
        {
            for(vector<drop>::iterator iter=dr.begin();iter!=dr.end();iter++)
            {
                iter->move();
            }
            for(vector<drop>::iterator iter=dr.begin();iter!=dr.end();iter++)
            {
                if(iter->x()<0 || iter->x()>5 || iter->y()<0 || iter->y()>5)
                {
                    dr.erase(iter);
                    iter--;
                }
                else if(states[iter->x()][iter->y()]!=0)
                {
                    dropsclick(iter->x(),iter->y(),iter);
                    iter--;
                }
            }
            dr.insert(dr.end(),temp.begin(),temp.end());
            temp.clear();
        }
    }
    if(compare()==36)
    {
        flag=1;
    }
    if(flag!=1&&ct!=6)
    {
        for(int i=0;i<=5;i++)
        {
            for(int j=0;j<=5;j++)
            {
                if(flag!=1&&states[i][j]>0)
                {
                    adddrop(i,j);
                }
            }
        }
    }
    if(flag==1)
    {
        cout<<ct<<endl;
        cout<<x+1<<" "<<y+1<<endl;
    }
    for(int k=0;k<=5;k++)
    {
        states[k][0]=state[k][0];
        states[k][1]=state[k][1];
        states[k][2]=state[k][2];
        states[k][3]=state[k][3];
        states[k][4]=state[k][4];
        states[k][5]=state[k][5];
    }
    ct--;
}


int main()
{
   for(int k=0;k<=5;k++)
   {
       cout<<"请输入第 "<<k+1<<" 行:";
        cin>>states[k][0]>>states[k][1]>>states[k][2]
        >>states[k][3]>>states[k][4]>>states[k][5];
   }
   for(int i=0;i<=5;i++)
    {
        for(int j=0;j<=5;j++)
        {
            if(flag!=1&&states[i][j]!=0)
            {
                adddrop(i,j);
            }
        }
    }
}

转载于:https://www.cnblogs.com/moupeng/archive/2010/12/15/1907397.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值