Correcció de Codi C++: Brain Training Game, Dam Dam Dish i Master Mind

Matemáticas14,83 KB

#include <iostream>
#include "Aleatori.h"
#include <time.h>
#include <cmath>
#include <iomanip>
#define SUMA 0
#define RESTA 1
#define MULTIPLICACIO 2
#define DIVISIO 3
#define FACIL 1
#define MIG 2
#define DIFICIL 3
#define MULTIPLICADOR_FACIL 8
#define MULTIPLICADOR_MIG 10
#define MULTIPLICADOR_DIFICIL 12
using namespace std;

// Declaració de variables.
int dificultat, operacio, Operand1, Operand2, opmax;
int comptadorEncerts, puntsOperacio, punts, multiplicador;
double resultat, resposta;
resultat = 0; resposta = 0; // (resultat = resposta)
int min, max;
bool error;
// srand((unsigned)time(NULL));
comptadorEncerts = 0;
punts = 0;

cout << "Benvingut al Brain Training Game! Si us plau, selecciona una dificultat:" << endl << "1 - Fàcil" << endl << "2 - Mig" << endl << "3 - Difícil" << endl;

do {
cin >> dificultat;
switch (dificultat) {
case FACIL:
error = false;
min = 0; max = 9;
multiplicador = MULTIPLICADOR_FACIL;
opmax = 2;
break;
case MIG:
error = false;
min = 0; max = 99;
multiplicador = MULTIPLICADOR_MIG;
opmax = 2;
break;
case DIFICIL:
error = false;
min = 0; max = 999;
multiplicador = MULTIPLICADOR_DIFICIL;
opmax = 3;
break;
default:
error = true;
cout << "Selecció incorrecta. Si us plau, selecciona una dificultat:" << endl;
}
} while (error == true);

while (resposta == resultat) { // mentre sigui correcta la resposta
operacio = Aleatori(0, opmax);
Operand1 = Aleatori(min, max);
Operand2 = Aleatori(min, max);
switch (operacio) {
case SUMA:
resultat = Operand1 + Operand2;
// cout << resultat << endl;
cout << Operand1 << " + " << Operand2 << " = " << endl;
puntsOperacio = 1;
break;
case RESTA:
resultat = Operand1 - Operand2;
// cout << resultat << endl;
cout << Operand1 << " - " << Operand2 << " = " << endl;
puntsOperacio = 1;
break;
case MULTIPLICACIO:
resultat = Operand1 * Operand2;
// cout << resultat << endl;
cout << Operand1 << " x " << Operand2 << " = " << endl;
puntsOperacio = 2;
break;
case DIVISIO:
while (Operand2 == 0) {
Operand2 = Aleatori(min, max);
} // Fins que el denominador no sigui 0.
{
int aux = 10 * Operand1 / Operand2;
resultat = aux / 10.0;
// cout << resultat << endl;
cout << Operand1 << " : " << Operand2 << " = " << endl;
puntsOperacio = 3;
}
break;
default:
break;
}
cin >> resposta;
if (resposta == round(resultat * 10.0) / 10.0) {
punts = punts + puntsOperacio * multiplicador;
comptadorEncerts++;
}
}

cout << "Has aconseguit encadenar " << comptadorEncerts << " respostes correctes amb una puntuació final de: " << punts << " punts.";
}

Codi 2: Dam Dam Dish (Aleatori.h, funcions i joc)

#include "Aleatori.h"
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <time.h>
#define ESCUT 1
#define CARREGA 2
#define TRET 3
#define EMPAT 0
#define WINA 1
#define WINB 2

// EX 1
void PresentacioJoc() {
cout << "Dam dam dish, és un joc infantil on es simula un duel de pistolers. L'objectiu del joc és matar al contrincant." << endl << "El joc és per parelles i hi ha tres moviments bàsics:" << endl << "- Braços en creu sobre el pit: escut" << endl << "- Mans en forma de pistola apuntant al contrincant: tret" << endl << "- Dits índex i del mig tocant el lateral del front: carregar" << endl << "El joc és al millor de N partides, on N és un nombre senar" << endl;
}

// EX 2
int Senar(int x) {
if (x % 2 == 0) {
return false;
}
else {
return true;
}
}

// EX 3
int LlegirSenar() {
int num;
do {
cout << "Introduir un nombre senar" << endl;
cin >> num;
if (Senar(num) == false) {
cout << "ERROR: El nombre introduït és parell" << endl;
}
} while (Senar(num) == false);
return num;
}

// EX 4 -> Funció Aleatori en capçalera

// EX 5
void MenuDamDamDish() {
cout << "Escull entre" << endl << "1. Escut: protegeix dels trets del rival" << endl << "2. Carrega: afegeix una bala al carregador" << endl << "3. Tret: dispara al teu rival" << endl;
}

