#include <cstdlib>
#include <ctime>
#include<windows.h>
#include <conio.h>
#include <iostream>

using namespace std;

//////////////////////////
void prnt_sign(int sign)
{
if(sign==0)
cout<<"+";

else if(sign==1)
cout<<"-";

else if(sign==2)
cout<<"x";

else if(sign==3)
cout<<"/";
else
cout<<"prnt_sign() Error";
}
////////////////////////////

void prnt_quiz(float x,float y,float z,int sign,int hidden_part)
{
if(hidden_part!=0)
cout<<x;
else cout<<"...";
prnt_sign(sign);
if(hidden_part!=1)
cout<<y;
else cout<<"...";
cout<<"=";
if(hidden_part!=2)
cout<<z;
else
cout<<"...";
}
////////////////////////////
bool doi(double x)
{
	for (int i=0;i<=x;i++)
		{if(x==i)return true;}
return false;
}
////////////////////////////
int main()
{   label1:
    cout<<"Enter the missing numbers";
    Sleep(900);
    system("cls");
    int add_limit=5;
    int mul_limit=5;
    int wrong=0; 
    int level=0;
    while(wrong<5)
                    { 
    float x,y,z,ans;
    int sign;

    int hidden_part;
    
    srand(time(NULL));
    
    sign=rand()%4;
    hidden_part=rand()%3;
    
    if(sign==0)//add case
    {
    x=rand()%add_limit;
    y=rand()%add_limit;
    z=y+x;
    }
    else if(sign ==1)//subtract case
    {
    x=rand()%add_limit;
    y=rand()%add_limit;
    if(x<y){float temp=x;x=y;y=temp;}
    z=x-y;
    }
    else if(sign ==2)//multiplication case
    {
    x=rand()%mul_limit;
    y=rand()%mul_limit;
    z=x*y;
    }
    else if(sign ==3)//division case
    {
        do{
    x=rand()%mul_limit;
    y=rand()%mul_limit;
        }while(y==0||doi(x/y)==false);
        
    z=x/y;
    }
    else//Error case
    cout<<"\nSign error\n";
    
    prnt_quiz(x,y,z,sign,hidden_part);
    cout<<endl;
    cin>>ans;
    
    if(hidden_part==0)
    x=ans;
    else if (hidden_part==1)
    y=ans;
    else if (hidden_part==2)
    z=ans;
    
    if((sign==0&x+y==z)||(sign==1&x-y==z)||(sign==2&x*y==z)||(sign==3&x/y==z))
    {
        cout<<"good !\n";
    add_limit+=7;
    mul_limit+=1;
    level+=1;
    }
    else 
    {
    cout<<"Wrong !\n";
    wrong+=1;
    if(wrong==5)
    {
    cout<<"Game over!\nLevel "<<level<<"\nPlay again ? (y/n)";
    char ch=getch();
    if(ch!= 'N' & ch !='n')
    goto label1;
    system("pause");
    }
    }
                    }
    return 0;
}
