[heu...] Interface sexy

Bonjour à tout,

Ca fait un bail que je n’ai plus posté, mais on pardonne tout aux dinos, quand ils reviennent, non? :stuck_out_tongue:
Voila mon pb, jeunes gens et vieux programmeurs (ou l’inverse, je ne suis pas difficile).
J’ai voulu prendre une UE d’info cette année et me voila avec un programme à programmer (si, si!) sur les bras. C’est pas tres difficile et je vais faire ca conscieusement. C’est le (fameux!) problème des allumettes, vous connaissez? Mais pour avoir le max de point, il fauderai idéalement faire une espece d’interface graphique (où l’on verrai les allumettes au départ puis partir une fois choisie par le joueur).

Bref, voici le corps du sujet:
-est ce difficile de faire en C/C++ des interfaces un peu plus sympa que l espece de rectangle tout noir pour rentrer les parametres?

  • est ce difficile faire montrer x allumettes à l’ecran et x-p allumettes quand p allumettes ont été choisies?

PS: par difficile j entends éviter de passer des semaines dessus car j’ai malheureusement une tonne de taffe (et un niveau en C/C++ assez limité)

Voila voila

A votre bon coeurs monsieur, dame

++

Je me rappelle plus grand chose de C, mais tu devrais regarder vers QT de trolltech qui est une libraire graphique pas trop mal il me semble.

Bon tu n’a pas précisé la plateforme (windows, linux, mac) mais pour windows tu peut te tourner vers Visual C++ Express, très joli pas cher (gratuit) et tres facile à utiliser pour faire une belle interface :stuck_out_tongue:

Dites les gars, je ne veux pas être négatif, et je veux pas présumer des compétences de wared. Mais bon, conseiller Qt à un gars qui réalise son premier prog en C c’est peut-être un poil violent. Moi je dis d’oublier les interfaces graphiques pour le moment, rabats-toi plutôt sur un truc genre ascii art. Dessine tes allumettes avec des caractères, et fais un joli alignement, ça sera déjà ça et ça te fera la main sur les boucles. N’hésite pas à demander de l’aide en postant les bouts de code qui posent problème si tu coinces.

Avec Visual, il y a un éditeur d’interface graphique graphique, ça doit déjà faciliter la tâche. Après, tout dépend de la plate forme employée, parce que si c’est sous Unix/Linux, ça me parait un peu impossible de faire ça avec Visual.

Pour programmer le genre de truc que tu veux faire il n’existe rien de mieux que le C++ ( enfin c’est mon avis hein :stuck_out_tongue: ne trollons pas là dessus … ). Pour ma part je conseille l’API ClanLib qui est sans conteste l’une des plus simples à utiliser et qui permet de faire énormément de choses car elle gère le graphisme 2d, les events clavier et souris, le son et tout un tas d’autres de choses reliées au jeu vidéo.
Le bonus de la chose est que ClanLib est utilisable sous Linux / MacOS / Windows XP.
Dans le cas où tu programme sous Windows XP je te conseille d’utiliser Visual Studio .Net pour programmer tranquillement.
Si tu programme sous Linux je dois t’avouer que je n’en sais trop rien car je suis de ce point de vue un intégriste programmant avec gcc en ligne de commande et sous emacs pour tapper mon code ( oui j’aime me faire mal … )

Pour ce qui est des allumettes il est facile de créer et afficher des sprites sous ClanLib, sprites chargées directement depuis un .bmp ou un .tga .

Merci pour toutes vos réponses. Je vais les étudier avec bcp d’attention soyez sûrs.

Oui, Drealmer, tu as sans doute raison. Je pense que si je comprends rien aux autre solutions je vais sans doute me rabattre sur ta solution. Mais je vais essayer, le temps de ce WE, d’autre piste + “jolie” que des allumettes avec des |

Clams: j’installe Visual C++ et je me plonge dedans. Si vous n avez aucune nouvelles d’ici dimanche soir lancez les recherches.

Pour ClanLib, JDaM, cela necessite, si j’ai bien compris, d’avoir des allumettes deja dessinées en .bmp
Je vais voir si je peux trouver qqun qui pourrait me faire ca. Hors de Paint, je suis un peu perdu!

PS: je suis sous Windows, j’aurai du le preciser au debut.

A++

Scannes une allumette ?

je crois que tu es raison, j’ai suivi ton avis apres m’etre choppé un gros mal de tete sur Visual C++ ^-^
Voici mon bout de code.

