C++控制台程序(文字小游戏)

学习UE4 C++之前的复习,用了很多没啥用的小技巧.也没什么深度好讲的,有兴趣的小伙伴拉走编译就行了:


#include <iostream>
#include <ctime>

using namespace std;

#define random(x) (rand()%x)

int main(){
    srand((int)time(0));
    std::cout<<"欢迎参加本次试炼游戏,在本次试炼中,你必须与时间赛跑,找出谜题中的数字:"<<std::endl;
    std::cout<<"你需要找到符合条件的数字(数字不会为0),输入'0'结束游戏:"<<std::endl;

    bool isWin=true;
    bool Wyou=false;
    int  level=3;
do
{
    int num[10];
    int sum=1;
    int pro=0;
    int les=0;
    int did=0;

    for (size_t i = 0; i < level; i++)
    {
        num[i]=random(9)+1;
        sum*=num[i];
        pro+=num[i];
        les=num[i]-num[i-1];
        did=num[0]+num[i];
    }

    cout<<"\n\n现在,你进入了第 ["<<(level-2)<<"] 关!"<<endl;
    cout<<"有 ["<<level<<"] 个数字作为密码!"<<endl;
    cout<<"A : 它们相乘等于 = "<<(sum)<<endl;
    cout<<"B : 它们相加等于 = "<<(pro)<<endl;
    cout<<"C : 最后一个数字减前一个数字 = "<<(les)<<endl;
    cout<<"D : 第一个加最后一个数字等于 = "<<(did)<<endl;


int x=127;  // 0111 1111
for (size_t i = 0; i < level-3; i++)
{    
    switch (rand()%(level))
    {
    case 0:
        if ((x & 1) ==1)
        {
            cout<<"A-D再减去第一个数字 = "<<((sum)-(did)-num[0])<<endl;
            x=x&1; //0111 1111 & 0000 0001
        }
    case 1:
        if ((x & 2) ==2)
        {
            cout<<"A*C再加第3个数字 = "<<((sum)*(les)+num[2])<<endl;
            x=x&2;
        }
    case 2:
        if ((x & 4) ==4)
        {
            cout<<"B+D再乘第2个数字 = "<<(((pro)+(did))*num[1])<<endl;
            x=x&4;
        }
    case 3:
        if ((x & 8) ==8)
        {
            cout<<"B*本关对应的数字 = "<<((pro)*num[level-3])<<endl;
            x=x&8;
        }
    case 4:
        if ((x & 16) ==16)
        {
            cout<<"C-本关对应的数字 = "<<((les)-num[level-3])<<endl;
            x=x&16;
        }
    case 5:
        if ((x & 32) ==32)
        {
            cout<<"第二个数字加本关对应的数字 = "<<(num[1]+num[level-3])<<endl;
            x=x&32;
        }
    case 6:
        if ((x & 64) ==64)
        {
            cout<<"C-B再乘上本关对应的数字 = "<<((les-pro)*num[level-3])<<endl;
            x=x&64;
        }
        break;
    default:
        cout<<"本关对应的数字 = "<<(num[level-3])<<endl;
        break;
    }
    x=127^x;
}

    cout<<endl;
    cout<<endl;

    // for (size_t i = 0; i < level; i++)
    // {
    //     cout<<"a = "<<num[i]<<endl;
    // }

    int iput[10];
    int Psum=1;
    int Ppro=0;
    int Ples=0;
    int Pdid=0;
    for (size_t i = 0; i < level; i++)
    {
        cout<<"还剩下 ["<<(level-i)<<"] 个数字需要你输入."<<endl;
        cout<<"输入你的第 ["<<(i+1)<<"] 个数字 : ";
        bool isNum=true;
        cin>>iput[i];
        while (!cin)
        {
            char ch;
            if ((ch=getchar())!='\n')
            {
                continue;
            }      
             cout<<"你没有输入数字呢,请重新输入 : ";
             cin.clear();
             cin.sync();
             cin>>iput[i];
        }      
        
        Psum*=iput[i];
        Ppro+=iput[i];
        Ples=iput[i]-iput[i-1];
        Pdid=iput[0]+iput[i];

        if (Psum==0)
        {
            isWin=false;
            system("cls");
            cout<<"你输入了0结束了游戏."<<endl;
            break;
        }
        
    }
    
    if (Psum==sum && Ppro==pro && Ples==les && Pdid==did)
    {
        system("cls");
        cout<<"看来我低估你了,你通过了第 ["<<level-2<<"] 关."<<endl;
        level++;
        if (level==8)
        {
            isWin=false;
            Wyou=true;
        }
    }
    else
    {
        system("cls");
        cout<<"看来你还没做好准备,洗洗睡吧."<<endl;
        isWin=false;
    }
    
    
} while (isWin);
    
    if (Wyou)
    {
        system("cls");
        cout<<"你竟然通过了全部关卡?这不可能! 不过,你真的很强!!!"<<endl;
    }
    
    system("pause");
    return 0;
}

发布了1 篇原创文章 · 获赞 0 · 访问量 73

猜你喜欢

转载自blog.csdn.net/qeas11/article/details/104489166