// EX 6
int LlegirNombre(int min, int max) {
int num;
cout << "Entra valor entre " << min << " i " << max << ":" << endl;
cin >> num;
bool notensbales = false;
while (num < min || num > max) {
if (num == 3 && notensbales == false) {
cout << "No tens bales. Escull entre 1 (Escut) o 2 (Carrega)" << endl;
cin >> num;
notensbales = true; // Perquè mostri el missatge un sol cop
}
else {
cout << "Error: valor fora de l'interval" << endl;
cout << "Entra valor entre " << min << " i " << max << ":" << endl;
cin >> num;
}
}
return num;
}

// EX 8
void MissatgeAI(int eleccio) {
switch (eleccio) {
case ESCUT:
cout << "L'ordinador ha escollit aleatòriament ESCUT" << endl;
break;
case CARREGA:
cout << "L'ordinador ha escollit aleatòriament CARREGA" << endl;
break;
case TRET:
cout << "L'ordinador ha escollit aleatòriament TRET" << endl;
break;
}
}

// EX 9
int JocDamDamDish(int Player1, int Player2) {
if (Player1 == TRET && Player2 == CARREGA) return WINA;
else if (Player2 == TRET && Player1 == CARREGA) return WINB;
else if (Player1 == TRET && Player2 == ESCUT) return EMPAT;
else if (Player2 == TRET && Player1 == ESCUT) return EMPAT;
else if (Player1 == TRET && Player2 == TRET) return EMPAT;
else if (Player1 == CARREGA && Player2 == CARREGA) return EMPAT;
else if (Player1 == ESCUT && Player2 == ESCUT) return EMPAT;
else if (Player1 == ESCUT && Player2 == CARREGA) return EMPAT;
else if (Player1 == CARREGA && Player2 == ESCUT) return EMPAT;
else return -1;
}

int main()
{
// srand((unsigned)time(NULL));
// int rand();
// Declaració de variables
int min, max;
min = 1; max = 3;
int balesJugador = 1, balesOrdinador = 1;
int numPartides;
int opcionsJugador, opcionsOrdinador;
int resultat;
int marcadorOrdinador = 0;
int marcadorJugador = 0;
// char input[10];
// Crida de funcions
// EX 10
PresentacioJoc();
numPartides = LlegirSenar();
MenuDamDamDish();
do {
// JOC
// Opcions ordinador
if (balesOrdinador > 0) {
opcionsOrdinador = Aleatori(min, max);
MissatgeAI(opcionsOrdinador);
}
else if (balesOrdinador <= 0) {
opcionsOrdinador = Aleatori(min, max - 1);
MissatgeAI(opcionsOrdinador);
}
if (balesJugador > 0) {
opcionsJugador = LlegirNombre(min, max);
}
else { // El jugador no té bales
opcionsJugador = LlegirNombre(min, max - 1);
}
if (opcionsJugador == CARREGA)
balesJugador++;
else if (opcionsJugador == TRET)
balesJugador--;
if (opcionsOrdinador == CARREGA)
balesOrdinador++;
else if (opcionsOrdinador == TRET)
balesOrdinador--;
resultat = JocDamDamDish(opcionsJugador, opcionsOrdinador);
switch (resultat) {
case 0:
cout << "Empat. Seguim la partida" << endl;
break;
case 1:
cout << "Guanyes tu!!!" << endl;
marcadorJugador++;
balesOrdinador = 1;
balesJugador = 1;
cout << "MARCADOR: Ordinador " << marcadorOrdinador << " Tu " << marcadorJugador << endl;
break;
case 2:
cout << "Et guanya un ordinador!!!" << endl;
marcadorOrdinador++;
balesOrdinador = 1;
balesJugador = 1;
cout << "MARCADOR: Ordinador " << marcadorOrdinador << " Tu " << marcadorJugador << endl;
break;
}
} while (marcadorJugador < numPartides / 2 + 1 && marcadorOrdinador < numPartides / 2 + 1);
if (marcadorJugador > marcadorOrdinador) {
cout << "Tu ets el guanyador final";
}
else {
cout << "El guanyador final és l'ordinador";
}
}

Codi 3: Master Mind (FuncionsMasterMind.h i funcions)

#include <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define LONG_CODI 4
#define MAX_INTENTS 15
#define DIGITS 10
void Ajuda();
int Aleatori(int, int);
void GenerarCodiOcult(int[], int);
int LlegirNombre(int, int);
void IntToArray(int, int[], int);
void InicialitzarArray(int[], int, int);
void FrequenciaDigit(int[], int, int[]);
int NombreEncerts(int[], int[], int);
int Minim(int, int);
int NombreAproximacions(int[], int[], int);
void ImprimirComparacions(int, int);
int JocMasterMind();
void Menu();
void ImprimirResultatsJoc(int);

