antoine.perederii 2 years ago
commit 13736bec78

Binary file not shown.

@ -52,6 +52,7 @@ namespace personnage {
void Barmen::servirVerre(const Humain & humain) const { void Barmen::servirVerre(const Humain & humain) const {
this->parler("Et voilà pour toi " + humain.getNom() +"un verre de " this->parler("Et voilà pour toi " + humain.getNom() +"un verre de "
+ humain.getBoisson()); + humain.getBoisson());
humain.boire();
} }
} }

@ -6,34 +6,70 @@
using namespace std; using namespace std;
namespace personnage { namespace personnage {
/**
* @brief Construct a new Indien:: Indien object
*
* @param nom
* @param boisson
* @param nbPlumes
* @param totem
*/
Indien::Indien(const string &nom, const string &boisson, const int nbPlumes, const string &totem) Indien::Indien(const string &nom, const string &boisson, const int nbPlumes, const string &totem)
:Humain(nom, boisson), nbPlumes{nbPlumes}, totem{totem} :Humain(nom, boisson), nbPlumes{nbPlumes}, totem{totem}
{} {}
/**
* @brief
*
* @return string
*/
string Indien::getNom() const { string Indien::getNom() const {
return Humain::getNom(); return Humain::getNom();
} }
/**
* @brief
*
* @param texte
*/
void Indien::parler(const string &texte) const { void Indien::parler(const string &texte) const {
Humain::parler(texte + " Ugh !"); Humain::parler(texte + " Ugh !");
} }
/**
* @brief
*
*/
void Indien::sePresenter() const { void Indien::sePresenter() const {
this->parler("Oyh, moi être " + this->getNom() + " et aimer " + this->getBoisson() + "."); this->parler("Oyh, moi être " + this->getNom() + " et aimer " + this->getBoisson() + ".");
this->parler("Moi vénérer totem " + this->totem + ". Moi guerrier. Moi avoir " + to_string(this->nbPlumes) + " plumes."); this->parler("Moi vénérer totem " + this->totem + ". Moi guerrier. Moi avoir " + to_string(this->nbPlumes) + " plumes.");
} }
/**
* @brief
*
* @param dame
*/
void Indien::scalper(Dame &dame) { void Indien::scalper(Dame &dame) {
dame.seFaireScalper(*this); dame.seFaireScalper(*this);
nbPlumes += 1; nbPlumes += 1;
} }
/**
* @brief
*
* @param brigand
*/
void Indien::scalper(Brigand &brigand) { void Indien::scalper(Brigand &brigand) {
brigand.seFaireScalper(*this); brigand.seFaireScalper(*this);
nbPlumes += 1; nbPlumes += 1;
} }
/**
* @brief
*
* @param cowboy
*/
void Indien::scalper(Cowboy &cowboy) { void Indien::scalper(Cowboy &cowboy) {
cowboy.seFaireScalper(*this); cowboy.seFaireScalper(*this);
nbPlumes+= 1; nbPlumes+= 1;

@ -1,4 +1,13 @@
#include "humain.hpp" /**
* @file main.cpp
* @author PEREDERII Antoine
* @brief
* @version 0.1
* @date 2023-03-22
*
* @copyright Copyright (c) 2023
*
*/
#include "dame.hpp" #include "dame.hpp"
#include "brigand.hpp" #include "brigand.hpp"
#include "cowboy.hpp" #include "cowboy.hpp"
@ -9,9 +18,14 @@
#include "indien.hpp" #include "indien.hpp"
#include <vector> #include <vector>
#include <algorithm>
using namespace std; using namespace std;
/**
* @brief
*
*/
void testHumain() { void testHumain() {
personnage::Humain jacques("Jacques", "biere"); personnage::Humain jacques("Jacques", "biere");
personnage::Humain pierre("Pierre"); personnage::Humain pierre("Pierre");
@ -23,6 +37,10 @@ void testHumain() {
pierre.parler("C'était bien sympa Jacques, rentrons à la maison maintenant !"); pierre.parler("C'était bien sympa Jacques, rentrons à la maison maintenant !");
} }
/**
* @brief
*
*/
void testDame() { void testDame() {
personnage::Dame rose("Rose"); personnage::Dame rose("Rose");
personnage::Dame ginette("Ginette", "ricard", "noir"); personnage::Dame ginette("Ginette", "ricard", "noir");
@ -33,6 +51,10 @@ void testDame() {
rose.parler("J'aime les beaux cowboy !"); rose.parler("J'aime les beaux cowboy !");
} }
/**
* @brief
*
*/
void testBrigand() { void testBrigand() {
personnage::Brigand robert("Robert"); personnage::Brigand robert("Robert");
personnage::Brigand bernard("Bernard", "aveze", "ronchon", 200); personnage::Brigand bernard("Bernard", "aveze", "ronchon", 200);
@ -40,6 +62,11 @@ void testBrigand() {
bernard.sePresenter(); bernard.sePresenter();
} }
/**
* @brief cette methode permet de tester la classe cowboy en créant
* deux cowboy et en les faisant se présenter
*
*/
void testCowboy() { void testCowboy() {
personnage::Cowboy danny("Danny", "whisky", "magnifique"); personnage::Cowboy danny("Danny", "whisky", "magnifique");
personnage::Cowboy george("George"); personnage::Cowboy george("George");
@ -165,62 +192,109 @@ void testGeneral1() {
void testGeneral2() { void testGeneral2() {
vector<personnage::Humain *> vHumain{ vector<personnage::Humain *> vHumain{
new personnage::Dame("Rose"), new personnage::Dame("Rose"),
new personnage::Dame("Ginette", "ricard", "noir")} new personnage::Dame("Ginette", "ricard", "noir"),
// {personnage::Brigand robert = new robert("Robert")}, new personnage::Brigand("Robert"),
// {personnage::Brigand bernard = new bernard("Bernard", "aveze", "ronchon", 200)}, new personnage::Brigand("Bernard", "aveze", "ronchon", 200),
// {personnage::Cowboy george = new george("George")}, new personnage::Cowboy("George"),
// {personnage::Barmen franck = new franck("Franck", "The Franchy Bar")}, new personnage::Barmen("Franck", "The Franchy Bar"),
// {personnage::Sherif clint = new clint("Clint")} new personnage::Sherif("Clint"),
new personnage::Sherif("Marc", "Morce", "Compétent"),
new personnage::Ripou("Morice", "Jet", "Malicieux", "Cruel", 2000),
new personnage::FemmeBrigand{"Monique"},
new personnage::FemmeBrigand{"Yvonne", "Thé", "noir", "grogneuse", 75000},
new personnage::Indien("Géronimo")
}; };
for_each // personnage for(personnage::Humain *pth : vHumain) {
for // cherche un sherif dans le vector puis un for qui Sherif emprisonner tt les brigands de vector pth->sePresenter();
cout << "Il était une fois, une jeune et belle dame qui se promenait dans les bois avec une amie.\n"; } // personnage
vector.at(0)->sePresenter();
ginette.sePresenter(); cout << "\nToute cette histoire commence au saloon de Buddy. C'est la tournée générale du patron :\n" << endl;
rose.parler("Qu'il fait beau aujourd'hui !!");
cout << "Tout allait bien dans le meilleur des mondes, jusqu'à ce que deux brigands apparurent.\n"; for(vector<personnage::Humain *>::iterator it1 = vHumain.begin(); it1 != vHumain.end(); ++it1) {
robert.sePresenter(); personnage::Barmen*ptb = dynamic_cast<personnage::Barmen*>(vHumain.at(5));
bernard.sePresenter(); if(ptb != nullptr) {
robert.parler("Nous allons vous kidnapper pauvres dames !!"); ptb->servirVerre(**it1);
bernard.kidnapper(rose); }
robert.kidnapper(ginette); }
cout <<"Les pauvres Rose et Ginette se firent kidnapper par ses deux truans. Mais un vieux cowboy n'est pas loin\n";
george.sePresenter(); cout << "Ivre mort, Clint se met à tirer sur tous les hors la loi de la pièce." << endl;
george.parler("Que faites vous bande de mal autrus !!!");
george.tirerSur(robert); for(vector<personnage::Humain *>::iterator it2 = vHumain.begin(); it2 != vHumain.end(); ++it2) {
george.tirerSur(bernard); personnage::Sherif*pts = dynamic_cast<personnage::Sherif*>(*it2);
bernard.parler("Tu nous a loupé veillard !!"); if(pts != nullptr) {
george.liberer(ginette); for(auto it3 = vHumain.begin(); it3 != vHumain.end(); ++it3) {
robert.parler("À bientôt l'ancien !!"); personnage::Brigand*ptb = dynamic_cast<personnage::Brigand*>(*it3);
cout <<"Et les deux brigands pure s'en aller paisiblement car la vieux cowboy ne tiré plus tout droit.\n"; if(ptb != nullptr) {
cout <<"Surtout avec tout l'alcool qu'il s'était enpiffré. Mais il réussi quand même à liberer une des deux filles.\n"; pts->tirerSur(*ptb);
cout <<"Et notre cowboy retourna au bar pour se remettre de ses émotions.\n"; }
george.parler("Hey Franck, un verre stp pour moi et cette dame !"); }
franck.servirVerre(george); }
franck.servirVerre(ginette); }
franck.parler("Alors ces brigands ?!");
george.parler("Ils se sont enfuit, j'ai plus la forme comme avant ! Mais j'ai réussi à liberer cette dame."); cout << "Pris de panique, Buck le méchant, qui a réussi à éviter les balles," << endl;
cout <<"Pendant ce temps là, les brigands s'échappe toujours. Notre cowboy décide donc d'en informer le Shérif.\n"; cout << "s'enfuit en kidnappant toutes les femmes à porté de main." << endl;
george.parler("Sherif !! J'ai deux brigands qui m'on échapés.");
clint.parler("Très bien george. Repose toi ! Je prends le relais"); for(vector<personnage::Humain *>::iterator it4 = vHumain.begin(); it4 != vHumain.end(); ++it4) {
clint.rechercherBrigand(bernard); personnage::Brigand*ptb = dynamic_cast<personnage::Brigand*>(*it4);
clint.rechercherBrigand(robert); if(ptb != nullptr) {
cout <<"Cela s'annonce compliqué pour notre Shérif !!\n"; for(auto it5 = vHumain.begin(); it5 != vHumain.end(); ++it5) {
clint.parler("Où on-t-il bien pu partir ???"); personnage::Dame*ptd = dynamic_cast<personnage::Dame*>(*it5);
pierre.sePresenter(); if(ptd != nullptr) {
pierre.parler("Sherif ! J'ai vu ces deux gangster avec une très jolie femme avec eux !"); ptb->kidnapper(*ptd);
clint.parler("Et où ça ?"); }
pierre.parler("Ils sont près de la gare !!!"); }
clint.parler("En avant mon fidèle destrier pilepoil !!"); }
cout <<"Notre Shérif entama donc son périple vers la gare avec son cheval pile-poil.\n"; }
cout <<"Une fois arrivé, il se cacha et s'approcha discrètement de ses deux brigands avant de les intercepter.\n";
clint.coffrerBrigand(robert); cout << "Heureusement, Shérif Marc parvient à sauver Ginette." << endl;
clint.tirerSur(bernard);
clint.coffrerBrigand(bernard); for(vector<personnage::Humain *>::iterator it6 = vHumain.begin(); it6 != vHumain.end(); ++it6) {
clint.liberer(rose); personnage::Sherif*pts = dynamic_cast<personnage::Sherif*>(*it6);
rose.parler("Mais que vous êtes merveuilleux mon shérif !!"); if(pts != nullptr) {
clint.parler("Pour vous servir Miss rose."); for(auto it7 = vHumain.begin(); it7 != vHumain.end(); ++it7) {
cout <<"Nos deux personnage partir tout deux heureux.\n"; personnage::Dame*ptd = dynamic_cast<personnage::Dame*>(*it7);
if(ptd != nullptr) {
pts->liberer(*ptd);
}
}
}
}
cout << "\nTellement ivre, Shérif Duke essaye d'ailleurs de la sauver plusieurs fois.\n" << endl;
for(vector<personnage::Humain *>::iterator it6 = vHumain.begin(); it6 != vHumain.end(); ++it6) {
personnage::Sherif*pts = dynamic_cast<personnage::Sherif*>(*it6);
if(pts != nullptr) {
for(auto it7 = vHumain.begin(); it7 != vHumain.end(); ++it7) {
personnage::Dame*ptd = dynamic_cast<personnage::Dame*>(*it7);
if(ptd != nullptr) {
pts->liberer(*ptd);
}
}
}
}
cout << "\nSuite à cela, Shérif Clint décide de coffrer tout les brigands." << endl;
cout << "Mais tellement ivre, il décide de coffrer tout le monde.\n" << endl;
// for(vector<personnage::Humain *>::iterator it8 = vHumain.begin(); it8 != vHumain.end(); ++it8) {
// if(*it8->getNom() == "Shérif Clint") { //*it8 = truc pointé par it8
// for(auto it9 = vHumain.begin(); it9 != vHumain.end(); ++it9) {
// *it8->coffrerBrigand(**it9);
// }
// }
// }
// cout << "Géronimo commancant à en avoir marre, décide de scalper tout le monde." << endl;
// for(vector<personnage::Humain *>::iterator it8 = vHumain.begin(); it8 != vHumain.end(); ++it8) {
// if(*it8->getNom() == "Géronimo") {
// for(auto it9 = vHumain.begin(); it9 != vHumain.end(); ++it9) {
// *it8->sclper(**it9);
// }
// }
// }
} }
@ -234,7 +308,8 @@ int main() {
// testSherif(); // testSherif();
// testRipou(); // testRipou();
// testFemmeBrigand(); // testFemmeBrigand();
testIndien(); // testIndien();
// testGeneral1(); // testGeneral1();
testGeneral2();
return 0; return 0;
} }

@ -1,26 +1,80 @@
#CC : le compilateur à utiliser cmake_minimum_required(VERSION 3.0)
CC=g++ project(TP6_Bordel)
#CFLAGS : les options de compilation set(CMAKE_CXX_STANDARD 17)
CFLAGS= -std=c++17 -Wall set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Ajout de l'option -03 pour un niveau plus élevé d'optimisation
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
# les fichiers sources : tous les fichiers présents dans src/ # Ajouter les fichiers source de votre projet
SRC=$(wildcard src/*.cpp) file(GLOB_RECURSE SOURCES "src/*.cpp")
# les fichiers objets (.o) # Afficher un message au début de la compilation
OBJ=$(patsubst src/%.cpp,obj/%.o,$(SRC)) message("Début de la compilation")
# Créer une cible pour l'exécutable
add_executable(TP6_Bordel ${SOURCES} src/main.cpp src/Dame.h src/Dame.cpp src/Brigand.h src/Brigand.cpp src/Cowboy.h src/Cowboy.cpp src/Sheriff.cpp src/Barman.h src/Barman.cpp)
#edition des liens : génération de l'exécutable à partir des .o # Options de compilation pour le debug
bin/exe: $(OBJ) set(CMAKE_CXX_FLAGS_DEBUG "-g -Wall")
$(CC) $(OBJ) -o $@
# génération des .o à partir des .cpp et .hpp crrespondants : # Tâche de compilation
obj/%.o: src/%.cpp add_custom_target(build
$(CC) $(CFLAGS) -c $< -o $@ COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all
COMMENT "Compilation en cours..."
)
#nettoyage : destruction des .o et de l'exécutable # Tâche de nettoyage
clean: add_custom_target(clean_all
rm obj/*.o bin/exe COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/
COMMENT "Nettoyage en cours..."
)
# Tâche de débogage
add_custom_target(debug
COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_SOURCE_DIR}
COMMENT "Configuration de la compilation en mode debug..."
)
# Afficher un message au début du debug
message("Début du debug")
# Tâche pour exécuter l'exécutable généré
add_custom_target(run
COMMAND $<TARGET_FILE:TP6_Bordel>
COMMENT "Exécution de l'exécutable..."
)
# Tâche pour exécuter l'exécutable généré avec valgrind
add_custom_target(run_valgrind
COMMAND valgrind --leak-check=full $<TARGET_FILE:TP6_Bordel>
COMMENT "Exécution de l'exécutable avec valgrind..."
)
# Tâche pour exécuter l'exécutable généré avec gdb
option(BUILD_DOC "Build documentation" ON)
# Indique que la construction de la documentation est une option et l'active par défaut
option(BUILD_DOC "Build documentation" ON)
# On vérifie que Doxygen est installé
find_package(Doxygen)
if (DOXYGEN_FOUND)
# Défini les fichiers d'entrée et de sortie
set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile.in)
set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
# Demande de configuration du fichier
configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)
message("Doxygen build started")
# Option ALL qui permet de construire les documents en même temps que l'application
add_custom_target( doc_doxygen ALL
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating API documentation with Doxygen"
VERBATIM )
else (DOXYGEN_FOUND)
message("Doxygen need to be installed to generate the doxygen documentation")
endif (DOXYGEN_FOUND)

Binary file not shown.

@ -6,7 +6,7 @@
#include"ingredient.hpp" #include"ingredient.hpp"
#include"recette.hpp" #include"recette.hpp"
#include"recetteAffichage.hpp" #include"recetteAffichage.hpp"
#include "livreRecettes.hpp" //#include "livreRecettes.hpp"
using namespace std; using namespace std;
@ -157,4 +157,4 @@ int main(){
// testLivreRecettes(); // testLivreRecettes();
return 0; return 0;
} }

Binary file not shown.

@ -0,0 +1,71 @@
/*
Faire clignoter une led toutes les secondes
*/
int cpt1=0;
int cpt2=0;
int cpt3=0;
int led1=11;
int led2=12;
int led3=13;
// La fonction setup est exécutée une fois à la mise en secteur de la carte ou si le bouton reset est actionné
void setup()
{
pinMode(led1, OUTPUT); // La broche 2 est initialisée en sortie.
pinMode(led2, OUTPUT); // La broche 3 est initialisée en sortie.
pinMode(led3, OUTPUT); // La broche 4 est initialisée en sortie.
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
}
// La fonction loop est exécutée en boucle indéfiniment
void loop()
{
if(cpt == 3){
digitalWrite(led1, LOW);
}
if(cpt == 4) {
digitalWrite(led2, LOW);
}
if(cpt == 5) {
digitalWrite(led3, LOW);
}
if(cpt = 6) {
digitalWrite(led1, HIGH);
}
if(cpt == 8){
digitalWrite(led1, HIGH);
}
if(cpt == 10) {
digitalWrite(led2, HIGH);
cpt=1;
}
delay(1000);
cpt++;
// swith(cpt) {
// case 3:
// digitalWrite(led1, LOW);
// break;
// case 4:
// digitalWrite(led1, LOW);
// break;
// case 5:
// digitalWrite(led1, LOW);
// break;
// case 6:
// digitalWrite(led1, LOW);
// break;
// case 8:
// digitalWrite(led1, LOW);
// break;
// case 10:
// digitalWrite(led1, LOW);
// break;
// cpt=0;
// }
// cpt++
}

@ -0,0 +1,102 @@
/*
Faire clignoter une led toutes les secondes
*/
int i=2;
int bt=9;
int val;
// La fonction setup est exécutée une fois à la mise en secteur de la carte ou si le bouton reset est actionné
void setup()
{
pinMode(2, OUTPUT); // La broche 2 est initialisée en sortie.
pinMode(3, OUTPUT); // La broche 3 est initialisée en sortie.
pinMode(4, OUTPUT); // La broche 4 est initialisée en sortie.
pinMode(5, OUTPUT); // La broche 5 est initialisée en sortie.
pinMode(6, OUTPUT); // La broche 6 est initialisée en sortie.
pinMode(7, OUTPUT); // La broche 7 est initialisée en sortie.
pinMode(8, OUTPUT); // La broche 8 est initialisée en sortie.
pinMode(9, INPUT); // La broche 9 est initialisée en entrée.
Serial.begin(9600);
}
// La fonction loop est exécutée en boucle indéfiniment
void loop()
{
val=digitalRead(bt);
Serial.println(val);
if(val == HIGH) {
if(i == 9) {
i=2;
}
digitalWrite(i, HIGH); // Allume la led (HIGH est la valeur du voltage)
delay(1000); // Attend une seconde
digitalWrite(i, LOW); // Eteint la LED (LOW c'est la masse)
delay(500);
i=i+1; // Attend une seconde
}
else {
if(i == 1) {
i=8;
}
digitalWrite(i, HIGH); // Eteint la LED (HIGH c'est la masse)
delay(1000); // Attend une seconde
digitalWrite(i, LOW); // Allume la led (LOW c'est le 5v)
delay(500);
i=i-1; // Attend une seconde
}
delay(5);
}
// Reliez ensuite la led non plus à la masse mais au 5V. Est-ce que votre programme fonctionne toujours ?
//! NON
// Modifiez votre montage pour que un appui sur le bouton poussoir génère un niveau haut (valeur 1).
// La led est donc allumée par défaut et s'éteint quand on appuie sur le bouton poussoir.
// Changer le schema
// void setup()
// {
// pinMode(2, OUTPUT); // La broche 2 est initialisée en sortie.
// pinMode(3, OUTPUT); // La broche 3 est initialisée en sortie.
// pinMode(4, OUTPUT); // La broche 4 est initialisée en sortie.
// pinMode(5, OUTPUT); // La broche 5 est initialisée en sortie.
// pinMode(6, OUTPUT); // La broche 6 est initialisée en sortie.
// pinMode(7, OUTPUT); // La broche 7 est initialisée en sortie.
// pinMode(8, OUTPUT); // La broche 8 est initialisée en sortie.
// pinMode(9, OUTPUT); // La broche 9 est initialisée en entrée.
// Serial.begin(9600);
// }
// // La fonction loop est exécutée en boucle indéfiniment
// void loop()
// {
// val=digitalRead(bt);
// Serial.println(val);
// if(val == HIGH) {
// if(i == 9) {
// i=2;
// }
// digitalWrite(i, HIGH); // Allume la led (HIGH est la valeur du voltage)
// delay(1000); // Attend une seconde
// digitalWrite(i, LOW); // Eteint la LED (LOW c'est la masse)
// delay(500);
// i=i+1; // Attend une seconde
// }
// else {
// if(i == 1) {
// i=8;
// }
// digitalWrite(i, HIGH); // Eteint la LED (HIGH c'est la masse)
// delay(1000); // Attend une seconde
// digitalWrite(i, LOW); // Allume la led (LOW c'est le 5v)
// delay(500);
// i=i-1; // Attend une seconde
// }
// delay(5);
// }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -1 +0,0 @@
Subproject commit 06f5f046c24db17ce3692ee2c969705c5b139bdc

@ -1 +0,0 @@
Subproject commit aca49083ec15f1f17920e1159e9694a210f8d227

Binary file not shown.

Binary file not shown.
Loading…
Cancel
Save