Cross Plateform Console Librairy

Librairy cross plateforme qui permet de s'amuser avec la console pour windows et linux !

a marqué ce sujet comme résolu.

Bonjour,

Je viens aujourd'hui vous présenter un petit projet sur lequel je travail seul depuis maintenant 2 mois, mais tout d'abord je vais me présenter.

Donc, je suis étudiant en terminale STI2D (spécialité SIN), j'ai 17 ans. Je suis passionné d'informatique depuis mon plus jeune âge. Après mon bac j'espère intégré l'IUT de Montpellier en informatique.

Présentation du projet :

Je voulais créer un petit projet personnel qui fonctionne dans la console et qui soit cross plateforme, j'ai alors chercher sur le net une librairie qui me permettent ceci, et c'est alors que j'ai entendu parler de pdcurse et curse. Cependant cela ne répondait pas à mes besoins, je me suis alors mis en tête de créer ma propre librairie portable.

Pour ça j'ai choisi le C++ (afin de m'y perfectionner). Je n'utilise aucune autre librairie externe si ce n'est Xlib pour linux afin de redimensionner la console.

Téléchargements :

Vous pouvez télécharger la dernière version de la librairie (1.0) ici.

Instalation :

Afin de faire fonctionner la librairie correctement il faut juste lancer votre IDE et ajouter une librairie, vous sélectionner ensuite le fichier .lib correspondant à votre système d'exploitation dans la dossier lib.

Utilisateur de linux vous devrait aussi ajouter la librairie X11. De plus pour les linuxiens je vous conseil XTerm, c'est celui qui fonctionne le mieux avec ma librairie à l'heure actuelle.

Il ne reste plus qu'a rajouter au début de votre fichier :

1
#include "include/CL.h"

Afin de s'assurer que tout fonctionne bien copier coller ce code dans votre IDE :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
    This little program create a console, change color of the text, change title,
    maximize the window & the buffer, write the title of the console, load an
    ASCII picture.
    After that you can move the picture by pressing SPACE BAR or exit the
    program by pressing 'q'.
*/

int main()
{
    std::string title = "Multiplateform Console Librairy"; // Beautifull title

    //Console title must be unique when the console is created
    CMD cmd(title); //Create a console with a title. We give to the function a char const*
    cmd.showCursor(true); //Hide the cursor

    cmd.setColor(COLOR_RED, COLOR_BLACK); //Set the color forgeground to green and background to black
    cmd.setMaximized(); //Maximize the window, set to the max window size and largest buffer size possible
    //Under linux, resizing window automatically resize the buffer

    cmd.setCursorPos(cmd.getBufferSize().COLS / 2 - title.size() / 2, 0); //Center the cursor to write
    std::cout << cmd.getConsoleTitle() << std::endl; //Write the title of the console on the cursor position

    Picture picture; // Create a picture
    if (!picture.open("ASCII/art.txt")) // If the load fail
    {
        std::cout << "Fail while oppening file" << std::endl; // Ho, no !
    }
    std::cout << "The pciture widht is : " << picture.getSizeWidth() << std::endl; // Return the Width of the picture
    std::cout << "The pciture height is : " << picture.getSizeHeight() << std::endl; // And the Height
    picture.setPos(10, 10); // Change the position of the picture
    picture.display(cmd); // Draw the pciture to his coordinate (if 'cmd' isn't specified draw to 0,0)

    int i(0);
    while (!i) //Infinite loop
    {
        if (cmd.keyState(113)) //ASCII value, correspond to the letter 'q'
        {
            i = 1; //Exit the loop and so the program
        }
        if (cmd.keyState(32)) //ASCII value, correspond to 'SPACE BAR'cl
        // We move the pciture while the user press SPACE BAR :
        {
            // Move the picture
            picture.setPos(picture.getPosX() + 5, picture.getPosY()); // Add 1 to X pos to move the picture
            CoordCR start;
                start.COLS = picture.getPosX() - 5;
                start.ROWS = picture.getPosY();
            CoordCR end;
                end.COLS = picture.getPosX();
                end.ROWS = picture.getSizeHeight();

            cmd.setCursorPos(0, 50);
            std::cout << "Start : " << start.COLS << " ; " << start.ROWS << std::endl;
            std::cout << "End : " << end.COLS << " ; " << end.ROWS << std::endl;

            // And now refresh the screen !
            cmd.clearBuffer(cmd, start, end); // We clear only the specified area, it's really slow care !
            picture.display(cmd); // Display the picture to new coordonate
        }
    }

    return 0; //Exit the programm
}

License :

CPCL is under the zlib license :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
    This software is provided 'as-is', without any express or implied
    warranty.  In no event will the authors be held liable for any damages
    arising from the use of this software.

    Permission is granted to anyone to use this software for any purpose,
    including commercial applications, and to alter it and redistribute it
    freely, subject to the following restrictions:

    1. The origin of this software must not be misrepresented; you must not
        claim that you wrote the original software. If you use this software
        in a product, an acknowledgment in the product documentation would be
        appreciated but is not required.
    2. Altered source versions must be plainly marked as such, and must not be
        misrepresented as being the original software.
    3. This notice may not be removed or altered from any source distribution.

Possibilité d'avancement :

  • Documentation digne de ce nom
  • Support de MAC
  • Multiples consoles (cela me semble compliqué)
  • Support de plus de terminaux sur linux
  • Diminué les appels à la fonction system

Les sources sont bien sûr dans l'archive à téléchargé j'espère que tout ceci sera utilisé. Si vous voulez prendre par au projet, donner votre avis, suggérer une nouvelle fonctions, rajouter / corrigé des choses, reporter un bug et bien je ne peux que vous y encouragez !

Merci !

Je voulais créer un petit projet personnel qui fonctionne dans la console et qui soit cross plateforme, j'ai alors chercher sur le net une librairie qui me permettent ceci.

Une librairie cross-platform qui fonctionne en console, mais le but de tout ceci tu le précise pas :(

Je fait quelques ajustement avec la librairie (code source / documentation…) du coup quand j'aurais un peux plus avancé je referait la présentation.

De plus maintenant lorsque l'on recherche "librairie cross plateforme console" on tombe sur ce post en premier :)

En attendant voici le lien du dépôt GitHub.

De plus maintenant lorsque l'on recherche "librairie cross plateforme console" on tombe sur ce post en premier :)

Méfie toi, google a tendance à te présenter en priorité les sites que tu connais et visite. Ça ne veut pas dire que c'est pour tout le monde pareil.

J'ai une question: qu'est ce qui ne te convenais pas dans curse ?

NB au passage : X11 comme dépendance obligatoire pour une lib console, c'est au mieux étrange, au pire assez lourd comme dépendance. Ça empêche d'utiliser les applis quand on a pas X11 sur ça machine. C'est vraiment dommage. Si je fais une appli pur console, c'est pour être sûrs que je puisse l'utiliser a travers ssh ou si mon environnement de bureau est planté. Et là il le faut en dépendance. C'est vraiment dommage et je pense que ça rebutera beaucoup de dev potentiels.

De plus maintenant lorsque l'on recherche "librairie cross plateforme console" on tombe sur ce >post en premier :)

Méfie toi, google a tendance à te présenter en priorité les sites que tu connais et visite. Ça ne veut pas dire que c'est pour tout le monde pareil.

Kje

En effet, j'avais oublié ceci.

Sinon, X11 permet notamment de changer le titre de la fenêtre et de redimensionnée la fenêtre, ce qui n'est pas possible justement sous curse. Mais je comprend que la dépendance de X11 soit "un mal" je vais voir si il y a d'autre possibilité mais je ne suis pas sûr.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte