diff options
| author | Gaspard Coulet <gaspard.coulet@mines-ales.org> | 2021-04-28 23:05:53 +0200 |
|---|---|---|
| committer | Gaspard Coulet <gaspard.coulet@mines-ales.org> | 2021-04-28 23:05:53 +0200 |
| commit | 9fe033ea88c2f705ec18c232873d056e0c229d72 (patch) | |
| tree | 0647dc8c51610c7336c88c04de2068ea14b21e17 /sem_3/project/Documents du Projet-20171011 | |
Initial commit
Diffstat (limited to 'sem_3/project/Documents du Projet-20171011')
| -rw-r--r-- | sem_3/project/Documents du Projet-20171011/SujetBatailleNavale.pdf | bin | 0 -> 606274 bytes | |||
| -rw-r--r-- | sem_3/project/Documents du Projet-20171011/test-piece.cpp | 65 | ||||
| -rw-r--r-- | sem_3/project/Documents du Projet-20171011/window.cpp | 114 | ||||
| -rw-r--r-- | sem_3/project/Documents du Projet-20171011/window.h | 85 |
4 files changed, 264 insertions, 0 deletions
diff --git a/sem_3/project/Documents du Projet-20171011/SujetBatailleNavale.pdf b/sem_3/project/Documents du Projet-20171011/SujetBatailleNavale.pdf Binary files differnew file mode 100644 index 0000000..bdcfa0a --- /dev/null +++ b/sem_3/project/Documents du Projet-20171011/SujetBatailleNavale.pdf diff --git a/sem_3/project/Documents du Projet-20171011/test-piece.cpp b/sem_3/project/Documents du Projet-20171011/test-piece.cpp new file mode 100644 index 0000000..fcbff74 --- /dev/null +++ b/sem_3/project/Documents du Projet-20171011/test-piece.cpp @@ -0,0 +1,65 @@ +#include "window.h" + + +void myprogram(){ + int ch; + int h=10,w=10; + Window menu(3,30,1,0); + Window plateau(h,w,1,6); + menu.setCouleurBordure(BRED); + plateau.setCouleurBordure(BBLUE); + + menu.print(1,1,"Tapez q pour quitter !!!",WRED); + + int x=w/2,y=h/2; + char p='X'; + Color col=WBLUE; + plateau.print(x,y,p,col); + + while((ch = getch()) != 'q') + { + switch (ch) { + case '1': + col=BMAGENTA; + break; + case '2': + col=WCYAN; + break; + case 'c': + plateau.clear(); + break; + case KEY_UP: + plateau.print(x,y,' '); + plateau.print(x,--y,p,col); + break; + case KEY_DOWN: + plateau.print(x,y,' '); + plateau.print(x,++y,p,col); + break; + case KEY_LEFT: + plateau.print(x,y,' '); + plateau.print(--x,y,p,col); + break; + case KEY_RIGHT: + plateau.print(x,y,' '); + plateau.print(++x,y,p,col); + break; + case '\n': + x=w/2,y=h/2; + plateau.print(x,y,p,col); + break; + case '\t': + Color tmp= menu.getCouleurBordure(); + menu.setCouleurBordure(plateau.getCouleurBordure()); + plateau.setCouleurBordure(tmp); + break; + } + } +} + +int main(){ + startProgramX(); + myprogram(); + stopProgramX(); + return 0; +} diff --git a/sem_3/project/Documents du Projet-20171011/window.cpp b/sem_3/project/Documents du Projet-20171011/window.cpp new file mode 100644 index 0000000..65694a7 --- /dev/null +++ b/sem_3/project/Documents du Projet-20171011/window.cpp @@ -0,0 +1,114 @@ +#include "window.h" + + +void init_colors(void) +{ + start_color(); + init_pair(WBLACK, COLOR_WHITE, COLOR_BLACK); + init_pair(WCYAN, COLOR_WHITE, COLOR_CYAN); + init_pair(WBLUE, COLOR_WHITE, COLOR_BLUE); + init_pair(WYELLOW, COLOR_WHITE, COLOR_YELLOW); + init_pair(WGREEN, COLOR_WHITE, COLOR_GREEN); + init_pair(WMAGENTA, COLOR_WHITE, COLOR_MAGENTA); + init_pair(WRED, COLOR_WHITE, COLOR_RED); + init_pair(BWHITE, COLOR_BLACK, COLOR_WHITE); + init_pair(BCYAN, COLOR_BLACK, COLOR_CYAN); + init_pair(BBLUE, COLOR_BLACK, COLOR_BLUE); + init_pair(BYELLOW, COLOR_BLACK, COLOR_YELLOW); + init_pair(BGREEN, COLOR_BLACK, COLOR_GREEN); + init_pair(BMAGENTA, COLOR_BLACK, COLOR_MAGENTA); + init_pair(BRED, COLOR_BLACK, COLOR_RED); +} + + +void startProgramX() { + initscr(); // initialize curses + cbreak(); // pass key presses to program, but not signals + noecho(); // don't echo key presses to screen + keypad(stdscr, TRUE); // allow arrow keys + timeout(0); // no blocking on getch() + curs_set(0); // set the cursor to invisible + init_colors(); +} + +void stopProgramX() { + refresh(); + getch(); + endwin(); +} + + + +void Window::update() const{ + wrefresh(win); + wrefresh(frame); + refresh(); +} + + +Window::Window(int h,int w, int x, int y, char c) + : height(h), width(w), startx(x), starty(y), bord(c) +{ + colorwin=WCYAN; + colorframe=WBLACK; + frame=newwin(h+2,w+2,y,x); + win=subwin(frame,h,w,y+1,x+1); + wbkgd(frame,COLOR_PAIR(colorwin)); + wbkgd(win,COLOR_PAIR(colorframe)); + wborder(frame, c,c,c,c,c,c,c,c); + wattron(win,COLOR_PAIR(colorwin)); + wattron(frame,COLOR_PAIR(colorframe)); + update(); +} + +Window::~Window(){ + wborder(frame, ' ', ' ', ' ',' ',' ',' ',' ',' '); + wattroff(win,COLOR_PAIR(colorwin)); + wattroff(win,COLOR_PAIR(colorframe)); + werase(win); + update(); + delwin(win); +} + +void Window::print(int x, int y, std::string s, Color c) const { + wattron(win,COLOR_PAIR(c)); + mvwprintw(win,y,x,s.c_str()); + wattroff(win,COLOR_PAIR(c)); + update(); +} +void Window::print(int x, int y, char s, Color c) const{ + wattron(win,COLOR_PAIR(c)); + mvwaddch(win,y,x,s); + wattroff(win,COLOR_PAIR(c)); + update(); +} +void Window::print(int x, int y, std::string s) const{ + mvwprintw(win,y,x,s.c_str()); + update(); +} +void Window::print(int x, int y, char s) const{ + mvwaddch(win,y,x,s); + update(); +} + + +int Window::getX() const { return startx;} +int Window::getY() const { return starty;} +int Window::getHauteur() const { return height;} +int Window::getLargeur() const { return width;} +Color Window::getCouleurBordure() const{ return colorframe;} +Color Window::getCouleurFenetre() const{ return colorwin;} +void Window::setCouleurBordure(Color c){ + colorframe=c; + wattron(frame,COLOR_PAIR(colorframe)); + wborder(frame, bord,bord,bord,bord,bord,bord,bord,bord); + update(); +} +void Window::setCouleurFenetre(Color c){ + colorwin=c; + wattron(win,COLOR_PAIR(colorwin)); + wbkgd(win,COLOR_PAIR(colorwin)); + update(); +} + +void Window::clear() const{ werase(win); update(); } diff --git a/sem_3/project/Documents du Projet-20171011/window.h b/sem_3/project/Documents du Projet-20171011/window.h new file mode 100644 index 0000000..124e2eb --- /dev/null +++ b/sem_3/project/Documents du Projet-20171011/window.h @@ -0,0 +1,85 @@ +#ifndef __WINDOW_H +#define __WINDOW_H + +extern "C" { +#include <curses.h> +} +#include <string> + +// Ensemble de couleurs possibles (fond+texte) +enum Color { + WBLACK, // couleur fond = noir , couleur texte = blanc + WCYAN, // couleur fond = cyan, couleur texte = blanc + WBLUE, // couleur fond = bleu, couleur texte = blanc + WYELLOW, // couleur fond = jaune, couleur texte = blanc + WGREEN, // couleur fond = vert, couleur texte = blanc + WMAGENTA,// couleur fond = magenta, couleur texte = blanc + WRED, // couleur fond = rouge, couleur texte = blanc + BWHITE, // couleur fond = blanc, couleur texte = blanc + BCYAN, // couleur fond = cyan, couleur texte = noir + BBLUE, // couleur fond = bleu, couleur texte = noir + BYELLOW, // couleur fond = jaune, couleur texte = noir + BGREEN, // couleur fond = vert, couleur texte = noir + BMAGENTA,// couleur fond = magenta, couleur texte = noir + BRED, // couleur fond = rouge, couleur texte = noir +}; + + + +// fonction pour demarrer le mode console graphique +void startProgramX(); +// fonction pour arreter le mode console graphique +void stopProgramX(); + + +class Window { + private: + int height,width,startx,starty; + WINDOW* win, *frame; + Color colorwin, colorframe; + char bord; + void update() const; + + public: + + // constructeur d'un fenetre de hauteur=h, largeur=w dont le coin superieur gauche + // a pour coordonnée (x,y), le caractère c est utilisé pour définir la bordure + Window(int h,int w, int x, int y, char c='+'); + + ~Window(); + + // fonction permettant d'afficher une variable s de type (string ou char) + // à la position (x,y) dans la fenetre. + // si un couleur est spécifié l'affichage utilise cette couleur, sinon la couleur de la fenêtre est utilisée + void print(int x, int y, std::string s, Color c) const; + void print(int x, int y, char s, Color c) const; + void print(int x, int y, std::string s) const; + void print(int x, int y, char s) const; + + + // accesseurs + int getX() const; // récupère l'abscisse du coin supérieur gauche de la fenêtre + int getY() const; // récupère l'ordonnée du coin supérieur gauche de la fenêtre + int getHauteur() const ; // récupère la hauteur de la fenêtre + int getLargeur() const ; // récupère la largeur de la fenêtre + + Color getCouleurBordure() const; // récupère la couleur de la bordure + Color getCouleurFenetre() const; // récupère la couleur de la fenêtre + void setCouleurBordure(Color); // modifie la couleur de la bordure + void setCouleurFenetre(Color); // modifie la couleur de la fenêtre (ATTENTION, tout le contenu de la fenêtre prend la couleur) + + void clear() const; // enleve tout le contenu de la fenêtre + +}; + + + + + + + + + + + +#endif |