#include <iostream>
#include "FuncionsMasterMind.h"
// #include "Aleatori.h"
using namespace std;
// Escriure a partir d'aquí les funcions demanades. NO posar main().
#include <stdlib.h>
int Aleatori(int NumMin, int NumMax) {
int NumAleatori;
NumAleatori = NumMin + (rand() % (NumMax - NumMin + 1));
return NumAleatori;
}

// EX 1
void Menu() {
cout << "MASTER MIND" << endl;
cout << "Escull una opció:" << endl;
cout << "Opció 1 Ajuda" << endl;
cout << "Opció 2 Jugar" << endl;
cout << "Opció 3 Sortir" << endl;
cout << "----------------------" << endl;
}

// EX 2
void Ajuda() {
int N_encertats, N_aproximats;
N_encertats = 0;
N_aproximats = 0;
cout << "L'objectiu del joc és trobar el codi ocult" << endl;
cout << "El codi és de longitud " << LONG_CODI << " nombres del 0 al 9" << endl;
cout << "Després de cada intent et dona la següent informació:" << endl;
cout << " " << N_encertats << endl;
cout << " " << N_aproximats << endl;
cout << "El nombre d'intents són " << MAX_INTENTS << endl;
}

// EX 3
void GenerarCodiOcult(int CodiMaster[], int Dim) {
int i;
for (i = 0; i < Dim; i++) {
CodiMaster[i] = Aleatori(0, 9);
cout << CodiMaster[i];
}
cout << endl;
}

// EX 4
int LlegirNombre(int min, int max) {
int nombre;
do {
cout << "Entra valor entre " << min << " i " << max << ": ";
cin >> nombre;
if (nombre < min || nombre > max) {
cout << "Error: valor fora de l'interval" << endl;
}
} while (nombre < min || nombre > max);
return nombre;
}

// EX 5
void IntToArray(int Nombre, int Codi[], int Dim) {
for (int i = Dim - 1; i >= 0; i--) {
Codi[i] = Nombre % 10;
Nombre /= 10;
}
}

// EX 6
void InicialitzarArray(int Array[], int Dim, int Valor) {
int i = 0;
for (i = 0; i < Dim; i++) {
Array[i] = Valor;
}
}

// EX 7
void FrequenciaDigit(int Codi[], int Dim, int Frequencia[]) {
int i;
for (i = 0; i < Dim; i++) {
Frequencia[Codi[i]]++;
}
}

// EX 8
int NombreEncerts(int CodiMaster[], int CodiBreaker[], int Dim) {
int encerts = 0;
for (int i = 0; i < Dim; i++) {
if (CodiMaster[i] == CodiBreaker[i]) {
encerts++;
}
}
return encerts;
}

// EX 9
int Minim(int Valor1, int Valor2) {
if (Valor1 < Valor2) {
return Valor1;
}
else {
return Valor2;
}
}

// EX 10
int NombreAproximacions(int FrequenciaCodiMaster[], int FrequenciaCodiBreaker[], int Encerts) {
int i;
int w = 0;
for (i = 0; i < 10; i++) {
w = w + Minim(FrequenciaCodiMaster[i], FrequenciaCodiBreaker[i]);
}
w = w - Encerts;
return w;
}

// EX 11
void ImprimirComparacions(int Encerts, int Aproximacions) {
cout << "Aquest codi té " << Encerts << " encerts i " << Aproximacions << " aproximacions." << endl;
}

// EX 12
int JocMasterMind() {
int CodiMaster[LONG_CODI], CodiBreaker[LONG_CODI], IntCodiBreaker,
FrequenciaCodiMaster[DIGITS], FrequenciaCodiBreaker[DIGITS], Encerts = 0, Aproximacions, Intents = 0;
GenerarCodiOcult(CodiMaster, LONG_CODI);
InicialitzarArray(FrequenciaCodiMaster, DIGITS, 0);
FrequenciaDigit(CodiMaster, LONG_CODI, FrequenciaCodiMaster);
while (Encerts != 4 && Intents < MAX_INTENTS) {
IntCodiBreaker = LlegirNombre(0, 9999);
IntToArray(IntCodiBreaker, CodiBreaker, LONG_CODI);
InicialitzarArray(FrequenciaCodiBreaker, DIGITS, 0);
FrequenciaDigit(CodiBreaker, LONG_CODI, FrequenciaCodiBreaker);
Encerts = NombreEncerts(CodiMaster, CodiBreaker, LONG_CODI);
if (Encerts != 4) {
Aproximacions = NombreAproximacions(FrequenciaCodiMaster, FrequenciaCodiBreaker, Encerts);
ImprimirComparacions(Encerts, Aproximacions);
Intents++;
}
}
return 0; // esborrar
}

// EX 13
void ImprimirResultatJoc(int Intents) {
if (Intents == 0) {
cout << "No has aconseguit descobrir el codi" << endl;
}
else {
cout << "Has aconseguit descobrir el codi en " << Intents << " intents" << endl;
}
}

Descargar

PDF Word HTML