This commit is contained in:
_N3m0 2023-08-05 19:33:43 +02:00
parent e944c64870
commit 8a122db98a
6 changed files with 288 additions and 188 deletions

101
Makefile
View File

@ -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

32
include/carte.hpp Normal file
View File

@ -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

120
include/jdc.hpp Normal file
View File

@ -0,0 +1,120 @@
#ifndef JDC_HPP
#define JDC_HPP
#include <iostream>
#include <cstdlib>
#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; i<this->len; 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

View File

@ -1,167 +0,0 @@
#include <iostream>
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;
}

9
test/cartest.cpp Normal file
View File

@ -0,0 +1,9 @@
#include <iostream>
#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;
}

47
test/testjdc.cpp Normal file
View File

@ -0,0 +1,47 @@
#include <iostream>
#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;
}