#include #include #include using namespace std; // voorbeeld: 1/2/3/4 // x = (randi()/250) + 1; int randi () { // tussen 0 en 999 static int getal = time (NULL) % 1000; getal = ( 621 * getal + 1 ) % 1000; return getal; } //'randomgetallen' volgens de functie x_nieuw=(a*x_oud+c)%m //om te zorgen dat getallen dubbel voorkomen wordt OudGetal erbijopgeteld //(de tijd is te langzaam ;-) ) //de tijd wordt gebruikt om elke keer andere getallen te laten weergeven long randomgetal(long *OudGetal) { int a = 221; int c = 1; int m = 1000; *OudGetal = (time (NULL) % m) + *OudGetal; *OudGetal = ( a * *OudGetal + c ) % m; return(*OudGetal); } //end randomgetal //Vraag de gebruiker om zijn invoer //AantalGetallen_pt = aantal getallen (pointer) //AantalKleuren_pt = aantal mogelijkheiden (pointer) //Invoer_pt = array met ingevoerde getallen door gebruiker (pointer) void spel_invoer(int *AantalGetallen_pt, int *AantalKleuren_pt, int *Invoer_pt) { cout << endl << "Plaats gokje: " << endl; int IngevoerdeGetallen = 0; while (IngevoerdeGetallen < *AantalGetallen_pt) { cout << "Voer getal " << (IngevoerdeGetallen + 1) << " (van de " << *AantalGetallen_pt << ") in " << "[0-" << *AantalKleuren_pt << "] (gevolgd door een enter): "; if (cin >> *(Invoer_pt + IngevoerdeGetallen)) { IngevoerdeGetallen++; } else { cout << "Dit is geen (geldig) getal, gelieve een geldig getal invoeren" << endl; cin.clear(); cin.ignore(INT_MAX,'\n'); } } } //end spel_invoer //Bereken of de bebruiker iets goeds ingevoerd heeft //AG_pt => AantalGetallen_pt = aantal getallen (pointer) //AK_pt => AantalKleuren_pt = aantal mogelijkheiden (pointer) //Invoer_pt = array met ingevoerde getallen door gebruiker (pointer) //Antwoord_pt = array met antwoorden (pointer) //ATA_pt => AantalTekensAanwezig_pt = Aantal tekens aanwezig, maar niet goed geplaatst (pointer) //ATJP => AantalTekensGoedePlek_pt = Aantal tekens op de goede plek (pointer) void spel_bereken(int *AG_pt, int *ATA_pt, int *ATJP_pt, int *Antwoord, int *Invoer){ bool HulpArray[*AG_pt]; //array die nodig is bij het testen van de geldigheid van het //gegeven antwoord, als de plek corresponderend met plek in array antwoord true is dan is het //getal nog niet gebruikt voor het antwoord. //hulp array op true stellen for (int i = 0; i < *AG_pt; i++) { HulpArray[i] = true; } //Gegokte invoer array doorlopen for (int i = 0;i < *AG_pt; i++) { //loop_1 //debug (invoer + antwoord laten zien) cout << *(Invoer + i) << " antwoord: " << *(Antwoord + i) << endl; //end debug if (*(Invoer + i) == *(Antwoord + i)) { //getal op de goede plek (*ATJP_pt)++; HulpArray[i] = false; } } //end loop_1 for (int i = 0; i < *AG_pt; i++) { //loop_2 if (HulpArray[i]) { for (int j = 0; j < *AG_pt; j++) { //loop_3 if ((*(Invoer + i) == *(Antwoord + j)) && (HulpArray[j])) { //getal aanwezig (*ATA_pt)++; HulpArray[j] = false; j = *AG_pt; //uit loop_2 stappen, hij mag namelijk maar 1 keer tellen } } //end loop_3 } } //end loop_2 } //end spel_bereken //hoofdmodule voor spel mastermind. //UITVOER: 0 = goed uitgevoerd, 1 = error in de invoer int spel_main() { //variabelen voor invoer int AantalGetallen = 4; //Aantal getallen dat de code lang is int AantalKleuren = 6; //Aantal mogelijkheden per code teken cout << "Geef het aantal getallen ( <20 ) dat u wilt raden (gevolgd door enter): "; if (cin >> AantalGetallen) { if(AantalGetallen > 20) { cout << "Dit is meer als 20" << endl; return(1); } } else { cout << "Dit is GEEN getal" << endl; return(1); } cout << "Geef het aantal kleuren ( <20 )dat u wilt raden (gevolgd door enter): "; if (cin >> AantalKleuren) { if(AantalKleuren > 20) { cout << "Dit is meer als 20" << endl; return(1); } } else { cout << "Dit is GEEN getal" << endl; return(1); } int Invoer[AantalGetallen]; //Array waar de invoer van de gebruiker wordt opgeslagen //variabelen voor de berekeing bool NogNietGeraden = true; //Waar zolang code (Antwoord) nog niet geraden //variabelen voor uitvoer int AantalTekensJuistePlek = 0; //Pinnetje van de juiste kleur op de juiste plek int AantalTekensAanwezig = 0; //Pinnetje van de juiste kleur, maar niet op de goede plek //variabelen voor antwoord long OudeGetalsWaarde = 0; //variable die ervoor zorgt dat elke code uniek wordt int Antwoord[AantalGetallen]; //array met gezochte antwoorden //antwoord genereren for (int i = 0; i < AantalGetallen; i++) { Antwoord[i] = randomgetal(&OudeGetalsWaarde); Antwoord[i] = (Antwoord[i] % 5); //debug (antwoord laten zien) cout << Antwoord[i] << endl; //end debug } while (NogNietGeraden) { //gebruiker code laten raden spel_invoer(&AantalGetallen, &AantalKleuren, Invoer); //gebruikers invoer opvragen spel_bereken(&AantalGetallen, &AantalTekensJuistePlek, &AantalTekensAanwezig, Antwoord, Invoer); //vergelijking uitvoeren //gebruikers resultaat laten zien if (AantalTekensJuistePlek == AantalGetallen) { cout << "Zeer goed, u heeft het goede antwoord geraden, druk op enter om verder te gaan"; cin.get(); NogNietGeraden = false; } else { cout << "Aantal op de juiste plek: \t" << AantalTekensJuistePlek << endl; cout << "Aantal niet op de juiste plek:\t" << AantalTekensAanwezig << endl; } //end gebruiker code laten raden } return (0); } int main() { spel_main(); }