From 8a122db98ac2bbcedfa109eae7ccc7fdf665ae74 Mon Sep 17 00:00:00 2001 From: _N3m0 Date: Sat, 5 Aug 2023 19:33:43 +0200 Subject: [PATCH] hamood --- Makefile | 101 ++++++++++++++++++++++------ include/carte.hpp | 32 +++++++++ include/jdc.hpp | 120 +++++++++++++++++++++++++++++++++ src/course.cpp | 167 ---------------------------------------------- test/cartest.cpp | 9 +++ test/testjdc.cpp | 47 +++++++++++++ 6 files changed, 288 insertions(+), 188 deletions(-) create mode 100644 include/carte.hpp create mode 100644 include/jdc.hpp delete mode 100644 src/course.cpp create mode 100644 test/cartest.cpp create mode 100644 test/testjdc.cpp diff --git a/Makefile b/Makefile index a9e2985..6049237 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,15 @@ -PROJECTNAME=cli-casino +PROJECTNAME=MasterMakefile BIN=build/$(PROJECTNAME) CC=g++ EXT=cpp -INCDIRS=include lib +INCFOLDERS=include lib +RECURSIVE_INCLUDE=false +ifeq ($(RECURSIVE_INCLUDE), true) + INCDIRS=$(foreach I,$(INCFOLDERS),$(shell find $(I) -type d 2>/dev/null)) +else + INCDIRS=$(INCFOLDERS) +endif # make mode=release ifeq ($(mode), release) @@ -12,50 +18,103 @@ else OPT=-Og -g endif DEPFLAGS=-MP -MD -FLAGS=-Wall -Wextra $(foreach F,$(INCDIRS),-I$(F)) $(OPT) $(DEPFLAGS) +MACROS=HW PI=3.14 +FLAGS=-Wall -Wextra $(foreach F,$(INCDIRS),-I$(F)) $(OPT) $(DEPFLAGS) $(foreach M,$(MACROS),-D$(M)) SRC=$(shell find . -name "*.$(EXT)" -path "./src/*") OBJ=$(subst ./src/,./build/,$(SRC:.$(EXT)=.o)) -DEP=$(OBJ:.o=.d) +LIB=$(shell find . -name "*.$(EXT)" -path "./lib/*") +LIBO=$(subst ./lib/,./build/,$(LIB:.$(EXT)=.o)) TEST=$(shell find . -name "*.$(EXT)" -path "./test/*") +TESTO=$(subst ./test/,./build/,$(TEST:.$(EXT)=.t)) $(shell mkdir -p build) + all : $(BIN) -$(BIN) : $(OBJ) +$(BIN) : $(OBJ) $(LIBO) $(CC) $(FLAGS) -o $@ $^ --include $(DEP) +-include $(OBJ:.o=.d) $(LIBO:.o=.d) build/%.o : src/%.$(EXT) @mkdir -p $(@D) $(CC) $(FLAGS) -o $@ -c $< +build/%.o : lib/%.$(EXT) + @mkdir -p $(@D) + $(CC) $(FLAGS) -o $@ -c $< -run : all - ./$(BIN) +# make test file=testGenID.cpp +test : build/$(file).t + ./build/$(file).t + +alltest : $(TESTO) + @for i in $(TESTO); do echo $$i; $$i; done + +build/%.t : test/%.$(EXT) + @mkdir -p $(@D) + $(CC) $(FLAGS) -o $@ $< + +asm : $(OBJ:.o=.s) $(BIN).s + +build/%.s : src/%.$(EXT) + @mkdir -p $(@D) + $(CC) $(FLAGS) -S $< -o $@ + +$(BIN).s : $(BIN) + objdump -drwC -Mintel -S $< > $<.s + +preprocess : $(OBJ:.o=.i) + +build/%.i : src/%.$(EXT) + @mkdir -p $(@D) + $(CC) $(FLAGS) -E $< -o $@ + +gigall : $(BIN) $(TESTO) asm preprocess + +# make run input="program input" +run : $(BIN) + ./$< $(input) clean : rm -rf build/* -# make test file=testGenID.cpp -test : $(OBJ) - $(CC) $(FLAGS) -o build/$(file:.$(EXT)=) test/$(file) - ./build/$(file:.$(EXT)=) - -alltest : - @for f in $(subst ./test/,,$(TEST)); do make -s test file=$$f; done - -# unzip : mkdir exemple && tar -xvf exemple.tgz -C exemple -dist : clean - tar zcvf build/$(PROJECTNAME).tgz . - check : cppcheck --enable=all --suppress=missingIncludeSystem $(foreach I,$(INCDIRS),-I$(I)) . flawfinder . +debug : $(BIN) + gdb $< $(input) + +# unzip : tar -xvf exemple.tgz +dist : clean + $(info /!\ project folder has to be named $(PROJECTNAME) /!\ ) + cd .. && tar zcvf $(PROJECTNAME)/build/$(PROJECTNAME).tgz $(PROJECTNAME) >/dev/null + +push : + git push bbsrv + git push gh + +install : dist + cp Makefile ../script + mv build/$(PROJECTNAME).tgz ../opt/archive + cd .. && rm -rf $(PROJECTNAME) + info : $(info put what ever) @echo you want -.PHONY : all run clean test alltest dist check info +# alias + +r : run + +t : test + +c : check + +p : push + +d : debug + +.PHONY : all test t alltest asm preprocess gigall run r clean check c debug d dist push p install info diff --git a/include/carte.hpp b/include/carte.hpp new file mode 100644 index 0000000..0e78d38 --- /dev/null +++ b/include/carte.hpp @@ -0,0 +1,32 @@ +#ifndef CARTE_HPP +#define CARTE_HPP + +enum VCarte{ + II = 2, + III, + IV, + V, + VI, + VII, + VIII, + IX, + T, + J, + Q, + K, + A, +}; + +enum CCarte{ + PIC, + CARREAU, + COEUR, + TREFLE, +}; + +struct carte{ + VCarte valeur; + CCarte couleur; +}; + +#endif diff --git a/include/jdc.hpp b/include/jdc.hpp new file mode 100644 index 0000000..a12ed48 --- /dev/null +++ b/include/jdc.hpp @@ -0,0 +1,120 @@ +#ifndef JDC_HPP +#define JDC_HPP + +#include +#include +#include "carte.hpp" + +class JDC{ + public: + JDC(){ + this->len = 0; + }; + + void init(){ + this->len = 52; + int index = 0; + for (int i=0; i<4; i++){ + for (int y=0; y<13; y++){ + index = (i*13)+y; + this->jdc[index].couleur = (CCarte)i; + this->jdc[index].valeur = (VCarte)(y+2); + } + } + } + + void shuffle(){ + srand(time(0)); + for (int i=0; i<52; i++){ + int randomIndex = rand()%52; + carte swap = this->jdc[randomIndex]; + + this->jdc[randomIndex] = this->jdc[i]; + this->jdc[i] = swap; + } + }; + + void display(){ + for (int i=0; ilen; i++){ + if (!(i%13)) std::cout << std::endl; + std::cout << i << ':' << this->jdc[i].valeur << '+' << this->jdc[i].couleur << '\t'; + } + std::cout << std::endl; + }; + + carte top(){ + if (this->len <= 0) throw "jdc empty"; + return this->jdc[this->len-1]; + } + + carte pop(){ + if (this->len <= 0) throw "jdc empty"; + this->len--; + return this->jdc[this->len]; + } + + carte push(carte c){ + if (this->len == 52) throw "jdc full"; + this->jdc[this->len] = c; + this->len++; + return c; + } + + carte get(int index){ + if (index < 0 || index > this->len) throw "jdc out of bound"; + return this->jdc[index]; + } + + std::string valeur(carte c){ + if ((int)c.valeur < 10) return std::to_string(c.valeur); + switch(c.valeur){ + case T: + return "T"; + case J: + return "J"; + case Q: + return "Q"; + case K: + return "K"; + case A: + return "A"; + default: + return "?"; + } + } + + std::string couleur(carte c){ + switch(c.couleur){ + case PIC: + return "♠"; + case COEUR: + return "♥"; + case TREFLE: + return "♣"; + case CARREAU: + return "♦"; + default: + return "?"; + } + }; + + std::string* ascii(carte c){ + std::string* s = new std::string[3]; + std::string co = this->couleur(c); + s[0] = "\033[38;5;235m╭──╮"; + if (co == "♥" || co == "♦") s[1] = "│\033[31m"+this->valeur(c)+co+"\033[38;5;235m│"; + else s[1] = "│\033[30m"+this->valeur(c)+co+"\033[38;5;235m│"; + s[2] = "╰──╯"; + return s; + }; + + int length(){ + return this->len; + } + + private: + carte jdc[52]; + int len; +}; + +#endif diff --git a/src/course.cpp b/src/course.cpp deleted file mode 100644 index a6f75b4..0000000 --- a/src/course.cpp +++ /dev/null @@ -1,167 +0,0 @@ -#include - -enum CValeur{ - II, - III, - IV, - V, - VI, - VII, - VIII, - IX, - X, - J, - Q, - K, - A, -}; - -enum CCouleur{ - trefle, - pique, - coeur, - carreau, -}; - -struct carte{ - CValeur valeur; - CCouleur couleur; -}; - -void printCarte(const carte& c){ - switch (c.valeur){ - case II: - std::cout << '2'; - break; - case III: - std::cout << '3'; - break; - case IV: - std::cout << '4'; - break; - case V: - std::cout << '5'; - break; - case VI: - std::cout << '6'; - break; - case VII: - std::cout << '7'; - break; - case VIII: - std::cout << '8'; - break; - case IX: - std::cout << '9'; - break; - case X: - std::cout << 'd'; - break; - case J: - std::cout << 'J'; - break; - case Q: - std::cout << 'Q'; - break; - case K: - std::cout << 'K'; - break; - case A: - std::cout << 'A'; - break; - default: - std::cout << '?'; - break; - } - switch (c.couleur){ - case trefle: - std::cout << 'T'; - break; - case pique: - std::cout << 'P'; - break; - case carreau: - std::cout << 'K'; - break; - case coeur: - std::cout << 'C'; - break; - default: - std::cout << '?'; - break; - } -} - -int main(){ - carte jc[52]; - - int x = 0; - for (int i=0; i<4; i++){ - for (int y=0; y<13; y++){ - jc[x].valeur = CValeur(y); - jc[x].couleur = CCouleur(i); - x++; - } - } - - // printCarte(jc[0]); - // for (int i=1; i<52; i++){ - // if (!(i%13)){ - // std::cout << std::endl; - // }else{ - // std::cout << " - "; - // } - // printCarte(jc[i]); - // } - // std::cout << std::endl; - - int nvPalier[4]; - nvPalier[trefle] = 5; - nvPalier[pique] = 6; - nvPalier[coeur] = 3; - nvPalier[carreau] = 4; - - carte cartePalier[5]; - cartePalier[0].valeur = II; - cartePalier[0].couleur = trefle; - cartePalier[1].valeur = IV; - cartePalier[1].couleur = pique; - cartePalier[2].valeur = J; - cartePalier[2].couleur = pique; - cartePalier[3].valeur = X; - cartePalier[3].couleur = coeur; - cartePalier[4].valeur = IV; - cartePalier[4].couleur = carreau; - - std::cout << "👑|"; - if (nvPalier[0]>=6){ - std::cout << "■"; - }else{ - std::cout << "_"; - } - - for (int i=1; i<4; i++){ - if (nvPalier[i]==6){ - std::cout << "_■"; - }else{ - std::cout << "__"; - } - } - std::cout << "|" << std::endl; - - for (int i=4; i>0; i--){ - printCarte(cartePalier[i]); - std::cout << '|'; - for (int y=0; y<4; y++){ - if (nvPalier[y]>=i){ - std::cout << "■|"; - }else{ - std::cout << " |"; - } - } - std::cout << std::endl; - } - std::cout << "‾‾|T|P|C|K|" << std::endl; - - return 0; -} diff --git a/test/cartest.cpp b/test/cartest.cpp new file mode 100644 index 0000000..c98b80e --- /dev/null +++ b/test/cartest.cpp @@ -0,0 +1,9 @@ +#include +#include "carte.hpp" + +int main(){ + carte c = {III, TREFLE}; + if (c.valeur == 3 && c.valeur == 3) std::cout << "\033[32mOK\033[0m" << std::endl; + + return 0; +} diff --git a/test/testjdc.cpp b/test/testjdc.cpp new file mode 100644 index 0000000..8a9b730 --- /dev/null +++ b/test/testjdc.cpp @@ -0,0 +1,47 @@ +#include +#include "jdc.hpp" + +int main(){ + JDC jdc; + jdc.init(); + + jdc.shuffle(); + //jdc.display(); + //jdc.shuffle(); + //jdc.display(); + // + //carte c = jdc.top(); + //std::cout << "c : " << c.valeur << '+' << c.couleur << std::endl; + //std::cout << jdc.length() << std::endl; + //c = jdc.pop(); + //std::cout << "c : " << c.valeur << '+' << c.couleur << std::endl; + //std::cout << jdc.length() << std::endl; + // + //c = jdc.get(0); + //std::cout << "c : " << c.valeur << '+' << c.couleur << std::endl; + //std::cout << jdc.length() << std::endl; + // + //jdc.display(); + //std::cout << jdc.length() << std::endl; + // + //jdc.push({K, COEUR}); + //jdc.display(); + //std::cout << jdc.length() << std::endl; + // + //std::cout << "bottom = " << jdc.valeur(jdc.get(0)) << jdc.couleur(jdc.get(0)) << std::endl; + //std::cout << "2 = " << jdc.valeur(jdc.get(2)) << jdc.couleur(jdc.get(2)) << std::endl; + // + //std::cout << "top = " << jdc.valeur(jdc.top()) << jdc.couleur(jdc.top()) << std::endl; + //std::cout << jdc.couleur(jdc.top()).length() << std::endl; + + //std::cout << "\033[1;48;5;22m" << std::endl; + for (int y=0; y<52; y++){ + std::string* ss = jdc.ascii(jdc.get(y)); + for (int i=0; i<3; i++){ + std::cout << "\033[1;48;5;22;38;5;235m" << ss[i] << std::endl; + } + } + std::cout << "\033[0m" << std::endl; + + return 0; +}