141 lines
3.8 KiB
C++
141 lines
3.8 KiB
C++
/***************************************************************/
|
|
/* Laboration 2 i C++ */
|
|
/***************************************************************/
|
|
/* Mastermind */
|
|
/* Crille & Robin 971009 */
|
|
/***************************************************************/
|
|
|
|
#include "lab_2.h"
|
|
|
|
typedef int secret[ARRAY];
|
|
|
|
/***************************************************************/
|
|
/*SÄKER INMATNING */
|
|
/***************************************************************/
|
|
int mataIn()
|
|
{
|
|
char buffer[BUFFERSIZE];
|
|
int f;
|
|
|
|
do {
|
|
cin >> buffer;
|
|
if (strcmp(buffer,"0") == 0)
|
|
return 0;
|
|
else {
|
|
f = atoi(buffer);
|
|
if (f!=0)
|
|
return f;
|
|
else
|
|
cout <<"Inget tal, försök igen: ";
|
|
}
|
|
}while (!f);
|
|
}
|
|
|
|
/***************************************************************/
|
|
/*GENERERAR EN hemligt_tal - VEKTOR */
|
|
/***************************************************************/
|
|
void hemligt(secret &tal)
|
|
{
|
|
int i,j,slumpat_tal,size=10;
|
|
int slump[] = {0,1,2,3,4,5,6,7,8,9};
|
|
|
|
srand(time(NULL));
|
|
for (i=0; i<ARRAY; i++) {
|
|
slumpat_tal = rand()%size;
|
|
tal[i]= slump[slumpat_tal];
|
|
for(j=slumpat_tal ; j<size-1 ; j++)
|
|
slump[j] = slump[j+1];
|
|
size--;
|
|
}
|
|
}
|
|
|
|
/*****************************************************************/
|
|
/*GISSNINGEN in_data TILLDELAS SIN PLATS I gissn - VEKTORN */
|
|
/*****************************************************************/
|
|
void gissning(secret gissn, int a)
|
|
{
|
|
int in_data;
|
|
|
|
cout << "\nVad gissar du på: ----";
|
|
gotoxy(19,a+3);
|
|
in_data = mataIn();
|
|
gissn[0] = ((in_data % 10000)/1000);
|
|
gissn[1] = ((in_data % 1000)/100);
|
|
gissn[2] = ((in_data % 100)/10);
|
|
gissn[3] = (in_data % 10);
|
|
}
|
|
|
|
/***************************************************************/
|
|
/*SKRIVER UT S_R PÅ LÄMPLIGT STÄLLE */
|
|
/***************************************************************/
|
|
void kontroll(secret gissn, secret hemligt_tal, char help[])
|
|
{
|
|
int i,j;
|
|
|
|
for (j=0 ; j<ARRAY ; j++) {
|
|
if (hemligt_tal[j] == gissn[j])
|
|
help[j] = 'R';
|
|
else {
|
|
help[j] = '_';
|
|
for (i=0 ; i<ARRAY ; i++) {
|
|
if(gissn[j] == hemligt_tal[i])
|
|
help[j] = 'S';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/***************************************************************/
|
|
/*SKRIVER UT HELPARRAYEN */
|
|
/***************************************************************/
|
|
void helparray(char help[],int a)
|
|
{
|
|
gotoxy(25,a+3);
|
|
for (int i=0 ; i<ARRAY ; i++)
|
|
cout << help[i];
|
|
}
|
|
|
|
/***************************************************************/
|
|
/*AVBRYTER PGA FÖR MÅNGA GISSNINGAR */
|
|
/***************************************************************/
|
|
void fel(secret &tal)
|
|
{
|
|
clrscr();
|
|
cout <<"Du får inte fler försök!\n"
|
|
<<"Det rätta svaret var: ";
|
|
for (int i=0 ; i<ARRAY ; i++)
|
|
cout << tal[i];
|
|
}
|
|
|
|
/***************************************************************/
|
|
/*MAIN */
|
|
/***************************************************************/
|
|
void main()
|
|
{
|
|
int omstart=1;
|
|
while (omstart) {
|
|
int hemligt_tal[ARRAY],gissn[ARRAY],a=0;
|
|
char help[]={'_','_','_','_','\0'},replay;
|
|
hemligt(hemligt_tal);
|
|
clrscr();
|
|
cout <<"MASTERMIND (AKA LAB_2) BY CRILLE & ROBIN"<< endl
|
|
<<"UNREGISTRED VERSION. " << endl;
|
|
do {
|
|
a++;
|
|
gissning(gissn,a);
|
|
kontroll(gissn,hemligt_tal,help);
|
|
helparray(help,a);
|
|
}while (((help[0]!='R') || (help[1]!='R') ||
|
|
(help[2]!='R') || (help[3]!='R'))&& a < TRIES);
|
|
if (a >= TRIES)
|
|
fel(hemligt_tal);
|
|
else
|
|
klar(a);
|
|
cout <<"\nVill du spela en omgång till\ [J/N]:";
|
|
cin >> replay;
|
|
if (replay == 'n')
|
|
omstart=0;
|
|
}
|
|
}
|
|
|