choldax
19/01/2008, 11:02
Mastermind oyununu bilenler olacaktır mutlaka. O oyunu yazdım. Ancak sayıyı seçip kontrol ettikten sonra (farklı basamaklı sayılar seçtikten sonra) program çalışmaya devam etmiyor. Yardım ederseniz çok sevinirim.
Selamlar
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
class Game
{
public:
void play();
int sayitut();
int birlestir(int *);
void karsilastir(int *,int *);
int control(int *);
int * basamakayir(int);
int isnumberOK(int x);
};
int Game::sayitut()
{
int number;
int *basamaklar;
basamaklar = new int[4];
for(int i=0;i<4;i++)
basamaklar[i] = rand()%10;
if(control(basamaklar) == 0)
number = sayitut();
else
{
number = birlestir(basamaklar);
cout<<"sayitut() OK"<<endl;
return number;
}
}
int Game::birlestir(int *x)
{
int number;
number = x[0]*1000+x[1]*100+x[2]*10+x[3];
return number;
}
int * Game::basamakayir(int number)
{
int *x = new int[4];
x[0] = number/1000; cout<<x[0];
x[1] = (number%1000)/100; cout<<x[1];
x[2] = (number%100)/10; cout<<x[2];
x[3] = number%10; cout<<x[3]<<endl;
if(control(x) != 1)
number = sayitut();
return x;
}
int Game::control(int *x)
{
int c;
for(int j=0; j<4; j++)
{
for(int i=0; i<4; i++)
{
if(x[i] == x[j]) c = 0;
else c = 1;
}
}
cout<<"Control OK"<<endl;
return c;
}
void Game::karsilastir(int * guess, int * number)
{
int pluscount = 0;
int minuscount = 0;
for(int j=0; j<4; j++)
{
for(int i=0; i<4; i++)
{
if(guess[i] == number[j] && i == j)
pluscount++;
else if(guess[i] == number[j] && i != j)
minuscount++;
}
}
cout<<pluscount<<"+ "<<minuscount<<"- "<<endl;
}
int Game::isnumberOK(int x)
{
int c = 0;
if(1000<x && x<10000 && control(basamakayir(x)) == 1)
c = 1;
return c;
}
void Game::play()
{
int guess,number;
int *b;
int *a;
cout<<"Hello"<<endl;
guess = 0;
number = sayitut();
cout<<number<<endl;
while(guess != number)
{
cout<<"Enter your guess: ";
cin>>guess;
while(isnumberOK(number) != 1)
{
cout<<"You have to enter a 4 digit number with different decimals"<<endl;
cout<<"Enter your guess: ";
cin>>guess;
}
karsilastir(basamakayir(guess),basamakayir(number) );
}
cout<<"Correct!"<<endl;
}
int main()
{
srand(time(NULL));
Game oyun;
oyun.play();
return 0;
}
Selamlar
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
class Game
{
public:
void play();
int sayitut();
int birlestir(int *);
void karsilastir(int *,int *);
int control(int *);
int * basamakayir(int);
int isnumberOK(int x);
};
int Game::sayitut()
{
int number;
int *basamaklar;
basamaklar = new int[4];
for(int i=0;i<4;i++)
basamaklar[i] = rand()%10;
if(control(basamaklar) == 0)
number = sayitut();
else
{
number = birlestir(basamaklar);
cout<<"sayitut() OK"<<endl;
return number;
}
}
int Game::birlestir(int *x)
{
int number;
number = x[0]*1000+x[1]*100+x[2]*10+x[3];
return number;
}
int * Game::basamakayir(int number)
{
int *x = new int[4];
x[0] = number/1000; cout<<x[0];
x[1] = (number%1000)/100; cout<<x[1];
x[2] = (number%100)/10; cout<<x[2];
x[3] = number%10; cout<<x[3]<<endl;
if(control(x) != 1)
number = sayitut();
return x;
}
int Game::control(int *x)
{
int c;
for(int j=0; j<4; j++)
{
for(int i=0; i<4; i++)
{
if(x[i] == x[j]) c = 0;
else c = 1;
}
}
cout<<"Control OK"<<endl;
return c;
}
void Game::karsilastir(int * guess, int * number)
{
int pluscount = 0;
int minuscount = 0;
for(int j=0; j<4; j++)
{
for(int i=0; i<4; i++)
{
if(guess[i] == number[j] && i == j)
pluscount++;
else if(guess[i] == number[j] && i != j)
minuscount++;
}
}
cout<<pluscount<<"+ "<<minuscount<<"- "<<endl;
}
int Game::isnumberOK(int x)
{
int c = 0;
if(1000<x && x<10000 && control(basamakayir(x)) == 1)
c = 1;
return c;
}
void Game::play()
{
int guess,number;
int *b;
int *a;
cout<<"Hello"<<endl;
guess = 0;
number = sayitut();
cout<<number<<endl;
while(guess != number)
{
cout<<"Enter your guess: ";
cin>>guess;
while(isnumberOK(number) != 1)
{
cout<<"You have to enter a 4 digit number with different decimals"<<endl;
cout<<"Enter your guess: ";
cin>>guess;
}
karsilastir(basamakayir(guess),basamakayir(number) );
}
cout<<"Correct!"<<endl;
}
int main()
{
srand(time(NULL));
Game oyun;
oyun.play();
return 0;
}