compteur=tas;
while(compteur !=0)
{
printf(« 0 \n »);
printf(« | \n »);
printf(« | \n »);
printf(« | \n »);

               compteur=compteur-1;
          }

Tas est mon tas d’allumette que je dois affiché.
C est tres beau mais je n arrive pas a les afficher cote a cote plutot que les une sous les autre.
Tu aurais une idée, un tuyau, un indice, un conseil, un coup de main,… a me donner?

[quote=“wared, post:9, topic: 26001”]C est tres beau mais je n arrive pas a les afficher cote a cote plutot que les une sous les autre.
Tu aurais une idée, un tuyau, un indice, un conseil, un coup de main,… a me donner?[/quote]

Alors la solution pas propre du tout consisterait à retourner à l’endroit où tu veux afficher les autres, mais c’est même pas standard, et c’est de toutes façons une mauvaise approche… La bonne méthode est la suivante : imaginons que tu veuilles afficher trois allumettes, tu veux donc créer quelque chose qui ressemble à ça :

0 0 0 | | | | | | | | |

Sachant que tu ne peux afficher que ligne par ligne, et que tu ne peux pas revenir en arrière… Tu vas devoir dessiner tes allumettes dans un autre ordre. Donc chaque ligne doit être composée de n petites lignes verticales, et on répète trois fois, si on veut des alumettes dont la taille est de 3.

Pour reprendre ton code,

compteur=tas; while(compteur !=0) { printf("| "); compteur=compteur-1; } printf("\n");

Cette boucle affiche une ligne, y’a plus qu’à la mettre plusieurs fois côte à côte. Cependant, je vais commencer par une petite remarque, ta boucle while serait plus lisible si tu la transformais en for. Je ne sais pas si tu as déjà vu les boucles for, si ce n’est pas le cas ça ne saurait tarder, c’est le b-a-ba. Ce code devient soudainement :

for(compteur = 0; compteur < tas; compteur = compteur + 1) { printf("| "); } printf("\n");

Oui mais bon, ça ne dessine pas des allumettes comme auparavant… Ben y’a qu’à mettre ça plusieurs fois, pour faire la tête et les trois lignes du corps.

[code]for(compteur = 0; compteur < tas; compteur = compteur + 1)
{
printf(“0 “);
}
printf(”\n”);

for(compteur = 0; compteur < tas; compteur = compteur + 1)
{
printf("| “);
}
printf(”\n");

for(compteur = 0; compteur < tas; compteur = compteur + 1)
{
printf("| “);
}
printf(”\n");

for(compteur = 0; compteur < tas; compteur = compteur + 1)
{
printf("| “);
}
printf(”\n");[/code]

Là on se rend compte que le code est devenu énorme pour finalement pas grand chose… Y’a moyen de simplifier ça, comment ferais-tu ? Pour te donner une piste, demande-toi comment tu ferais pour que ton programme dessine des allumettes composées de x barres verticales au lieu de 3. On voudrait que lorsqu’on change x, on ne doive pas modifier le code. Essaie-voir.

Excellent mon Drealmer ca marche impec ton truc.
(avec une double boucle on simplifie pas mal le code, non?)
En tous ca ca marche d’enfer ta technique. Et puis l art ASCII je trouve ca marrant.

Ha, si j’osais, une derniere question:
Tu aurais une idée de la facon dont on peut relancer la partie? Je peux dire, si le joueur perd, qu il puisse rejouer, donc relancer le programme depuis le debut?
Si ca te saoule (tu dois avoir autre chose a faire que des pb de “C pour les nuls”) pas de probleme, c’est juste du pinaillage que je fais, rien de tres important.

A++

[quote=« wared, post:11, topic: 26001 »]Excellent mon Drealmer ca marche impec ton truc.
(avec une double boucle on simplifie pas mal le code, non?)[/quote]
Voilà, double boucle, c’est ce que je voulais que tu trouves comme conclusion :stuck_out_tongue:

[quote=« wared, post:11, topic: 26001 »]Ha, si j’osais, une derniere question:
Tu aurais une idée de la facon dont on peut relancer la partie? Je peux dire, si le joueur perd, qu il puisse rejouer, donc relancer le programme depuis le debut?[/quote]

Ben imaginons que tu aies une fonction « jouer() » qui représente une partie du jeu. L’idée est de lancer une partie, demander au joueur si il veut continuer, et si oui on relance la partie, et ainsi de suite. Cela donne donc un truc du genre:

char c; do { jouer(); printf("tapez o pour continuer, n'importe quelle autre touche pour quitter\n"); c = getchar(); } while(c == 'o');

Tu as vu les boucles do-while ?